/
inline.js
78 lines (65 loc) · 2.17 KB
/
inline.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
(function(window){
var formulas = {
t: 'top',
b: 'bottom',
l: 'left',
r: 'right',
w: 'width',
h: 'height',
p: 'padding',
m: 'margin',
br: 'borderRadius',
fs: 'fontSize',
fw: 'fontWeight',
lh: 'lineHeight',
mt: 'marginTop',
mb: 'marginBottom',
ml: 'marginLeft',
mr: 'marginRight',
pt: 'paddingTop',
pb: 'paddingBottom',
pl: 'paddingLeft',
pr: 'paddingRight'
};
var observer = new window.MutationObserver(function(mutations) {
mutations.forEach(function(mutationRecord) {
var element = mutationRecord.target;
element.lastClassName !== element.className && parseElementClasses(element);
element.lastClassName = element.className;
});
});
function useFormula(className) {
var pieces = className.match(/(^[a-z]{1,23})([0-9]{1,4})([pxempt\%]{1,2})?/);
var formula = pieces && formulas[pieces[1]];
var measure = pieces && pieces[3] || 'px';
return formula && {
key: formula,
value: pieces[2] + measure
};
};
function parseElementClasses(element) {
var classNames = element && element.className && element.className.split(' ') || [];
classNames.forEach(function(className) {
var style = useFormula(className);
style && style.key && (element.style[style.key] = style.value);
});
}
function apply(scopeElement, dontObserve) {
var scope = scopeElement || window.document;
var elements = scope.getElementsByTagName('*');
for (var i in elements) {
var element = elements[i];
if (typeof element === 'object') {
parseElementClasses(element);
!dontObserve && observer.observe(element, { attributes: true, attributeFilter: ['class'] });
}
}
};
if (typeof window === 'object' && window.document) {
return window.inlinejs = {
apply: apply,
formulas: formulas
};
}
throw new Error('Invalid environment');
})(window);