@makano/rew 1.3.5 → 1.3.6
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/rew/pkgs/styleway.js +88 -0
- package/lib/rew/pkgs/web.js +2 -90
- package/package.json +1 -1
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
module.exports = () => ((styles) => {
|
3
|
+
let css = "";
|
4
|
+
const variables = {};
|
5
|
+
const mixins = {};
|
6
|
+
|
7
|
+
const parseValue = (v, self, name, vars) => {
|
8
|
+
const vs = {...variables, ...vars, name, ...Object.fromEntries(Object.entries(self).map(i => ['prop_'+i[0], i[1]]))};
|
9
|
+
return v.startsWith('@v') ? vs[v.split('@v')[1].trim()] : v
|
10
|
+
.toString()
|
11
|
+
.replace(/\$([A-Za-z0-9-_]+)/g, (_, name) => (vs)[name])
|
12
|
+
}
|
13
|
+
|
14
|
+
const declectProp = (value, name, selector, start, parent, self, vars = {}) => {
|
15
|
+
let prop = `${name}: `;
|
16
|
+
self.__parent = parent;
|
17
|
+
if (typeof value == 'object') {
|
18
|
+
prop += parseValue(value.default || 'unset', self, name, vars) + ';';
|
19
|
+
prop += '}\n';
|
20
|
+
for (let state in value) {
|
21
|
+
if (state == 'default') continue;
|
22
|
+
else if (state.startsWith('@media')) {
|
23
|
+
prop += `${state} { ${start} ${name}: ${parseValue(value[state], self, name, vars)}; } }\n`
|
24
|
+
} else if (state.startsWith(':')) {
|
25
|
+
prop += `${selector}${state} { ${name}: ${parseValue(value[state], self, name, vars)}; }\n`
|
26
|
+
}
|
27
|
+
}
|
28
|
+
prop += start;
|
29
|
+
} else {
|
30
|
+
let v = parseValue(value, self, name, vars);
|
31
|
+
if(typeof v == 'object') return declectProp(v, name, selector, start, parent, self, vars);
|
32
|
+
prop += v + ';';
|
33
|
+
}
|
34
|
+
return prop;
|
35
|
+
}
|
36
|
+
|
37
|
+
const declectNames = (names, $name, parent, values = {}) => {
|
38
|
+
const start = $name ? $name + ' {' : '';
|
39
|
+
let nameStyles = start;
|
40
|
+
for (let name in names) {
|
41
|
+
let selector = name.replace(/,/g, ', &').replace(/&/g, $name || '');
|
42
|
+
if (name == '@variables') {
|
43
|
+
for (let i in names[name]) {
|
44
|
+
variables[i] = names[name][i];
|
45
|
+
}
|
46
|
+
} else if (name.startsWith('@mixin')) {
|
47
|
+
const mame = name.split('@mixin')[1].trim();
|
48
|
+
const mname = mame.split('(')[0];
|
49
|
+
const args = mame.replace(mname, '').slice(1, -1);
|
50
|
+
mixins[mname] = {
|
51
|
+
args: args.split(','),
|
52
|
+
value: names[name]
|
53
|
+
}
|
54
|
+
} else if (name.startsWith('@keyframes')) {
|
55
|
+
nameStyles += $name ? '' : name + '{';
|
56
|
+
|
57
|
+
for(let keyFrame in names[name]){
|
58
|
+
nameStyles += declectNames(names[name][keyFrame], keyFrame, names[name], values);
|
59
|
+
}
|
60
|
+
|
61
|
+
if(!$name) nameStyles += '}\n';
|
62
|
+
} else if ($name) {
|
63
|
+
if (name.startsWith('&')) {
|
64
|
+
nameStyles += '}\n';
|
65
|
+
nameStyles += declectNames(names[name], selector, names, values);
|
66
|
+
nameStyles += start;
|
67
|
+
} else if(name.startsWith('@include')) {
|
68
|
+
const mame = names[name];
|
69
|
+
const mname = mame.split('(')[0];
|
70
|
+
const args = mame.replace(mname, '').slice(1, -1).split(',');
|
71
|
+
if(mixins[mname]){
|
72
|
+
nameStyles += declectNames(mixins[mname].value, selector, names, {...values, ...Object.fromEntries(mixins[mname].args.map((n, i) => [n, args[i]]))}).trim().replace('@include ', '').slice(1, -1);
|
73
|
+
}
|
74
|
+
} else {
|
75
|
+
nameStyles += declectProp(names[name], name, $name, start, parent || styles, names, values);
|
76
|
+
}
|
77
|
+
} else {
|
78
|
+
nameStyles += declectNames(names[name], selector, names, values);
|
79
|
+
}
|
80
|
+
}
|
81
|
+
if ($name) nameStyles += '}\n';
|
82
|
+
return nameStyles;
|
83
|
+
}
|
84
|
+
|
85
|
+
css += declectNames(styles);
|
86
|
+
|
87
|
+
return css.replace(/(.+) \{\}/g, '');
|
88
|
+
})
|
package/lib/rew/pkgs/web.js
CHANGED
@@ -4,7 +4,7 @@ const { compile } = require("../modules/compiler");
|
|
4
4
|
const { wait } = require("../functions/wait");
|
5
5
|
const { generateRandomID } = require("../functions/id");
|
6
6
|
const { REW_FILE_TYPE } = require("../const/ext");
|
7
|
-
|
7
|
+
const createStyles = require('./styleway')();
|
8
8
|
|
9
9
|
const selfClosingElements = new Set([
|
10
10
|
'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'source', 'track', 'wbr'
|
@@ -245,94 +245,6 @@ function renderToString(element, js = false) {
|
|
245
245
|
return js ? js === 'raw' ? eltJSON : JSON.stringify(eltJSON) : element instanceof TextNode ? `${type.text}` : `<${type.element}${propsString}>${selfClosingElements.has(type.element) ? '' : childrenHTML}${selfClosingElements.has(type.element) ? '' : `</${type.element}>`}`;
|
246
246
|
}
|
247
247
|
|
248
|
-
function createStyles(styles) {
|
249
|
-
let css = "";
|
250
|
-
const variables = {};
|
251
|
-
const mixins = {};
|
252
|
-
|
253
|
-
const parseValue = (v, self, name, vars) => {
|
254
|
-
const vs = {...variables, ...vars, name, ...Object.fromEntries(Object.entries(self).map(i => ['prop_'+i[0], i[1]]))};
|
255
|
-
return v.startsWith('@v') ? vs[v.split('@v')[1].trim()] : v
|
256
|
-
.toString()
|
257
|
-
.replace(/\$([A-Za-z0-9-_]+)/g, (_, name) => (vs)[name])
|
258
|
-
}
|
259
|
-
|
260
|
-
const declectProp = (value, name, selector, start, parent, self, vars = {}) => {
|
261
|
-
let prop = `${name}: `;
|
262
|
-
self.__parent = parent;
|
263
|
-
if (typeof value == 'object') {
|
264
|
-
prop += parseValue(value.default || 'unset', self, name, vars) + ';';
|
265
|
-
prop += '}\n';
|
266
|
-
for (let state in value) {
|
267
|
-
if (state == 'default') continue;
|
268
|
-
else if (state.startsWith('@media')) {
|
269
|
-
prop += `${state} { ${start} ${name}: ${parseValue(value[state], self, name, vars)}; } }\n`
|
270
|
-
} else if (state.startsWith(':')) {
|
271
|
-
prop += `${selector}${state} { ${name}: ${parseValue(value[state], self, name, vars)}; }\n`
|
272
|
-
}
|
273
|
-
}
|
274
|
-
prop += start;
|
275
|
-
} else {
|
276
|
-
let v = parseValue(value, self, name, vars);
|
277
|
-
if(typeof v == 'object') return declectProp(v, name, selector, start, parent, self, vars);
|
278
|
-
prop += v + ';';
|
279
|
-
}
|
280
|
-
return prop;
|
281
|
-
}
|
282
|
-
|
283
|
-
const declectNames = (names, $name, parent, values = {}) => {
|
284
|
-
const start = $name ? $name + ' {' : '';
|
285
|
-
let nameStyles = start;
|
286
|
-
for (let name in names) {
|
287
|
-
let selector = name.replace(/,/g, ', &').replace(/&/g, $name || '');
|
288
|
-
if (name == '@variables') {
|
289
|
-
for (let i in names[name]) {
|
290
|
-
variables[i] = names[name][i];
|
291
|
-
}
|
292
|
-
} else if (name.startsWith('@mixin')) {
|
293
|
-
const mame = name.split('@mixin')[1].trim();
|
294
|
-
const mname = mame.split('(')[0];
|
295
|
-
const args = mame.replace(mname, '').slice(1, -1);
|
296
|
-
mixins[mname] = {
|
297
|
-
args: args.split(','),
|
298
|
-
value: names[name]
|
299
|
-
}
|
300
|
-
} else if (name.startsWith('@keyframes')) {
|
301
|
-
nameStyles += $name ? '' : name + '{';
|
302
|
-
|
303
|
-
for(let keyFrame in names[name]){
|
304
|
-
nameStyles += declectNames(names[name][keyFrame], keyFrame, names[name], values);
|
305
|
-
}
|
306
|
-
|
307
|
-
if(!$name) nameStyles += '}\n';
|
308
|
-
} else if ($name) {
|
309
|
-
if (name.startsWith('&')) {
|
310
|
-
nameStyles += '}\n';
|
311
|
-
nameStyles += declectNames(names[name], selector, names, values);
|
312
|
-
nameStyles += start;
|
313
|
-
} else if(name.startsWith('@include')) {
|
314
|
-
const mame = names[name];
|
315
|
-
const mname = mame.split('(')[0];
|
316
|
-
const args = mame.replace(mname, '').slice(1, -1).split(',');
|
317
|
-
if(mixins[mname]){
|
318
|
-
nameStyles += declectNames(mixins[mname].value, selector, names, {...values, ...Object.fromEntries(mixins[mname].args.map((n, i) => [n, args[i]]))}).trim().replace('@include ', '').slice(1, -1);
|
319
|
-
}
|
320
|
-
} else {
|
321
|
-
nameStyles += declectProp(names[name], name, $name, start, parent || styles, names, values);
|
322
|
-
}
|
323
|
-
} else {
|
324
|
-
nameStyles += declectNames(names[name], selector, names, values);
|
325
|
-
}
|
326
|
-
}
|
327
|
-
if ($name) nameStyles += '}\n';
|
328
|
-
return nameStyles;
|
329
|
-
}
|
330
|
-
|
331
|
-
css += declectNames(styles);
|
332
|
-
|
333
|
-
return css.replace(/(.+) \{\}/g, '');
|
334
|
-
}
|
335
|
-
|
336
248
|
|
337
249
|
class Page extends Node {
|
338
250
|
constructor() {
|
@@ -556,7 +468,7 @@ module.exports = (context, importOptions) => {
|
|
556
468
|
}
|
557
469
|
invokeState(states, callback){
|
558
470
|
const statesMapped = states.map(i => i instanceof State ? `getState('${i.id}')` : (typeof i == "function" ? i.toString() : JSON.stringify(i)));
|
559
|
-
return `((${callback})(
|
471
|
+
return `((${callback})((typeof event !== "undefined" ? event : null), ...[${statesMapped}]))`;
|
560
472
|
}
|
561
473
|
async bundleCode(code, options){
|
562
474
|
return Web.prototype.bundle(generateRandomID(), {
|