efront 3.12.5 → 3.13.3
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 +8 -0
- package/apps/pivot/home/welcome.html +1 -1
- package/apps/pivot/home/welcome.js +6 -9
- package/apps/pivot/log/boot.html +2 -0
- package/apps/pivot/log/boot.js +39 -0
- package/apps/pivot/log/boot.less +11 -0
- package/apps/pivot/log/count.html +5 -0
- package/apps/pivot/log/count.js +22 -0
- package/apps/pivot/log/count.less +16 -0
- package/apps/pivot/main.js +9 -10
- package/apps/pivot/menu.yml +7 -1
- package/apps/pivot/share/list.less +0 -4
- package/apps/pivot/user/edit.js +1 -0
- package/apps/pivot/user/list.js +4 -0
- package/apps/pivot/user/tag/edit.js +1 -0
- package/apps/pivot/user/tag/list.js +3 -0
- package/coms/basic/cross_.js +8 -1
- package/coms/basic/parseURL_test.js +2 -0
- package/coms/basic/parseYML.js +1 -1
- package/coms/basic/renderExpress.js +1 -1
- package/coms/frame/route.js +4 -0
- package/coms/pivot/plist.js +1 -1
- package/coms/zimoli/AudioContext_test.html +1 -1
- package/coms/zimoli/AudioContext_test.js +3 -3
- package/coms/zimoli/bind.js +4 -2
- package/coms/zimoli/cloneVisible.js +9 -2
- package/coms/zimoli/data.js +18 -2
- package/coms/zimoli/drag.js +3 -2
- package/coms/zimoli/field.html +15 -10
- package/coms/zimoli/menu.js +33 -13
- package/coms/zimoli/menu.less +31 -9
- package/coms/zimoli/menuItem.js +1 -1
- package/coms/zimoli/menuList.html +5 -3
- package/coms/zimoli/menuList.js +63 -28
- package/coms/zimoli/menuList.less +5 -0
- package/coms/zimoli/model.js +22 -2
- package/coms/zimoli/on.js +5 -3
- package/coms/zimoli/picture.js +30 -335
- package/coms/zimoli/picture_.js +356 -0
- package/coms/zimoli/prompt.js +3 -1
- package/coms/zimoli/render.js +22 -10
- package/coms/zimoli/renderDefaults.js +1 -0
- package/coms/zimoli/search.js +5 -4
- package/coms/zimoli/select.js +9 -5
- package/coms/zimoli/selectList.js +12 -9
- package/coms/zimoli/selectListEdit.js +1 -1
- package/coms/zimoli/success.js +4 -0
- package/coms/zimoli/success.less +13 -0
- package/coms/zimoli/table.html +6 -8
- package/coms/zimoli/table.js +25 -2
- package/coms/zimoli/table.less +24 -4
- package/coms/zimoli/view.less +4 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
var mountedPictures = [];
|
|
2
|
+
on("resize")(window, function () {
|
|
3
|
+
mountedPictures.forEach(a => a.update());
|
|
4
|
+
});
|
|
5
|
+
var getstation = function (n, s) {
|
|
6
|
+
var scale = Math.pow(10, Math.round(Math.log(n) / Math.log(10)));
|
|
7
|
+
var step;
|
|
8
|
+
if (n / scale < 1) {
|
|
9
|
+
step = s ? .01 : .05;
|
|
10
|
+
} else {
|
|
11
|
+
step = s ? .05 : .1;
|
|
12
|
+
}
|
|
13
|
+
step = step * scale;
|
|
14
|
+
n = Math.round(n / step) * step;
|
|
15
|
+
return n;
|
|
16
|
+
};
|
|
17
|
+
var trimCoord = move.trimCoord;
|
|
18
|
+
var isequal = (a, b) => a === b || Math.abs((a - b) / (a + b)) < 1e-12;
|
|
19
|
+
function picture_(image = document.createElement("div")) {
|
|
20
|
+
var image_width, image_height;
|
|
21
|
+
var scaled, x, y, min_scale, loaded_scale, locked_scale, click_scale, loaded_x, loaded_y;
|
|
22
|
+
var origin_width, origin_height;
|
|
23
|
+
var max_scale = 10 * devicePixelRatio;
|
|
24
|
+
var shape = function () {
|
|
25
|
+
image.shape(x, y, scaled / devicePixelRatio, origin_rotate);
|
|
26
|
+
};
|
|
27
|
+
image.reshape = shape;
|
|
28
|
+
var park = function () {
|
|
29
|
+
if (image.park) image.park(x, y, scaled / devicePixelRatio, origin_rotate);
|
|
30
|
+
};
|
|
31
|
+
var setInitParams = function () {
|
|
32
|
+
if (!image.width) return;
|
|
33
|
+
image_width = image.width / devicePixelRatio;
|
|
34
|
+
image_height = image.height / devicePixelRatio;
|
|
35
|
+
origin_width = image.clientWidth;
|
|
36
|
+
origin_height = image.clientHeight;
|
|
37
|
+
origin_rotate = 0;
|
|
38
|
+
locked_scale = loaded_scale = Math.min(image.clientHeight / image_height, image.clientWidth / image_width);
|
|
39
|
+
if (loaded_scale >= 0.9) {
|
|
40
|
+
if (loaded_scale < 1.2) {
|
|
41
|
+
click_scale = 1;
|
|
42
|
+
loaded_scale = .8;
|
|
43
|
+
} else if (loaded_scale < max_scale) {
|
|
44
|
+
click_scale = loaded_scale;
|
|
45
|
+
loaded_scale = 1;
|
|
46
|
+
} else {
|
|
47
|
+
click_scale = max_scale;
|
|
48
|
+
loaded_scale = 1;
|
|
49
|
+
}
|
|
50
|
+
} else {
|
|
51
|
+
click_scale = 1;
|
|
52
|
+
}
|
|
53
|
+
loaded_x = (image.clientWidth - image_width * loaded_scale) / 2;
|
|
54
|
+
loaded_y = (image.clientHeight - image_height * loaded_scale) / 2;
|
|
55
|
+
min_scale = loaded_scale * .75;
|
|
56
|
+
scaled = loaded_scale;
|
|
57
|
+
x = loaded_x;
|
|
58
|
+
y = loaded_y;
|
|
59
|
+
updatexy();
|
|
60
|
+
set_unlock();
|
|
61
|
+
};
|
|
62
|
+
var set_unlock = function () {
|
|
63
|
+
if (!loaded_scale) return;
|
|
64
|
+
fixpos();
|
|
65
|
+
shape();
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
on("append")(image, setInitParams);
|
|
69
|
+
|
|
70
|
+
on("append")(image, function () {
|
|
71
|
+
mountedPictures.push(image);
|
|
72
|
+
});
|
|
73
|
+
on("remove")(image, function () {
|
|
74
|
+
removeFromList(mountedPictures, image);
|
|
75
|
+
});
|
|
76
|
+
image.init = setInitParams;
|
|
77
|
+
image.locked = false;
|
|
78
|
+
var last_click_time = 0;
|
|
79
|
+
|
|
80
|
+
on("click")(image, function (event) {
|
|
81
|
+
var time = +new Date;
|
|
82
|
+
var delta_time = time - last_click_time;
|
|
83
|
+
last_click_time = time;
|
|
84
|
+
if (delta_time > 300) return;
|
|
85
|
+
var image = this;
|
|
86
|
+
var __scaled = scaled, _x = x, _y = y;
|
|
87
|
+
setInitParams();
|
|
88
|
+
image.locked = isequal(__scaled, loaded_scale) && isequal(loaded_x, x) && isequal(loaded_y, y);
|
|
89
|
+
var layerx = event.offsetX || 0;
|
|
90
|
+
var layery = event.offsetY || 0;
|
|
91
|
+
if (layerx)
|
|
92
|
+
if (image.locked) {
|
|
93
|
+
var width = image_width * loaded_scale, height = image_height * loaded_scale;
|
|
94
|
+
if (layerx > loaded_x + width || layerx < loaded_x || width < image.offsetWidth >> 2) {
|
|
95
|
+
layerx = loaded_x + width / 2;
|
|
96
|
+
}
|
|
97
|
+
if (layery > loaded_y + height || layery < loaded_y || height < image.offsetHeight >> 2) {
|
|
98
|
+
layery = loaded_y + height / 2;
|
|
99
|
+
}
|
|
100
|
+
scale(layerx, layery, click_scale / loaded_scale);
|
|
101
|
+
} else {
|
|
102
|
+
set_unlock();
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
image.getScale = function () {
|
|
106
|
+
if (!this.locked && !loaded_scale) {
|
|
107
|
+
setInitParams();
|
|
108
|
+
}
|
|
109
|
+
return +String(+scaled + 0.00005).slice(0, 6);
|
|
110
|
+
};
|
|
111
|
+
var fixpos = function () {
|
|
112
|
+
var width = image_width * scaled;
|
|
113
|
+
var height = image_height * scaled;
|
|
114
|
+
var r = image.rotate | 0;
|
|
115
|
+
var [, , w, h] = getrotatedltwh(r);
|
|
116
|
+
var x0 = x + (width - w) / 2;
|
|
117
|
+
var y0 = y + (height - h) / 2;
|
|
118
|
+
var [x1, y1] = trimCoord([image.clientWidth, image.clientHeight], [x0, y0, w, h], -1);
|
|
119
|
+
x += x1 - x0;
|
|
120
|
+
y += y1 - y0;
|
|
121
|
+
};
|
|
122
|
+
var scale = function (layerx, layery, ratio) {
|
|
123
|
+
if (!image.locked) return;
|
|
124
|
+
scaled *= ratio;
|
|
125
|
+
x = (x - layerx) * ratio + layerx;
|
|
126
|
+
y = (y - layery) * ratio + layery;
|
|
127
|
+
shape();
|
|
128
|
+
};
|
|
129
|
+
var touch = function ([x1, y1, x2, y2], [m1, n1, m2, n2]) {
|
|
130
|
+
var l1 = Math.sqrt(Math.pow(m1 - m2, 2) + Math.pow(n1 - n2, 2));
|
|
131
|
+
var l2 = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
|
|
132
|
+
var scale = l1 / l2;
|
|
133
|
+
if (scaled >= max_scale * 1.1 && scale > 1) return;
|
|
134
|
+
if (scaled <= min_scale && scale < 1) return;
|
|
135
|
+
scaled *= scale;
|
|
136
|
+
var centerx = (x1 + x2) / 2;
|
|
137
|
+
var centery = (y1 + y2) / 2;
|
|
138
|
+
var centerm = (m1 + m2) / 2;
|
|
139
|
+
var centern = (n1 + n2) / 2;
|
|
140
|
+
x = (x - centerx) * scale + centerm;
|
|
141
|
+
y = (y - centery) * scale + centern;
|
|
142
|
+
shape();
|
|
143
|
+
};
|
|
144
|
+
var recover = function (change) {
|
|
145
|
+
var aimed_scale = getstation(scaled);
|
|
146
|
+
if (aimed_scale !== scaled) {
|
|
147
|
+
change = true;
|
|
148
|
+
x = (x - image.clientWidth / 2) / scaled * aimed_scale + image.clientWidth / 2;
|
|
149
|
+
y = (y - image.clientHeight / 2) / scaled * aimed_scale + image.clientHeight / 2;
|
|
150
|
+
scaled = aimed_scale;
|
|
151
|
+
}
|
|
152
|
+
if (scaled <= loaded_scale * 1.2) {
|
|
153
|
+
scaled = loaded_scale;
|
|
154
|
+
x = loaded_x;
|
|
155
|
+
y = loaded_y;
|
|
156
|
+
change = true;
|
|
157
|
+
}
|
|
158
|
+
if (scaled > max_scale) {
|
|
159
|
+
change = true;
|
|
160
|
+
x = (x - image.clientWidth / 2) * max_scale / scaled + image.clientWidth / 2;
|
|
161
|
+
y = (y - image.clientHeight / 2) * max_scale / scaled + image.clientHeight / 2;
|
|
162
|
+
scaled = max_scale;
|
|
163
|
+
}
|
|
164
|
+
var saved_x = x, saved_y = y;
|
|
165
|
+
fixpos();
|
|
166
|
+
if (change || saved_x !== x || saved_y !== y) {
|
|
167
|
+
park();
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
var move = inertia(function (deltax, deltay) {
|
|
171
|
+
var saved_x = x, saved_y = y;
|
|
172
|
+
x += deltax, y += deltay;
|
|
173
|
+
fixpos();
|
|
174
|
+
shape();
|
|
175
|
+
if (saved_x === x && saved_y === y) return false;
|
|
176
|
+
});
|
|
177
|
+
var saved_event, wheeltime;
|
|
178
|
+
onmousewheel(image, function (event) {
|
|
179
|
+
var { offsetX: layerX, offsetY: layerY, deltaY } = event;
|
|
180
|
+
if (this.locked) event.preventDefault();
|
|
181
|
+
if (!deltaY) return;
|
|
182
|
+
if (!this.locked) setInitParams();
|
|
183
|
+
this.locked = true;
|
|
184
|
+
var ratio = Math.pow(0.99, 20 * Math.atan(deltaY / 20));
|
|
185
|
+
var __scaled = scaled;
|
|
186
|
+
__scaled *= ratio;
|
|
187
|
+
if (__scaled > max_scale && ratio > 1) {
|
|
188
|
+
__scaled = max_scale;
|
|
189
|
+
}
|
|
190
|
+
if (__scaled < min_scale && ratio < 1) {
|
|
191
|
+
__scaled = min_scale;
|
|
192
|
+
}
|
|
193
|
+
ratio = __scaled / scaled;
|
|
194
|
+
scale(layerX, layerY, ratio);
|
|
195
|
+
});
|
|
196
|
+
moveupon(image, {
|
|
197
|
+
start(event) {
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
saved_event = event;
|
|
200
|
+
event.moveLocked = scaled > locked_scale;
|
|
201
|
+
if (!this.locked) {
|
|
202
|
+
setInitParams();
|
|
203
|
+
}
|
|
204
|
+
move.reset();
|
|
205
|
+
},
|
|
206
|
+
move(event) {
|
|
207
|
+
if (event.moveLocked) return;
|
|
208
|
+
event.moveLocked = scaled > locked_scale;
|
|
209
|
+
event.preventDefault();
|
|
210
|
+
if (event.touches && saved_event.touches) {
|
|
211
|
+
if (event.touches.length !== saved_event.touches.length) {
|
|
212
|
+
saved_event = event;
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
switch (event.touches.length) {
|
|
217
|
+
case 1:
|
|
218
|
+
if (!this.locked) return;
|
|
219
|
+
break;
|
|
220
|
+
case 2:
|
|
221
|
+
this.locked = true;
|
|
222
|
+
event.moveLocked = true;
|
|
223
|
+
var [xy1, xy2] = saved_event.touches;
|
|
224
|
+
var [mn1, mn2] = event.touches;
|
|
225
|
+
var { left, top } = getScreenPosition(image);
|
|
226
|
+
top += image.clientTop;
|
|
227
|
+
left += image.clientLeft;
|
|
228
|
+
touch(
|
|
229
|
+
[xy1.clientX - left, xy1.clientY - top, xy2.clientX - left, xy2.clientY - top],
|
|
230
|
+
[mn1.clientX - left, mn1.clientY - top, mn2.clientX - left, mn2.clientY - top]
|
|
231
|
+
);
|
|
232
|
+
saved_event = event;
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (event.which === 3) {
|
|
237
|
+
event.moveLocked = true;
|
|
238
|
+
rotatexy(saved_event.clientX, saved_event.clientY, event.clientX, event.clientY);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
if (!this.locked) return;
|
|
242
|
+
var deltax = event.clientX - saved_event.clientX,
|
|
243
|
+
deltay = event.clientY - saved_event.clientY;
|
|
244
|
+
move(deltax, deltay);
|
|
245
|
+
}
|
|
246
|
+
saved_event = event;
|
|
247
|
+
},
|
|
248
|
+
end(event) {
|
|
249
|
+
if (saved_event) {
|
|
250
|
+
if (event.timeStamp - saved_event.timeStamp > 120) {
|
|
251
|
+
move.reset();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
saved_event = null;
|
|
255
|
+
event.moveLocked = scaled >= locked_scale;
|
|
256
|
+
|
|
257
|
+
if (this.locked && onclick.preventClick) move.smooth(recover);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
var origin_rotate = 0;
|
|
261
|
+
var rotatexy = function (x1, y1, x2, y2) {
|
|
262
|
+
var centerx = image.clientWidth / 2, centery = image.clientHeight / 2;
|
|
263
|
+
var deltax = x2 - x1, deltay = y2 - y1;
|
|
264
|
+
var rx = x1 - centerx, ry = y1 - centery;
|
|
265
|
+
var sign = -ry * deltax + rx * deltay;
|
|
266
|
+
var delta = 90 * Math.sqrt(deltax * deltax + deltay * deltay) / Math.sqrt(rx * rx + ry * ry);
|
|
267
|
+
if (delta > 10) delta = 10;
|
|
268
|
+
if (sign) image.rotateBy(sign > 0 ? delta : -delta);
|
|
269
|
+
}
|
|
270
|
+
var updatexy = function () {
|
|
271
|
+
var deg = image.rotate - origin_rotate;
|
|
272
|
+
if (isFinite(deg)) {
|
|
273
|
+
origin_rotate = image.rotate;
|
|
274
|
+
[x, y] = getrotatedltwh(deg, scaled);
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
var getrotatedltwh = function (a, s = scaled) {
|
|
278
|
+
var w = image_width * s;
|
|
279
|
+
var h = image_height * s;
|
|
280
|
+
var c = [image.clientWidth / 2, image.clientHeight / 2];
|
|
281
|
+
var m = x + w / 2;
|
|
282
|
+
var n = y + h / 2;
|
|
283
|
+
var [c1, c2] = rotate([m, n], -a, c);
|
|
284
|
+
c1 -= w / 2;
|
|
285
|
+
c2 -= h / 2;
|
|
286
|
+
var a = origin_rotate;
|
|
287
|
+
var l = c[0] - w / 2;
|
|
288
|
+
var r = l + w;
|
|
289
|
+
var t = c[1] - h / 2;
|
|
290
|
+
var b = t + h;
|
|
291
|
+
var [x1, y1] = rotate([l, t], a, c);
|
|
292
|
+
var [x2, y2] = rotate([r, t], a, c);
|
|
293
|
+
var [x3, y3] = rotate([l, b], a, c);
|
|
294
|
+
var [x4, y4] = rotate([r, b], a, c);
|
|
295
|
+
var l = Math.min(x1, x2, x3, x4);
|
|
296
|
+
var t = Math.min(y1, y2, y3, y4);
|
|
297
|
+
var w = Math.max(x1, x2, x3, x4) - l;
|
|
298
|
+
var h = Math.max(y1, y2, y3, y4) - t;
|
|
299
|
+
return [c1, c2, w, h];
|
|
300
|
+
};
|
|
301
|
+
image.update = function (animate) {
|
|
302
|
+
if (image.locked) {
|
|
303
|
+
updatexy();
|
|
304
|
+
x += (image.clientWidth - origin_width) / 2;
|
|
305
|
+
y += (image.clientHeight - origin_height) / 2;
|
|
306
|
+
origin_height = image.clientHeight;
|
|
307
|
+
origin_width = image.clientWidth;
|
|
308
|
+
if (animate !== false) fixpos();
|
|
309
|
+
shape();
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
setInitParams();
|
|
313
|
+
if (animate !== false) {
|
|
314
|
+
recover();
|
|
315
|
+
} else {
|
|
316
|
+
if (animate !== false) fixpos();
|
|
317
|
+
shape();
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
};
|
|
321
|
+
image.rotateTo = function (deg) {
|
|
322
|
+
this.rotate = deg;
|
|
323
|
+
this.update();
|
|
324
|
+
};
|
|
325
|
+
image.rotateBy = function (deg) {
|
|
326
|
+
var r = this.rotate | 0;
|
|
327
|
+
if (deg === 90 || deg === -90) {
|
|
328
|
+
r += deg;
|
|
329
|
+
if (deg > 0) {
|
|
330
|
+
// 九进八舍
|
|
331
|
+
var a = r / 90;
|
|
332
|
+
if (Math.ceil(a) - a < .01) {
|
|
333
|
+
r = Math.ceil(a) * 90;
|
|
334
|
+
} else {
|
|
335
|
+
r = Math.floor(a) * 90;
|
|
336
|
+
}
|
|
337
|
+
} else {
|
|
338
|
+
// 一进零舍
|
|
339
|
+
var a = r / 90;
|
|
340
|
+
if (Math.ceil(a) - a > .01) {
|
|
341
|
+
r = Math.ceil(a) * 90;
|
|
342
|
+
} else {
|
|
343
|
+
r = Math.floor(a) * 90;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
} else {
|
|
347
|
+
r += deg;
|
|
348
|
+
}
|
|
349
|
+
this.rotate = r;
|
|
350
|
+
this.update(deg === 90 || deg === -90);
|
|
351
|
+
};
|
|
352
|
+
on("contextmenu")(image, function (e) {
|
|
353
|
+
if (onclick.preventClick) e.preventDefault();
|
|
354
|
+
});
|
|
355
|
+
return image;
|
|
356
|
+
}
|
package/coms/zimoli/prompt.js
CHANGED
|
@@ -25,8 +25,10 @@ function prompt(msg = "请输入", check) {
|
|
|
25
25
|
});
|
|
26
26
|
})
|
|
27
27
|
on("mousedown")(c, e => e.target !== ipt && e.preventDefault() | ipt.focus());
|
|
28
|
-
on("keydown.enter")(c, function () {
|
|
28
|
+
on("keydown.enter")(c, function (event) {
|
|
29
|
+
if (event.defaultPrevented) return;
|
|
29
30
|
if (check && check(ipt.value) === false) return;
|
|
31
|
+
event.preventDefault();
|
|
30
32
|
oked = true;
|
|
31
33
|
remove(c);
|
|
32
34
|
fire();
|
package/coms/zimoli/render.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
var hasOwnProperty = {}.hasOwnProperty;
|
|
2
2
|
var renderElements = Object.create(null);
|
|
3
3
|
var presets = Object.create(null);
|
|
4
|
+
presets.template = function (t) {
|
|
5
|
+
var node = document.createElement("div");
|
|
6
|
+
var comment = document.createComment('template');
|
|
7
|
+
node.innerHTML = t.innerHTML;
|
|
8
|
+
comment.with = [].slice.call(node.childNodes, 0);
|
|
9
|
+
renderElement(comment.with, t.$scope, t.$parentScopes);
|
|
10
|
+
remove(node.childNodes);
|
|
11
|
+
return comment;
|
|
12
|
+
};
|
|
4
13
|
window.renderElements = renderElements;
|
|
5
14
|
var renderidOffset = 10;
|
|
6
15
|
var renderidClosed = 0;
|
|
@@ -70,7 +79,6 @@ var initialComment = function (renders, type, expression) {
|
|
|
70
79
|
onremove(comment, removeRenderElement);
|
|
71
80
|
appendChild.after(this, comment);
|
|
72
81
|
if (!/if/i.test(type)) remove(this);
|
|
73
|
-
this.with = comment;
|
|
74
82
|
rebuild(comment);
|
|
75
83
|
return comment;
|
|
76
84
|
};
|
|
@@ -214,17 +222,12 @@ var createIf = function (search, id = 0) {
|
|
|
214
222
|
var element = elements[cx];
|
|
215
223
|
if (cx === shouldMount) {
|
|
216
224
|
appendChild.before(this, element);
|
|
217
|
-
element.with = this;
|
|
218
225
|
if (element.renderid < 0) {
|
|
219
226
|
element.renderid = id;
|
|
220
|
-
|
|
221
|
-
delete element.with;
|
|
222
|
-
element = render(element);
|
|
223
|
-
element.with = w;
|
|
227
|
+
elements[cx] = render(element);
|
|
224
228
|
}
|
|
225
229
|
}
|
|
226
230
|
else {
|
|
227
|
-
delete element.with;
|
|
228
231
|
remove(element);
|
|
229
232
|
}
|
|
230
233
|
}
|
|
@@ -624,7 +627,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
624
627
|
if (parentNode.renderid > 1 || parentNode.isMounted) element.renderid = 2;
|
|
625
628
|
}
|
|
626
629
|
element.renders = element.renders ? [].concat(element.renders) : [];
|
|
627
|
-
var { ons, copys, attrs, props, binds, context: withContext } = element.$struct;
|
|
630
|
+
var { ons, copys, attrs, props, binds, context: withContext, ids } = element.$struct;
|
|
628
631
|
delete element.$struct;
|
|
629
632
|
if (binds.src) {
|
|
630
633
|
element.$src = parseRepeat(binds.src);
|
|
@@ -672,7 +675,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
672
675
|
}
|
|
673
676
|
}
|
|
674
677
|
}
|
|
675
|
-
if (element.children.length) renderElement(element.children, scope, parentScopes);
|
|
678
|
+
if (element.children && element.children.length) renderElement(element.children, scope, parentScopes);
|
|
676
679
|
if (!isFirstRender) return element;
|
|
677
680
|
for (var k in binds) {
|
|
678
681
|
if (directives.hasOwnProperty(k)) {
|
|
@@ -698,6 +701,9 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
698
701
|
if (element.isMounted || element.renderid > 1) addRenderElement.call(element);
|
|
699
702
|
}
|
|
700
703
|
if (elementid) scope[elementid] = element;
|
|
704
|
+
for (var id of ids) {
|
|
705
|
+
scope[id] = element;
|
|
706
|
+
}
|
|
701
707
|
return element;
|
|
702
708
|
}
|
|
703
709
|
function renderStructure(element, scope, parentScopes = []) {
|
|
@@ -721,8 +727,14 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
721
727
|
var binds = {};
|
|
722
728
|
var attr1 = {};
|
|
723
729
|
var props = {};
|
|
730
|
+
var ids = [];
|
|
724
731
|
for (var attr of attrs) {
|
|
725
732
|
var { name, value } = attr;
|
|
733
|
+
if (/^#/.test(name)) {
|
|
734
|
+
ids.push(name.slice(1));
|
|
735
|
+
element.removeAttribute(name);
|
|
736
|
+
continue;
|
|
737
|
+
};
|
|
726
738
|
if (/^(?:class|style|src|\:|placeholder)$/i.test(name)) {
|
|
727
739
|
copys.push(attr);
|
|
728
740
|
continue;
|
|
@@ -771,7 +783,7 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
771
783
|
props[name.replace(/\-(\w)/g, (_, w) => w.toUpperCase())] = value === "" ? true : value;
|
|
772
784
|
}
|
|
773
785
|
}
|
|
774
|
-
if (!element.$struct) element.$struct = { ons, copys, binds, attrs: attr1, props, context: withContext };
|
|
786
|
+
if (!element.$struct) element.$struct = { ons, copys, binds, attrs: attr1, props, context: withContext, ids };
|
|
775
787
|
if (element.renderid <= -1) createStructure.call(element, types.if, types.repeat, withContext);
|
|
776
788
|
}
|
|
777
789
|
function render(element, scope, parentScopes) {
|
package/coms/zimoli/search.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
function search(seartext, options) {
|
|
1
|
+
function search(seartext, options, path = "name") {
|
|
2
2
|
if (options instanceof Array) {
|
|
3
3
|
var hasFullmatch = false;
|
|
4
4
|
var a = options.map(o => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
var name = seek(o, path);
|
|
6
|
+
if (name === seartext) hasFullmatch = true;
|
|
7
|
+
var [power, m] = mark.power(name, seartext);
|
|
8
|
+
return { power, [path]: m, value: o.value, item: o };
|
|
8
9
|
}).filter(a => a.power > 0);
|
|
9
10
|
a.sort(function (a, b) {
|
|
10
11
|
return b.power - a.power;
|
package/coms/zimoli/select.js
CHANGED
|
@@ -24,6 +24,10 @@ var _remove = function () {
|
|
|
24
24
|
var preventDefault = function (event) {
|
|
25
25
|
event.preventDefault();
|
|
26
26
|
};
|
|
27
|
+
var preventDefault1 = function (event) {
|
|
28
|
+
if (saved_list) return;
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
}
|
|
27
31
|
var lastTimeClick = 0;
|
|
28
32
|
var removeByBlur = function () {
|
|
29
33
|
if (!getTargetIn(this, document.activeElement)) _remove();
|
|
@@ -71,8 +75,8 @@ function select(target, list, removeOnSelect, direction) {
|
|
|
71
75
|
target.innerHTML = `<option selected value="${this.value}">${this.name || this.value}</option>`
|
|
72
76
|
}
|
|
73
77
|
target.value = this.value;
|
|
74
|
-
dispatch(target, "change");
|
|
75
78
|
}
|
|
79
|
+
dispatch(target, "change");
|
|
76
80
|
}
|
|
77
81
|
};
|
|
78
82
|
var onlistclick = function (event) {
|
|
@@ -96,8 +100,8 @@ function select(target, list, removeOnSelect, direction) {
|
|
|
96
100
|
}
|
|
97
101
|
on("keydown.up")(target, preventDefault);
|
|
98
102
|
on("keydown.down")(target, preventDefault);
|
|
99
|
-
on("keydown.enter")(target,
|
|
100
|
-
on("keydown.space")(target,
|
|
103
|
+
on("keydown.enter")(target, preventDefault1);
|
|
104
|
+
on("keydown.space")(target, preventDefault1);
|
|
101
105
|
var pop = function () {
|
|
102
106
|
if (saved_list !== list) mousedown.call(this);
|
|
103
107
|
};
|
|
@@ -116,7 +120,7 @@ function select(target, list, removeOnSelect, direction) {
|
|
|
116
120
|
else if (target.$src) {
|
|
117
121
|
var generator = getGenerator(target);
|
|
118
122
|
var initList2 = function (src) {
|
|
119
|
-
list = selectList(generator, src, target.multiple, target.editable);
|
|
123
|
+
list = selectList(generator, src, !!target.multiple, !!target.editable);
|
|
120
124
|
if (!target.multiple) {
|
|
121
125
|
onclick(list, onlistclick);
|
|
122
126
|
}
|
|
@@ -158,7 +162,7 @@ function select(target, list, removeOnSelect, direction) {
|
|
|
158
162
|
var allOptions = [].concat.apply([], target.querySelectorAll("option"));
|
|
159
163
|
if (deepEqual.shallow(allOptions, savedOptions)) return;
|
|
160
164
|
savedOptions = allOptions;
|
|
161
|
-
list = selectList(allOptions, target.multiple, target.editable);
|
|
165
|
+
list = selectList(allOptions, !!target.multiple, !!target.editable);
|
|
162
166
|
if (!target.multiple) {
|
|
163
167
|
onclick(list, onlistclick);
|
|
164
168
|
}
|
|
@@ -39,14 +39,17 @@ function main() {
|
|
|
39
39
|
generator = a;
|
|
40
40
|
break;
|
|
41
41
|
case "boolean":
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
case "undefined":
|
|
43
|
+
if (multiple === void 0) multiple = !!a;
|
|
44
|
+
else addable = !!a;
|
|
45
|
+
break;
|
|
44
46
|
case "object":
|
|
45
47
|
if (isNode(a)) {
|
|
46
48
|
page = a;
|
|
47
49
|
if (!generator) generator = getGenerator(page);
|
|
48
50
|
}
|
|
49
51
|
else if (a.length) children = a;
|
|
52
|
+
break;
|
|
50
53
|
|
|
51
54
|
}
|
|
52
55
|
}
|
|
@@ -57,7 +60,7 @@ function main() {
|
|
|
57
60
|
function createItem(option) {
|
|
58
61
|
var key = option.key || option.value;
|
|
59
62
|
if (key in itemMap) return itemMap[key];
|
|
60
|
-
var item = itemMap[
|
|
63
|
+
var item = itemMap[key] = document.createElement('div');
|
|
61
64
|
item.setAttribute("item", '');
|
|
62
65
|
item.innerHTML = option.innerHTML || option.name;
|
|
63
66
|
item.name = option.name || option.innerHTML;
|
|
@@ -75,12 +78,12 @@ function main() {
|
|
|
75
78
|
iconed = icon;
|
|
76
79
|
if (multiple) {
|
|
77
80
|
item.setAttribute("selected", "");
|
|
78
|
-
page.value.push(
|
|
81
|
+
page.value.push(key);
|
|
79
82
|
}
|
|
80
83
|
else {
|
|
81
84
|
item.setAttribute("selected", "");
|
|
82
85
|
page.activeNode = item;
|
|
83
|
-
page.value =
|
|
86
|
+
page.value = key
|
|
84
87
|
}
|
|
85
88
|
}
|
|
86
89
|
if (option.disabled) {
|
|
@@ -139,10 +142,9 @@ function main() {
|
|
|
139
142
|
if (a in itemMap) return false;
|
|
140
143
|
cast(page.target, "add-option", a);
|
|
141
144
|
children.push({ name: a, key: a });
|
|
142
|
-
page.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}), adder);
|
|
145
|
+
remove(page.children);
|
|
146
|
+
page.go(children.length - 1);
|
|
147
|
+
appendChild(page, adder);
|
|
146
148
|
break;
|
|
147
149
|
case this.children[1]:
|
|
148
150
|
var options = [].slice.call(children, 0, children.length);
|
|
@@ -213,6 +215,7 @@ function main() {
|
|
|
213
215
|
moveFocus(0);
|
|
214
216
|
})
|
|
215
217
|
var enter = function (e) {
|
|
218
|
+
if (e.defaultPrevented) return;
|
|
216
219
|
e.preventDefault();
|
|
217
220
|
var e = page.getIndexedElement(focus);
|
|
218
221
|
if (e) e.click();
|
package/coms/zimoli/table.html
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
<
|
|
2
|
-
<tr>
|
|
3
|
-
<td -repeat="f in fields track by f.id" :style="{width:f.width}"><i -if="f.icon"
|
|
1
|
+
<tbody -src="d in data" :style="{'max-height':((innerHeight-46)/32|0)*32+36}">
|
|
2
|
+
<tr thead #adapter insert>
|
|
3
|
+
<td -repeat="f in fields track by f.id" :style="{width:f.width}" @dblclick="sort(f)"><i -if="f.icon"
|
|
4
4
|
-class="f.icon"></i></span><span -if="f.name" -html="f.name"></span>
|
|
5
5
|
</td>
|
|
6
6
|
</tr>
|
|
7
|
-
</thead>
|
|
8
|
-
<tbody -src="d in data">
|
|
9
7
|
<tr>
|
|
10
8
|
<td -repeat="f in fields">
|
|
11
|
-
<model -if="f.key" :field=f :data=d readonly
|
|
12
|
-
<a on-click="o.do(d)" -if="!f.key&&f.options&&(!o.when||o.when(d))"
|
|
13
|
-
-repeat="o in f.options">
|
|
9
|
+
<model -if="f.key" :field=f :data=d readonly></model>
|
|
10
|
+
<a on-click="o.do(d)" -if="!f.key&&f.options&&(!o.when||o.when(d))"
|
|
11
|
+
_type="o.type instanceof Function?o.type(d):o.type" -repeat="o in f.options">
|
|
14
12
|
<span -text="o.name instanceof Function?o.name(d):o.name"></span>
|
|
15
13
|
</a>
|
|
16
14
|
</td>
|