-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathprefixfree.min.js
156 lines (156 loc) · 8.45 KB
/
prefixfree.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/**
* StyleFix 1.0.3 & PrefixFree 1.0.7
* @author Lea Verou
* MIT license
*/
(function() {
function t(e, t) {
return [].slice.call((t || document).querySelectorAll(e)) }
if (!window.addEventListener) return;
var e = window.StyleFix = { link: function(t) {
try {
if (t.rel !== "stylesheet" || t.hasAttribute("data-noprefix")) return } catch (n) {
return }
var r = t.href || t.getAttribute("data-href"),
i = r.replace(/[^\/]+$/, ""),
s = t.parentNode,
o = new XMLHttpRequest,
u;
o.onreadystatechange = function() { o.readyState === 4 && u() };
u = function() {
var n = o.responseText;
if (n && t.parentNode && (!o.status || o.status < 400 || o.status > 600)) { n = e.fix(n, !0, t);
if (i) { n = n.replace(/url\(\s*?((?:"|')?)(.+?)\1\s*?\)/gi, function(e, t, n) {
return /^([a-z]{3,10}:|\/|#)/i.test(n) ? e : 'url("' + i + n + '")' });
var r = i.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g, "\\$1");
n = n.replace(RegExp("\\b(behavior:\\s*?url\\('?\"?)" + r, "gi"), "$1") }
var u = document.createElement("style");
u.textContent = n;
u.media = t.media;
u.disabled = t.disabled;
u.setAttribute("data-href", t.getAttribute("href"));
s.insertBefore(u, t);
s.removeChild(t);
u.media = t.media } };
try { o.open("GET", r);
o.send(null) } catch (n) {
if (typeof XDomainRequest != "undefined") { o = new XDomainRequest;
o.onerror = o.onprogress = function() {};
o.onload = u;
o.open("GET", r);
o.send(null) } }
t.setAttribute("data-inprogress", "") }, styleElement: function(t) {
if (t.hasAttribute("data-noprefix")) return;
var n = t.disabled;
t.textContent = e.fix(t.textContent, !0, t);
t.disabled = n }, styleAttribute: function(t) {
var n = t.getAttribute("style");
n = e.fix(n, !1, t);
t.setAttribute("style", n) }, process: function() { t('link[rel="stylesheet"]:not([data-inprogress])').forEach(StyleFix.link);
t("style").forEach(StyleFix.styleElement);
t("[style]").forEach(StyleFix.styleAttribute) }, register: function(t, n) {
(e.fixers = e.fixers || []).splice(n === undefined ? e.fixers.length : n, 0, t) }, fix: function(t, n, r) {
for (var i = 0; i < e.fixers.length; i++) t = e.fixers[i](t, n, r) || t;
return t }, camelCase: function(e) {
return e.replace(/-([a-z])/g, function(e, t) {
return t.toUpperCase() }).replace("-", "") }, deCamelCase: function(e) {
return e.replace(/[A-Z]/g, function(e) {
return "-" + e.toLowerCase() }) } };
(function() { setTimeout(function() { t('link[rel="stylesheet"]').forEach(StyleFix.link) }, 10);
document.addEventListener("DOMContentLoaded", StyleFix.process, !1) })() })();
(function(e) {
function t(e, t, r, i, s) { e = n[e];
if (e.length) {
var o = RegExp(t + "(" + e.join("|") + ")" + r, "gi");
s = s.replace(o, i) }
return s }
if (!window.StyleFix || !window.getComputedStyle) return;
var n = window.PrefixFree = { prefixCSS: function(e, r, i) {
var s = n.prefix;
n.functions.indexOf("linear-gradient") > -1 && (e = e.replace(/(\s|:|,)(repeating-)?linear-gradient\(\s*(-?\d*\.?\d*)deg/ig, function(e, t, n, r) {
return t + (n || "") + "linear-gradient(" + (90 - r) + "deg" }));
e = t("functions", "(\\s|:|,)", "\\s*\\(", "$1" + s + "$2(", e);
e = t("keywords", "(\\s|:)", "(\\s|;|\\}|$)", "$1" + s + "$2$3", e);
e = t("properties", "(^|\\{|\\s|;)", "\\s*:", "$1" + s + "$2:", e);
if (n.properties.length) {
var o = RegExp("\\b(" + n.properties.join("|") + ")(?!:)", "gi");
e = t("valueProperties", "\\b", ":(.+?);", function(e) {
return e.replace(o, s + "$1") }, e) }
if (r) { e = t("selectors", "", "\\b", n.prefixSelector, e);
e = t("atrules", "@", "\\b", "@" + s + "$1", e) }
e = e.replace(RegExp("-" + s, "g"), "-");
e = e.replace(/-\*-(?=[a-z]+)/gi, n.prefix);
return e }, property: function(e) {
return (n.properties.indexOf(e) ? n.prefix : "") + e }, value: function(e, r) { e = t("functions", "(^|\\s|,)", "\\s*\\(", "$1" + n.prefix + "$2(", e);
e = t("keywords", "(^|\\s)", "(\\s|$)", "$1" + n.prefix + "$2$3", e);
return e }, prefixSelector: function(e) {
return e.replace(/^:{1,2}/, function(e) {
return e + n.prefix }) }, prefixProperty: function(e, t) {
var r = n.prefix + e;
return t ? StyleFix.camelCase(r) : r } };
(function() {
var e = {},
t = [],
r = {},
i = getComputedStyle(document.documentElement, null),
s = document.createElement("div").style,
o = function(n) {
if (n.charAt(0) === "-") { t.push(n);
var r = n.split("-"),
i = r[1];
e[i] = ++e[i] || 1;
while (r.length > 3) { r.pop();
var s = r.join("-");
u(s) && t.indexOf(s) === -1 && t.push(s) } } },
u = function(e) {
return StyleFix.camelCase(e) in s };
if (i.length > 0)
for (var a = 0; a < i.length; a++) o(i[a]);
else
for (var f in i) o(StyleFix.deCamelCase(f));
var l = { uses: 0 };
for (var c in e) {
var h = e[c];
l.uses < h && (l = { prefix: c, uses: h }) }
n.prefix = "-" + l.prefix + "-";
n.Prefix = StyleFix.camelCase(n.prefix);
n.properties = [];
for (var a = 0; a < t.length; a++) {
var f = t[a];
if (f.indexOf(n.prefix) === 0) {
var p = f.slice(n.prefix.length);
u(p) || n.properties.push(p) } }
n.Prefix == "Ms" && !("transform" in s) && !("MsTransform" in s) && "msTransform" in s && n.properties.push("transform", "transform-origin");
n.properties.sort() })();
(function() {
function i(e, t) { r[t] = "";
r[t] = e;
return !!r[t] }
var e = { "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%" } };
e["repeating-linear-gradient"] = e["repeating-radial-gradient"] = e["radial-gradient"] = e["linear-gradient"];
var t = { initial: "color", "zoom-in": "cursor", "zoom-out": "cursor", box: "display", flexbox: "display", "inline-flexbox": "display", flex: "display", "inline-flex": "display" };
n.functions = [];
n.keywords = [];
var r = document.createElement("div").style;
for (var s in e) {
var o = e[s],
u = o.property,
a = s + "(" + o.params + ")";!i(a, u) && i(n.prefix + a, u) && n.functions.push(s) }
for (var f in t) {
var u = t[f];!i(f, u) && i(n.prefix + f, u) && n.keywords.push(f) } })();
(function() {
function s(e) { i.textContent = e + "{}";
return !!i.sheet.cssRules.length }
var t = { ":read-only": null, ":read-write": null, ":any-link": null, "::selection": null },
r = { keyframes: "name", viewport: null, document: 'regexp(".")' };
n.selectors = [];
n.atrules = [];
var i = e.appendChild(document.createElement("style"));
for (var o in t) {
var u = o + (t[o] ? "(" + t[o] + ")" : "");!s(u) && s(n.prefixSelector(u)) && n.selectors.push(o) }
for (var a in r) {
var u = a + " " + (r[a] || "");!s("@" + u) && s("@" + n.prefix + u) && n.atrules.push(a) }
e.removeChild(i) })();
n.valueProperties = ["transition", "transition-property"];
e.className += " " + n.prefix;
StyleFix.register(n.prefixCSS) })(document.documentElement);