|
|
@ -1,5 +1,5 @@ |
|
|
|
/** |
|
|
|
* StyleFix 1.0.2 |
|
|
|
* StyleFix 1.0.3 |
|
|
|
* @author Lea Verou |
|
|
|
* MIT license |
|
|
|
*/ |
|
|
@ -52,8 +52,10 @@ var self = window.StyleFix = { |
|
|
|
}); |
|
|
|
|
|
|
|
// behavior URLs shoudn’t be converted (Issue #19)
|
|
|
|
css = css.replace(RegExp('\\b(behavior:\\s*?url\\(\'?"?)' + base, 'gi'), '$1'); |
|
|
|
} |
|
|
|
// base should be escaped before added to RegExp (Issue #81)
|
|
|
|
var escaped_base = base.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,"\\$1"); |
|
|
|
css = css.replace(RegExp('\\b(behavior:\\s*?url\\(\'?"?)' + escaped_base, 'gi'), '$1'); |
|
|
|
} |
|
|
|
|
|
|
|
var style = document.createElement('style'); |
|
|
|
style.textContent = css; |
|
|
@ -63,6 +65,8 @@ var self = window.StyleFix = { |
|
|
|
|
|
|
|
parent.insertBefore(style, link); |
|
|
|
parent.removeChild(link); |
|
|
|
|
|
|
|
style.media = link.media; // Duplicate is intentional. See issue #31
|
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
@ -84,6 +88,9 @@ var self = window.StyleFix = { |
|
|
|
}, |
|
|
|
|
|
|
|
styleElement: function(style) { |
|
|
|
if (style.hasAttribute('data-noprefix')) { |
|
|
|
return; |
|
|
|
} |
|
|
|
var disabled = style.disabled; |
|
|
|
|
|
|
|
style.textContent = self.fix(style.textContent, true, style); |
|
|
@ -150,7 +157,7 @@ function $(expr, con) { |
|
|
|
})(); |
|
|
|
|
|
|
|
/** |
|
|
|
* PrefixFree 1.0.5 |
|
|
|
* PrefixFree 1.0.6 |
|
|
|
* @author Lea Verou |
|
|
|
* MIT license |
|
|
|
*/ |
|
|
@ -160,36 +167,39 @@ if(!window.StyleFix || !window.getComputedStyle) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// Private helper
|
|
|
|
function fix(what, before, after, replacement, css) { |
|
|
|
what = self[what]; |
|
|
|
|
|
|
|
if(what.length) { |
|
|
|
var regex = RegExp(before + '(' + what.join('|') + ')' + after, 'gi'); |
|
|
|
|
|
|
|
css = css.replace(regex, replacement); |
|
|
|
} |
|
|
|
|
|
|
|
return css; |
|
|
|
} |
|
|
|
|
|
|
|
var self = window.PrefixFree = { |
|
|
|
prefixCSS: function(css, raw) { |
|
|
|
var prefix = self.prefix; |
|
|
|
|
|
|
|
function fix(what, before, after, replacement) { |
|
|
|
what = self[what]; |
|
|
|
|
|
|
|
if(what.length) { |
|
|
|
var regex = RegExp(before + '(' + what.join('|') + ')' + after, 'gi'); |
|
|
|
|
|
|
|
css = css.replace(regex, replacement); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
fix('functions', '(\\s|:|,)', '\\s*\\(', '$1' + prefix + '$2('); |
|
|
|
fix('keywords', '(\\s|:)', '(\\s|;|\\}|$)', '$1' + prefix + '$2$3'); |
|
|
|
fix('properties', '(^|\\{|\\s|;)', '\\s*:', '$1' + prefix + '$2:'); |
|
|
|
css = fix('functions', '(\\s|:|,)', '\\s*\\(', '$1' + prefix + '$2(', css); |
|
|
|
css = fix('keywords', '(\\s|:)', '(\\s|;|\\}|$)', '$1' + prefix + '$2$3', css); |
|
|
|
css = fix('properties', '(^|\\{|\\s|;)', '\\s*:', '$1' + prefix + '$2:', css); |
|
|
|
|
|
|
|
// Prefix properties *inside* values (issue #8)
|
|
|
|
if (self.properties.length) { |
|
|
|
var regex = RegExp('\\b(' + self.properties.join('|') + ')(?!:)', 'gi'); |
|
|
|
|
|
|
|
fix('valueProperties', '\\b', ':(.+?);', function($0) { |
|
|
|
css = fix('valueProperties', '\\b', ':(.+?);', function($0) { |
|
|
|
return $0.replace(regex, prefix + "$1") |
|
|
|
}); |
|
|
|
}, css); |
|
|
|
} |
|
|
|
|
|
|
|
if(raw) { |
|
|
|
fix('selectors', '', '\\b', self.prefixSelector); |
|
|
|
fix('atrules', '@', '\\b', '@' + prefix + '$1'); |
|
|
|
css = fix('selectors', '', '\\b', self.prefixSelector, css); |
|
|
|
css = fix('atrules', '@', '\\b', '@' + prefix + '$1', css); |
|
|
|
} |
|
|
|
|
|
|
|
// Fix double prefixing
|
|
|
@ -198,11 +208,25 @@ var self = window.PrefixFree = { |
|
|
|
return css; |
|
|
|
}, |
|
|
|
|
|
|
|
// Warning: prefixXXX functions prefix no matter what, even if the XXX is supported prefix-less
|
|
|
|
property: function(property) { |
|
|
|
return (self.properties.indexOf(property)? self.prefix : '') + property; |
|
|
|
}, |
|
|
|
|
|
|
|
value: function(value, property) { |
|
|
|
value = fix('functions', '(^|\\s|,)', '\\s*\\(', '$1' + self.prefix + '$2(', value); |
|
|
|
value = fix('keywords', '(^|\\s)', '(\\s|$)', '$1' + self.prefix + '$2$3', value); |
|
|
|
|
|
|
|
// TODO properties inside values
|
|
|
|
|
|
|
|
return value; |
|
|
|
}, |
|
|
|
|
|
|
|
// Warning: Prefixes no matter what, even if the selector is supported prefix-less
|
|
|
|
prefixSelector: function(selector) { |
|
|
|
return selector.replace(/^:{1,2}/, function($0) { return $0 + self.prefix }) |
|
|
|
}, |
|
|
|
|
|
|
|
// Warning: Prefixes no matter what, even if the property is supported prefix-less
|
|
|
|
prefixProperty: function(property, camelCase) { |
|
|
|
var prefixed = self.prefix + property; |
|
|
|
|
|
|
@ -334,7 +358,9 @@ var keywords = { |
|
|
|
'zoom-out': 'cursor', |
|
|
|
'box': 'display', |
|
|
|
'flexbox': 'display', |
|
|
|
'inline-flexbox': 'display' |
|
|
|
'inline-flexbox': 'display', |
|
|
|
'flex': 'display', |
|
|
|
'inline-flex': 'display' |
|
|
|
}; |
|
|
|
|
|
|
|
self.functions = []; |
|
|
|