forked from osdio/gulp-react-native-css
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHandle.js
More file actions
76 lines (64 loc) · 1.54 KB
/
Handle.js
File metadata and controls
76 lines (64 loc) · 1.54 KB
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
var parse = require('css-parse');
var Handle = function (css) {
this.styleSheet = parse(css);
this.handles = [];
this.finalHandle = new Function();
};
Handle.prototype.use = function (properties, func) {
if (arguments.length == 1) {
this.handles.push({
properties: '*',
func: arguments[0]
});
return;
}
this.handles.push(
{
properties: properties,
func: func
}
);
};
Handle.prototype.do = function () {
var json = {};
var self = this;
this.styleSheet.stylesheet.rules.forEach(function (rule) {
if (rule.type !== 'rule') return;
rule.selectors.forEach(function (selector) {
selector = selector.replace(/\.|#/g, '');
var styles = (json[selector] = json[selector] || {});
rule.declarations.forEach(function (declaration) {
if (declaration.type !== 'declaration') return;
var keys = [{
key: declaration.property,
value: declaration.value
}];
for (var i = 0; i < self.handles.length; i++) {
var properties = self.handles[i].properties;
if (properties == "*") {
self.handles[i].func(keys);
}
if (_indexOf(declaration.property, properties)) {
keys = self.handles[i].func(keys);
}
}
self.finalHandle(styles, keys);
});
});
}
);
return JSON.stringify(json, null, 4);
};
Handle.prototype.final = function (func) {
this.finalHandle = func;
};
function _indexOf(value, arr) {
var flag = false;
for (var i = 0; i < arr.length; i++) {
if (value === arr[i]) {
return true
}
}
return flag;
}
module.exports = Handle;