efront 4.4.14 → 4.5.0
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/#/345/233/275/351/231/205/345/214/226.yml +53 -5
- package/apps/pivot/api.yml +3 -0
- package/apps/pivot/cert/main.xht +181 -0
- package/apps/pivot/cert/orders.xht +144 -0
- package/apps/pivot/menu.yml +1 -0
- package/coms/basic/assert.js +40 -16
- package/coms/basic/cross_.js +20 -3
- package/coms/basic/renderTags.js +23 -0
- package/coms/basic/shallowClone.js +8 -0
- package/coms/basic/shallowEqual.js +13 -4
- package/coms/basic/valid.js +15 -2
- package/coms/compile//347/264/240/351/246/250.js +2 -1
- package/coms/docs/codetext.xht +3 -3
- package/coms/frame/chat.js +1 -1
- package/coms/kugou/bindScroll.js +1 -1
- package/coms/kugou/krc.js +2 -2
- package/coms/layer/leftCenter.js +5 -5
- package/coms/pivot/acme2.js +185 -0
- package/coms/reptile/colored_console.js +5 -17
- package/coms/zimoli/appendChild.js +3 -2
- package/coms/zimoli/autofocus.js +2 -2
- package/coms/zimoli/button.less +4 -3
- package/coms/zimoli/checker.js +34 -15
- package/coms/zimoli/checker.less +2 -3
- package/coms/zimoli/container.js +20 -16
- package/coms/zimoli/data.js +64 -46
- package/coms/zimoli/field.js +3 -3
- package/coms/zimoli/field.less +8 -2
- package/coms/zimoli/filterTime.js +39 -8
- package/coms/zimoli/fromBase64.js +2 -0
- package/coms/zimoli/grid.js +2 -2
- package/coms/zimoli/isMounted.js +3 -3
- package/coms/zimoli/list.js +3 -3
- package/coms/zimoli/maps.js +1 -1
- package/coms/zimoli/menuList.js +1 -1
- package/coms/zimoli/model.js +41 -5
- package/coms/zimoli/on.js +4 -4
- package/coms/zimoli/remove.js +3 -3
- package/coms/zimoli/render.js +25 -33
- package/coms/zimoli/scrollbar.js +52 -19
- package/coms/zimoli/scrollbar.less +14 -2
- package/coms/zimoli/scrollbar_test.less +1 -0
- package/coms/zimoli/select.js +3 -3
- package/coms/zimoli/table.js +1 -1
- package/coms/zimoli/toBase64.js +16 -6
- package/coms/zimoli/view.js +19 -12
- package/coms/zimoli/view.less +5 -3
- package/docs/loader.js +1 -1
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/zimoli/data.js
CHANGED
|
@@ -98,7 +98,7 @@ var seekFromSource = function (obj, base) {
|
|
|
98
98
|
function getErrorMessage(error = this) {
|
|
99
99
|
if (!isObject(error)) return String(error);
|
|
100
100
|
if (error instanceof Error) return String(error);
|
|
101
|
-
var words = "reason,message,desc,descption,msg,err,error,data".split(',');
|
|
101
|
+
var words = "reason,message,desc,descption,msg,err,error,detail,data".split(',');
|
|
102
102
|
while (words.length) {
|
|
103
103
|
var a = words.shift();
|
|
104
104
|
if (error[a]) {
|
|
@@ -178,11 +178,10 @@ function getUrlParamsForApi(api, url) {
|
|
|
178
178
|
var cap = [];
|
|
179
179
|
var base = api.url.replace(/[\?\#][\s\S]*$/, '')
|
|
180
180
|
.replace(/[\.\*\+\-\[\]\{\}\(\)\\\/\!<\>\^]/g, '\\$&')
|
|
181
|
-
.replace(/\:\w
|
|
181
|
+
.replace(/\:\w+/g, function (a) {
|
|
182
182
|
cap.push(a.slice(1));
|
|
183
183
|
return r;
|
|
184
184
|
});
|
|
185
|
-
if (api.base) base = api.base + base;
|
|
186
185
|
if (/\/$/.test(base)) base += "?";
|
|
187
186
|
var params = {};
|
|
188
187
|
url = url.replace(/[\?#]*$/g, function (match) {
|
|
@@ -192,13 +191,14 @@ function getUrlParamsForApi(api, url) {
|
|
|
192
191
|
params[k] = v;
|
|
193
192
|
});
|
|
194
193
|
return '';
|
|
195
|
-
})
|
|
194
|
+
});
|
|
195
|
+
if (api.base) url = url.slice(api.base.length);
|
|
196
|
+
url.replace(new RegExp(`^${base}$`, 'ig'), function () {
|
|
196
197
|
var args = arguments;
|
|
197
198
|
cap.forEach(function (a, cx) {
|
|
198
199
|
params[a] = args[cx + 1];
|
|
199
200
|
});
|
|
200
201
|
});
|
|
201
|
-
params = serialize(params);
|
|
202
202
|
return params;
|
|
203
203
|
}
|
|
204
204
|
|
|
@@ -256,7 +256,7 @@ function seekResponse(data, seeker, apiMap = {}) {
|
|
|
256
256
|
data = JSON.parse(data);
|
|
257
257
|
}
|
|
258
258
|
if (next) {
|
|
259
|
-
data = (pick || next.id) + "?" + getUrlParamsForApi(next, data);
|
|
259
|
+
data = (pick || next.id) + "?" + serialize(getUrlParamsForApi(next, data));
|
|
260
260
|
if (getNextValue) {
|
|
261
261
|
data = getParamsFromUrl(data);
|
|
262
262
|
if (pick) data = data[pick];
|
|
@@ -300,7 +300,7 @@ function parseConfig(api) {
|
|
|
300
300
|
});
|
|
301
301
|
return '';
|
|
302
302
|
});
|
|
303
|
-
url.replace(/[
|
|
303
|
+
url.replace(/[\#][\s\S]*$/, '').replace(/([\:\\]\:|\:\w+)/g, function (p) {
|
|
304
304
|
p = p.slice(1);
|
|
305
305
|
if (!required[p] && p !== ':') {
|
|
306
306
|
required.push(p);
|
|
@@ -468,7 +468,43 @@ function LoadingArray_then(ok, oh) {
|
|
|
468
468
|
function LoadingArray_abort(ok, oh) {
|
|
469
469
|
if (this.loading) this.loading.abort();
|
|
470
470
|
}
|
|
471
|
-
|
|
471
|
+
var getApi = function (serviceId, promised_map) {
|
|
472
|
+
return promised_map.then((apiMap) => {
|
|
473
|
+
serviceId = serviceId.replace(/[\?\:][\s\S]*$/, "");
|
|
474
|
+
const api = apiMap[serviceId];
|
|
475
|
+
if (!api) throw new Error(i18n`没有找到对应的接口 id ${serviceId}.`);
|
|
476
|
+
return extend({}, api, { root: apiMap });
|
|
477
|
+
});
|
|
478
|
+
};
|
|
479
|
+
var prepareURL = function (url, params) {
|
|
480
|
+
var rest = [];
|
|
481
|
+
var search;
|
|
482
|
+
var uri = url.replace(/#[\s\S]*$/, "").replace(/[\\\:]\:|\:[a-z\_][\w]*/gi, function (d) {
|
|
483
|
+
d = d.slice(1);
|
|
484
|
+
if (d === ":") return d;
|
|
485
|
+
rest.push(d);
|
|
486
|
+
return seekResponse(params, d) || '';
|
|
487
|
+
});
|
|
488
|
+
if (isObject(params)) params = extend(params instanceof Array ? [] : {}, params);
|
|
489
|
+
if (/\?/.test(uri)) search = uri.replace(/^[\s\S]*?\?/, "");
|
|
490
|
+
var baseuri = uri.replace(/\?[\s\S]*$/, "");
|
|
491
|
+
var hasOwnProperty = {}.hasOwnProperty;
|
|
492
|
+
if (search) {
|
|
493
|
+
var searchParams = parseKV(search);
|
|
494
|
+
if (params) for (var k in searchParams) {
|
|
495
|
+
if (hasOwnProperty.call(searchParams, k) && hasOwnProperty.call(params, k)) {
|
|
496
|
+
searchParams[k] = params[k];
|
|
497
|
+
rest.push(k);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
search = serialize(searchParams);
|
|
501
|
+
if (search) uri = baseuri + "?" + search;
|
|
502
|
+
else uri = baseuri;
|
|
503
|
+
} else {
|
|
504
|
+
uri = baseuri;
|
|
505
|
+
}
|
|
506
|
+
return [uri, rest, baseuri, search];
|
|
507
|
+
};
|
|
472
508
|
var privates = {
|
|
473
509
|
pack(serviceId, params) {
|
|
474
510
|
if (/\?/.test(serviceId)) {
|
|
@@ -545,12 +581,7 @@ var privates = {
|
|
|
545
581
|
return true;
|
|
546
582
|
},
|
|
547
583
|
getApi(serviceId) {
|
|
548
|
-
return this.getConfigPromise()
|
|
549
|
-
serviceId = serviceId.replace(/[\?\:][\s\S]*$/, "");
|
|
550
|
-
const api = apiMap[serviceId];
|
|
551
|
-
if (!api) throw new Error(i18n`没有找到对应的接口 id ${serviceId}.`);
|
|
552
|
-
return extend({}, api, { root: apiMap });
|
|
553
|
-
});
|
|
584
|
+
return getApi(serviceId, this.getConfigPromise());
|
|
554
585
|
},
|
|
555
586
|
prepare(method, url, params) {
|
|
556
587
|
var spliterIndex = /[\:\|\/\~\!\?]/.exec(method), search;
|
|
@@ -558,33 +589,8 @@ var privates = {
|
|
|
558
589
|
else spliterIndex = method.length;
|
|
559
590
|
var coinmethod = method.slice(0, spliterIndex).toLowerCase();
|
|
560
591
|
var realmethod = coinmethod.replace(/\W+$/g, '');
|
|
561
|
-
var rest =
|
|
562
|
-
|
|
563
|
-
d = d.slice(1);
|
|
564
|
-
if (d === ":") return d;
|
|
565
|
-
rest.push(d);
|
|
566
|
-
return seekResponse(params, d) || '';
|
|
567
|
-
});
|
|
568
|
-
if (isObject(params)) params = extend(params instanceof Array ? [] : {}, params);
|
|
569
|
-
if (/\?/.test(uri)) search = uri.replace(/^[\s\S]*?\?/, "");
|
|
570
|
-
var baseuri = uri.replace(/\?[\s\S]*$/, "");
|
|
571
|
-
var hasOwnProperty = {}.hasOwnProperty;
|
|
572
|
-
if (search) {
|
|
573
|
-
var searchParams = parseKV(search);
|
|
574
|
-
if (params) for (var k in searchParams) {
|
|
575
|
-
if (hasOwnProperty.call(searchParams, k) && hasOwnProperty.call(params, k)) {
|
|
576
|
-
searchParams[k] = params[k];
|
|
577
|
-
rest.push(k);
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
search = serialize(searchParams);
|
|
581
|
-
if (search) uri = baseuri + "?" + search;
|
|
582
|
-
else uri = baseuri;
|
|
583
|
-
} else {
|
|
584
|
-
uri = baseuri;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
rest.forEach(k => delete params[k]);
|
|
592
|
+
var [uri, rest, baseuri, search] = prepareURL(url, params);
|
|
593
|
+
if (params && rest.length) rest.forEach(r => delete params[r]);
|
|
588
594
|
return { method: realmethod, coinmethod, selector: method.slice(spliterIndex + 1), search, baseuri, uri, params };
|
|
589
595
|
},
|
|
590
596
|
loadIgnoreConfig(method, url, params1, api) {
|
|
@@ -605,7 +611,7 @@ var privates = {
|
|
|
605
611
|
}).error(xhr => {
|
|
606
612
|
try {
|
|
607
613
|
var e = getErrorMessage(parseData(xhr.response || xhr.responseText || xhr.statusText || xhr.status));
|
|
608
|
-
oh({ status:
|
|
614
|
+
oh({ status: loading.status, api, params: params1, error: e, toString: getErrorMessage })
|
|
609
615
|
} catch (error) {
|
|
610
616
|
oh(error);
|
|
611
617
|
}
|
|
@@ -681,6 +687,10 @@ function responseCrash(e, data) {
|
|
|
681
687
|
} else {
|
|
682
688
|
data.error = e;
|
|
683
689
|
}
|
|
690
|
+
if (isObject(e)) {
|
|
691
|
+
if (e.reported) return;
|
|
692
|
+
e.reported = true;
|
|
693
|
+
}
|
|
684
694
|
error_report(e, e.status < 500 ? 'warn' : 'error');
|
|
685
695
|
}
|
|
686
696
|
var toDataString = function () { return isEmpty(this.data) ? '' : this.data };
|
|
@@ -724,8 +734,13 @@ var unbindInstance = function (instanceId, callback) {
|
|
|
724
734
|
};
|
|
725
735
|
var OUTDATE = new Error(i18n`请求被覆盖`);
|
|
726
736
|
var ABORTED = new Error(i18n`请求已取消`);
|
|
737
|
+
var wrapRequest = function (p, req) {
|
|
738
|
+
|
|
739
|
+
};
|
|
727
740
|
var data = {
|
|
741
|
+
prepareURL,
|
|
728
742
|
decodeStructure,
|
|
743
|
+
getUrlParamsForApi,
|
|
729
744
|
encodeStructure,
|
|
730
745
|
abortAll: cross.abortAll,
|
|
731
746
|
responseLoaded(response) {
|
|
@@ -812,12 +827,15 @@ var data = {
|
|
|
812
827
|
config = Promise.resolve(config).then(createApiMap);
|
|
813
828
|
}
|
|
814
829
|
return enrich({
|
|
815
|
-
from(id, params) {
|
|
816
|
-
return config.then(function (
|
|
817
|
-
var a =
|
|
818
|
-
return
|
|
830
|
+
from(id, params, parse) {
|
|
831
|
+
return config.then(function (map) {
|
|
832
|
+
var a = map[id];
|
|
833
|
+
return data.fromApi(a, params, parse);
|
|
819
834
|
});
|
|
820
835
|
},
|
|
836
|
+
getApi(id) {
|
|
837
|
+
return getApi(id, config);
|
|
838
|
+
},
|
|
821
839
|
queue(ids, params, cb) {
|
|
822
840
|
ids = ids.slice(0);
|
|
823
841
|
config.then(function (res) {
|
package/coms/zimoli/field.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
function main(elem) {
|
|
2
2
|
elem = optionbar.apply(null, arguments);
|
|
3
3
|
var scope = {};
|
|
4
|
-
care(elem, function (p) {
|
|
5
|
-
if (elem.childNodes.length) return;
|
|
4
|
+
if (!elem.childNodes.length) care(elem, function (p) {
|
|
6
5
|
var [f, data] = p;
|
|
7
6
|
elem.innerHTML = field;
|
|
8
7
|
render(elem, scope = {
|
|
@@ -10,13 +9,14 @@ function main(elem) {
|
|
|
10
9
|
data,
|
|
11
10
|
error: null,
|
|
12
11
|
field: f,
|
|
12
|
+
container,
|
|
13
13
|
readonly: !!this.readonly
|
|
14
14
|
});
|
|
15
15
|
elem.oldValue = data[f.key];
|
|
16
16
|
elem.setAttribute("field", f.key);
|
|
17
17
|
}, false);
|
|
18
18
|
elem.setAttribute("field", '');
|
|
19
|
-
elem
|
|
19
|
+
elem.$renders = [function () {
|
|
20
20
|
if (!(this.src instanceof Array)) return;
|
|
21
21
|
var [f, data] = this.src;
|
|
22
22
|
if (!f || !data) return;
|
package/coms/zimoli/field.less
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
height: auto;
|
|
3
3
|
box-shadow: none !important;
|
|
4
4
|
|
|
5
|
+
>model:first-child {
|
|
6
|
+
padding: 6px 10px;
|
|
7
|
+
display: block;
|
|
8
|
+
}
|
|
9
|
+
|
|
5
10
|
>.head {
|
|
6
11
|
vertical-align: top;
|
|
7
12
|
|
|
@@ -47,7 +52,8 @@
|
|
|
47
52
|
border-color: #f32;
|
|
48
53
|
outline: 1px solid #f32;
|
|
49
54
|
}
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
|
|
56
|
+
.error {
|
|
57
|
+
color: #c32;
|
|
52
58
|
}
|
|
53
59
|
}
|
|
@@ -38,6 +38,7 @@ function format(formater) {
|
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
function filterTime(time, format) {
|
|
41
|
+
if (!isHandled(time)) return '';
|
|
41
42
|
if (isFinite(time)) time = +time;
|
|
42
43
|
var value = new Date(time);
|
|
43
44
|
if (!+value) {
|
|
@@ -50,37 +51,67 @@ function filterTime(time, format) {
|
|
|
50
51
|
format = format.charAt(0);
|
|
51
52
|
}
|
|
52
53
|
var splited = getSplitedDate(value);
|
|
54
|
+
var now = new Date;
|
|
53
55
|
var [year, month, date, hour, minute, second, milli, day] = splited;
|
|
54
|
-
var [year1, month1, date1, hour1, minute1] = getSplitedDate(
|
|
56
|
+
var [year1, month1, date1, hour1, minute1, second1, milli1, day1] = getSplitedDate(now);
|
|
55
57
|
var today = new Date(year1, month1 - 1, date1);
|
|
56
58
|
var thatday = new Date(year, month - 1, date);
|
|
57
59
|
var delta = (today - thatday) / 24 / 3600000;
|
|
58
|
-
var time =
|
|
59
|
-
if (
|
|
60
|
-
|
|
60
|
+
if (minute === 0) var time = hour + "点";
|
|
61
|
+
else if (minute === 30) time = hour + "点半";
|
|
62
|
+
else time = `${hour}:${fixLength(minute)}`;
|
|
63
|
+
if (delta < 7 && delta > 2) {
|
|
64
|
+
if (day >= day1) {
|
|
65
|
+
return `上星期` + days[day] + time;
|
|
66
|
+
}
|
|
67
|
+
return `星期` + days[day] + time;
|
|
68
|
+
}
|
|
69
|
+
else if (delta > -7 && delta < -2) {
|
|
70
|
+
if (day <= day1) {
|
|
71
|
+
return `下星期` + days[day] + time;
|
|
72
|
+
}
|
|
73
|
+
return `星期` + days[day] + time;
|
|
61
74
|
}
|
|
62
75
|
switch (delta) {
|
|
63
76
|
case 0:
|
|
64
77
|
if (minute === minute1 && hour === hour1) {
|
|
65
|
-
return `刚刚`;
|
|
78
|
+
if (second <= second1) return `刚刚`;
|
|
79
|
+
return `${second - second1}秒后`;
|
|
80
|
+
}
|
|
81
|
+
else if (value > now) {
|
|
82
|
+
if (hour === hour1) {
|
|
83
|
+
return `${minute - minute1}分钟后`;
|
|
84
|
+
}
|
|
85
|
+
return `还有${hour - hour1}小时${minute - minute1}分钟`;
|
|
66
86
|
}
|
|
67
87
|
return time;
|
|
88
|
+
case -1:
|
|
89
|
+
return "明天" + time;
|
|
68
90
|
case 1:
|
|
69
|
-
return '昨天' +
|
|
91
|
+
return '昨天' + time;
|
|
70
92
|
case 2:
|
|
71
|
-
return '前天' +
|
|
93
|
+
return '前天' + time;
|
|
94
|
+
case -2:
|
|
95
|
+
return "后天" + time;
|
|
72
96
|
default:
|
|
73
97
|
switch (year1 - year) {
|
|
74
98
|
case 0:
|
|
99
|
+
if (value > now) {
|
|
100
|
+
return `今年${month}${format || '月'}${date}${format ? '' : '日'} ${time}`;
|
|
101
|
+
}
|
|
75
102
|
return `${month}${format || '月'}${date}${format ? '' : '日'} `;
|
|
76
103
|
case 1:
|
|
77
104
|
if (month1 < month) {
|
|
78
105
|
return `${month}${format || '月'}${date}${format ? '' : '日'} `;
|
|
79
106
|
}
|
|
80
107
|
return "去年" + month + "月";
|
|
108
|
+
case -1:
|
|
109
|
+
return "明年" + month + "月" + date + "日";
|
|
81
110
|
case 2:
|
|
82
111
|
return "前年" + month + "月";
|
|
112
|
+
case -2:
|
|
113
|
+
return "后年" + month + "月" + date + "日";
|
|
83
114
|
}
|
|
84
|
-
return `${year}${format || '年'}`;
|
|
115
|
+
return `${year}${format || '年'}${month}${format || "月"}`;
|
|
85
116
|
}
|
|
86
117
|
}
|
package/coms/zimoli/grid.js
CHANGED
|
@@ -290,7 +290,7 @@ function grid(breakpoints) {
|
|
|
290
290
|
}
|
|
291
291
|
extend(grid, grid_prototype);
|
|
292
292
|
if (!breakpoints) {
|
|
293
|
-
if (grid.clientHeight || grid
|
|
293
|
+
if (grid.clientHeight || grid.$mounted) {
|
|
294
294
|
createPointsWithChildren.call(grid);
|
|
295
295
|
} else {
|
|
296
296
|
on("append")(grid, createPointsWithChildren);
|
|
@@ -454,7 +454,7 @@ var grid_prototype = {
|
|
|
454
454
|
run(this.breakpoints);
|
|
455
455
|
},
|
|
456
456
|
reshape() {
|
|
457
|
-
if (this
|
|
457
|
+
if (this.$mounted || this.offsetWidth || this.offsetHeight) {
|
|
458
458
|
this._reshape();
|
|
459
459
|
} else {
|
|
460
460
|
once("append")(this, this._reshape);
|
package/coms/zimoli/isMounted.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
function isMounted(parent) {
|
|
2
|
-
if ("
|
|
2
|
+
if ("$mounted" in parent) return parent.$mounted;
|
|
3
3
|
var temp = parent;
|
|
4
4
|
while (temp && temp !== document.documentElement) {
|
|
5
|
-
if ("
|
|
6
|
-
return parent
|
|
5
|
+
if ("$mounted" in temp) {
|
|
6
|
+
return parent.$mounted = temp.$mounted;
|
|
7
7
|
}
|
|
8
8
|
temp = temp.parentNode;
|
|
9
9
|
}
|
package/coms/zimoli/list.js
CHANGED
|
@@ -9,10 +9,10 @@ function ylist(container, generator, $Y) {
|
|
|
9
9
|
list.autoFix = true;
|
|
10
10
|
var saved_itemIndex = 0;
|
|
11
11
|
addClass(list, 'list-' + $Y.toLowerCase());
|
|
12
|
-
if (!list
|
|
13
|
-
list
|
|
12
|
+
if (!list.$renders) {
|
|
13
|
+
list.$renders = [];
|
|
14
14
|
}
|
|
15
|
-
list
|
|
15
|
+
list.$renders.push(function () {
|
|
16
16
|
var a = saved_itemIndex;
|
|
17
17
|
saved_itemIndex = void 0;
|
|
18
18
|
if (a !== void 0) scrollTo(a);
|
package/coms/zimoli/maps.js
CHANGED
|
@@ -185,7 +185,7 @@ function maps(config = {}) {
|
|
|
185
185
|
canvas.map.refresh();
|
|
186
186
|
canvas._default = canvas.map.defaultImage();
|
|
187
187
|
};
|
|
188
|
-
if (canvas
|
|
188
|
+
if (canvas.$mounted) reshape();
|
|
189
189
|
else once("append")(canvas, reshape);
|
|
190
190
|
bind('resize')(canvas, reshape);
|
|
191
191
|
|
package/coms/zimoli/menuList.js
CHANGED
package/coms/zimoli/model.js
CHANGED
|
@@ -46,6 +46,36 @@ unmark(checkbox);
|
|
|
46
46
|
unmark(swap);
|
|
47
47
|
unmark(image);
|
|
48
48
|
unmark(success);
|
|
49
|
+
var renderOption = function (o, index) {
|
|
50
|
+
if (typeof o === 'string') return o;
|
|
51
|
+
if (isFunction(o)) {
|
|
52
|
+
var name = typeof index === 'number' ? o.name : index;
|
|
53
|
+
return `<a href="javascript:;" @click=field.options[${strings.encode(index)}](data)>${name}</a>`
|
|
54
|
+
}
|
|
55
|
+
if (isObject(o)) {
|
|
56
|
+
if (o.href) {
|
|
57
|
+
return `<a href=${strings.encode(o.href)}>${o.name}</a>`;
|
|
58
|
+
}
|
|
59
|
+
return `<a href='javascript:;' @click=field.options[${strings.encode(index)}](data)>${o.name}</a>`
|
|
60
|
+
}
|
|
61
|
+
return o;
|
|
62
|
+
}
|
|
63
|
+
var renderOptions = function (field, data) {
|
|
64
|
+
var { options } = field;
|
|
65
|
+
if (typeof options === 'string') return options;
|
|
66
|
+
if (isFunction(options)) return renderOption(options);
|
|
67
|
+
if (options instanceof Array) {
|
|
68
|
+
return options.map(renderOption).join('');
|
|
69
|
+
}
|
|
70
|
+
else if (isObject(options)) {
|
|
71
|
+
return Object.keys(options).map(k => renderOption(options[k], k)).join('');
|
|
72
|
+
}
|
|
73
|
+
return '';
|
|
74
|
+
}
|
|
75
|
+
var onoff = function () {
|
|
76
|
+
var { data, field } = this;
|
|
77
|
+
data[field.key] = checker.changeValue(data[field.key]);
|
|
78
|
+
};
|
|
49
79
|
var constructors = {
|
|
50
80
|
input,
|
|
51
81
|
swap(e) {
|
|
@@ -77,7 +107,7 @@ var constructors = {
|
|
|
77
107
|
date() {
|
|
78
108
|
var elem = document.createElement("input");
|
|
79
109
|
elem.type = "date";
|
|
80
|
-
elem
|
|
110
|
+
elem.$renders = [function () {
|
|
81
111
|
var { data, field } = this.$scope;
|
|
82
112
|
if (data && field) elem.value = parseDate(data[field.key]);
|
|
83
113
|
}]
|
|
@@ -96,6 +126,11 @@ var constructors = {
|
|
|
96
126
|
if (options) img.setAttribute("uploadto", options.uploadto);
|
|
97
127
|
return img;
|
|
98
128
|
},
|
|
129
|
+
checker(elem) {
|
|
130
|
+
var { data, field } = elem;
|
|
131
|
+
elem.innerHTML = `<span @click="onoff()"><checker -model=data[field.key]></checker><span -bind='field.holder'></span></span>${renderOptions(field, data)}`;
|
|
132
|
+
render(elem.children, { onoff, checker, data, a: button, field });
|
|
133
|
+
},
|
|
99
134
|
checkbox({ field }) {
|
|
100
135
|
var elem = checkbox();
|
|
101
136
|
cast(elem, field);
|
|
@@ -132,7 +167,7 @@ var constructors = {
|
|
|
132
167
|
},
|
|
133
168
|
"repeat"(_, field_type) {
|
|
134
169
|
var elem = input();
|
|
135
|
-
elem
|
|
170
|
+
elem.$renders = [function () {
|
|
136
171
|
var { field, data } = this.$scope;
|
|
137
172
|
var { status } = this;
|
|
138
173
|
var valid = this.value === data[field_type];
|
|
@@ -183,7 +218,8 @@ var readonly_types = {
|
|
|
183
218
|
if (field.options) {
|
|
184
219
|
if (!field.optionsMap) field.optionsMap = createOptionsMap(field.options);
|
|
185
220
|
var o = field.optionsMap[v];
|
|
186
|
-
|
|
221
|
+
try { e.setAttribute(field.key, v); } catch { }
|
|
222
|
+
if (isObject(o)) return `<s></s>` + o.name;
|
|
187
223
|
if (isHandled(o)) return o;
|
|
188
224
|
}
|
|
189
225
|
if (isEmpty(v)) v = '';
|
|
@@ -293,7 +329,7 @@ function main(elem) {
|
|
|
293
329
|
if (!ipt.$scope) {
|
|
294
330
|
renderModel.call(ipt, field, data);
|
|
295
331
|
var saved_sataus;
|
|
296
|
-
ipt
|
|
332
|
+
ipt.$renders.push(function () {
|
|
297
333
|
var { valid, status } = this;
|
|
298
334
|
if (elem.valid !== valid) elem.valid = valid;
|
|
299
335
|
if (saved_sataus === status) return;
|
|
@@ -310,7 +346,7 @@ function main(elem) {
|
|
|
310
346
|
on("change")(ipt, copyOptionData);
|
|
311
347
|
}
|
|
312
348
|
if ("options_from" in field) {
|
|
313
|
-
ipt
|
|
349
|
+
ipt.$renders.push(rebuildOptions);
|
|
314
350
|
}
|
|
315
351
|
}
|
|
316
352
|
}
|
package/coms/zimoli/on.js
CHANGED
|
@@ -263,7 +263,7 @@ var remove = function (k, hk, [eventtypes, handler, context]) {
|
|
|
263
263
|
var [e, h, c] = hs[cx];
|
|
264
264
|
if (h === handler && e === eventtypes && c === context) {
|
|
265
265
|
hs.splice(cx, 1);
|
|
266
|
-
if (k === changes_key) element
|
|
266
|
+
if (k === changes_key) element.$needchanges--;
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
if (!hs.length && hs.h) {
|
|
@@ -330,8 +330,8 @@ var append = function (k, hk, listener2, firstmost) {
|
|
|
330
330
|
if (h === handler && eventtypes === e && c === context) return;
|
|
331
331
|
}
|
|
332
332
|
if (k === changes_key) {
|
|
333
|
-
if (!element
|
|
334
|
-
element
|
|
333
|
+
if (!element.$needchanges) element.$needchanges = 0;
|
|
334
|
+
element.$needchanges++;
|
|
335
335
|
}
|
|
336
336
|
if (firstmost) handlers.unshift(listener2);
|
|
337
337
|
else handlers.push(listener2);
|
|
@@ -342,7 +342,7 @@ var on = document.efronton = function (k) {
|
|
|
342
342
|
if (handlersMap[on_event_path]) return handlersMap[on_event_path];
|
|
343
343
|
var eventtypes = parseEventTypes(k);
|
|
344
344
|
k = k.replace(eventtypereg, '');
|
|
345
|
-
var handler_path =
|
|
345
|
+
var handler_path = "$h_" + k;
|
|
346
346
|
var hk = handler_path + +!!eventtypes.capture;
|
|
347
347
|
if (supportPassive) hk += +!!eventtypes.passive;
|
|
348
348
|
if (is_addEventListener_enabled) var addhandler = function (context, handler, firstmost = false) {
|
package/coms/zimoli/remove.js
CHANGED
|
@@ -40,14 +40,14 @@ function hasLeaveStyle(o) {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function _onremove(node, event) {
|
|
43
|
-
if (!node || node
|
|
43
|
+
if (!node || node.$mounted === false) return;
|
|
44
44
|
var children = node.childNodes;
|
|
45
|
-
if (node
|
|
45
|
+
if (node.$mounted) {
|
|
46
46
|
if (!event) {
|
|
47
47
|
event = createEvent("remove");
|
|
48
48
|
}
|
|
49
49
|
dispatch(node, event);
|
|
50
|
-
node
|
|
50
|
+
node.$mounted = false;
|
|
51
51
|
}
|
|
52
52
|
if (children) for (var cx = 0, dx = children.length; cx < dx; cx++) {
|
|
53
53
|
_onremove(children[cx], event);
|