j2c-plugin-prefix-browser
Advanced tools
Comparing version 1.0.1 to 1.0.2
@@ -1,2 +0,2 @@ | ||
define(function () { 'use strict'; | ||
define(['exports'], function (exports) { 'use strict'; | ||
@@ -200,3 +200,3 @@ // Derived from Lea Verou's PrefixFree | ||
// flex-direction => -ms-flex-direction | ||
// !!flex-flow => flex-direction and/or flex-wrap, covered in `plugin.js` | ||
// flex-flow => -ms-flex-flow | ||
'flex-grow': '-ms-flex-positive', | ||
@@ -246,3 +246,2 @@ 'flex-shrink': '-ms-flex-negative', | ||
fixers.keywords.display['inline-flex'] = fixers.keywords.display['inline-flexbox']; | ||
fixers.flexbox2012 = true; | ||
for (var k in flex2012Props) { | ||
@@ -324,2 +323,7 @@ fixers.properties[k] = flex2012Props[k]; | ||
'::selection': '::selection', | ||
':fullscreen': ':fullscreen', //TODO sort out what changed between specs | ||
':full-screen': ':fullscreen', | ||
'::backdrop': '::backdrop', | ||
//sigh | ||
@@ -359,3 +363,2 @@ ':placeholder': '::placeholder', | ||
flexbox2009: false, | ||
flexbox2012: false, | ||
functions: [], | ||
@@ -551,10 +554,16 @@ initial: null, | ||
function createPrefixPlugin() { | ||
var fixers = blankFixers(); | ||
if (typeof getComputedStyle === 'function') browserDetector(fixers); | ||
finalizeFixers(fixers); | ||
var commonFixers; | ||
function initBrowser() { | ||
commonFixers = blankFixers(); | ||
if (typeof getComputedStyle === 'function') browserDetector(commonFixers); | ||
finalizeFixers(commonFixers); | ||
} | ||
initBrowser(); | ||
function prefixPlugin(j2c) { | ||
var fixers = commonFixers; | ||
var cache = []; | ||
prefixPlugin.setFixers = function(f) { | ||
if (j2c) j2c.setPrefixDb = function(f) { | ||
if (cache.indexOf(f) === -1) { | ||
@@ -567,45 +576,42 @@ finalizeFixers(f); | ||
}; | ||
function prefixPlugin() { | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
); | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + ''; | ||
if (property === 'flex-flow' && fixers.flexbox2009) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v); | ||
else if(v !== '') decl('flex-direction', v); | ||
}); | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis'); | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal'); | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
); | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + ''; | ||
if (property === 'flex-flow' && (fixers.flexbox2009 || fixers.flexbox2012)) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v); | ||
else if(v !== '') decl('flex-direction', v); | ||
}); | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis'); | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal'); | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
); | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
); | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
); | ||
} | ||
@@ -615,9 +621,8 @@ } | ||
} | ||
return prefixPlugin | ||
} | ||
var plugin = createPrefixPlugin(); | ||
exports.prefixPlugin = prefixPlugin; | ||
return plugin; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
}); |
@@ -1,1 +0,1 @@ | ||
define(function(){"use strict";function e(){b=getComputedStyle(document.documentElement,null),w=document.createElement("div").style,k=document.documentElement.appendChild(document.createElement("style")),S="zIndex"in w?function(e){return e}:n}function r(){"undefined"!=typeof document&&document.documentElement.removeChild(k),b=k=null}function i(e){return e.replace(/-([a-z])/g,function(e,r){return r.toUpperCase()}).replace("-","")}function n(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}function t(e,r){return e=S(e),w[e]="",w[e]=r,!!w[e]}function o(e){return k.textContent="@media ("+e+"){}",!/^@media(?:\s+not)?\s+all/.test(k.sheet.cssRules[0].cssText)}function a(e){return S(e)in w}function l(e){return k.textContent=e+"{}",!!k.sheet.cssRules.length}function s(e){if(""!==e.prefix){var r={keyframes:"name",viewport:null,document:'regexp(".")'};for(var i in r){var n=i+" "+(r[i]||"");!l("@"+n)&&l("@"+e.prefix+n)&&(e.hasAtrules=!0,e.atrules["@"+i]="@"+e.prefix+i)}e.hasDppx=o("resolution:1dppx"),e.hasPixelRatio=o(e.prefix+"device-pixel-ratio:1"),e.hasPixelRatioFraction=o(e.prefix+"device-pixel-ratio:1/1"),(e.hasPixelRatio||e.hasPixelRatioFraction)&&(e.properties.resolution=e.prefix+"device-pixel-ratio",e.properties["min-resolution"]=e.prefix+"min-device-pixel-ratio",e.properties["max-resolution"]=e.prefix+"max-device-pixel-ratio",o("min-"+e.prefix+"device-pixel-ratio:1")&&(e.properties["min-resolution"]="min-"+e.prefix+"device-pixel-ratio",e.properties["max-resolution"]="max-"+e.prefix+"device-pixel-ratio"))}}function p(e){if(""!==e.prefix){var r={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};r["repeating-linear-gradient"]=r["repeating-radial-gradient"]=r["radial-gradient"]=r["linear-gradient"];for(var i in r){var n=r[i],o=n.property,a=i+"("+n.params+")";!t(o,a)&&t(o,e.prefix+a)&&e.functions.push(i)}}}function f(e){if(""!==e.prefix){for(var r=0;r<P.length;r++){for(var i,n={},o=P[r].props[0],a=0;i=P[r].values[a];a++)!t(o,i)&&t(o,e.prefix+i)&&(e.hasKeywords=!0,n[i]=e.prefix+i);for(a=0;o=P[r].props[a];a++)e.keywords[o]=n}if(e.keywords.display&&e.keywords.display.flexbox&&!t("display","flex")){e.keywords.display.flex=e.keywords.display.flexbox,e.keywords.display["inline-flex"]=e.keywords.display["inline-flexbox"],e.flexbox2012=!0;for(var l in j)e.properties[l]=j[l],e.keywords[l]=C}else if(e.keywords.display&&e.keywords.display.box&&!t("display","flex")){e.keywords.display.flex=e.keywords.display.box,e.keywords.display["inline-flex"]=e.keywords.display["inline-box"],e.flexbox2009=!0;for(l in R)e.properties[l]=e.prefix+R[l],e.keywords[l]=A}!t("color","initial")&&t("color",e.prefix+"initial")&&(e.initial=e.prefix+"initial")}}function u(e){function r(e){if("-"===e.charAt(0)){var r=e.split("-")[1];t[r]=++t[r]||1}}var t={};if(b&&b.length>0)for(var o=0;o<b.length;o++)r(b[o]);else for(var a in b)r(n(a));var l=0;for(var s in t)l<t[s]&&(l=t[s],e.prefix="-"+s+"-");e.Prefix=i(e.prefix)}function c(e){function r(r){return r.replace(/^::?/,function(r){return r+e.prefix})}var i,n;if(""!==e.prefix){var t={":any-link":":any-link",":read-only":":read-only",":read-write":":read-write","::selection":"::selection",":placeholder":"::placeholder","::placeholder":"::placeholder",":input-placeholder":"::placeholder","::input-placeholder":"::placeholder"};for(i in t)n=r(i),!l(i)&&l(n)&&(e.hasSelectors=!0,e.selectorList.push(t[i]),e.selectorMap[t[i]]=n)}}function x(){return{atrules:{},hasAtrules:!1,hasDppx:null,hasKeywords:!1,hasPixelRatio:!1,hasPixelRatioFraction:!1,hasSelectors:!1,hasValues:!1,fixAtMediaParams:null,fixAtSupportsParams:null,fixProperty:null,fixSelector:null,fixValue:null,flexbox2009:!1,flexbox2012:!1,functions:[],initial:null,keywords:{},placeholder:null,prefix:"",Prefix:"",properties:{},selectorList:[],selectorMap:{},valueProperties:{transition:1,"transition-property":1,"will-change":1}}}function d(i){e(),u(i),c(i),s(i),f(i),p(i),r()}function m(e){for(var r,i=[],n=[],t=0;r=M.exec(e);)switch(r[0]){case"(":t++;break;case")":t--;break;case",":if(t)break;i.push(r.index)}for(r=i.length;r--;)n.unshift(e.slice(i[r]+1)),e=e.slice(0,i[r]);return n.unshift(e),n}function y(e,r,i){return new RegExp(e+"(?:"+r.join("|")+")"+i)}function h(e,r,i){return new RegExp("\"(?:\\\\[\\S\\s]|[^\"])*\"|'(?:\\\\[\\S\\s]|[^'])*'|\\/\\*[\\S\\s]*?\\*\\/|"+e+"((?:"+r.join("|")+"))"+i,"gi")}function g(e){function r(e,r,i){return r+n+i}function i(r,i,n){return"("+(e.properties[i]||e.fixProperty(i))+":"+e.fixValue(n,i)}var n=e.prefix;e.fixProperty=e.fixProperty||function(r){var i;return e.properties[r]=a(r)||!a(i=n+r)?r:i};var t=y("",e.selectorList,"(?:\\b|$|[^-])"),o=h("",e.selectorList,"(?:\\b|$|[^-])"),l=function(r,i){return null!=i?e.selectorMap[i]:r};e.fixSelector=function(e){return t.test(e)?e.replace(o,l):e};var s=e.functions.indexOf("linear-gradient")>-1,p=/\blinear-gradient\(/,f=/(^|\s|,|\()((?:repeating-)?linear-gradient\()\s*(-?\d*\.?\d*)deg/gi,u=function(e,r,i,n){return r+i+(90-n)+"deg"},c=!!e.functions.length,x=y("(?:^|\\s|,|\\()",e.functions,"\\s*\\("),d=h("(^|\\s|,|\\()",e.functions,"(?=\\s*\\()"),g=/^\s*([-\w]+)/gi,v=function(r,i){return e.properties[i]||e.fixProperty(i)};e.fixValue=function(i,n){var t;return null!=e.initial&&"initial"===i?e.initial:e.hasKeywords&&(t=(e.keywords[n]||E)[i])?t:(t=i,e.valueProperties.hasOwnProperty(n)&&(t=i.indexOf(",")===-1?i.replace(g,v):m(i).map(function(e){return e.replace(g,v)}).join(",")),c&&x.test(i)&&(s&&p.test(i)&&(t=t.replace(f,u)),t=t.replace(d,r)),t)};var b=/((?:min-|max-)?resolution)\s*:\s*((?:\d*.)?\d+)dppx/g,w=e.hasPixelRatio?function(r,i,n){return e.properties[i]+":"+n}:e.hasPixelRatioFraction?function(r,i,n){return e.properties[i]+":"+Math.round(10*n)+"/10"}:function(e,r,i){return r+":"+Math.round(96*i)+"dpi"};e.fixAtMediaParams=e.hasDppx!==!1?function(e){return e}:function(e){return e.indexOf("reso")!==-1?e.replace(b,w):e};var k=/\(\s*([-\w]+)\s*:\s*((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\([^\)]*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*)/g;e.fixAtSupportsParams=function(e){return e.replace(k,i)}}function v(){function e(){return{$filter:function(e){return{atrule:function(i,n,t,o){e.atrule(r.hasAtrules&&r.atrules[i]||i,n,"@media"===i?r.fixAtMediaParams(t):"@supports"===i?r.fixAtSupportsParams(t):t,o)},decl:function i(n,t){return!n||"string"!=typeof t&&"number"!=typeof t?e.decl(r.properties[n]||r.fixProperty(n),t):(t+="",void("flex-flow"===n&&(r.flexbox2009||r.flexbox2012)?t.split(" ").forEach(function(e){e.indexOf("wrap")>-1?i("flex-wrap",e):""!==e&&i("flex-direction",e)}):"flex-direction"===n&&r.flexbox2009?(e.decl(r.properties["box-orient"],t.indexOf("column")>-1?"block-axis":"inline-axis"),e.decl(r.properties["box-direction"],t.indexOf("-reverse")>-1?"reverse":"normal")):e.decl(r.properties[n]||r.fixProperty(n),r.fixValue(t,n))))},rule:function(i){e.rule(r.hasSelectors?r.fixSelector(i):i)}}}}}var r=x();"function"==typeof getComputedStyle&&d(r),g(r);var i=[];return e.setFixers=function(n){return i.indexOf(n)===-1&&(g(n),i.push(n)),r=n,e},e}var b,w,k,S,P=[{props:["cursor"],values:["grab","grabbing","zoom-in","zoom-out"]},{props:["display"],values:["box","inline-box","flexbox","inline-flexbox","flex","inline-flex","grid","inline-grid"]},{props:["position"],values:["sticky"]},{props:["width","column-width","height","max-height","max-width","min-height","min-width"],values:["contain-floats","fill-available","fit-content","max-content","min-content"]}],R={"align-items":"box-align",flex:"box-flex","box-direction":"box-direction","box-orient":"box-orient","flex-wrap":"box-lines","justify-content":"box-pack",order:"box-ordinal-group"},A={"flex-end":"end","flex-start":"start",nowrap:"single","space-around":"justify","space-between":"justify",wrap:"multiple","wrap-reverse":"multiple"},j={"align-content":"-ms-flex-line-pack","align-items":"-ms-flex-align","align-self":"-ms-flex-item-align","flex-basis":"-ms-preferred-size","flex-grow":"-ms-flex-positive","flex-shrink":"-ms-flex-negative","justify-content":"-ms-flex-pack",order:"-ms-flex-order"},C={"flex-end":"end","flex-start":"start","space-around":"distribute","space-between":"justify"},E={},M=/[(),]|\/\*[\s\S]*?\*\//g,O=v();return O}); | ||
define(["exports"],function(e){"use strict";function r(){k=getComputedStyle(document.documentElement,null),S=document.createElement("div").style,P=document.documentElement.appendChild(document.createElement("style")),R="zIndex"in S?function(e){return e}:t}function i(){"undefined"!=typeof document&&document.documentElement.removeChild(P),k=P=null}function n(e){return e.replace(/-([a-z])/g,function(e,r){return r.toUpperCase()}).replace("-","")}function t(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}function o(e,r){return e=R(e),S[e]="",S[e]=r,!!S[e]}function l(e){return P.textContent="@media ("+e+"){}",!/^@media(?:\s+not)?\s+all/.test(P.sheet.cssRules[0].cssText)}function a(e){return R(e)in S}function s(e){return P.textContent=e+"{}",!!P.sheet.cssRules.length}function p(e){if(""!==e.prefix){var r={keyframes:"name",viewport:null,document:'regexp(".")'};for(var i in r){var n=i+" "+(r[i]||"");!s("@"+n)&&s("@"+e.prefix+n)&&(e.hasAtrules=!0,e.atrules["@"+i]="@"+e.prefix+i)}e.hasDppx=l("resolution:1dppx"),e.hasPixelRatio=l(e.prefix+"device-pixel-ratio:1"),e.hasPixelRatioFraction=l(e.prefix+"device-pixel-ratio:1/1"),(e.hasPixelRatio||e.hasPixelRatioFraction)&&(e.properties.resolution=e.prefix+"device-pixel-ratio",e.properties["min-resolution"]=e.prefix+"min-device-pixel-ratio",e.properties["max-resolution"]=e.prefix+"max-device-pixel-ratio",l("min-"+e.prefix+"device-pixel-ratio:1")&&(e.properties["min-resolution"]="min-"+e.prefix+"device-pixel-ratio",e.properties["max-resolution"]="max-"+e.prefix+"device-pixel-ratio"))}}function f(e){if(""!==e.prefix){var r={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};r["repeating-linear-gradient"]=r["repeating-radial-gradient"]=r["radial-gradient"]=r["linear-gradient"];for(var i in r){var n=r[i],t=n.property,l=i+"("+n.params+")";!o(t,l)&&o(t,e.prefix+l)&&e.functions.push(i)}}}function u(e){if(""!==e.prefix){for(var r=0;r<j.length;r++){for(var i,n={},t=j[r].props[0],l=0;i=j[r].values[l];l++)!o(t,i)&&o(t,e.prefix+i)&&(e.hasKeywords=!0,n[i]=e.prefix+i);for(l=0;t=j[r].props[l];l++)e.keywords[t]=n}if(e.keywords.display&&e.keywords.display.flexbox&&!o("display","flex")){e.keywords.display.flex=e.keywords.display.flexbox,e.keywords.display["inline-flex"]=e.keywords.display["inline-flexbox"];for(var a in C)e.properties[a]=C[a],e.keywords[a]=E}else if(e.keywords.display&&e.keywords.display.box&&!o("display","flex")){e.keywords.display.flex=e.keywords.display.box,e.keywords.display["inline-flex"]=e.keywords.display["inline-box"],e.flexbox2009=!0;for(a in M)e.properties[a]=e.prefix+M[a],e.keywords[a]=O}!o("color","initial")&&o("color",e.prefix+"initial")&&(e.initial=e.prefix+"initial")}}function c(e){function r(e){if("-"===e.charAt(0)){var r=e.split("-")[1];i[r]=++i[r]||1}}var i={};if(k&&k.length>0)for(var o=0;o<k.length;o++)r(k[o]);else for(var l in k)r(t(l));var a=0;for(var s in i)a<i[s]&&(a=i[s],e.prefix="-"+s+"-");e.Prefix=n(e.prefix)}function x(e){function r(r){return r.replace(/^::?/,function(r){return r+e.prefix})}var i,n;if(""!==e.prefix){var t={":any-link":":any-link",":read-only":":read-only",":read-write":":read-write","::selection":"::selection",":fullscreen":":fullscreen",":full-screen":":fullscreen","::backdrop":"::backdrop",":placeholder":"::placeholder","::placeholder":"::placeholder",":input-placeholder":"::placeholder","::input-placeholder":"::placeholder"};for(i in t)n=r(i),!s(i)&&s(n)&&(e.hasSelectors=!0,e.selectorList.push(t[i]),e.selectorMap[t[i]]=n)}}function d(){return{atrules:{},hasAtrules:!1,hasDppx:null,hasKeywords:!1,hasPixelRatio:!1,hasPixelRatioFraction:!1,hasSelectors:!1,hasValues:!1,fixAtMediaParams:null,fixAtSupportsParams:null,fixProperty:null,fixSelector:null,fixValue:null,flexbox2009:!1,functions:[],initial:null,keywords:{},placeholder:null,prefix:"",Prefix:"",properties:{},selectorList:[],selectorMap:{},valueProperties:{transition:1,"transition-property":1,"will-change":1}}}function m(e){r(),c(e),x(e),p(e),u(e),f(e),i()}function y(e){for(var r,i=[],n=[],t=0;r=L.exec(e);)switch(r[0]){case"(":t++;break;case")":t--;break;case",":if(t)break;i.push(r.index)}for(r=i.length;r--;)n.unshift(e.slice(i[r]+1)),e=e.slice(0,i[r]);return n.unshift(e),n}function h(e,r,i){return new RegExp(e+"(?:"+r.join("|")+")"+i)}function g(e,r,i){return new RegExp("\"(?:\\\\[\\S\\s]|[^\"])*\"|'(?:\\\\[\\S\\s]|[^'])*'|\\/\\*[\\S\\s]*?\\*\\/|"+e+"((?:"+r.join("|")+"))"+i,"gi")}function v(e){function r(e,r,i){return r+n+i}function i(r,i,n){return"("+(e.properties[i]||e.fixProperty(i))+":"+e.fixValue(n,i)}var n=e.prefix;e.fixProperty=e.fixProperty||function(r){var i;return e.properties[r]=a(r)||!a(i=n+r)?r:i};var t=h("",e.selectorList,"(?:\\b|$|[^-])"),o=g("",e.selectorList,"(?:\\b|$|[^-])"),l=function(r,i){return null!=i?e.selectorMap[i]:r};e.fixSelector=function(e){return t.test(e)?e.replace(o,l):e};var s=e.functions.indexOf("linear-gradient")>-1,p=/\blinear-gradient\(/,f=/(^|\s|,|\()((?:repeating-)?linear-gradient\()\s*(-?\d*\.?\d*)deg/gi,u=function(e,r,i,n){return r+i+(90-n)+"deg"},c=!!e.functions.length,x=h("(?:^|\\s|,|\\()",e.functions,"\\s*\\("),d=g("(^|\\s|,|\\()",e.functions,"(?=\\s*\\()"),m=/^\s*([-\w]+)/gi,v=function(r,i){return e.properties[i]||e.fixProperty(i)};e.fixValue=function(i,n){var t;return null!=e.initial&&"initial"===i?e.initial:e.hasKeywords&&(t=(e.keywords[n]||z)[i])?t:(t=i,e.valueProperties.hasOwnProperty(n)&&(t=i.indexOf(",")===-1?i.replace(m,v):y(i).map(function(e){return e.replace(m,v)}).join(",")),c&&x.test(i)&&(s&&p.test(i)&&(t=t.replace(f,u)),t=t.replace(d,r)),t)};var b=/((?:min-|max-)?resolution)\s*:\s*((?:\d*.)?\d+)dppx/g,w=e.hasPixelRatio?function(r,i,n){return e.properties[i]+":"+n}:e.hasPixelRatioFraction?function(r,i,n){return e.properties[i]+":"+Math.round(10*n)+"/10"}:function(e,r,i){return r+":"+Math.round(96*i)+"dpi"};e.fixAtMediaParams=e.hasDppx!==!1?function(e){return e}:function(e){return e.indexOf("reso")!==-1?e.replace(b,w):e};var k=/\(\s*([-\w]+)\s*:\s*((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\([^\)]*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*)/g;e.fixAtSupportsParams=function(e){return e.replace(k,i)}}function b(){A=d(),"function"==typeof getComputedStyle&&m(A),v(A)}function w(e){var r=A,i=[];return e&&(e.setPrefixDb=function(e){return i.indexOf(e)===-1&&(v(e),i.push(e)),r=e,w}),{$filter:function(e){return{atrule:function(i,n,t,o){e.atrule(r.hasAtrules&&r.atrules[i]||i,n,"@media"===i?r.fixAtMediaParams(t):"@supports"===i?r.fixAtSupportsParams(t):t,o)},decl:function i(n,t){return!n||"string"!=typeof t&&"number"!=typeof t?e.decl(r.properties[n]||r.fixProperty(n),t):(t+="",void("flex-flow"===n&&r.flexbox2009?t.split(" ").forEach(function(e){e.indexOf("wrap")>-1?i("flex-wrap",e):""!==e&&i("flex-direction",e)}):"flex-direction"===n&&r.flexbox2009?(e.decl(r.properties["box-orient"],t.indexOf("column")>-1?"block-axis":"inline-axis"),e.decl(r.properties["box-direction"],t.indexOf("-reverse")>-1?"reverse":"normal")):e.decl(r.properties[n]||r.fixProperty(n),r.fixValue(t,n))))},rule:function(i){e.rule(r.hasSelectors?r.fixSelector(i):i)}}}}}var k,S,P,R,A,j=[{props:["cursor"],values:["grab","grabbing","zoom-in","zoom-out"]},{props:["display"],values:["box","inline-box","flexbox","inline-flexbox","flex","inline-flex","grid","inline-grid"]},{props:["position"],values:["sticky"]},{props:["width","column-width","height","max-height","max-width","min-height","min-width"],values:["contain-floats","fill-available","fit-content","max-content","min-content"]}],M={"align-items":"box-align",flex:"box-flex","box-direction":"box-direction","box-orient":"box-orient","flex-wrap":"box-lines","justify-content":"box-pack",order:"box-ordinal-group"},O={"flex-end":"end","flex-start":"start",nowrap:"single","space-around":"justify","space-between":"justify",wrap:"multiple","wrap-reverse":"multiple"},C={"align-content":"-ms-flex-line-pack","align-items":"-ms-flex-align","align-self":"-ms-flex-item-align","flex-basis":"-ms-preferred-size","flex-grow":"-ms-flex-positive","flex-shrink":"-ms-flex-negative","justify-content":"-ms-flex-pack",order:"-ms-flex-order"},E={"flex-end":"end","flex-start":"start","space-around":"distribute","space-between":"justify"},z={},L=/[(),]|\/\*[\s\S]*?\*\//g;b(),e.prefixPlugin=w,Object.defineProperty(e,"__esModule",{value:!0})}); |
'use strict'; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
// Derived from Lea Verou's PrefixFree | ||
@@ -200,3 +202,3 @@ | ||
// flex-direction => -ms-flex-direction | ||
// !!flex-flow => flex-direction and/or flex-wrap, covered in `plugin.js` | ||
// flex-flow => -ms-flex-flow | ||
'flex-grow': '-ms-flex-positive', | ||
@@ -246,3 +248,2 @@ 'flex-shrink': '-ms-flex-negative', | ||
fixers.keywords.display['inline-flex'] = fixers.keywords.display['inline-flexbox']; | ||
fixers.flexbox2012 = true; | ||
for (var k in flex2012Props) { | ||
@@ -324,2 +325,7 @@ fixers.properties[k] = flex2012Props[k]; | ||
'::selection': '::selection', | ||
':fullscreen': ':fullscreen', //TODO sort out what changed between specs | ||
':full-screen': ':fullscreen', | ||
'::backdrop': '::backdrop', | ||
//sigh | ||
@@ -359,3 +365,2 @@ ':placeholder': '::placeholder', | ||
flexbox2009: false, | ||
flexbox2012: false, | ||
functions: [], | ||
@@ -551,10 +556,16 @@ initial: null, | ||
function createPrefixPlugin() { | ||
var fixers = blankFixers(); | ||
if (typeof getComputedStyle === 'function') browserDetector(fixers); | ||
finalizeFixers(fixers); | ||
var commonFixers; | ||
function initBrowser() { | ||
commonFixers = blankFixers(); | ||
if (typeof getComputedStyle === 'function') browserDetector(commonFixers); | ||
finalizeFixers(commonFixers); | ||
} | ||
initBrowser(); | ||
function prefixPlugin(j2c) { | ||
var fixers = commonFixers; | ||
var cache = []; | ||
prefixPlugin.setFixers = function(f) { | ||
if (j2c) j2c.setPrefixDb = function(f) { | ||
if (cache.indexOf(f) === -1) { | ||
@@ -567,45 +578,42 @@ finalizeFixers(f); | ||
}; | ||
function prefixPlugin() { | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
); | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + ''; | ||
if (property === 'flex-flow' && fixers.flexbox2009) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v); | ||
else if(v !== '') decl('flex-direction', v); | ||
}); | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis'); | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal'); | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
); | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + ''; | ||
if (property === 'flex-flow' && (fixers.flexbox2009 || fixers.flexbox2012)) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v); | ||
else if(v !== '') decl('flex-direction', v); | ||
}); | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis'); | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal'); | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
); | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
); | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
); | ||
} | ||
@@ -615,7 +623,4 @@ } | ||
} | ||
return prefixPlugin | ||
} | ||
var plugin = createPrefixPlugin(); | ||
module.exports = plugin; | ||
exports.prefixPlugin = prefixPlugin; |
@@ -1,1 +0,1 @@ | ||
"use strict";function init(){allStyles=getComputedStyle(document.documentElement,null),styleAttr=document.createElement("div").style,styleElement=document.documentElement.appendChild(document.createElement("style")),convert="zIndex"in styleAttr?function(e){return e}:deCamelCase}function finalize(){"undefined"!=typeof document&&document.documentElement.removeChild(styleElement),allStyles=styleElement=null}function camelCase(e){return e.replace(/-([a-z])/g,function(e,r){return r.toUpperCase()}).replace("-","")}function deCamelCase(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}function supportedDecl(e,r){return e=convert(e),styleAttr[e]="",styleAttr[e]=r,!!styleAttr[e]}function supportedMedia(e){return styleElement.textContent="@media ("+e+"){}",!/^@media(?:\s+not)?\s+all/.test(styleElement.sheet.cssRules[0].cssText)}function supportedProperty(e){return convert(e)in styleAttr}function supportedRule(e){return styleElement.textContent=e+"{}",!!styleElement.sheet.cssRules.length}function detectAtrules(e){if(""!==e.prefix){var r={keyframes:"name",viewport:null,document:'regexp(".")'};for(var t in r){var i=t+" "+(r[t]||"");!supportedRule("@"+i)&&supportedRule("@"+e.prefix+i)&&(e.hasAtrules=!0,e.atrules["@"+t]="@"+e.prefix+t)}e.hasDppx=supportedMedia("resolution:1dppx"),e.hasPixelRatio=supportedMedia(e.prefix+"device-pixel-ratio:1"),e.hasPixelRatioFraction=supportedMedia(e.prefix+"device-pixel-ratio:1/1"),(e.hasPixelRatio||e.hasPixelRatioFraction)&&(e.properties.resolution=e.prefix+"device-pixel-ratio",e.properties["min-resolution"]=e.prefix+"min-device-pixel-ratio",e.properties["max-resolution"]=e.prefix+"max-device-pixel-ratio",supportedMedia("min-"+e.prefix+"device-pixel-ratio:1")&&(e.properties["min-resolution"]="min-"+e.prefix+"device-pixel-ratio",e.properties["max-resolution"]="max-"+e.prefix+"device-pixel-ratio"))}}function detectFunctions(e){if(""!==e.prefix){var r={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};r["repeating-linear-gradient"]=r["repeating-radial-gradient"]=r["radial-gradient"]=r["linear-gradient"];for(var t in r){var i=r[t],n=i.property,l=t+"("+i.params+")";!supportedDecl(n,l)&&supportedDecl(n,e.prefix+l)&&e.functions.push(t)}}}function detectKeywords(e){if(""!==e.prefix){for(var r=0;r<keywords.length;r++){for(var t,i={},n=keywords[r].props[0],l=0;t=keywords[r].values[l];l++)!supportedDecl(n,t)&&supportedDecl(n,e.prefix+t)&&(e.hasKeywords=!0,i[t]=e.prefix+t);for(l=0;n=keywords[r].props[l];l++)e.keywords[n]=i}if(e.keywords.display&&e.keywords.display.flexbox&&!supportedDecl("display","flex")){e.keywords.display.flex=e.keywords.display.flexbox,e.keywords.display["inline-flex"]=e.keywords.display["inline-flexbox"],e.flexbox2012=!0;for(var o in flex2012Props)e.properties[o]=flex2012Props[o],e.keywords[o]=flex2012Values}else if(e.keywords.display&&e.keywords.display.box&&!supportedDecl("display","flex")){e.keywords.display.flex=e.keywords.display.box,e.keywords.display["inline-flex"]=e.keywords.display["inline-box"],e.flexbox2009=!0;for(o in flex2009Props)e.properties[o]=e.prefix+flex2009Props[o],e.keywords[o]=flex2009Values}!supportedDecl("color","initial")&&supportedDecl("color",e.prefix+"initial")&&(e.initial=e.prefix+"initial")}}function detectPrefix(e){function r(e){if("-"===e.charAt(0)){var r=e.split("-")[1];t[r]=++t[r]||1}}var t={};if(allStyles&&allStyles.length>0)for(var i=0;i<allStyles.length;i++)r(allStyles[i]);else for(var n in allStyles)r(deCamelCase(n));var l=0;for(var o in t)l<t[o]&&(l=t[o],e.prefix="-"+o+"-");e.Prefix=camelCase(e.prefix)}function detectSelectors(e){function r(r){return r.replace(/^::?/,function(r){return r+e.prefix})}var t,i;if(""!==e.prefix){var n={":any-link":":any-link",":read-only":":read-only",":read-write":":read-write","::selection":"::selection",":placeholder":"::placeholder","::placeholder":"::placeholder",":input-placeholder":"::placeholder","::input-placeholder":"::placeholder"};for(t in n)i=r(t),!supportedRule(t)&&supportedRule(i)&&(e.hasSelectors=!0,e.selectorList.push(n[t]),e.selectorMap[n[t]]=i)}}function blankFixers(){return{atrules:{},hasAtrules:!1,hasDppx:null,hasKeywords:!1,hasPixelRatio:!1,hasPixelRatioFraction:!1,hasSelectors:!1,hasValues:!1,fixAtMediaParams:null,fixAtSupportsParams:null,fixProperty:null,fixSelector:null,fixValue:null,flexbox2009:!1,flexbox2012:!1,functions:[],initial:null,keywords:{},placeholder:null,prefix:"",Prefix:"",properties:{},selectorList:[],selectorMap:{},valueProperties:{transition:1,"transition-property":1,"will-change":1}}}function browserDetector(e){init(),detectPrefix(e),detectSelectors(e),detectAtrules(e),detectKeywords(e),detectFunctions(e),finalize()}function splitValue(e){for(var r,t=[],i=[],n=0;r=valueTokenizer.exec(e);)switch(r[0]){case"(":n++;break;case")":n--;break;case",":if(n)break;t.push(r.index)}for(r=t.length;r--;)i.unshift(e.slice(t[r]+1)),e=e.slice(0,t[r]);return i.unshift(e),i}function makeDetector(e,r,t){return new RegExp(e+"(?:"+r.join("|")+")"+t)}function makeLexer(e,r,t){return new RegExp("\"(?:\\\\[\\S\\s]|[^\"])*\"|'(?:\\\\[\\S\\s]|[^'])*'|\\/\\*[\\S\\s]*?\\*\\/|"+e+"((?:"+r.join("|")+"))"+t,"gi")}function finalizeFixers(e){function r(e,r,t){return r+i+t}function t(r,t,i){return"("+(e.properties[t]||e.fixProperty(t))+":"+e.fixValue(i,t)}var i=e.prefix;e.fixProperty=e.fixProperty||function(r){var t;return e.properties[r]=supportedProperty(r)||!supportedProperty(t=i+r)?r:t};var n=makeDetector("",e.selectorList,"(?:\\b|$|[^-])"),l=makeLexer("",e.selectorList,"(?:\\b|$|[^-])"),o=function(r,t){return null!=t?e.selectorMap[t]:r};e.fixSelector=function(e){return n.test(e)?e.replace(l,o):e};var s=e.functions.indexOf("linear-gradient")>-1,a=/\blinear-gradient\(/,p=/(^|\s|,|\()((?:repeating-)?linear-gradient\()\s*(-?\d*\.?\d*)deg/gi,u=function(e,r,t,i){return r+t+(90-i)+"deg"},f=!!e.functions.length,c=makeDetector("(?:^|\\s|,|\\()",e.functions,"\\s*\\("),d=makeLexer("(^|\\s|,|\\()",e.functions,"(?=\\s*\\()"),x=/^\s*([-\w]+)/gi,y=function(r,t){return e.properties[t]||e.fixProperty(t)};e.fixValue=function(t,i){var n;return null!=e.initial&&"initial"===t?e.initial:e.hasKeywords&&(n=(e.keywords[i]||emptySet)[t])?n:(n=t,e.valueProperties.hasOwnProperty(i)&&(n=t.indexOf(",")===-1?t.replace(x,y):splitValue(t).map(function(e){return e.replace(x,y)}).join(",")),f&&c.test(t)&&(s&&a.test(t)&&(n=n.replace(p,u)),n=n.replace(d,r)),n)};var m=/((?:min-|max-)?resolution)\s*:\s*((?:\d*.)?\d+)dppx/g,g=e.hasPixelRatio?function(r,t,i){return e.properties[t]+":"+i}:e.hasPixelRatioFraction?function(r,t,i){return e.properties[t]+":"+Math.round(10*i)+"/10"}:function(e,r,t){return r+":"+Math.round(96*t)+"dpi"};e.fixAtMediaParams=e.hasDppx!==!1?function(e){return e}:function(e){return e.indexOf("reso")!==-1?e.replace(m,g):e};var h=/\(\s*([-\w]+)\s*:\s*((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\([^\)]*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*)/g;e.fixAtSupportsParams=function(e){return e.replace(h,t)}}function createPrefixPlugin(){function e(){return{$filter:function(e){return{atrule:function(t,i,n,l){e.atrule(r.hasAtrules&&r.atrules[t]||t,i,"@media"===t?r.fixAtMediaParams(n):"@supports"===t?r.fixAtSupportsParams(n):n,l)},decl:function t(i,n){return!i||"string"!=typeof n&&"number"!=typeof n?e.decl(r.properties[i]||r.fixProperty(i),n):(n+="",void("flex-flow"===i&&(r.flexbox2009||r.flexbox2012)?n.split(" ").forEach(function(e){e.indexOf("wrap")>-1?t("flex-wrap",e):""!==e&&t("flex-direction",e)}):"flex-direction"===i&&r.flexbox2009?(e.decl(r.properties["box-orient"],n.indexOf("column")>-1?"block-axis":"inline-axis"),e.decl(r.properties["box-direction"],n.indexOf("-reverse")>-1?"reverse":"normal")):e.decl(r.properties[i]||r.fixProperty(i),r.fixValue(n,i))))},rule:function(t){e.rule(r.hasSelectors?r.fixSelector(t):t)}}}}}var r=blankFixers();"function"==typeof getComputedStyle&&browserDetector(r),finalizeFixers(r);var t=[];return e.setFixers=function(i){return t.indexOf(i)===-1&&(finalizeFixers(i),t.push(i)),r=i,e},e}var allStyles,styleAttr,styleElement,convert,keywords=[{props:["cursor"],values:["grab","grabbing","zoom-in","zoom-out"]},{props:["display"],values:["box","inline-box","flexbox","inline-flexbox","flex","inline-flex","grid","inline-grid"]},{props:["position"],values:["sticky"]},{props:["width","column-width","height","max-height","max-width","min-height","min-width"],values:["contain-floats","fill-available","fit-content","max-content","min-content"]}],flex2009Props={"align-items":"box-align",flex:"box-flex","box-direction":"box-direction","box-orient":"box-orient","flex-wrap":"box-lines","justify-content":"box-pack",order:"box-ordinal-group"},flex2009Values={"flex-end":"end","flex-start":"start",nowrap:"single","space-around":"justify","space-between":"justify",wrap:"multiple","wrap-reverse":"multiple"},flex2012Props={"align-content":"-ms-flex-line-pack","align-items":"-ms-flex-align","align-self":"-ms-flex-item-align","flex-basis":"-ms-preferred-size","flex-grow":"-ms-flex-positive","flex-shrink":"-ms-flex-negative","justify-content":"-ms-flex-pack",order:"-ms-flex-order"},flex2012Values={"flex-end":"end","flex-start":"start","space-around":"distribute","space-between":"justify"},emptySet={},valueTokenizer=/[(),]|\/\*[\s\S]*?\*\//g,plugin=createPrefixPlugin();module.exports=plugin; | ||
"use strict";function init(){allStyles=getComputedStyle(document.documentElement,null),styleAttr=document.createElement("div").style,styleElement=document.documentElement.appendChild(document.createElement("style")),convert="zIndex"in styleAttr?function(e){return e}:deCamelCase}function finalize(){"undefined"!=typeof document&&document.documentElement.removeChild(styleElement),allStyles=styleElement=null}function camelCase(e){return e.replace(/-([a-z])/g,function(e,r){return r.toUpperCase()}).replace("-","")}function deCamelCase(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}function supportedDecl(e,r){return e=convert(e),styleAttr[e]="",styleAttr[e]=r,!!styleAttr[e]}function supportedMedia(e){return styleElement.textContent="@media ("+e+"){}",!/^@media(?:\s+not)?\s+all/.test(styleElement.sheet.cssRules[0].cssText)}function supportedProperty(e){return convert(e)in styleAttr}function supportedRule(e){return styleElement.textContent=e+"{}",!!styleElement.sheet.cssRules.length}function detectAtrules(e){if(""!==e.prefix){var r={keyframes:"name",viewport:null,document:'regexp(".")'};for(var t in r){var i=t+" "+(r[t]||"");!supportedRule("@"+i)&&supportedRule("@"+e.prefix+i)&&(e.hasAtrules=!0,e.atrules["@"+t]="@"+e.prefix+t)}e.hasDppx=supportedMedia("resolution:1dppx"),e.hasPixelRatio=supportedMedia(e.prefix+"device-pixel-ratio:1"),e.hasPixelRatioFraction=supportedMedia(e.prefix+"device-pixel-ratio:1/1"),(e.hasPixelRatio||e.hasPixelRatioFraction)&&(e.properties.resolution=e.prefix+"device-pixel-ratio",e.properties["min-resolution"]=e.prefix+"min-device-pixel-ratio",e.properties["max-resolution"]=e.prefix+"max-device-pixel-ratio",supportedMedia("min-"+e.prefix+"device-pixel-ratio:1")&&(e.properties["min-resolution"]="min-"+e.prefix+"device-pixel-ratio",e.properties["max-resolution"]="max-"+e.prefix+"device-pixel-ratio"))}}function detectFunctions(e){if(""!==e.prefix){var r={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};r["repeating-linear-gradient"]=r["repeating-radial-gradient"]=r["radial-gradient"]=r["linear-gradient"];for(var t in r){var i=r[t],n=i.property,l=t+"("+i.params+")";!supportedDecl(n,l)&&supportedDecl(n,e.prefix+l)&&e.functions.push(t)}}}function detectKeywords(e){if(""!==e.prefix){for(var r=0;r<keywords.length;r++){for(var t,i={},n=keywords[r].props[0],l=0;t=keywords[r].values[l];l++)!supportedDecl(n,t)&&supportedDecl(n,e.prefix+t)&&(e.hasKeywords=!0,i[t]=e.prefix+t);for(l=0;n=keywords[r].props[l];l++)e.keywords[n]=i}if(e.keywords.display&&e.keywords.display.flexbox&&!supportedDecl("display","flex")){e.keywords.display.flex=e.keywords.display.flexbox,e.keywords.display["inline-flex"]=e.keywords.display["inline-flexbox"];for(var o in flex2012Props)e.properties[o]=flex2012Props[o],e.keywords[o]=flex2012Values}else if(e.keywords.display&&e.keywords.display.box&&!supportedDecl("display","flex")){e.keywords.display.flex=e.keywords.display.box,e.keywords.display["inline-flex"]=e.keywords.display["inline-box"],e.flexbox2009=!0;for(o in flex2009Props)e.properties[o]=e.prefix+flex2009Props[o],e.keywords[o]=flex2009Values}!supportedDecl("color","initial")&&supportedDecl("color",e.prefix+"initial")&&(e.initial=e.prefix+"initial")}}function detectPrefix(e){function r(e){if("-"===e.charAt(0)){var r=e.split("-")[1];t[r]=++t[r]||1}}var t={};if(allStyles&&allStyles.length>0)for(var i=0;i<allStyles.length;i++)r(allStyles[i]);else for(var n in allStyles)r(deCamelCase(n));var l=0;for(var o in t)l<t[o]&&(l=t[o],e.prefix="-"+o+"-");e.Prefix=camelCase(e.prefix)}function detectSelectors(e){function r(r){return r.replace(/^::?/,function(r){return r+e.prefix})}var t,i;if(""!==e.prefix){var n={":any-link":":any-link",":read-only":":read-only",":read-write":":read-write","::selection":"::selection",":fullscreen":":fullscreen",":full-screen":":fullscreen","::backdrop":"::backdrop",":placeholder":"::placeholder","::placeholder":"::placeholder",":input-placeholder":"::placeholder","::input-placeholder":"::placeholder"};for(t in n)i=r(t),!supportedRule(t)&&supportedRule(i)&&(e.hasSelectors=!0,e.selectorList.push(n[t]),e.selectorMap[n[t]]=i)}}function blankFixers(){return{atrules:{},hasAtrules:!1,hasDppx:null,hasKeywords:!1,hasPixelRatio:!1,hasPixelRatioFraction:!1,hasSelectors:!1,hasValues:!1,fixAtMediaParams:null,fixAtSupportsParams:null,fixProperty:null,fixSelector:null,fixValue:null,flexbox2009:!1,functions:[],initial:null,keywords:{},placeholder:null,prefix:"",Prefix:"",properties:{},selectorList:[],selectorMap:{},valueProperties:{transition:1,"transition-property":1,"will-change":1}}}function browserDetector(e){init(),detectPrefix(e),detectSelectors(e),detectAtrules(e),detectKeywords(e),detectFunctions(e),finalize()}function splitValue(e){for(var r,t=[],i=[],n=0;r=valueTokenizer.exec(e);)switch(r[0]){case"(":n++;break;case")":n--;break;case",":if(n)break;t.push(r.index)}for(r=t.length;r--;)i.unshift(e.slice(t[r]+1)),e=e.slice(0,t[r]);return i.unshift(e),i}function makeDetector(e,r,t){return new RegExp(e+"(?:"+r.join("|")+")"+t)}function makeLexer(e,r,t){return new RegExp("\"(?:\\\\[\\S\\s]|[^\"])*\"|'(?:\\\\[\\S\\s]|[^'])*'|\\/\\*[\\S\\s]*?\\*\\/|"+e+"((?:"+r.join("|")+"))"+t,"gi")}function finalizeFixers(e){function r(e,r,t){return r+i+t}function t(r,t,i){return"("+(e.properties[t]||e.fixProperty(t))+":"+e.fixValue(i,t)}var i=e.prefix;e.fixProperty=e.fixProperty||function(r){var t;return e.properties[r]=supportedProperty(r)||!supportedProperty(t=i+r)?r:t};var n=makeDetector("",e.selectorList,"(?:\\b|$|[^-])"),l=makeLexer("",e.selectorList,"(?:\\b|$|[^-])"),o=function(r,t){return null!=t?e.selectorMap[t]:r};e.fixSelector=function(e){return n.test(e)?e.replace(l,o):e};var s=e.functions.indexOf("linear-gradient")>-1,a=/\blinear-gradient\(/,p=/(^|\s|,|\()((?:repeating-)?linear-gradient\()\s*(-?\d*\.?\d*)deg/gi,u=function(e,r,t,i){return r+t+(90-i)+"deg"},f=!!e.functions.length,c=makeDetector("(?:^|\\s|,|\\()",e.functions,"\\s*\\("),d=makeLexer("(^|\\s|,|\\()",e.functions,"(?=\\s*\\()"),x=/^\s*([-\w]+)/gi,m=function(r,t){return e.properties[t]||e.fixProperty(t)};e.fixValue=function(t,i){var n;return null!=e.initial&&"initial"===t?e.initial:e.hasKeywords&&(n=(e.keywords[i]||emptySet)[t])?n:(n=t,e.valueProperties.hasOwnProperty(i)&&(n=t.indexOf(",")===-1?t.replace(x,m):splitValue(t).map(function(e){return e.replace(x,m)}).join(",")),f&&c.test(t)&&(s&&a.test(t)&&(n=n.replace(p,u)),n=n.replace(d,r)),n)};var y=/((?:min-|max-)?resolution)\s*:\s*((?:\d*.)?\d+)dppx/g,g=e.hasPixelRatio?function(r,t,i){return e.properties[t]+":"+i}:e.hasPixelRatioFraction?function(r,t,i){return e.properties[t]+":"+Math.round(10*i)+"/10"}:function(e,r,t){return r+":"+Math.round(96*t)+"dpi"};e.fixAtMediaParams=e.hasDppx!==!1?function(e){return e}:function(e){return e.indexOf("reso")!==-1?e.replace(y,g):e};var h=/\(\s*([-\w]+)\s*:\s*((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\([^\)]*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*)/g;e.fixAtSupportsParams=function(e){return e.replace(h,t)}}function initBrowser(){commonFixers=blankFixers(),"function"==typeof getComputedStyle&&browserDetector(commonFixers),finalizeFixers(commonFixers)}function prefixPlugin(e){var r=commonFixers,t=[];return e&&(e.setPrefixDb=function(e){return t.indexOf(e)===-1&&(finalizeFixers(e),t.push(e)),r=e,prefixPlugin}),{$filter:function(e){return{atrule:function(t,i,n,l){e.atrule(r.hasAtrules&&r.atrules[t]||t,i,"@media"===t?r.fixAtMediaParams(n):"@supports"===t?r.fixAtSupportsParams(n):n,l)},decl:function t(i,n){return!i||"string"!=typeof n&&"number"!=typeof n?e.decl(r.properties[i]||r.fixProperty(i),n):(n+="",void("flex-flow"===i&&r.flexbox2009?n.split(" ").forEach(function(e){e.indexOf("wrap")>-1?t("flex-wrap",e):""!==e&&t("flex-direction",e)}):"flex-direction"===i&&r.flexbox2009?(e.decl(r.properties["box-orient"],n.indexOf("column")>-1?"block-axis":"inline-axis"),e.decl(r.properties["box-direction"],n.indexOf("-reverse")>-1?"reverse":"normal")):e.decl(r.properties[i]||r.fixProperty(i),r.fixValue(n,i))))},rule:function(t){e.rule(r.hasSelectors?r.fixSelector(t):t)}}}}}Object.defineProperty(exports,"__esModule",{value:!0});var allStyles,styleAttr,styleElement,convert,keywords=[{props:["cursor"],values:["grab","grabbing","zoom-in","zoom-out"]},{props:["display"],values:["box","inline-box","flexbox","inline-flexbox","flex","inline-flex","grid","inline-grid"]},{props:["position"],values:["sticky"]},{props:["width","column-width","height","max-height","max-width","min-height","min-width"],values:["contain-floats","fill-available","fit-content","max-content","min-content"]}],flex2009Props={"align-items":"box-align",flex:"box-flex","box-direction":"box-direction","box-orient":"box-orient","flex-wrap":"box-lines","justify-content":"box-pack",order:"box-ordinal-group"},flex2009Values={"flex-end":"end","flex-start":"start",nowrap:"single","space-around":"justify","space-between":"justify",wrap:"multiple","wrap-reverse":"multiple"},flex2012Props={"align-content":"-ms-flex-line-pack","align-items":"-ms-flex-align","align-self":"-ms-flex-item-align","flex-basis":"-ms-preferred-size","flex-grow":"-ms-flex-positive","flex-shrink":"-ms-flex-negative","justify-content":"-ms-flex-pack",order:"-ms-flex-order"},flex2012Values={"flex-end":"end","flex-start":"start","space-around":"distribute","space-between":"justify"},emptySet={},valueTokenizer=/[(),]|\/\*[\s\S]*?\*\//g,commonFixers;initBrowser(),exports.prefixPlugin=prefixPlugin; |
@@ -1,2 +0,2 @@ | ||
var j2cPrefixPluginBrowser = (function () { | ||
(function (exports) { | ||
'use strict'; | ||
@@ -201,3 +201,3 @@ | ||
// flex-direction => -ms-flex-direction | ||
// !!flex-flow => flex-direction and/or flex-wrap, covered in `plugin.js` | ||
// flex-flow => -ms-flex-flow | ||
'flex-grow': '-ms-flex-positive', | ||
@@ -247,3 +247,2 @@ 'flex-shrink': '-ms-flex-negative', | ||
fixers.keywords.display['inline-flex'] = fixers.keywords.display['inline-flexbox']; | ||
fixers.flexbox2012 = true; | ||
for (var k in flex2012Props) { | ||
@@ -325,2 +324,7 @@ fixers.properties[k] = flex2012Props[k]; | ||
'::selection': '::selection', | ||
':fullscreen': ':fullscreen', //TODO sort out what changed between specs | ||
':full-screen': ':fullscreen', | ||
'::backdrop': '::backdrop', | ||
//sigh | ||
@@ -360,3 +364,2 @@ ':placeholder': '::placeholder', | ||
flexbox2009: false, | ||
flexbox2012: false, | ||
functions: [], | ||
@@ -552,10 +555,16 @@ initial: null, | ||
function createPrefixPlugin() { | ||
var fixers = blankFixers(); | ||
if (typeof getComputedStyle === 'function') browserDetector(fixers); | ||
finalizeFixers(fixers); | ||
var commonFixers; | ||
function initBrowser() { | ||
commonFixers = blankFixers(); | ||
if (typeof getComputedStyle === 'function') browserDetector(commonFixers); | ||
finalizeFixers(commonFixers); | ||
} | ||
initBrowser(); | ||
function prefixPlugin(j2c) { | ||
var fixers = commonFixers; | ||
var cache = []; | ||
prefixPlugin.setFixers = function(f) { | ||
if (j2c) j2c.setPrefixDb = function(f) { | ||
if (cache.indexOf(f) === -1) { | ||
@@ -568,45 +577,42 @@ finalizeFixers(f); | ||
}; | ||
function prefixPlugin() { | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
); | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + ''; | ||
if (property === 'flex-flow' && fixers.flexbox2009) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v); | ||
else if(v !== '') decl('flex-direction', v); | ||
}); | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis'); | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal'); | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
); | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + ''; | ||
if (property === 'flex-flow' && (fixers.flexbox2009 || fixers.flexbox2012)) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v); | ||
else if(v !== '') decl('flex-direction', v); | ||
}); | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis'); | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal'); | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
); | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
); | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
); | ||
} | ||
@@ -616,9 +622,6 @@ } | ||
} | ||
return prefixPlugin | ||
} | ||
var plugin = createPrefixPlugin(); | ||
exports.prefixPlugin = prefixPlugin; | ||
return plugin; | ||
}()); | ||
}((this.j2cPrefixPluginBrowser = this.j2cPrefixPluginBrowser || {}))); |
@@ -1,1 +0,1 @@ | ||
var j2cPrefixPluginBrowser=function(){"use strict";function e(){b=getComputedStyle(document.documentElement,null),w=document.createElement("div").style,k=document.documentElement.appendChild(document.createElement("style")),S="zIndex"in w?function(e){return e}:n}function r(){"undefined"!=typeof document&&document.documentElement.removeChild(k),b=k=null}function i(e){return e.replace(/-([a-z])/g,function(e,r){return r.toUpperCase()}).replace("-","")}function n(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}function t(e,r){return e=S(e),w[e]="",w[e]=r,!!w[e]}function o(e){return k.textContent="@media ("+e+"){}",!/^@media(?:\s+not)?\s+all/.test(k.sheet.cssRules[0].cssText)}function a(e){return S(e)in w}function l(e){return k.textContent=e+"{}",!!k.sheet.cssRules.length}function s(e){if(""!==e.prefix){var r={keyframes:"name",viewport:null,document:'regexp(".")'};for(var i in r){var n=i+" "+(r[i]||"");!l("@"+n)&&l("@"+e.prefix+n)&&(e.hasAtrules=!0,e.atrules["@"+i]="@"+e.prefix+i)}e.hasDppx=o("resolution:1dppx"),e.hasPixelRatio=o(e.prefix+"device-pixel-ratio:1"),e.hasPixelRatioFraction=o(e.prefix+"device-pixel-ratio:1/1"),(e.hasPixelRatio||e.hasPixelRatioFraction)&&(e.properties.resolution=e.prefix+"device-pixel-ratio",e.properties["min-resolution"]=e.prefix+"min-device-pixel-ratio",e.properties["max-resolution"]=e.prefix+"max-device-pixel-ratio",o("min-"+e.prefix+"device-pixel-ratio:1")&&(e.properties["min-resolution"]="min-"+e.prefix+"device-pixel-ratio",e.properties["max-resolution"]="max-"+e.prefix+"device-pixel-ratio"))}}function p(e){if(""!==e.prefix){var r={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};r["repeating-linear-gradient"]=r["repeating-radial-gradient"]=r["radial-gradient"]=r["linear-gradient"];for(var i in r){var n=r[i],o=n.property,a=i+"("+n.params+")";!t(o,a)&&t(o,e.prefix+a)&&e.functions.push(i)}}}function f(e){if(""!==e.prefix){for(var r=0;r<P.length;r++){for(var i,n={},o=P[r].props[0],a=0;i=P[r].values[a];a++)!t(o,i)&&t(o,e.prefix+i)&&(e.hasKeywords=!0,n[i]=e.prefix+i);for(a=0;o=P[r].props[a];a++)e.keywords[o]=n}if(e.keywords.display&&e.keywords.display.flexbox&&!t("display","flex")){e.keywords.display.flex=e.keywords.display.flexbox,e.keywords.display["inline-flex"]=e.keywords.display["inline-flexbox"],e.flexbox2012=!0;for(var l in j)e.properties[l]=j[l],e.keywords[l]=C}else if(e.keywords.display&&e.keywords.display.box&&!t("display","flex")){e.keywords.display.flex=e.keywords.display.box,e.keywords.display["inline-flex"]=e.keywords.display["inline-box"],e.flexbox2009=!0;for(l in R)e.properties[l]=e.prefix+R[l],e.keywords[l]=A}!t("color","initial")&&t("color",e.prefix+"initial")&&(e.initial=e.prefix+"initial")}}function u(e){function r(e){if("-"===e.charAt(0)){var r=e.split("-")[1];t[r]=++t[r]||1}}var t={};if(b&&b.length>0)for(var o=0;o<b.length;o++)r(b[o]);else for(var a in b)r(n(a));var l=0;for(var s in t)l<t[s]&&(l=t[s],e.prefix="-"+s+"-");e.Prefix=i(e.prefix)}function c(e){function r(r){return r.replace(/^::?/,function(r){return r+e.prefix})}var i,n;if(""!==e.prefix){var t={":any-link":":any-link",":read-only":":read-only",":read-write":":read-write","::selection":"::selection",":placeholder":"::placeholder","::placeholder":"::placeholder",":input-placeholder":"::placeholder","::input-placeholder":"::placeholder"};for(i in t)n=r(i),!l(i)&&l(n)&&(e.hasSelectors=!0,e.selectorList.push(t[i]),e.selectorMap[t[i]]=n)}}function x(){return{atrules:{},hasAtrules:!1,hasDppx:null,hasKeywords:!1,hasPixelRatio:!1,hasPixelRatioFraction:!1,hasSelectors:!1,hasValues:!1,fixAtMediaParams:null,fixAtSupportsParams:null,fixProperty:null,fixSelector:null,fixValue:null,flexbox2009:!1,flexbox2012:!1,functions:[],initial:null,keywords:{},placeholder:null,prefix:"",Prefix:"",properties:{},selectorList:[],selectorMap:{},valueProperties:{transition:1,"transition-property":1,"will-change":1}}}function d(i){e(),u(i),c(i),s(i),f(i),p(i),r()}function m(e){for(var r,i=[],n=[],t=0;r=M.exec(e);)switch(r[0]){case"(":t++;break;case")":t--;break;case",":if(t)break;i.push(r.index)}for(r=i.length;r--;)n.unshift(e.slice(i[r]+1)),e=e.slice(0,i[r]);return n.unshift(e),n}function y(e,r,i){return new RegExp(e+"(?:"+r.join("|")+")"+i)}function h(e,r,i){return new RegExp("\"(?:\\\\[\\S\\s]|[^\"])*\"|'(?:\\\\[\\S\\s]|[^'])*'|\\/\\*[\\S\\s]*?\\*\\/|"+e+"((?:"+r.join("|")+"))"+i,"gi")}function g(e){function r(e,r,i){return r+n+i}function i(r,i,n){return"("+(e.properties[i]||e.fixProperty(i))+":"+e.fixValue(n,i)}var n=e.prefix;e.fixProperty=e.fixProperty||function(r){var i;return e.properties[r]=a(r)||!a(i=n+r)?r:i};var t=y("",e.selectorList,"(?:\\b|$|[^-])"),o=h("",e.selectorList,"(?:\\b|$|[^-])"),l=function(r,i){return null!=i?e.selectorMap[i]:r};e.fixSelector=function(e){return t.test(e)?e.replace(o,l):e};var s=e.functions.indexOf("linear-gradient")>-1,p=/\blinear-gradient\(/,f=/(^|\s|,|\()((?:repeating-)?linear-gradient\()\s*(-?\d*\.?\d*)deg/gi,u=function(e,r,i,n){return r+i+(90-n)+"deg"},c=!!e.functions.length,x=y("(?:^|\\s|,|\\()",e.functions,"\\s*\\("),d=h("(^|\\s|,|\\()",e.functions,"(?=\\s*\\()"),g=/^\s*([-\w]+)/gi,v=function(r,i){return e.properties[i]||e.fixProperty(i)};e.fixValue=function(i,n){var t;return null!=e.initial&&"initial"===i?e.initial:e.hasKeywords&&(t=(e.keywords[n]||E)[i])?t:(t=i,e.valueProperties.hasOwnProperty(n)&&(t=i.indexOf(",")===-1?i.replace(g,v):m(i).map(function(e){return e.replace(g,v)}).join(",")),c&&x.test(i)&&(s&&p.test(i)&&(t=t.replace(f,u)),t=t.replace(d,r)),t)};var b=/((?:min-|max-)?resolution)\s*:\s*((?:\d*.)?\d+)dppx/g,w=e.hasPixelRatio?function(r,i,n){return e.properties[i]+":"+n}:e.hasPixelRatioFraction?function(r,i,n){return e.properties[i]+":"+Math.round(10*n)+"/10"}:function(e,r,i){return r+":"+Math.round(96*i)+"dpi"};e.fixAtMediaParams=e.hasDppx!==!1?function(e){return e}:function(e){return e.indexOf("reso")!==-1?e.replace(b,w):e};var k=/\(\s*([-\w]+)\s*:\s*((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\([^\)]*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*)/g;e.fixAtSupportsParams=function(e){return e.replace(k,i)}}function v(){function e(){return{$filter:function(e){return{atrule:function(i,n,t,o){e.atrule(r.hasAtrules&&r.atrules[i]||i,n,"@media"===i?r.fixAtMediaParams(t):"@supports"===i?r.fixAtSupportsParams(t):t,o)},decl:function i(n,t){return!n||"string"!=typeof t&&"number"!=typeof t?e.decl(r.properties[n]||r.fixProperty(n),t):(t+="",void("flex-flow"===n&&(r.flexbox2009||r.flexbox2012)?t.split(" ").forEach(function(e){e.indexOf("wrap")>-1?i("flex-wrap",e):""!==e&&i("flex-direction",e)}):"flex-direction"===n&&r.flexbox2009?(e.decl(r.properties["box-orient"],t.indexOf("column")>-1?"block-axis":"inline-axis"),e.decl(r.properties["box-direction"],t.indexOf("-reverse")>-1?"reverse":"normal")):e.decl(r.properties[n]||r.fixProperty(n),r.fixValue(t,n))))},rule:function(i){e.rule(r.hasSelectors?r.fixSelector(i):i)}}}}}var r=x();"function"==typeof getComputedStyle&&d(r),g(r);var i=[];return e.setFixers=function(n){return i.indexOf(n)===-1&&(g(n),i.push(n)),r=n,e},e}var b,w,k,S,P=[{props:["cursor"],values:["grab","grabbing","zoom-in","zoom-out"]},{props:["display"],values:["box","inline-box","flexbox","inline-flexbox","flex","inline-flex","grid","inline-grid"]},{props:["position"],values:["sticky"]},{props:["width","column-width","height","max-height","max-width","min-height","min-width"],values:["contain-floats","fill-available","fit-content","max-content","min-content"]}],R={"align-items":"box-align",flex:"box-flex","box-direction":"box-direction","box-orient":"box-orient","flex-wrap":"box-lines","justify-content":"box-pack",order:"box-ordinal-group"},A={"flex-end":"end","flex-start":"start",nowrap:"single","space-around":"justify","space-between":"justify",wrap:"multiple","wrap-reverse":"multiple"},j={"align-content":"-ms-flex-line-pack","align-items":"-ms-flex-align","align-self":"-ms-flex-item-align","flex-basis":"-ms-preferred-size","flex-grow":"-ms-flex-positive","flex-shrink":"-ms-flex-negative","justify-content":"-ms-flex-pack",order:"-ms-flex-order"},C={"flex-end":"end","flex-start":"start","space-around":"distribute","space-between":"justify"},E={},M=/[(),]|\/\*[\s\S]*?\*\//g,O=v();return O}(); | ||
!function(e){"use strict";function r(){k=getComputedStyle(document.documentElement,null),P=document.createElement("div").style,S=document.documentElement.appendChild(document.createElement("style")),R="zIndex"in P?function(e){return e}:t}function i(){"undefined"!=typeof document&&document.documentElement.removeChild(S),k=S=null}function n(e){return e.replace(/-([a-z])/g,function(e,r){return r.toUpperCase()}).replace("-","")}function t(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}function o(e,r){return e=R(e),P[e]="",P[e]=r,!!P[e]}function l(e){return S.textContent="@media ("+e+"){}",!/^@media(?:\s+not)?\s+all/.test(S.sheet.cssRules[0].cssText)}function a(e){return R(e)in P}function s(e){return S.textContent=e+"{}",!!S.sheet.cssRules.length}function p(e){if(""!==e.prefix){var r={keyframes:"name",viewport:null,document:'regexp(".")'};for(var i in r){var n=i+" "+(r[i]||"");!s("@"+n)&&s("@"+e.prefix+n)&&(e.hasAtrules=!0,e.atrules["@"+i]="@"+e.prefix+i)}e.hasDppx=l("resolution:1dppx"),e.hasPixelRatio=l(e.prefix+"device-pixel-ratio:1"),e.hasPixelRatioFraction=l(e.prefix+"device-pixel-ratio:1/1"),(e.hasPixelRatio||e.hasPixelRatioFraction)&&(e.properties.resolution=e.prefix+"device-pixel-ratio",e.properties["min-resolution"]=e.prefix+"min-device-pixel-ratio",e.properties["max-resolution"]=e.prefix+"max-device-pixel-ratio",l("min-"+e.prefix+"device-pixel-ratio:1")&&(e.properties["min-resolution"]="min-"+e.prefix+"device-pixel-ratio",e.properties["max-resolution"]="max-"+e.prefix+"device-pixel-ratio"))}}function f(e){if(""!==e.prefix){var r={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};r["repeating-linear-gradient"]=r["repeating-radial-gradient"]=r["radial-gradient"]=r["linear-gradient"];for(var i in r){var n=r[i],t=n.property,l=i+"("+n.params+")";!o(t,l)&&o(t,e.prefix+l)&&e.functions.push(i)}}}function u(e){if(""!==e.prefix){for(var r=0;r<j.length;r++){for(var i,n={},t=j[r].props[0],l=0;i=j[r].values[l];l++)!o(t,i)&&o(t,e.prefix+i)&&(e.hasKeywords=!0,n[i]=e.prefix+i);for(l=0;t=j[r].props[l];l++)e.keywords[t]=n}if(e.keywords.display&&e.keywords.display.flexbox&&!o("display","flex")){e.keywords.display.flex=e.keywords.display.flexbox,e.keywords.display["inline-flex"]=e.keywords.display["inline-flexbox"];for(var a in M)e.properties[a]=M[a],e.keywords[a]=O}else if(e.keywords.display&&e.keywords.display.box&&!o("display","flex")){e.keywords.display.flex=e.keywords.display.box,e.keywords.display["inline-flex"]=e.keywords.display["inline-box"],e.flexbox2009=!0;for(a in C)e.properties[a]=e.prefix+C[a],e.keywords[a]=E}!o("color","initial")&&o("color",e.prefix+"initial")&&(e.initial=e.prefix+"initial")}}function c(e){function r(e){if("-"===e.charAt(0)){var r=e.split("-")[1];i[r]=++i[r]||1}}var i={};if(k&&k.length>0)for(var o=0;o<k.length;o++)r(k[o]);else for(var l in k)r(t(l));var a=0;for(var s in i)a<i[s]&&(a=i[s],e.prefix="-"+s+"-");e.Prefix=n(e.prefix)}function x(e){function r(r){return r.replace(/^::?/,function(r){return r+e.prefix})}var i,n;if(""!==e.prefix){var t={":any-link":":any-link",":read-only":":read-only",":read-write":":read-write","::selection":"::selection",":fullscreen":":fullscreen",":full-screen":":fullscreen","::backdrop":"::backdrop",":placeholder":"::placeholder","::placeholder":"::placeholder",":input-placeholder":"::placeholder","::input-placeholder":"::placeholder"};for(i in t)n=r(i),!s(i)&&s(n)&&(e.hasSelectors=!0,e.selectorList.push(t[i]),e.selectorMap[t[i]]=n)}}function d(){return{atrules:{},hasAtrules:!1,hasDppx:null,hasKeywords:!1,hasPixelRatio:!1,hasPixelRatioFraction:!1,hasSelectors:!1,hasValues:!1,fixAtMediaParams:null,fixAtSupportsParams:null,fixProperty:null,fixSelector:null,fixValue:null,flexbox2009:!1,functions:[],initial:null,keywords:{},placeholder:null,prefix:"",Prefix:"",properties:{},selectorList:[],selectorMap:{},valueProperties:{transition:1,"transition-property":1,"will-change":1}}}function m(e){r(),c(e),x(e),p(e),u(e),f(e),i()}function y(e){for(var r,i=[],n=[],t=0;r=L.exec(e);)switch(r[0]){case"(":t++;break;case")":t--;break;case",":if(t)break;i.push(r.index)}for(r=i.length;r--;)n.unshift(e.slice(i[r]+1)),e=e.slice(0,i[r]);return n.unshift(e),n}function h(e,r,i){return new RegExp(e+"(?:"+r.join("|")+")"+i)}function g(e,r,i){return new RegExp("\"(?:\\\\[\\S\\s]|[^\"])*\"|'(?:\\\\[\\S\\s]|[^'])*'|\\/\\*[\\S\\s]*?\\*\\/|"+e+"((?:"+r.join("|")+"))"+i,"gi")}function v(e){function r(e,r,i){return r+n+i}function i(r,i,n){return"("+(e.properties[i]||e.fixProperty(i))+":"+e.fixValue(n,i)}var n=e.prefix;e.fixProperty=e.fixProperty||function(r){var i;return e.properties[r]=a(r)||!a(i=n+r)?r:i};var t=h("",e.selectorList,"(?:\\b|$|[^-])"),o=g("",e.selectorList,"(?:\\b|$|[^-])"),l=function(r,i){return null!=i?e.selectorMap[i]:r};e.fixSelector=function(e){return t.test(e)?e.replace(o,l):e};var s=e.functions.indexOf("linear-gradient")>-1,p=/\blinear-gradient\(/,f=/(^|\s|,|\()((?:repeating-)?linear-gradient\()\s*(-?\d*\.?\d*)deg/gi,u=function(e,r,i,n){return r+i+(90-n)+"deg"},c=!!e.functions.length,x=h("(?:^|\\s|,|\\()",e.functions,"\\s*\\("),d=g("(^|\\s|,|\\()",e.functions,"(?=\\s*\\()"),m=/^\s*([-\w]+)/gi,v=function(r,i){return e.properties[i]||e.fixProperty(i)};e.fixValue=function(i,n){var t;return null!=e.initial&&"initial"===i?e.initial:e.hasKeywords&&(t=(e.keywords[n]||z)[i])?t:(t=i,e.valueProperties.hasOwnProperty(n)&&(t=i.indexOf(",")===-1?i.replace(m,v):y(i).map(function(e){return e.replace(m,v)}).join(",")),c&&x.test(i)&&(s&&p.test(i)&&(t=t.replace(f,u)),t=t.replace(d,r)),t)};var b=/((?:min-|max-)?resolution)\s*:\s*((?:\d*.)?\d+)dppx/g,w=e.hasPixelRatio?function(r,i,n){return e.properties[i]+":"+n}:e.hasPixelRatioFraction?function(r,i,n){return e.properties[i]+":"+Math.round(10*n)+"/10"}:function(e,r,i){return r+":"+Math.round(96*i)+"dpi"};e.fixAtMediaParams=e.hasDppx!==!1?function(e){return e}:function(e){return e.indexOf("reso")!==-1?e.replace(b,w):e};var k=/\(\s*([-\w]+)\s*:\s*((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\((?:"(?:\\[\S\s]|[^"])*"|'(?:\\[\S\s]|[^'])*'|\/\*[\S\s]*?\*\/|\([^\)]*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*\)|[^\)])*)/g;e.fixAtSupportsParams=function(e){return e.replace(k,i)}}function b(){A=d(),"function"==typeof getComputedStyle&&m(A),v(A)}function w(e){var r=A,i=[];return e&&(e.setPrefixDb=function(e){return i.indexOf(e)===-1&&(v(e),i.push(e)),r=e,w}),{$filter:function(e){return{atrule:function(i,n,t,o){e.atrule(r.hasAtrules&&r.atrules[i]||i,n,"@media"===i?r.fixAtMediaParams(t):"@supports"===i?r.fixAtSupportsParams(t):t,o)},decl:function i(n,t){return!n||"string"!=typeof t&&"number"!=typeof t?e.decl(r.properties[n]||r.fixProperty(n),t):(t+="",void("flex-flow"===n&&r.flexbox2009?t.split(" ").forEach(function(e){e.indexOf("wrap")>-1?i("flex-wrap",e):""!==e&&i("flex-direction",e)}):"flex-direction"===n&&r.flexbox2009?(e.decl(r.properties["box-orient"],t.indexOf("column")>-1?"block-axis":"inline-axis"),e.decl(r.properties["box-direction"],t.indexOf("-reverse")>-1?"reverse":"normal")):e.decl(r.properties[n]||r.fixProperty(n),r.fixValue(t,n))))},rule:function(i){e.rule(r.hasSelectors?r.fixSelector(i):i)}}}}}var k,P,S,R,A,j=[{props:["cursor"],values:["grab","grabbing","zoom-in","zoom-out"]},{props:["display"],values:["box","inline-box","flexbox","inline-flexbox","flex","inline-flex","grid","inline-grid"]},{props:["position"],values:["sticky"]},{props:["width","column-width","height","max-height","max-width","min-height","min-width"],values:["contain-floats","fill-available","fit-content","max-content","min-content"]}],C={"align-items":"box-align",flex:"box-flex","box-direction":"box-direction","box-orient":"box-orient","flex-wrap":"box-lines","justify-content":"box-pack",order:"box-ordinal-group"},E={"flex-end":"end","flex-start":"start",nowrap:"single","space-around":"justify","space-between":"justify",wrap:"multiple","wrap-reverse":"multiple"},M={"align-content":"-ms-flex-line-pack","align-items":"-ms-flex-align","align-self":"-ms-flex-item-align","flex-basis":"-ms-preferred-size","flex-grow":"-ms-flex-positive","flex-shrink":"-ms-flex-negative","justify-content":"-ms-flex-pack",order:"-ms-flex-order"},O={"flex-end":"end","flex-start":"start","space-around":"distribute","space-between":"justify"},z={},L=/[(),]|\/\*[\s\S]*?\*\//g;b(),e.prefixPlugin=w}(this.j2cPrefixPluginBrowser=this.j2cPrefixPluginBrowser||{}); |
{ | ||
"name": "j2c-plugin-prefix-browser", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "Vendor prefix handling for j2c in the browser, built on top of Lea Verou's PrefixFree", | ||
"main": "index.js", | ||
"main": "dist/j2c-plugin-prefix-browser.commonjs.js", | ||
"jsnext:main": "src/plugin.js", | ||
"scripts": { | ||
@@ -7,0 +8,0 @@ "all": "yarn run go lint && yarn run build && yarn run go cover", |
213
README.md
@@ -5,21 +5,62 @@ # j2c-filter-prefix-browser | ||
It is based on Lea Verou's PrefixFree and it can thus prefix properties, values, at-rules and selectors as needed. | ||
It handles: | ||
Unlike Autoprefixer and the Inline Style Prefixer, it relies on feature detection rather than browser sniffing and it has thus a much larger compatibility. It weights ~3KB minified and gzipped. | ||
- properties and values, including flexbox and nested functions, | ||
- selectors, | ||
- at-rules and at-rules parameters like `@supports (...)` and `@media (min-resolution:2ddpx)`. | ||
See below for a detailed feature set. | ||
Unlike Autoprefixer and the Inline Style Prefixer, it relies on feature detection rather than browser sniffing and it supports more browsers. It weights ~3KB minified and gzipped. | ||
You can get a (non-live) sample of its work [here](https://cdn.rawgit.com/j2css/j2c/86db0ee4f2ea0e76eebac0b389c068463e3b1cd4/plugins/prefix-browser/tests/index.html). | ||
## Usage: | ||
The plugin is well tested (385 assertions, many of which are `deepEquals` on nested objects) and has 100% branch coverage (which doesn't mean it is bug free, off course). | ||
Many thanks to [Lea Verou](https://github.com/LeaVerou/) for [PrefixFree](http://leaverou.github.io/prefixfree/) from which most of the feature detection code originates, [Robin Frischmann](https://github.com/rofrischmann) for the [inline-style-prefixer](https://github.com/rofrischmann/inline-style-prefixer/) which helped me undestand the flexbox translation tables, and [Andrey Sitnik](https://github.com/ai) for the [Autoprefixer](https://github.com/postcss/autoprefixer) which is also a resource I've used while building this. | ||
---- | ||
- [Usage](#usage) | ||
- [Features](#features) | ||
- [Properties](#properties) | ||
- [Values](#values) | ||
- [Keywords](#keywords) | ||
- [Functions](#functions) | ||
- [Values that are property names](#values-that-are-property-names) | ||
- [Flexbox](#flexbox) | ||
- [Flexbox 2009 (`-moz-box` and `-webkit-box`)](#flexbox-2009--moz-box-and--webkit-box) | ||
- [Flexbox 2012 (`-ms-flexbox`)](#flexbox-2012--ms-flexbox) | ||
- [Final spec, prefixed (`-webkit-flex`)](#final-spec-prefixed--webkit-flex) | ||
- [Selectors](#selectors) | ||
- [At rules](#at-rules) | ||
- [What about the server side?](#what-about-the-server-side) | ||
- [And what about speed?](#and-what-about-speed) | ||
- [License: MIT](license-mit) | ||
---- | ||
## Usage | ||
```BASH | ||
$ npm install --save j2c-plugin-prefix-browser | ||
#or | ||
$ yarn add j2c-plugin-prefix-browser | ||
``` | ||
```JS | ||
var J2c = require("j2c") | ||
var j2c = J2c(require("j2c-plugin-prefix-browser")) | ||
var j2c = new J2c(require("j2c-plugin-prefix-browser")) | ||
// Suppose that this will run in an old Safari version: | ||
j2c.sheet({ | ||
"@keyframes foo": { | ||
from: {size: "100px"}, | ||
to: {size: "200px"} | ||
} | ||
}) | ||
``` | ||
j2c.sheet({"@keyframes foo": { | ||
from:{size: "100px"}, to:{size: "200px"} | ||
}}) | ||
```CSS | ||
/* Assuming that it ran in an old Safari version: */ | ||
/* output: | ||
@-webkit-keyframes foo_j2c-xxx { | ||
@@ -33,3 +74,155 @@ from { | ||
} | ||
*/ | ||
``` | ||
## Features | ||
Please file an issue if you see something missing. | ||
### Properties | ||
Properties that are supported with a prefix and unsupported unprefixed will be prefixed. | ||
### Values | ||
The following values can get a prefix: | ||
#### Keywords | ||
##### All properties: | ||
`initial` | ||
##### `cursor` | ||
`grab`, `grabbing`, `zoom-in`, `zoom-out` | ||
##### `display` | ||
The flexbox zoo (see below), plus `grid` and `inline-grid` | ||
##### `position` | ||
`sticky` | ||
##### `width`, `column-width`, `height`, `max-height`, `max-width`, `min-height`, `min-width` | ||
`contain-floats`, `fill-available`, `fit-content`, `max-content` and `min-content` | ||
#### Functions | ||
Gradients, `calc()`, `element()` and `cross-fade()` are prefixed, even if they are nested in other functions. | ||
Prefixed gradients also have their angle changed from trigonometric to clockwise coordinates. | ||
#### Values that are property names | ||
`transiton:`, `transition-property:` and `will-change:` take properties as arguments. They are prefixed where needed. | ||
### Flexbox | ||
The plugin translates the final flexbox spec to its older versions as much as possible. | ||
#### Flexbox 2009 (`-moz-box` and `-webkit-box`) | ||
##### Properties | ||
- (`align-content` => ? no mapping AFAIK please chime in if you know any) | ||
- (`align-self` => ?) | ||
- `align-items` => `-x-box-align`, | ||
- `flex` => `-x-box-flex` | ||
- (`flex-basis` => ?) | ||
- `flex-direction` => `-x-box-direction` + `-x-box-orient` | ||
- `flex-flow` => `-x-box-direction` + `-x-box-orient` and/or `-x-box-lines` | ||
- (`flex-grow` => ?) | ||
- (`flex-shrink` => ?) | ||
- `flex-wrap` => `-x-box-lines`, | ||
- `justify-content`: `-x-box-pack`, | ||
- `order`: `-x-box-ordinal-group` | ||
##### Values | ||
- `flex` => `-x-box` | ||
- `inline-flex` => `-x-inline-box` | ||
- `column` ~> `block-axis` (for `-x-box-orient`) + `normal` (for `box-direction) | ||
- `column-reverse ~> `block-axis` + `reverse` | ||
- `row` ~> `inline-axis` + `normal` | ||
- `row-reverse` ~> `inline-axis` + `reverse` | ||
- `flex-end`: `end`, | ||
- `flex-start` => `start`, | ||
- `nowrap`: `single`, | ||
- `space-around` ~> `justify`, | ||
- `space-between` => `justify`, | ||
- `wrap` => `multiple`, | ||
- `wrap-reverse` ~> `multiple` | ||
#### Flexbox 2012 (`-ms-flexbox`) | ||
##### Properties | ||
- `align-content` => `-ms-flex-line-pack`, | ||
- `align-items` => `-ms-flex-align`, | ||
- `align-self` => `-ms-flex-item-align`, | ||
- (`flex` => `-ms-flex`) | ||
- `flex-basis` => `-ms-preferred-size`, | ||
- `flex-direction` => `-ms-flex-direction` | ||
- `flex-flow` => `-ms-flex-flow` | ||
- `flex-grow` => `-ms-flex-positive`, | ||
- `flex-shrink` => `-ms-flex-negative`, | ||
- (`flex-wrap` => `-ms-flex-wrap`) | ||
- `justify-content` => `-ms-flex-pack`, | ||
- `order` => `-ms-flex-order` | ||
##### Values | ||
- `flex` => `-ms-flexbox` | ||
- `inline-flex` => `-ms-inline-flexbox` | ||
- (`column` => `column`) | ||
- (`column-reverse` => `column-reverse) | ||
- (`row` => `row`) | ||
- (`row-reverse` => `row-reverse`) | ||
- `flex-end` => `end`, | ||
- `flex-start` => `start`, | ||
- `space-around` => `distribute`, | ||
- `space-between` => `justify` | ||
- (`wrap` => `wrap`) | ||
- (`wrap-reverse` => `wrap-reverse`) | ||
#### Final spec, prefixed (`-webkit-flex`) | ||
No special treatment is necessary, prefixes are applied normally where needed. | ||
### Selectors | ||
- `:any-link`: `:-x-any-link`, | ||
- `:read-only`: `:-x-read-only`, | ||
- `:read-write`: `:-x-read-write`, | ||
- `::selection`: `::-x-selection`, | ||
- `:fullscreen` => `:-x-fullscreen` or `:-x-fullscreen` | ||
- `::backdrop` => `::-x-backdrop`, | ||
- `::placeholder` => `::-x-placeholder`, `:-x-placeholder`:, `::-x-input-placeholder` or `:-x-input-placeholder` | ||
The `:-webkit-scrollbar` pseudo-element/pseudo-class family not implemented since it is webkit-only and not on a standard track AFAIK. | ||
### At rules | ||
`@keyframes`, `@document` and `@viewport` get a prefix where needed. | ||
`@media (min/max-resolution: 2dppx)` is converted to `-webkit-min/max-device-pixel-ratio:2`, `min/max--moz-device- pixel-ratio:2` and `min/max-resolution: 192dpi` when necessary (even to `-o-device-pixel-ratio 20/10`). | ||
The parameters of `@supports` have also their properties and values prefixed automatically. | ||
## What about the server side? | ||
The plugin supports a way to bypass the detection code and provide `fixers` objects manually, but these would have to be constructed, either from the caniuse.com data set and cross-checking it by using our detector code with a service like SauceLabs, BrowserStack or Browserling. | ||
That scheme would only work when the server knows the user agent. The plugin doesn't support inserting more than one prefix, or keeping the originals as Autoprefixer and inline-style-prefixer do. Thankfully, for that case (and until a proper DB is constructed), Autoprefixer can be used as a fallback. | ||
## And what about speed? | ||
The plugin is designed to be as fast as possible. Most of the feature detection is performed upfront to enable the fastest operation possible while applying prefixes. Allocations and branches are kept to a bare minimum after initialization (the prefixes are applied once and then cached). No objects beside strings are created while prefixing (with one exception when `flex-flow` has to be translated to the 2009 equivalent, the value is `.split(' ')` into an array.). | ||
## License: MIT |
@@ -69,3 +69,3 @@ // Derived from Lea Verou's PrefixFree and Robin Frischmann's Inline Style Prefixer | ||
// flex-direction => -ms-flex-direction | ||
// !!flex-flow => flex-direction and/or flex-wrap, covered in `plugin.js` | ||
// flex-flow => -ms-flex-flow | ||
'flex-grow': '-ms-flex-positive', | ||
@@ -115,3 +115,2 @@ 'flex-shrink': '-ms-flex-negative', | ||
fixers.keywords.display['inline-flex'] = fixers.keywords.display['inline-flexbox'] | ||
fixers.flexbox2012 = true | ||
for (var k in flex2012Props) { | ||
@@ -118,0 +117,0 @@ fixers.properties[k] = flex2012Props[k] |
@@ -17,2 +17,7 @@ // Derived from Lea Verou's PrefixFree | ||
'::selection': '::selection', | ||
':fullscreen': ':fullscreen', //TODO sort out what changed between specs | ||
':full-screen': ':fullscreen', | ||
'::backdrop': '::backdrop', | ||
//sigh | ||
@@ -19,0 +24,0 @@ ':placeholder': '::placeholder', |
@@ -25,3 +25,2 @@ import {init, finalize, supportedProperty} from './detectors/utils.js' | ||
flexbox2009: false, | ||
flexbox2012: false, | ||
functions: [], | ||
@@ -28,0 +27,0 @@ initial: null, |
@@ -1,2 +0,1 @@ | ||
import {plugin} from './plugin' | ||
export {plugin as default} | ||
export {prefixPlugin} from './plugin.js' |
import {blankFixers, browserDetector, finalizeFixers} from './fixers.js' | ||
var commonFixers | ||
export function createPrefixPlugin() { | ||
var fixers = blankFixers() | ||
if (typeof getComputedStyle === 'function') browserDetector(fixers) | ||
finalizeFixers(fixers) | ||
export function initBrowser() { | ||
commonFixers = blankFixers() | ||
if (typeof getComputedStyle === 'function') browserDetector(commonFixers) | ||
finalizeFixers(commonFixers) | ||
} | ||
initBrowser() | ||
export function prefixPlugin(j2c) { | ||
var fixers = commonFixers | ||
var cache = [] | ||
prefixPlugin.setFixers = function(f) { | ||
if (j2c) j2c.setPrefixDb = function(f) { | ||
if (cache.indexOf(f) === -1) { | ||
@@ -19,45 +24,42 @@ finalizeFixers(f) | ||
} | ||
function prefixPlugin() { | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
) | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + '' | ||
if (property === 'flex-flow' && fixers.flexbox2009) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v) | ||
else if(v !== '') decl('flex-direction', v) | ||
}) | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis') | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal') | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
) | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + '' | ||
if (property === 'flex-flow' && (fixers.flexbox2009 || fixers.flexbox2012)) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v) | ||
else if(v !== '') decl('flex-direction', v) | ||
}) | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis') | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal') | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
) | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
) | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
) | ||
} | ||
@@ -67,5 +69,2 @@ } | ||
} | ||
return prefixPlugin | ||
} | ||
export var plugin = createPrefixPlugin() |
@@ -6,3 +6,3 @@ // Once built as 'exposed.js' by '../scripts/build.js', this script | ||
export {blankFixers, finalizeFixers} from '../src/fixers.js' | ||
export {createPrefixPlugin} from '../src/plugin.js' | ||
export {prefixPlugin as createPrefixPlugin, initBrowser} from '../src/plugin.js' | ||
export { | ||
@@ -9,0 +9,0 @@ init, finalize, cleanupDetectorUtils, hasCleanState, |
@@ -210,3 +210,3 @@ // This file is generated by `../script/build.js`, from `./_exposed.es6.js` | ||
// flex-direction => -ms-flex-direction | ||
// !!flex-flow => flex-direction and/or flex-wrap, covered in `plugin.js` | ||
// flex-flow => -ms-flex-flow | ||
'flex-grow': '-ms-flex-positive', | ||
@@ -256,3 +256,2 @@ 'flex-shrink': '-ms-flex-negative', | ||
fixers.keywords.display['inline-flex'] = fixers.keywords.display['inline-flexbox']; | ||
fixers.flexbox2012 = true; | ||
for (var k in flex2012Props) { | ||
@@ -334,2 +333,7 @@ fixers.properties[k] = flex2012Props[k]; | ||
'::selection': '::selection', | ||
':fullscreen': ':fullscreen', //TODO sort out what changed between specs | ||
':full-screen': ':fullscreen', | ||
'::backdrop': '::backdrop', | ||
//sigh | ||
@@ -369,3 +373,2 @@ ':placeholder': '::placeholder', | ||
flexbox2009: false, | ||
flexbox2012: false, | ||
functions: [], | ||
@@ -561,10 +564,16 @@ initial: null, | ||
function createPrefixPlugin() { | ||
var fixers = blankFixers(); | ||
if (typeof getComputedStyle === 'function') browserDetector(fixers); | ||
finalizeFixers(fixers); | ||
var commonFixers; | ||
function initBrowser() { | ||
commonFixers = blankFixers(); | ||
if (typeof getComputedStyle === 'function') browserDetector(commonFixers); | ||
finalizeFixers(commonFixers); | ||
} | ||
initBrowser(); | ||
function prefixPlugin(j2c) { | ||
var fixers = commonFixers; | ||
var cache = []; | ||
prefixPlugin.setFixers = function(f) { | ||
if (j2c) j2c.setPrefixDb = function(f) { | ||
if (cache.indexOf(f) === -1) { | ||
@@ -577,45 +586,42 @@ finalizeFixers(f); | ||
}; | ||
function prefixPlugin() { | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
return { | ||
$filter: function(next) { | ||
return { | ||
atrule: function(rule, kind, params, hasBlock) { | ||
next.atrule( | ||
fixers.hasAtrules && fixers.atrules[rule] || rule, | ||
kind, | ||
( | ||
rule === '@media' ? fixers.fixAtMediaParams(params) : | ||
rule === '@supports' ? fixers.fixAtSupportsParams(params) : | ||
params | ||
), | ||
hasBlock | ||
); | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + ''; | ||
if (property === 'flex-flow' && fixers.flexbox2009) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v); | ||
else if(v !== '') decl('flex-direction', v); | ||
}); | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis'); | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal'); | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
); | ||
}, | ||
decl: function decl(property, value) { | ||
if (!property || !(typeof value === 'string' || typeof value === 'number')){ | ||
return next.decl(fixers.properties[property] || fixers.fixProperty(property), value) | ||
} | ||
value = value + ''; | ||
if (property === 'flex-flow' && (fixers.flexbox2009 || fixers.flexbox2012)) { | ||
value.split(' ').forEach(function(v){ | ||
// recurse! The lack of `next.` is intentional. | ||
if (v.indexOf('wrap') > -1) decl('flex-wrap', v); | ||
else if(v !== '') decl('flex-direction', v); | ||
}); | ||
} else if (property === 'flex-direction' && fixers.flexbox2009) { | ||
next.decl(fixers.properties['box-orient'], value.indexOf('column') > -1 ? 'block-axis' : 'inline-axis'); | ||
next.decl(fixers.properties['box-direction'], value.indexOf('-reverse') > -1 ? 'reverse' : 'normal'); | ||
} else { | ||
next.decl( | ||
fixers.properties[property] || fixers.fixProperty(property), | ||
fixers.fixValue(value, property) | ||
); | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
); | ||
} | ||
}, | ||
rule: function(selector) { | ||
next.rule( | ||
fixers.hasSelectors ? fixers.fixSelector(selector) : selector | ||
); | ||
} | ||
@@ -625,7 +631,4 @@ } | ||
} | ||
return prefixPlugin | ||
} | ||
var plugin = createPrefixPlugin(); | ||
// Once built as 'exposed.js' by '../scripts/build.js', this script | ||
@@ -637,3 +640,4 @@ // exposes every relevant function from the plugin, including private | ||
exports.finalizeFixers = finalizeFixers; | ||
exports.createPrefixPlugin = createPrefixPlugin; | ||
exports.createPrefixPlugin = prefixPlugin; | ||
exports.initBrowser = initBrowser; | ||
exports.init = init; | ||
@@ -640,0 +644,0 @@ exports.finalize = finalize; |
var ospec = require('ospec') | ||
var o = module.exports = ospec['new']('prefix-plugin-browser') | ||
ospec('$$prefix-plugin-browser', o.run) | ||
ospec('prefix-plugin-browser', o.run) |
@@ -28,5 +28,7 @@ var o = require('../test-utils/ospec-instance') | ||
o('works with a blank fixer object', function() { | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -42,5 +44,7 @@ methods.atrule('@media', 'media', 'screen', true) | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -61,5 +65,7 @@ methods.atrule('@media', 'media', 'screen', true) | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -79,5 +85,7 @@ methods.atrule('@media', 'media', '(resolution:2dppx) and (min-resolution:1dppx) and (max-resolution:2.5dppx)', true) | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -97,5 +105,7 @@ methods.atrule('@media', 'media', '(resolution:2dppx) and (min-resolution:1dppx) and (max-resolution:2.5dppx)', true) | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -102,0 +112,0 @@ methods.atrule('@media', 'media', '(resolution:2dppx) and (min-resolution:1dppx) and (max-resolution:2.51dppx)', true) |
@@ -11,2 +11,3 @@ var o = require('../test-utils/ospec-instance') | ||
var hasCleanState = exposed.hasCleanState | ||
var initBrowser = exposed.initBrowser | ||
@@ -31,6 +32,9 @@ var referenceFixers = Object.keys(blankFixers()) | ||
mocks(global) | ||
initBrowser() | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -47,5 +51,6 @@ methods.atrule('@supports', 'supports', '(foo:bar)', true) | ||
}) | ||
var plugin = createPrefixPlugin() | ||
initBrowser() | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = createPrefixPlugin().$filter(sink) | ||
@@ -68,5 +73,6 @@ methods.atrule('@supports', 'supports', '(foo: foo)', true) | ||
}) | ||
var plugin = createPrefixPlugin() | ||
initBrowser() | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = createPrefixPlugin().$filter(sink) | ||
@@ -73,0 +79,0 @@ methods.atrule('@supports', 'supports', |
@@ -28,5 +28,7 @@ var o = require('../test-utils/ospec-instance') | ||
o('works with a blank fixer object', function() { | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -41,5 +43,7 @@ methods.atrule('@keyframes', 'keyframes', 'foo', true) | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -55,5 +59,7 @@ methods.atrule('@keyframes', 'keyframes', 'foo', true) | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -60,0 +66,0 @@ methods.atrule('@foo', 'foo', 'bar', true) |
@@ -13,2 +13,3 @@ var o = require('../test-utils/ospec-instance') | ||
var hasCleanState = exposed.hasCleanState | ||
var initBrowser = exposed.initBrowser | ||
@@ -33,3 +34,2 @@ var referenceFixers = Object.keys(blankFixers()) | ||
o(upToDate(__dirname, '../src/fixers.js')).equals(true) | ||
o(upToDate(__dirname, '../src/main.js')).equals(true) | ||
}) | ||
@@ -39,7 +39,11 @@ | ||
mocks(global, {properties: {'-o-foo': 'bar'}}) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -46,0 +50,0 @@ o(fixers.properties).deepEquals({}) |
@@ -11,2 +11,3 @@ var o = require('../test-utils/ospec-instance') | ||
var hasCleanState = exposed.hasCleanState | ||
var initBrowser = exposed.initBrowser | ||
@@ -32,8 +33,12 @@ var referenceFixers = Object.keys(blankFixers()) | ||
mocks(global, {properties: {'-o-foo': null, 'foo': null}}) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
plugin.setFixers(fixers) // set it a second time to exercise the cache branch. | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
j2c.setPrefixDb(fixers) // set it a second time to exercise the cache branch. | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -47,7 +52,11 @@ methods.decl('foo', 'bar') | ||
mocks(global, {properties: {'-o-foo': 'bar'}}) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -71,7 +80,11 @@ o(fixers.properties).deepEquals({}) | ||
mocks(global, {properties: {'-o-foo': 'bar', 'foo': 'bar'}}) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -95,2 +108,4 @@ o(fixers.properties).deepEquals({}) | ||
mocks(global) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
@@ -101,5 +116,7 @@ fixers.properties['box-orient'] = '-o-box-orient' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -125,2 +142,4 @@ o(fixers.properties).deepEquals({ | ||
mocks(global) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
@@ -134,5 +153,7 @@ fixers.properties['box-orient'] = '-o-box-orient' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -161,2 +182,4 @@ o(fixers.properties).deepEquals({ | ||
mocks(global) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
@@ -170,5 +193,7 @@ fixers.properties['box-orient'] = '-o-box-orient' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -196,2 +221,4 @@ o(fixers.properties).deepEquals({ | ||
mocks(global) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
@@ -205,5 +232,7 @@ fixers.properties['box-orient'] = '-o-box-orient' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -228,76 +257,10 @@ o(fixers.properties).deepEquals({ | ||
}) | ||
o('with flexbox 2012, `flex-flow` becomes flex-direction + flex-wrap', function() { | ||
mocks(global, {properties:{'-ms-flex-direction':'0', '-ms-flex-wrap':'0'}}) | ||
fixers.prefix = '-ms-' | ||
fixers.hasKeywords = true | ||
fixers.flexbox2012 = true | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
o(fixers.properties).deepEquals({}) | ||
methods.decl('flex-flow', 'column-reverse wrap') | ||
o(sink.buffer).deepEquals([ | ||
['decl', '-ms-flex-direction', 'column-reverse'], | ||
['decl', '-ms-flex-wrap', 'wrap'] | ||
]) | ||
o(fixers.properties).deepEquals({ | ||
'flex-direction': '-ms-flex-direction', | ||
'flex-wrap': '-ms-flex-wrap' | ||
}) | ||
}) | ||
o('with flexbox 2012, `flex-flow` (no wrap value) becomes flex-direction', function() { | ||
mocks(global, {properties:{'-ms-flex-direction':'0', '-ms-flex-wrap':'0'}}) | ||
fixers.prefix = '-ms-' | ||
fixers.hasKeywords = true | ||
fixers.flexbox2012 = true | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
o(fixers.properties).deepEquals({}) | ||
methods.decl('flex-flow', 'row') | ||
o(sink.buffer).deepEquals([ | ||
['decl', '-ms-flex-direction', 'row'] | ||
]) | ||
o(fixers.properties).deepEquals({ | ||
'flex-direction': '-ms-flex-direction' | ||
}) | ||
}) | ||
o('with flexbox 2012, `flex-flow` (no direction) becomes flex-wrap', function() { | ||
mocks(global, {properties:{'-ms-flex-direction':'0', '-ms-flex-wrap':'0'}}) | ||
fixers.prefix = '-ms-' | ||
fixers.hasKeywords = true | ||
fixers.flexbox2012 = true | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
o(fixers.properties).deepEquals({}) | ||
methods.decl('flex-flow', 'nowrap') | ||
o(sink.buffer).deepEquals([ | ||
['decl', '-ms-flex-wrap', 'nowrap'] | ||
]) | ||
o(fixers.properties).deepEquals({ | ||
'flex-wrap': '-ms-flex-wrap' | ||
}) | ||
}) | ||
o('the properties fixer can be specified manually', function(){ | ||
fixers.fixProperty = function() {return 'replaced'} | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -304,0 +267,0 @@ o(fixers.properties).deepEquals({}) |
@@ -31,5 +31,7 @@ var o = require('../test-utils/ospec-instance') | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -50,5 +52,7 @@ methods.rule('.foo:active #baz[foo]') | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -55,0 +59,0 @@ methods.rule('.foo:active #baz[foo]') |
@@ -11,2 +11,3 @@ var o = require('../test-utils/ospec-instance') | ||
var hasCleanState = exposed.hasCleanState | ||
var initBrowser = exposed.initBrowser | ||
@@ -30,2 +31,3 @@ var referenceFixers = Object.keys(blankFixers()) | ||
mocks(global, {properties: {'-o-foo': 'bar'}}) | ||
initBrowser() | ||
@@ -35,5 +37,7 @@ fixers.functions = ['linear-gradient', 'repeating-linear-gradient', 'calc', 'element', 'cross-fade'] | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -40,0 +44,0 @@ methods.decl('transition', 'bar 1s, foo 2s step(calc(3 * var(--foo)), foo)') |
@@ -11,2 +11,3 @@ var o = require('../test-utils/ospec-instance') | ||
var hasCleanState = exposed.hasCleanState | ||
var initBrowser = exposed.initBrowser | ||
@@ -30,8 +31,12 @@ var referenceFixers = Object.keys(blankFixers()) | ||
mocks(global) | ||
initBrowser() | ||
fixers.functions = ['linear-gradient', 'repeating-linear-gradient', 'calc', 'element', 'cross-fade'] | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -44,8 +49,12 @@ methods.decl('foo', 'color(red a(0))') | ||
mocks(global) | ||
initBrowser() | ||
fixers.functions = ['linear-gradient', 'repeating-linear-gradient', 'calc', 'element', 'cross-fade'] | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -62,8 +71,12 @@ methods.decl('foo', 'cross-fade(linear-gradient(89deg red, green),repeating-linear-gradient(-20deg rgb( calc(2 * var(--foo)), 0, 0), green))') | ||
mocks(global) | ||
initBrowser() | ||
fixers.functions = ['calc', 'element', 'cross-fade'] | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -70,0 +83,0 @@ methods.decl('foo', 'cross-fade(linear-gradient(89deg red, green),repeating-linear-gradient(-20deg rgb( calc(2 * var(--foo)), 0, 0), green))') |
@@ -11,2 +11,3 @@ var o = require('../test-utils/ospec-instance') | ||
var hasCleanState = exposed.hasCleanState | ||
var initBrowser = exposed.initBrowser | ||
@@ -43,7 +44,11 @@ var referenceFixers = Object.keys(blankFixers()) | ||
mocks(global) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -60,2 +65,4 @@ methods.decl('display', 'inline') | ||
mocks(global) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
@@ -65,5 +72,7 @@ fixers.hasKeywords = true | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -80,2 +89,4 @@ methods.decl('display', 'inline') | ||
mocks(global) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
@@ -85,5 +96,7 @@ fixers.hasKeywords = true | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -98,2 +111,4 @@ methods.decl('display', 'grid') | ||
mocks(global) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
@@ -104,5 +119,7 @@ fixers.hasKeywords = true | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -109,0 +126,0 @@ methods.decl('display', 'box') |
@@ -11,2 +11,3 @@ var o = require('../test-utils/ospec-instance') | ||
var hasCleanState = exposed.hasCleanState | ||
var initBrowser = exposed.initBrowser | ||
@@ -30,7 +31,10 @@ var referenceFixers = Object.keys(blankFixers()) | ||
mocks(global, {properties: {'-o-foo': null, 'foo': null}}) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -55,7 +59,11 @@ o(fixers.properties).deepEquals({}) | ||
mocks(global, {properties: {'-o-foo': 'bar'}}) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -80,7 +88,11 @@ o(fixers.properties).deepEquals({}) | ||
mocks(global, {properties: {'-o-foo': 'bar', 'foo': 'bar'}}) | ||
initBrowser() | ||
fixers.prefix = '-o-' | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -105,5 +117,7 @@ o(fixers.properties).deepEquals({}) | ||
fixers.fixProperty = function() {return 'replaced'} | ||
var plugin = createPrefixPlugin().setFixers(fixers) | ||
var j2c = {} | ||
var plugin = createPrefixPlugin(j2c) | ||
j2c.setPrefixDb(fixers) | ||
var sink = makeSink() | ||
var methods = plugin().$filter(sink) | ||
var methods = plugin.$filter(sink) | ||
@@ -110,0 +124,0 @@ o(fixers.properties).deepEquals({}) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
275973
5154
226
53