efront 4.21.4 → 4.22.1
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 +24 -0
- package/apps/blank/index.html +1 -1
- package/apps/index.jsp +76 -27
- package/apps/pay/alipay-query.jsp +1 -1
- package/apps/pay/alipay.jsp +1 -1
- package/apps/pivot/auth/login.js +2 -2
- package/apps/pivot/cert/main.xht +18 -5
- package/apps/pivot/db/act.xht +53 -0
- package/apps/pivot/db/config.xht +56 -16
- package/apps/pivot/home/welcome.html +12 -13
- package/apps/pivot/home/welcome.js +6 -6
- package/apps/pivot/home/welcome.less +12 -3
- package/apps/pivot/link/room.js +1 -1
- package/apps/pivot/main.js +3 -2
- package/apps/pivot/task/invoke.js +3 -3
- package/apps/pivot/task/rsync.js +2 -2
- package/apps/pivot/wow/root.js +8 -8
- package/coms/basic/#loader.js +9 -8
- package/coms/basic/Item.js +2 -2
- package/coms/basic/Tree.js +14 -2
- package/coms/basic/crc.js +5 -1
- package/coms/basic/cross_.js +2 -2
- package/coms/basic/decode62S.js +44 -0
- package/coms/basic/encode62S.js +40 -0
- package/coms/basic/encode62S_test.js +18 -0
- package/coms/basic/enrich.js +6 -1
- package/coms/basic/refilm_decode.js +40 -20
- package/coms/basic/refilm_decode_test.js +4 -0
- package/coms/basic/valid.js +4 -0
- package/coms/basic_/&Array.js +64 -49
- package/coms/basic_/&extends.js +9 -2
- package/coms/compile/Javascript.js +1 -1
- package/coms/compile/audit.js +23 -1
- package/coms/compile/cloneNode.js +3 -1
- package/coms/compile/downLevel.js +21 -11
- package/coms/compile/downLevel_test.js +52 -14
- package/coms/compile/rescan.js +8 -2
- package/coms/compile/unstruct.js +9 -9
- package/coms/crypt/encode62.js +36 -6
- package/coms/crypt/encode62_test.js +8 -48
- package/coms/explorer/main.less +1 -5
- package/coms/frame/chat.js +2 -2
- package/coms/frame/left.html +5 -4
- package/coms/frame/left.js +1 -0
- package/coms/frame/left.less +5 -3
- package/coms/frame/payment.js +2 -2
- package/coms/pivot/acme2.js +7 -4
- package/coms/pivot/left-footer.xht +25 -0
- package/coms/pivot/pedit.js +3 -3
- package/coms/pivot/plist.js +2 -2
- package/coms/pivot/qrcode.xht +3 -0
- package/coms/zimoli/XMLHttpRequest.js +2 -2
- package/coms/zimoli/container.js +34 -34
- package/coms/zimoli/design.html +6 -13
- package/coms/zimoli/design.js +49 -13
- package/coms/zimoli/design.less +62 -25
- package/coms/zimoli/drag.js +8 -3
- package/coms/zimoli/encode62.js +40 -12
- package/coms/zimoli/lattice.js +0 -1
- package/coms/zimoli/list.js +0 -8
- package/coms/zimoli/menu.js +29 -5
- package/coms/zimoli/menuList.js +1 -0
- package/coms/zimoli/menuList_test.js +1 -0
- package/coms/zimoli/model.js +150 -195
- package/coms/zimoli/model.less +4 -8
- package/coms/zimoli/on.js +14 -12
- package/coms/zimoli/padding.less +1 -0
- package/coms/zimoli/progbar.xht +9 -8
- package/coms/zimoli/prompt.less +0 -3
- package/coms/zimoli/render.js +210 -125
- package/coms/zimoli/select.js +9 -4
- package/coms/zimoli/select.less +3 -14
- package/coms/zimoli/selectList.js +5 -1
- package/coms/zimoli/selectList.less +3 -0
- package/coms/zimoli/table.html +7 -7
- package/coms/zimoli/table.js +12 -9
- package/coms/zimoli/table.less +5 -0
- package/coms/zimoli/tree.js +1 -2
- package/coms/zimoli/tree.less +3 -1
- package/coms/zimoli/tree_test.js +8 -6
- package/coms/zimoli/user.js +2 -2
- package/coms/zimoli/view.js +3 -4
- package/coms/zimoli/watch.js +3 -1
- package/coms/zimoli/zimoli.js +7 -3
- package/coms//350/214/250/350/217/260/tab.js +26 -2
- package/coms//350/214/250/350/217/260//346/240/207/347/255/276/345/214/226.js +1 -1
- package/coms//350/214/250/350/217/260//347/274/226/350/276/221/346/241/206.xht +183 -20
- package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +1 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/zimoli/model.js
CHANGED
|
@@ -2,40 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* 支持任意类型的数据的编辑展示及过滤
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
var elem = this;
|
|
7
|
-
var { $scope } = elem;
|
|
8
|
-
if (!$scope) return;
|
|
9
|
-
var { data, field } = $scope;
|
|
10
|
-
if (!data || !field) return;
|
|
11
|
-
var { options_from, options } = field;
|
|
12
|
-
var new_options = seek(data, options_from);
|
|
13
|
-
if (new_options !== options) {
|
|
14
|
-
field.options = new_options;
|
|
15
|
-
delete field.optionsMap;
|
|
16
|
-
render.refresh();
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
var copyOptionData = function () {
|
|
20
|
-
var { $scope } = this;
|
|
21
|
-
if (!$scope) return;
|
|
22
|
-
var { data, field } = $scope;
|
|
23
|
-
if (!data || !field) return;
|
|
24
|
-
var { option_to, options } = field;
|
|
25
|
-
if (!options) return;
|
|
26
|
-
var value = data[field.key];
|
|
27
|
-
var option = isObject(value) ? value : value in options ? options[value] : value;
|
|
28
|
-
extend(data, seek(option, option_to));
|
|
29
|
-
};
|
|
30
|
-
var renderModel = function (field, data) {
|
|
31
|
-
var ipt = this;
|
|
32
|
-
ipt.setAttribute("ng-model", "data[field.key]");
|
|
33
|
-
ipt.setAttribute("placeholder_", "field.holder");
|
|
34
|
-
render(ipt, {
|
|
35
|
-
field,
|
|
36
|
-
data
|
|
37
|
-
});
|
|
38
|
-
};
|
|
5
|
+
|
|
39
6
|
var unmark = function (select) {
|
|
40
7
|
select.isediter = false;
|
|
41
8
|
select.isreader = false;
|
|
@@ -135,9 +102,7 @@ var constructors = {
|
|
|
135
102
|
color() {
|
|
136
103
|
return colorpicker();
|
|
137
104
|
},
|
|
138
|
-
|
|
139
|
-
},
|
|
140
|
-
name() { },
|
|
105
|
+
|
|
141
106
|
image({ field }) {
|
|
142
107
|
var img = image();
|
|
143
108
|
var { options } = field;
|
|
@@ -160,52 +125,37 @@ var constructors = {
|
|
|
160
125
|
cast(elem, field);
|
|
161
126
|
return elem;
|
|
162
127
|
},
|
|
163
|
-
select(_
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
render(_.children, { field, data, isEmpty });
|
|
178
|
-
elem.innerHTML = `<option -repeat="(o,i) in field.options" ng-bind="o.name||o" _value="o.key!==undefined?o.key:o"></option>`;
|
|
179
|
-
}
|
|
180
|
-
else if (t === 'a') {
|
|
181
|
-
var { field, data } = _;
|
|
182
|
-
var opt = null;
|
|
183
|
-
for (var cx = 0, options = field.options, dx = options.length; cx < dx; cx++) {
|
|
184
|
-
var o = options[cx];
|
|
185
|
-
if (o.key === data[field.key]) {
|
|
186
|
-
opt = o;
|
|
187
|
-
o.selected = true;
|
|
188
|
-
break;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
var pad = selectList(field.options, !!field.multi, true);
|
|
192
|
-
var e = document.createElement('select');
|
|
193
|
-
e.innerHTML = `<option selected value="${opt ? opt.key : ''}">${opt ? opt.name : '请选择'}</option>`;
|
|
194
|
-
e.value = opt ? opt.key : '';
|
|
195
|
-
elem = select(e, pad);
|
|
128
|
+
select(_) {
|
|
129
|
+
var { field, data } = _;
|
|
130
|
+
var t = field.ref;
|
|
131
|
+
var elem = document.createElement('select');
|
|
132
|
+
elem.multiple = field.multi;
|
|
133
|
+
elem.editable = field.editable || t === 'a';
|
|
134
|
+
var o = field.options?.[0];
|
|
135
|
+
if (field.holder) _.innerHTML = `<span -if="isEmpty(data[field.key])" class="placeholder">${field.holder}</span>`;
|
|
136
|
+
if (!isEmpty(o?.key)) {
|
|
137
|
+
if (!field.required) field.options.unshift({
|
|
138
|
+
name: field.holder || i18n`选择${field.name}`,
|
|
139
|
+
key: ''
|
|
140
|
+
})
|
|
196
141
|
}
|
|
142
|
+
render(_.children, { field, data, isEmpty });
|
|
143
|
+
elem.setAttribute('a-src', 'o in field.options')
|
|
144
|
+
elem.innerHTML = `<option disabled:=o.disabled -text="o.name" :value="o.key"></option>`;
|
|
145
|
+
render(elem, { select, data, field });
|
|
197
146
|
return elem;
|
|
198
147
|
},
|
|
199
|
-
"repeat"(_
|
|
148
|
+
"repeat"(_) {
|
|
200
149
|
var elem = input();
|
|
201
150
|
elem.$renders = [function () {
|
|
202
151
|
var { field, data } = this.$scope;
|
|
203
152
|
var { status } = this;
|
|
153
|
+
var field_type = field.ref;
|
|
204
154
|
var valid = this.value === data[field_type];
|
|
205
155
|
if (!this.dirty) {
|
|
206
156
|
status = 'clean';
|
|
207
157
|
} else if (isEmpty(this.value)) {
|
|
208
|
-
if (field.
|
|
158
|
+
if (field.required) {
|
|
209
159
|
status = 'required';
|
|
210
160
|
} else {
|
|
211
161
|
status = 'empty';
|
|
@@ -230,11 +180,13 @@ constructors.int
|
|
|
230
180
|
= constructors.number;
|
|
231
181
|
constructors.gen = constructors.generator;
|
|
232
182
|
var readonly_types = {
|
|
233
|
-
"date"(
|
|
183
|
+
"date"() {
|
|
184
|
+
var { field, data } = this;
|
|
234
185
|
var string = data[field.key];
|
|
235
186
|
return filterTime(string, "y年M月d日");
|
|
236
187
|
},
|
|
237
|
-
"url"(
|
|
188
|
+
"url"() {
|
|
189
|
+
var { field, data } = this;
|
|
238
190
|
var href = data[field.key];
|
|
239
191
|
if (href) {
|
|
240
192
|
var e = anchor2(field.holder || href, href);
|
|
@@ -242,34 +194,34 @@ var readonly_types = {
|
|
|
242
194
|
return e;
|
|
243
195
|
}
|
|
244
196
|
},
|
|
245
|
-
"datetime"(
|
|
246
|
-
var {
|
|
247
|
-
|
|
197
|
+
"datetime"() {
|
|
198
|
+
var { field, data } = this;
|
|
199
|
+
return filterTime(data[field.key], "y年M月d日 h:mm");
|
|
248
200
|
},
|
|
249
|
-
"timestamp"(
|
|
250
|
-
var {
|
|
251
|
-
|
|
201
|
+
"timestamp"() {
|
|
202
|
+
var { field, data } = this;
|
|
203
|
+
return filterTime(data[field.key]);
|
|
252
204
|
},
|
|
253
|
-
"size"(
|
|
205
|
+
"size"() {
|
|
206
|
+
var { field, data } = this;
|
|
254
207
|
var f = data[field.key];
|
|
255
208
|
return size(f);
|
|
256
209
|
},
|
|
257
|
-
html(
|
|
258
|
-
var
|
|
259
|
-
|
|
260
|
-
return t;
|
|
210
|
+
html() {
|
|
211
|
+
var { field, data } = this;
|
|
212
|
+
return seek(data, field.key);
|
|
261
213
|
},
|
|
262
|
-
text(
|
|
263
|
-
var {
|
|
264
|
-
|
|
214
|
+
text() {
|
|
215
|
+
var { field, data } = this;
|
|
216
|
+
return data[field.key] ?? '';
|
|
265
217
|
},
|
|
266
|
-
swap(
|
|
267
|
-
var { field } =
|
|
218
|
+
swap() {
|
|
219
|
+
var { field, data } = this;
|
|
268
220
|
var v = data[field.key];
|
|
269
221
|
if (field.options) {
|
|
270
222
|
if (!field.optionsMap) field.optionsMap = createOptionsMap(field.options);
|
|
271
223
|
var o = field.optionsMap[v];
|
|
272
|
-
try {
|
|
224
|
+
try { this.setAttribute(field.key, v); } catch { }
|
|
273
225
|
if (isObject(o)) return `<s></s>` + o.name;
|
|
274
226
|
if (isHandled(o)) return o;
|
|
275
227
|
}
|
|
@@ -277,8 +229,83 @@ var readonly_types = {
|
|
|
277
229
|
return v;
|
|
278
230
|
},
|
|
279
231
|
};
|
|
232
|
+
var setContent = function (value) {
|
|
233
|
+
if (this === value) return;
|
|
234
|
+
if (isNode(value) && this !== value || isArray(value)) {
|
|
235
|
+
remove(this.childNodes);
|
|
236
|
+
appendChild(this, value);
|
|
237
|
+
}
|
|
238
|
+
else if (isHandled(value)) {
|
|
239
|
+
this.innerHTML = value;
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
var Binder = render.Binder, Model = render.Model;
|
|
243
|
+
Object.keys(readonly_types).forEach(k => {
|
|
244
|
+
var getter = readonly_types[k];
|
|
245
|
+
readonly_types[k] = new Binder(getter, setContent);
|
|
246
|
+
});
|
|
247
|
+
var get = new Binder(function () {
|
|
248
|
+
var { field, data } = this;
|
|
249
|
+
if (isEmpty(field.key)) return;
|
|
250
|
+
var value = seek(data, field.key);
|
|
251
|
+
if (field.options) {
|
|
252
|
+
if (!field.optionsMap) {
|
|
253
|
+
var map = Object.create(null);
|
|
254
|
+
for (var o of field.options) {
|
|
255
|
+
var v = getValue(o);
|
|
256
|
+
map[v] = o;
|
|
257
|
+
}
|
|
258
|
+
field.optionsMap = map;
|
|
259
|
+
}
|
|
260
|
+
var map = field.optionsMap;
|
|
261
|
+
if (value in map) {
|
|
262
|
+
value = getName(map[value]);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return value;
|
|
266
|
+
}, setContent);
|
|
267
|
+
|
|
268
|
+
var ipt = function (element) {
|
|
269
|
+
var { field } = element;
|
|
270
|
+
var ipt = document.createElement('input');
|
|
271
|
+
ipt.setAttribute('type', field.type);
|
|
272
|
+
input(ipt);
|
|
273
|
+
return ipt;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
function getScopeValue() {
|
|
277
|
+
return this.data[this.field.key];
|
|
278
|
+
}
|
|
279
|
+
function setScopeValue(v) {
|
|
280
|
+
this.data[this.field.key] = v;
|
|
281
|
+
}
|
|
282
|
+
function setBinder(elem, binder) {
|
|
283
|
+
if (binder === elem.$binder) return;
|
|
284
|
+
removeFromList(elem.$renders, elem.$binder);
|
|
285
|
+
remove(elem.childNodes);
|
|
286
|
+
if (binder instanceof Binder) {
|
|
287
|
+
binder.call(elem);
|
|
288
|
+
elem.$renders.push(binder);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
var ipt = binder(elem);
|
|
292
|
+
binder = null;
|
|
293
|
+
if (isHandled(ipt) && ipt !== elem) {
|
|
294
|
+
if (isNode(ipt)) {
|
|
295
|
+
var model = new Model(getScopeValue, setScopeValue, ipt);
|
|
296
|
+
model.hook(elem, ipt);
|
|
297
|
+
appendChild(elem, ipt);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
elem.innerHTML = ipt;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
elem.$binder = binder;
|
|
305
|
+
}
|
|
280
306
|
readonly_types.anchor = readonly_types.url;
|
|
281
307
|
readonly_types.do = readonly_types.act = readonly_types.action = constructors.generator;
|
|
308
|
+
constructors.title = constructors.name = readonly_types.text;
|
|
282
309
|
readonly_types.gen = readonly_types.generator = readonly_types.text;
|
|
283
310
|
var createOptionsMap = function (options) {
|
|
284
311
|
if (!isObject(options[0])) return options;
|
|
@@ -308,117 +335,45 @@ var markEditer = function (editers) {
|
|
|
308
335
|
editers[k].isediter = true;
|
|
309
336
|
}
|
|
310
337
|
};
|
|
311
|
-
var build = function () {
|
|
312
|
-
var elem = this;
|
|
313
|
-
var { data, readonly, field } = elem;
|
|
314
338
|
|
|
315
|
-
|
|
316
|
-
var
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
if (create) {
|
|
341
|
-
var e = create(elem, data, field_ref);
|
|
342
|
-
if (isNode(e)) {
|
|
343
|
-
if (e !== elem) appendChild(elem, e);
|
|
344
|
-
}
|
|
345
|
-
else if (!isEmpty(e)) {
|
|
346
|
-
elem.innerHTML = e;
|
|
347
|
-
}
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
elem.innerHTML = '<span ng-bind=get()></span>';
|
|
351
|
-
render(elem, {
|
|
352
|
-
get() {
|
|
353
|
-
if (isEmpty(field.key)) return;
|
|
354
|
-
var value = seek(data, field.key);
|
|
355
|
-
if (field.options) {
|
|
356
|
-
if (!field.optionsMap) {
|
|
357
|
-
var map = Object.create(null);
|
|
358
|
-
for (var o of field.options) {
|
|
359
|
-
var v = getValue(o);
|
|
360
|
-
map[v] = o;
|
|
361
|
-
}
|
|
362
|
-
field.optionsMap = map;
|
|
363
|
-
}
|
|
364
|
-
var map = field.optionsMap;
|
|
365
|
-
if (value in map) {
|
|
366
|
-
value = getName(map[value]);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
return value;
|
|
370
|
-
}
|
|
371
|
-
});
|
|
372
|
-
}
|
|
339
|
+
var run = function ({ changes }) {
|
|
340
|
+
var function_type = "function";
|
|
341
|
+
var elem = this;
|
|
342
|
+
var { data, field } = elem;
|
|
343
|
+
if (!data || !field) return;
|
|
344
|
+
var field_type = field.type || field.editor, field_editor = field.editor || field.type;
|
|
345
|
+
if (field_editor instanceof Function && field_type === field_editor) {
|
|
346
|
+
field_type = function_type;
|
|
347
|
+
}
|
|
348
|
+
if (!(field_editor instanceof Function)) {
|
|
349
|
+
field_editor = null;
|
|
350
|
+
}
|
|
351
|
+
if (/\?/.test(field_type)) {
|
|
352
|
+
var [field_type, field_ref] = field_type.split("?");
|
|
353
|
+
field.ref = field_ref;
|
|
354
|
+
}
|
|
355
|
+
var type = elem.getAttribute('type');
|
|
356
|
+
if (type !== field_type) {
|
|
357
|
+
elem.setAttribute("type", field_type);
|
|
358
|
+
}
|
|
359
|
+
if (isString(field_type)) field_type = field_type.replace(/\:[\d+\.]+$/, '');
|
|
360
|
+
var create = null;
|
|
361
|
+
if (elem.readonly || field.readonly) {
|
|
362
|
+
if (field_type === "function") {
|
|
363
|
+
create = field_editor;
|
|
373
364
|
} else {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
var input = document.createElement('input');
|
|
377
|
-
input.setAttribute('type', field.type);
|
|
378
|
-
return input;
|
|
379
|
-
}()) : null;
|
|
380
|
-
if (ipt) {
|
|
381
|
-
if (ipt !== elem) appendChild.insert(elem, ipt);
|
|
382
|
-
if (!ipt.$scope) {
|
|
383
|
-
renderModel.call(ipt, field, data);
|
|
384
|
-
var saved_sataus;
|
|
385
|
-
ipt.$renders.push(function () {
|
|
386
|
-
var { valid, status } = this;
|
|
387
|
-
if (elem.valid !== valid) elem.valid = valid;
|
|
388
|
-
if (saved_sataus === status) return;
|
|
389
|
-
saved_sataus = status;
|
|
390
|
-
elem.setAttribute('status', saved_sataus);
|
|
391
|
-
});
|
|
392
|
-
} else {
|
|
393
|
-
on("change")(ipt, function () {
|
|
394
|
-
data[field.key] = getValue.call(this);
|
|
395
|
-
});
|
|
396
|
-
setValue.call(ipt, data[field.key]);
|
|
397
|
-
}
|
|
398
|
-
if ("option_to" in field) {
|
|
399
|
-
on("change")(ipt, copyOptionData);
|
|
400
|
-
}
|
|
401
|
-
if ("options_from" in field) {
|
|
402
|
-
ipt.$renders.push(rebuildOptions);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
365
|
+
create = findReaderForElement(field_type, elem) || readonly_types[field_type];
|
|
366
|
+
if (!create) create = get;
|
|
405
367
|
}
|
|
406
|
-
};
|
|
407
|
-
if (data.loading_promise || field.loading_promise) {
|
|
408
|
-
Promise.all([
|
|
409
|
-
data.loading_promise,
|
|
410
|
-
field.loading_promise
|
|
411
|
-
]).then(run);
|
|
412
368
|
} else {
|
|
413
|
-
|
|
369
|
+
create = field_type === "function" ? field_editor : findEditerForElement(field_type, elem) || constructors[field_type];
|
|
370
|
+
if (!create && field.key) create = ipt;
|
|
414
371
|
}
|
|
372
|
+
setBinder(elem, create);
|
|
415
373
|
};
|
|
374
|
+
|
|
416
375
|
function main(elem) {
|
|
417
|
-
on(
|
|
418
|
-
if (changes.data || changes.field || changes.readonly) {
|
|
419
|
-
build.call(this);
|
|
420
|
-
}
|
|
421
|
-
});
|
|
376
|
+
on('changes')(elem, run);
|
|
422
377
|
return elem;
|
|
423
378
|
}
|
|
424
379
|
markEditer(constructors);
|
package/coms/zimoli/model.less
CHANGED
|
@@ -6,13 +6,6 @@
|
|
|
6
6
|
&[type=select] {
|
|
7
7
|
position: relative;
|
|
8
8
|
|
|
9
|
-
>.select:hover,
|
|
10
|
-
>.select:active {
|
|
11
|
-
&+.placeholder {
|
|
12
|
-
color: #fff9;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
9
|
.placeholder {
|
|
17
10
|
color: #0009;
|
|
18
11
|
padding-left: 6px;
|
|
@@ -24,9 +17,12 @@
|
|
|
24
17
|
z-index: 1;
|
|
25
18
|
pointer-events: none;
|
|
26
19
|
display: block;
|
|
20
|
+
border: none;
|
|
21
|
+
outline: none;
|
|
22
|
+
background: none;
|
|
27
23
|
}
|
|
28
24
|
|
|
29
|
-
.select[empty] {
|
|
25
|
+
.placeholder+.select[empty] {
|
|
30
26
|
color: transparent;
|
|
31
27
|
}
|
|
32
28
|
|
package/coms/zimoli/on.js
CHANGED
|
@@ -250,7 +250,7 @@ function checkKeyNeed(eventtypes, e) {
|
|
|
250
250
|
}
|
|
251
251
|
var pendingid = 0;
|
|
252
252
|
function pending(h, event) {
|
|
253
|
-
if (h instanceof Function) {
|
|
253
|
+
if (h.call instanceof Function) {
|
|
254
254
|
h.pending = true;
|
|
255
255
|
var res = h.call(this, event);
|
|
256
256
|
if (res && isFunction(res.then) && this.setAttribute) {
|
|
@@ -306,7 +306,8 @@ var broadcast = function (k, hk, event) {
|
|
|
306
306
|
// firefox 中键
|
|
307
307
|
Object.defineProperty(event, 'which', { value: 2 });
|
|
308
308
|
}
|
|
309
|
-
for (var
|
|
309
|
+
for (var hand of handlers) {
|
|
310
|
+
var [eventtypes, handler, context] = hand;
|
|
310
311
|
if (eventtypes.self && event.target !== element) continue;
|
|
311
312
|
if (!checkKeyNeed(eventtypes, event)) continue;
|
|
312
313
|
if (eventtypes.stop) event.stopPropagation();
|
|
@@ -320,7 +321,7 @@ var broadcast = function (k, hk, event) {
|
|
|
320
321
|
} else {
|
|
321
322
|
pending.call(context, handler, event);
|
|
322
323
|
}
|
|
323
|
-
if (eventtypes.once) remove.call(element, k, hk,
|
|
324
|
+
if (eventtypes.once) remove.call(element, k, hk, hand);
|
|
324
325
|
}
|
|
325
326
|
};
|
|
326
327
|
|
|
@@ -341,8 +342,8 @@ var append = function (k, hk, listener2, firstmost) {
|
|
|
341
342
|
var [eventtypes, handler, context] = listener2;
|
|
342
343
|
var element = this;
|
|
343
344
|
var handlers = element[hk];
|
|
344
|
-
for (var [e, h, c] of handlers) {
|
|
345
|
-
if (h === handler && shallowEqual(eventtypes, e, 2)
|
|
345
|
+
for (var [e, h, c, d] of handlers) {
|
|
346
|
+
if (h === handler && c === context && shallowEqual(eventtypes, e, 2)) return d.dulp = true, d;
|
|
346
347
|
}
|
|
347
348
|
if (k === changes_key) {
|
|
348
349
|
if (!element.$needchanges) element.$needchanges = 0;
|
|
@@ -350,6 +351,7 @@ var append = function (k, hk, listener2, firstmost) {
|
|
|
350
351
|
}
|
|
351
352
|
if (firstmost) handlers.unshift(listener2);
|
|
352
353
|
else handlers.push(listener2);
|
|
354
|
+
return listener2[3] = remove.bind(element, k, hk, listener2);
|
|
353
355
|
};
|
|
354
356
|
|
|
355
357
|
var on = document.efronton = function (k) {
|
|
@@ -373,8 +375,7 @@ var on = document.efronton = function (k) {
|
|
|
373
375
|
else target[on_event_path] = h;
|
|
374
376
|
}
|
|
375
377
|
var listener = [eventtypes, handler, context];
|
|
376
|
-
append.call(target, k, hk, listener, firstmost);
|
|
377
|
-
return remove.bind(target, k, hk, listener);
|
|
378
|
+
return append.call(target, k, hk, listener, firstmost);
|
|
378
379
|
};
|
|
379
380
|
|
|
380
381
|
else {
|
|
@@ -419,8 +420,7 @@ var on = document.efronton = function (k) {
|
|
|
419
420
|
|
|
420
421
|
}
|
|
421
422
|
var listener = [eventtypes, handler, context];
|
|
422
|
-
append.call(target, k, handler_path, listener, firstmost);
|
|
423
|
-
return remove.bind(target, k, handler_path, listener);
|
|
423
|
+
return append.call(target, k, handler_path, listener, firstmost);
|
|
424
424
|
}, addhandler = function (context, handler, firstmost) {
|
|
425
425
|
return _addhandler(context, context, handler, firstmost);
|
|
426
426
|
};
|
|
@@ -556,9 +556,11 @@ var invoke = function (event, type, pointerType) {
|
|
|
556
556
|
var autofire = function (key) {
|
|
557
557
|
var h = on(key);
|
|
558
558
|
handlersMap["on" + key] = function (target, handle) {
|
|
559
|
-
var
|
|
560
|
-
if (isMounted(target))
|
|
561
|
-
|
|
559
|
+
var off = h(target, handle);
|
|
560
|
+
if (!off.dulp && isMounted(target)) {
|
|
561
|
+
handle.call(target);
|
|
562
|
+
}
|
|
563
|
+
return off;
|
|
562
564
|
};
|
|
563
565
|
};
|
|
564
566
|
autofire('mounted');
|
package/coms/zimoli/padding.less
CHANGED
package/coms/zimoli/progbar.xht
CHANGED
|
@@ -2,23 +2,24 @@
|
|
|
2
2
|
& {
|
|
3
3
|
display: inline-block;
|
|
4
4
|
min-width: 60px;
|
|
5
|
-
height:
|
|
5
|
+
height: 14px;
|
|
6
6
|
color: #3ae;
|
|
7
|
-
border:
|
|
7
|
+
border: 3px double;
|
|
8
8
|
background: #f2f2f2;
|
|
9
9
|
position: relative;
|
|
10
|
-
border-radius:
|
|
10
|
+
border-radius: 4px;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
&[danger] {
|
|
14
14
|
color: #c24;
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
>div {
|
|
18
18
|
position: relative;
|
|
19
|
-
border:
|
|
20
|
-
border-
|
|
21
|
-
border-
|
|
19
|
+
border-top: 7px solid;
|
|
20
|
+
border-bottom: 1px solid;
|
|
21
|
+
border-left: 2px solid;
|
|
22
|
+
border-right: 2px solid;
|
|
22
23
|
height: 100%;
|
|
23
24
|
}
|
|
24
25
|
</style>
|