efront 3.8.7 → 3.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pivot/api.yml +2 -0
- package/apps/pivot/auth/login.js +3 -6
- package/apps/pivot/main.js +7 -0
- package/apps/pivot/task/invoke.html +17 -0
- package/apps/pivot/task/invoke.js +37 -0
- package/apps/pivot/task/invoke.less +23 -0
- package/apps/pivot/task/list.js +9 -1
- package/coms/basic/loader.js +1 -1
- package/coms/basic/refilm_decode.js +1 -1
- package/coms/basic/renderExpress.js +101 -0
- package/coms/crypt/encode62.js +1 -1
- package/coms/frame/edit.html +1 -1
- package/coms/zimoli/colorlabel.less +1 -1
- package/coms/zimoli/colorpicker.js +3 -1
- package/coms/zimoli/data.js +2 -2
- package/coms/zimoli/encode62.js +1 -1
- package/coms/zimoli/getName.js +9 -0
- package/coms/zimoli/getValue.js +10 -3
- package/coms/zimoli/model.js +17 -1
- package/coms/zimoli/prepare.js +1 -0
- package/coms/zimoli/radio.js +3 -3
- package/coms/zimoli/render.js +3 -15
- package/coms/zimoli/table.html +1 -1
- package/coms/zimoli/zimoli.js +33 -27
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/compile/downLevel.js +0 -11
package/apps/pivot/api.yml
CHANGED
package/apps/pivot/auth/login.js
CHANGED
|
@@ -13,7 +13,8 @@ function main() {
|
|
|
13
13
|
});
|
|
14
14
|
renderWithDefaults(page, {
|
|
15
15
|
fields, data: {
|
|
16
|
-
host: location.host,
|
|
16
|
+
host: data.getInstance("base").host || location.host,
|
|
17
|
+
|
|
17
18
|
}, pending: false
|
|
18
19
|
});
|
|
19
20
|
on("submit")(page, async function () {
|
|
@@ -24,14 +25,10 @@ function main() {
|
|
|
24
25
|
try {
|
|
25
26
|
var login = await data.getApi("login");
|
|
26
27
|
login.base = location.protocol + "//" + parseURL(this.$scope.data.host).host + "/";
|
|
27
|
-
|
|
28
|
+
data.setInstance("base", { base: login.base, host: parseURL(login.base).host });
|
|
28
29
|
var info = await data.from(login, {
|
|
29
30
|
a: encode62.timeencode(encode62.geta(password))
|
|
30
31
|
}).loading_promise;
|
|
31
|
-
var apimap = await data.getConfig();
|
|
32
|
-
for (var k in apimap) {
|
|
33
|
-
apimap[k].base = login.base;
|
|
34
|
-
}
|
|
35
32
|
info = encode62.timeupdate(info);
|
|
36
33
|
data.setSource({ authorization: info });
|
|
37
34
|
user.login({})
|
package/apps/pivot/main.js
CHANGED
|
@@ -4,6 +4,13 @@ var token = data.getSource('authorization');
|
|
|
4
4
|
if (token) {
|
|
5
5
|
user.login({});
|
|
6
6
|
}
|
|
7
|
+
data.bindInstance("base", async function (base) {
|
|
8
|
+
cross.addDirect(base.base);
|
|
9
|
+
var apimap = await data.getConfig();
|
|
10
|
+
for (var k in apimap) {
|
|
11
|
+
apimap[k].base = base.base;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
7
14
|
setInterval(function () {
|
|
8
15
|
var auth = data.getSource('authorization');
|
|
9
16
|
if (!auth) return;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<div head>
|
|
2
|
+
<span -text="task.name"></span>
|
|
3
|
+
(<span -text="task.key"></span>)
|
|
4
|
+
<close @click="remove()"></close>
|
|
5
|
+
</div>
|
|
6
|
+
<div body>
|
|
7
|
+
<div class="left">
|
|
8
|
+
<field -repeat="f in fields" -src="[f,data]"></field>
|
|
9
|
+
<pre -text="task.code"></pre>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="right" :class="{error:error}">
|
|
12
|
+
<pre -text="output"></pre>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
<div foot>
|
|
16
|
+
<btn @click="run">执行</btn>
|
|
17
|
+
</div>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function main(a) {
|
|
2
|
+
var page = view();
|
|
3
|
+
page.innerHTML = template;
|
|
4
|
+
drag.on(page.firstChild, page);
|
|
5
|
+
var fields = data.from("params", { key: a.key }, function (a) {
|
|
6
|
+
return a ? JSON.parse(encode62.timedecode(a)) : [];
|
|
7
|
+
});
|
|
8
|
+
var taskid = 0;
|
|
9
|
+
renderWithDefaults(page, {
|
|
10
|
+
remove() {
|
|
11
|
+
remove(page);
|
|
12
|
+
},
|
|
13
|
+
data: {},
|
|
14
|
+
fields: fields,
|
|
15
|
+
task: a,
|
|
16
|
+
output: '',
|
|
17
|
+
error: false,
|
|
18
|
+
async run() {
|
|
19
|
+
var id = ++taskid;
|
|
20
|
+
this.output = "正在执行..";
|
|
21
|
+
this.error = false;
|
|
22
|
+
var params = JSON.stringify(this.data);
|
|
23
|
+
try {
|
|
24
|
+
var res = await data.from("invoke", { key: a.key, params: encode62.timeencode(params) }, function (a) {
|
|
25
|
+
return a ? encode62.timedecode(a) : '完成!';
|
|
26
|
+
});
|
|
27
|
+
if (id !== taskid) return;
|
|
28
|
+
this.output = res;
|
|
29
|
+
} catch (e) {
|
|
30
|
+
this.output = String(e);
|
|
31
|
+
this.error = true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
resize.on(page);
|
|
36
|
+
return page;
|
|
37
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
& {
|
|
2
|
+
position: absolute;
|
|
3
|
+
width: 800px;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
>[body]>div {
|
|
7
|
+
display: inline-block;
|
|
8
|
+
width: 50%;
|
|
9
|
+
vertical-align: top;
|
|
10
|
+
overflow: auto;
|
|
11
|
+
font-size: 12px;
|
|
12
|
+
border-bottom: 50px solid transparent;
|
|
13
|
+
padding: 0 10px;
|
|
14
|
+
|
|
15
|
+
&.right {
|
|
16
|
+
background: #000;
|
|
17
|
+
color: #fff;
|
|
18
|
+
height: 100%;
|
|
19
|
+
}
|
|
20
|
+
&.error{
|
|
21
|
+
color: #c26;
|
|
22
|
+
}
|
|
23
|
+
}
|
package/apps/pivot/task/list.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
plist.bind(null, '任务管理', "task", refilm`
|
|
2
2
|
*任务ID/key 100
|
|
3
3
|
*任务名/name 100
|
|
4
|
-
|
|
4
|
+
*是否启用/status radio [不启用,启用]
|
|
5
5
|
任务代码/code text
|
|
6
|
+
执行/ - ${[{
|
|
7
|
+
when(o) {
|
|
8
|
+
return o.status === 1;
|
|
9
|
+
},
|
|
10
|
+
name: "执行", do(o) {
|
|
11
|
+
popup("/task/invoke", o);
|
|
12
|
+
}
|
|
13
|
+
}]}
|
|
6
14
|
`, '/task/edit');
|
package/coms/basic/loader.js
CHANGED
|
@@ -320,7 +320,7 @@ function parse(piece) {
|
|
|
320
320
|
name = name.slice(0, commaindex);
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
|
-
[name, key] = scanSlant(name, '/');
|
|
323
|
+
[name, key] = scanSlant(name, '/', 0, name.length + 1);
|
|
324
324
|
if (key === undefined && !/^(title|label|headline)$/i.test(type)) key = name;
|
|
325
325
|
}
|
|
326
326
|
if (/^[a-z\d]+\/?\d+$/i.test(type)) {
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
function createSeek(express) {
|
|
2
|
+
var dist;
|
|
3
|
+
express.forEach(function (search) {
|
|
4
|
+
if (dist) {
|
|
5
|
+
if (/[\=]/.test(dist)) dist = `(${dist})`;
|
|
6
|
+
dist = `${dist}!==void 0&&${dist}!==null?${dist}${search}:''`
|
|
7
|
+
} else {
|
|
8
|
+
dist = search;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
return dist;
|
|
12
|
+
}
|
|
13
|
+
function main(express) {
|
|
14
|
+
if (!/\?\s*\.(?=[^\d])/.test(express)) return express;
|
|
15
|
+
var reg = /\\[\s\S]|\?\s*(\.(?!\d))|[\:\,\+\=\-\!%\^\|\/\&\*\!\;\?\>\<~\{\}\[\]\(\)'"`\s]/g;
|
|
16
|
+
var cache = [], queue = [];
|
|
17
|
+
var exp = [];
|
|
18
|
+
var instr = false;
|
|
19
|
+
var lastIndex = 0;
|
|
20
|
+
var add_exp = function (s) {
|
|
21
|
+
if (!exp.length) exp.push(s);
|
|
22
|
+
else {
|
|
23
|
+
var e = exp[exp.length - 1];
|
|
24
|
+
if (!/[\.]\s*$/.test(e) && !/^\s*[\.'"`\[\(]/.test(s)) {
|
|
25
|
+
queue.push(createSeek(exp));
|
|
26
|
+
exp.splice(0, exp.length, '');
|
|
27
|
+
e = '';
|
|
28
|
+
}
|
|
29
|
+
if (/\.$/.test(e) && /^[\[\("'`]/.test(s)) {
|
|
30
|
+
e = e.replace(/\.$/, '');
|
|
31
|
+
}
|
|
32
|
+
e += s;
|
|
33
|
+
exp[exp.length - 1] = e;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var push_quote = function (m) {
|
|
37
|
+
add_exp(m);
|
|
38
|
+
cache.push(queue, exp);
|
|
39
|
+
queue = [];
|
|
40
|
+
exp = [];
|
|
41
|
+
};
|
|
42
|
+
var pop_quote = function (m) {
|
|
43
|
+
add_punc('');
|
|
44
|
+
exp = cache.pop();
|
|
45
|
+
var e = queue.join("") + m;
|
|
46
|
+
exp[exp.length - 1] += e;
|
|
47
|
+
queue = cache.pop();
|
|
48
|
+
};
|
|
49
|
+
var add_punc = function (m) {
|
|
50
|
+
if (exp.length) {
|
|
51
|
+
var temp = createSeek(exp);
|
|
52
|
+
queue.push(exp.length > 1 ? `(${temp})` : temp, m);
|
|
53
|
+
exp = [];
|
|
54
|
+
} else if (queue.length) {
|
|
55
|
+
queue[queue.length - 1] += m;
|
|
56
|
+
} else {
|
|
57
|
+
queue.push(m);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
do {
|
|
62
|
+
var match = reg.exec(express);
|
|
63
|
+
if (!match) break;
|
|
64
|
+
var index = match.index;
|
|
65
|
+
var m = match[0];
|
|
66
|
+
var isstr = false;
|
|
67
|
+
if (/['"`\/]/.test(m)) {
|
|
68
|
+
if (instr === m) instr = false;
|
|
69
|
+
else if (!instr) instr = m;
|
|
70
|
+
}
|
|
71
|
+
if (instr) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (/['"`\/\s]/.test(m)) {
|
|
75
|
+
isstr = true;
|
|
76
|
+
index++;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
var str = express.slice(lastIndex, index);
|
|
80
|
+
if (str) {
|
|
81
|
+
add_exp(str);
|
|
82
|
+
}
|
|
83
|
+
lastIndex = match.index + m.length;
|
|
84
|
+
if (match[1]) {
|
|
85
|
+
exp.push(match[1]);
|
|
86
|
+
}
|
|
87
|
+
else if (/[\[\{\(]/.test(m)) {
|
|
88
|
+
push_quote(m);
|
|
89
|
+
}
|
|
90
|
+
else if (/[\]\}\)]/.test(m)) {
|
|
91
|
+
pop_quote(m);
|
|
92
|
+
}
|
|
93
|
+
else if (!isstr) {
|
|
94
|
+
add_punc(m);
|
|
95
|
+
}
|
|
96
|
+
} while (true);
|
|
97
|
+
var s = express.slice(lastIndex);
|
|
98
|
+
if (s) add_exp(s);
|
|
99
|
+
add_punc('');
|
|
100
|
+
return queue.join("");
|
|
101
|
+
}
|
package/coms/crypt/encode62.js
CHANGED
|
@@ -43,7 +43,7 @@ Object.assign(encode62, {
|
|
|
43
43
|
var time_rest = time_stamp % time_delta;
|
|
44
44
|
var time_rest_str = time_rest.toString(36);
|
|
45
45
|
var time_delta_str = time_delta.toString(36);
|
|
46
|
-
string = encodeURIComponent(string).replace(/\./g, '..').replace(/%/g, '.');
|
|
46
|
+
string = encodeURIComponent(string).replace(/\./g, '..').replace(/[\!'\(\)~]/g, a => escape(a)).replace(/%/g, '.');
|
|
47
47
|
return this.encode62(string, time_stamp.toString(36)) + repeat("0", time_delta_str.length - time_rest_str.length) + time_rest_str;
|
|
48
48
|
},
|
|
49
49
|
timeupdate(string) {
|
package/coms/frame/edit.html
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<span v-text="origin?'修改':'添加'"></span><span -text="title"></span>
|
|
3
3
|
</div>
|
|
4
4
|
<div body>
|
|
5
|
-
<field v-if="!f.
|
|
5
|
+
<field v-if="!f.hidden" -repeat="f in fields" ng-src="[f,data]"></field>
|
|
6
6
|
</div>
|
|
7
7
|
<div foot>
|
|
8
8
|
<btn @click="remove()" class="white">取消</btn>
|
|
@@ -2,7 +2,8 @@ function main(element = document.createElement("div")) {
|
|
|
2
2
|
element.innerHTML = colorpicker;
|
|
3
3
|
var saved_value;
|
|
4
4
|
var selector = element.firstChild;
|
|
5
|
-
|
|
5
|
+
var pad = colorpad();
|
|
6
|
+
select(selector, pad, false, 'y');
|
|
6
7
|
render(element, {
|
|
7
8
|
a: button,
|
|
8
9
|
colorlabel,
|
|
@@ -25,6 +26,7 @@ function main(element = document.createElement("div")) {
|
|
|
25
26
|
element.setValue = function (value) {
|
|
26
27
|
element.value = value;
|
|
27
28
|
cast(selector, value);
|
|
29
|
+
pad.setValue(value);
|
|
28
30
|
};
|
|
29
31
|
return element;
|
|
30
32
|
}
|
package/coms/zimoli/data.js
CHANGED
|
@@ -73,7 +73,7 @@ const formulaters = {
|
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
75
|
|
|
76
|
-
function getErrorMessage(error) {
|
|
76
|
+
function getErrorMessage(error = this) {
|
|
77
77
|
if (!isObject(error)) return String(error);
|
|
78
78
|
if (error instanceof Error) return String(error);
|
|
79
79
|
var words = "reason,message,desc,descption,msg,err,error,data".split(',');
|
|
@@ -550,7 +550,7 @@ var privates = {
|
|
|
550
550
|
}).error(xhr => {
|
|
551
551
|
try {
|
|
552
552
|
var e = getErrorMessage(parseData(xhr.response || xhr.responseText || xhr.statusText || xhr.status));
|
|
553
|
-
oh({ status: xhr.status, error: e })
|
|
553
|
+
oh({ status: xhr.status, error: e, toString: getErrorMessage })
|
|
554
554
|
} catch (error) {
|
|
555
555
|
oh(error);
|
|
556
556
|
}
|
package/coms/zimoli/encode62.js
CHANGED
|
@@ -33,7 +33,7 @@ var encode62 = {
|
|
|
33
33
|
var time_rest = time_stamp % time_delta;
|
|
34
34
|
var time_rest_str = time_rest.toString(36);
|
|
35
35
|
var time_delta_str = time_delta.toString(36);
|
|
36
|
-
string = encodeURIComponent(string).replace(/\./g, '..').replace(/%/g, '.');
|
|
36
|
+
string = encodeURIComponent(string).replace(/\./g, '..').replace(/[\!'\(\)~]/g, a => escape(a)).replace(/%/g, '.');
|
|
37
37
|
return this.encode(string, time_stamp.toString(36)) + repeat("0", time_delta_str.length - time_rest_str.length) + time_rest_str;
|
|
38
38
|
},
|
|
39
39
|
timeupdate(string) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var hasOwnProperty = {}.hasOwnProperty;
|
|
2
|
+
function getName(o) {
|
|
3
|
+
if (hasOwnProperty.call(o, 'toString')) return o.toString();
|
|
4
|
+
if ("name" in o) return o.name;
|
|
5
|
+
if ("label" in o) return o.label;
|
|
6
|
+
if ("value" in o) return o.value;
|
|
7
|
+
if (hasOwnProperty.call(o, 'valueOf')) return o.valueOf();
|
|
8
|
+
return o;
|
|
9
|
+
}
|
package/coms/zimoli/getValue.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return
|
|
1
|
+
var hasOwnProperty = {}.hasOwnProperty;
|
|
2
|
+
function getValue(o = this) {
|
|
3
|
+
if (!o) return o;
|
|
4
|
+
if (isFunction(o.getValue)) return o.getValue();
|
|
5
|
+
if (hasOwnProperty.call(o, 'valueOf')) return o.valueOf();
|
|
6
|
+
if ("key" in o) return o.key;
|
|
7
|
+
if ("value" in o) return o.value;
|
|
8
|
+
if (hasOwnProperty.call(o, 'toString')) return o.toString();
|
|
9
|
+
if (!isEmpty(o.id)) return o.id;
|
|
10
|
+
return o;
|
|
4
11
|
}
|
package/coms/zimoli/model.js
CHANGED
|
@@ -12,6 +12,7 @@ var rebuildOptions = function () {
|
|
|
12
12
|
var new_options = seek(data, options_from);
|
|
13
13
|
if (new_options !== options) {
|
|
14
14
|
field.options = new_options;
|
|
15
|
+
delete field.optionsMap;
|
|
15
16
|
render.refresh();
|
|
16
17
|
}
|
|
17
18
|
};
|
|
@@ -198,7 +199,22 @@ function main(elem) {
|
|
|
198
199
|
elem.innerHTML = '<span ng-bind=get()></span>';
|
|
199
200
|
render(elem, {
|
|
200
201
|
get() {
|
|
201
|
-
|
|
202
|
+
var value = seek(data, field.key);
|
|
203
|
+
if (field.options) {
|
|
204
|
+
if (!field.optionsMap) {
|
|
205
|
+
var map = Object.create(null);
|
|
206
|
+
for (var o of field.options) {
|
|
207
|
+
var v = getValue(o);
|
|
208
|
+
map[v] = o;
|
|
209
|
+
}
|
|
210
|
+
field.optionsMap = map;
|
|
211
|
+
}
|
|
212
|
+
var map = field.optionsMap;
|
|
213
|
+
if (value in map) {
|
|
214
|
+
value = getName(map[value]);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return value;
|
|
202
218
|
}
|
|
203
219
|
});
|
|
204
220
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
zimoli.prepare;
|
package/coms/zimoli/radio.js
CHANGED
|
@@ -18,18 +18,18 @@ function main(elem = document.createElement("radio-group")) {
|
|
|
18
18
|
options,
|
|
19
19
|
select(a) {
|
|
20
20
|
this.options.active = a;
|
|
21
|
-
elem.value = a
|
|
21
|
+
elem.value = getValue(a);
|
|
22
22
|
dispatch(elem, 'change');
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
-
if (elem.value) {
|
|
25
|
+
if (!isEmpty(elem.value)) {
|
|
26
26
|
elem.setValue(elem.value);
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
elem.setValue = function (key) {
|
|
30
30
|
var { options } = this.$scope;
|
|
31
31
|
if (!(options instanceof Array)) return;
|
|
32
|
-
var index = options.map(a => a
|
|
32
|
+
var index = options.map(a => getValue(a)).indexOf(key);
|
|
33
33
|
options.active = options[index];
|
|
34
34
|
};
|
|
35
35
|
return elem;
|
package/coms/zimoli/render.js
CHANGED
|
@@ -56,20 +56,7 @@ var createGetter = function (search, isprop = true) {
|
|
|
56
56
|
var [withContext, searchContext] = search;
|
|
57
57
|
if (!searchContext) return function () { };
|
|
58
58
|
var ret = /\;/.test(searchContext) ? "" : "return ";
|
|
59
|
-
|
|
60
|
-
searchContext = searchContext.replace(variableReg, function (context) {
|
|
61
|
-
var dist;
|
|
62
|
-
context.split(/\?\s*\.(?=[^\d])/).forEach(function (search) {
|
|
63
|
-
if (dist) {
|
|
64
|
-
if (/[\=]/.test(dist)) dist = `(${dist})`;
|
|
65
|
-
dist = `${dist}!==void 0&&${dist}!==null?${dist}.${search}:''`
|
|
66
|
-
} else {
|
|
67
|
-
dist = search;
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
return dist.length > 1 ? `(${dist})` : context;
|
|
71
|
-
});
|
|
72
|
-
}
|
|
59
|
+
searchContext = renderExpress(searchContext);
|
|
73
60
|
if (isprop) {
|
|
74
61
|
return new Function('event', `${withContext}with(this.$scope){${ret}${searchContext}}`);
|
|
75
62
|
}
|
|
@@ -94,7 +81,7 @@ var parseRepeat = function (expression) {
|
|
|
94
81
|
var res = reg.exec(expression);
|
|
95
82
|
if (!res) return res;
|
|
96
83
|
var [_, i, k, r, s, t] = res;
|
|
97
|
-
var keyName, itemName, indexName, trackBy = t, srcName = s;
|
|
84
|
+
var keyName, itemName, indexName, trackBy = t, srcName = renderExpress(s);
|
|
98
85
|
switch (r) {
|
|
99
86
|
case "in":
|
|
100
87
|
if (i) itemName = i;
|
|
@@ -289,6 +276,7 @@ var parseIfWithRepeat = function (ifExpression, repeatExpression) {
|
|
|
289
276
|
if (reg.lastIndex < savedIndex) break;
|
|
290
277
|
run();
|
|
291
278
|
}
|
|
279
|
+
if (savedIndex < ifExpression.length) rest.push(ifExpression.slice(savedIndex))
|
|
292
280
|
var beforeRepeat = [], afterRepeat = [];
|
|
293
281
|
rest.forEach(function (result) {
|
|
294
282
|
var match = false;
|
package/coms/zimoli/table.html
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<tr>
|
|
10
10
|
<td -repeat="f in fields">
|
|
11
11
|
<model -if="f.key" :field=f :data=d readonly ></model>
|
|
12
|
-
<a on-click="o.do(d)" -if="!f.key&&f.options" _type="o.type instanceof Function?o.type(d):o.type"
|
|
12
|
+
<a on-click="o.do(d)" -if="!f.key&&f.options&&(!o.when||o.when(d))" _type="o.type instanceof Function?o.type(d):o.type"
|
|
13
13
|
-repeat="o in f.options">
|
|
14
14
|
<span -text="o.name instanceof Function?o.name(d):o.name"></span>
|
|
15
15
|
</a>
|
package/coms/zimoli/zimoli.js
CHANGED
|
@@ -185,32 +185,8 @@ var loading_tree = {};
|
|
|
185
185
|
var getpgpath = function (pagepath) {
|
|
186
186
|
return /^[@#!]/.test(pagepath) ? pagepath.slice(1) : pagepath;
|
|
187
187
|
};
|
|
188
|
-
function
|
|
188
|
+
function createState(pgpath) {
|
|
189
189
|
var pgpath = getpgpath(pgpath);
|
|
190
|
-
if (page_generators[pgpath]) {
|
|
191
|
-
if (isFunction(ok)) {
|
|
192
|
-
var res = page_generators[pgpath];
|
|
193
|
-
if (!res.roles) {
|
|
194
|
-
ok(res);
|
|
195
|
-
} else {
|
|
196
|
-
prepare(user.loginPath, _ => {
|
|
197
|
-
ok(res);
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
if (loading_tree[pgpath]) {
|
|
204
|
-
if (isFunction(ok)) {
|
|
205
|
-
loading_tree[pgpath].push(ok);
|
|
206
|
-
}
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
loading_tree[pgpath] = [];
|
|
210
|
-
if (isFunction(ok)) {
|
|
211
|
-
loading_tree[pgpath].push(ok);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
190
|
var _zimoli_state_key = _zimoli_state_prefix + pgpath;
|
|
215
191
|
var state = function state(condition, setAsAdditional = condition !== null) {
|
|
216
192
|
var state_string = hostoryStorage.getItem(_zimoli_state_key);
|
|
@@ -242,6 +218,34 @@ function prepare(pgpath, ok) {
|
|
|
242
218
|
}
|
|
243
219
|
return state_object;
|
|
244
220
|
};
|
|
221
|
+
return state;
|
|
222
|
+
}
|
|
223
|
+
function prepare(pgpath, ok) {
|
|
224
|
+
var pgpath = getpgpath(pgpath);
|
|
225
|
+
if (page_generators[pgpath]) {
|
|
226
|
+
if (isFunction(ok)) {
|
|
227
|
+
var res = page_generators[pgpath];
|
|
228
|
+
if (!res.roles) {
|
|
229
|
+
ok(res);
|
|
230
|
+
} else {
|
|
231
|
+
prepare(user.loginPath, _ => {
|
|
232
|
+
ok(res);
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (loading_tree[pgpath]) {
|
|
239
|
+
if (isFunction(ok)) {
|
|
240
|
+
loading_tree[pgpath].push(ok);
|
|
241
|
+
}
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
loading_tree[pgpath] = [];
|
|
245
|
+
if (isFunction(ok)) {
|
|
246
|
+
loading_tree[pgpath].push(ok);
|
|
247
|
+
}
|
|
248
|
+
var state = createState(pgpath);
|
|
245
249
|
state.state = state;
|
|
246
250
|
var _with_elements = [];
|
|
247
251
|
state.with = function (element) {
|
|
@@ -299,6 +303,7 @@ function prepare(pgpath, ok) {
|
|
|
299
303
|
return Promise.resolve(res);
|
|
300
304
|
};
|
|
301
305
|
});
|
|
306
|
+
|
|
302
307
|
var prepares = [];
|
|
303
308
|
state.prepare = state.go.prepare = function (urls) {
|
|
304
309
|
prepares.push.apply(prepares, [].concat(urls).map(state.path));
|
|
@@ -352,8 +357,8 @@ function prepare(pgpath, ok) {
|
|
|
352
357
|
delete loading_tree[pgpath];
|
|
353
358
|
};
|
|
354
359
|
return init(pgpath, function (pg) {
|
|
355
|
-
|
|
356
360
|
if (!pg) return;
|
|
361
|
+
extendIfNeeded(pg, state);
|
|
357
362
|
if (roles) return prepare(user.loginPath, () => emit(pg));
|
|
358
363
|
emit(pg);
|
|
359
364
|
}, state);
|
|
@@ -654,4 +659,5 @@ zimoli.clearHistory = function () {
|
|
|
654
659
|
zimoli.getCurrentHistory = function () {
|
|
655
660
|
return history[current_history];
|
|
656
661
|
};
|
|
657
|
-
zimoli.inithash = locationInitHash;
|
|
662
|
+
zimoli.inithash = locationInitHash;
|
|
663
|
+
zimoli.createState = createState;
|