1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 | var comment_1 = tslib_1.__importDefault(require("../tree/comment"));
|
5 | var node_1 = tslib_1.__importDefault(require("../tree/node"));
|
6 | var dimension_1 = tslib_1.__importDefault(require("../tree/dimension"));
|
7 | var declaration_1 = tslib_1.__importDefault(require("../tree/declaration"));
|
8 | var expression_1 = tslib_1.__importDefault(require("../tree/expression"));
|
9 | var ruleset_1 = tslib_1.__importDefault(require("../tree/ruleset"));
|
10 | var selector_1 = tslib_1.__importDefault(require("../tree/selector"));
|
11 | var element_1 = tslib_1.__importDefault(require("../tree/element"));
|
12 | var quoted_1 = tslib_1.__importDefault(require("../tree/quoted"));
|
13 | var value_1 = tslib_1.__importDefault(require("../tree/value"));
|
14 | var getItemsFromNode = function (node) {
|
15 |
|
16 |
|
17 | var items = Array.isArray(node.value) ?
|
18 | node.value : Array(node);
|
19 | return items;
|
20 | };
|
21 | exports.default = {
|
22 | _SELF: function (n) {
|
23 | return n;
|
24 | },
|
25 | '~': function () {
|
26 | var expr = [];
|
27 | for (var _i = 0; _i < arguments.length; _i++) {
|
28 | expr[_i] = arguments[_i];
|
29 | }
|
30 | if (expr.length === 1) {
|
31 | return expr[0];
|
32 | }
|
33 | return new value_1.default(expr);
|
34 | },
|
35 | extract: function (values, index) {
|
36 |
|
37 | index = index.value - 1;
|
38 | return getItemsFromNode(values)[index];
|
39 | },
|
40 | length: function (values) {
|
41 | return new dimension_1.default(getItemsFromNode(values).length);
|
42 | },
|
43 | |
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 | range: function (start, end, step) {
|
52 | var from;
|
53 | var to;
|
54 | var stepValue = 1;
|
55 | var list = [];
|
56 | if (end) {
|
57 | to = end;
|
58 | from = start.value;
|
59 | if (step) {
|
60 | stepValue = step.value;
|
61 | }
|
62 | }
|
63 | else {
|
64 | from = 1;
|
65 | to = start;
|
66 | }
|
67 | for (var i = from; i <= to.value; i += stepValue) {
|
68 | list.push(new dimension_1.default(i, to.unit));
|
69 | }
|
70 | return new expression_1.default(list);
|
71 | },
|
72 | each: function (list, rs) {
|
73 | var _this = this;
|
74 | var rules = [];
|
75 | var newRules;
|
76 | var iterator;
|
77 | var tryEval = function (val) {
|
78 | if (val instanceof node_1.default) {
|
79 | return val.eval(_this.context);
|
80 | }
|
81 | return val;
|
82 | };
|
83 | if (list.value && !(list instanceof quoted_1.default)) {
|
84 | if (Array.isArray(list.value)) {
|
85 | iterator = list.value.map(tryEval);
|
86 | }
|
87 | else {
|
88 | iterator = [tryEval(list.value)];
|
89 | }
|
90 | }
|
91 | else if (list.ruleset) {
|
92 | iterator = tryEval(list.ruleset).rules;
|
93 | }
|
94 | else if (list.rules) {
|
95 | iterator = list.rules.map(tryEval);
|
96 | }
|
97 | else if (Array.isArray(list)) {
|
98 | iterator = list.map(tryEval);
|
99 | }
|
100 | else {
|
101 | iterator = [tryEval(list)];
|
102 | }
|
103 | var valueName = '@value';
|
104 | var keyName = '@key';
|
105 | var indexName = '@index';
|
106 | if (rs.params) {
|
107 | valueName = rs.params[0] && rs.params[0].name;
|
108 | keyName = rs.params[1] && rs.params[1].name;
|
109 | indexName = rs.params[2] && rs.params[2].name;
|
110 | rs = rs.rules;
|
111 | }
|
112 | else {
|
113 | rs = rs.ruleset;
|
114 | }
|
115 | for (var i = 0; i < iterator.length; i++) {
|
116 | var key = void 0;
|
117 | var value = void 0;
|
118 | var item = iterator[i];
|
119 | if (item instanceof declaration_1.default) {
|
120 | key = typeof item.name === 'string' ? item.name : item.name[0].value;
|
121 | value = item.value;
|
122 | }
|
123 | else {
|
124 | key = new dimension_1.default(i + 1);
|
125 | value = item;
|
126 | }
|
127 | if (item instanceof comment_1.default) {
|
128 | continue;
|
129 | }
|
130 | newRules = rs.rules.slice(0);
|
131 | if (valueName) {
|
132 | newRules.push(new declaration_1.default(valueName, value, false, false, this.index, this.currentFileInfo));
|
133 | }
|
134 | if (indexName) {
|
135 | newRules.push(new declaration_1.default(indexName, new dimension_1.default(i + 1), false, false, this.index, this.currentFileInfo));
|
136 | }
|
137 | if (keyName) {
|
138 | newRules.push(new declaration_1.default(keyName, key, false, false, this.index, this.currentFileInfo));
|
139 | }
|
140 | rules.push(new ruleset_1.default([new (selector_1.default)([new element_1.default("", '&')])], newRules, rs.strictImports, rs.visibilityInfo()));
|
141 | }
|
142 | return new ruleset_1.default([new (selector_1.default)([new element_1.default("", '&')])], rules, rs.strictImports, rs.visibilityInfo()).eval(this.context);
|
143 | }
|
144 | };
|
145 |
|
\ | No newline at end of file |