efront 2.44.8 → 2.46.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.
Files changed (54) hide show
  1. package/coms/basic/BitTree.js +1 -1
  2. package/coms/basic/crypt.js +1 -1
  3. package/coms/basic/decodeRange.js +0 -1
  4. package/coms/basic/loader.js +3 -2
  5. package/coms/basic/parseURL_test.js +32 -0
  6. package/coms/basic/refilm_decode.js +13 -2
  7. package/coms/basic/valid.js +10 -0
  8. package/coms/compile/scanner2.js +1 -1
  9. package/coms/zimoli/alert.js +12 -7
  10. package/coms/zimoli/appendChild.js +1 -0
  11. package/coms/zimoli/autodragchildren.js +96 -116
  12. package/coms/zimoli/avatar.js +0 -1
  13. package/coms/zimoli/button.js +5 -0
  14. package/coms/zimoli/button.less +6 -2
  15. package/coms/zimoli/checker.less +13 -14
  16. package/coms/zimoli/color.js +128 -83
  17. package/coms/zimoli/colorpad.js +2 -4
  18. package/coms/zimoli/cross.js +1 -1
  19. package/coms/zimoli/css.js +1 -0
  20. package/coms/zimoli/data.js +16 -9
  21. package/coms/zimoli/drag.js +2 -1
  22. package/coms/zimoli/encode62.js +13 -0
  23. package/coms/zimoli/field.html +2 -0
  24. package/coms/zimoli/field.js +41 -17
  25. package/coms/zimoli/field.less +19 -0
  26. package/coms/zimoli/form.js +8 -0
  27. package/coms/zimoli/gallery.js +2 -12
  28. package/coms/zimoli/getGenerator.js +16 -10
  29. package/coms/zimoli/getTreeFromData.js +9 -3
  30. package/coms/zimoli/image.less +4 -0
  31. package/coms/zimoli/list.js +2 -12
  32. package/coms/zimoli/menu.js +14 -14
  33. package/coms/zimoli/menu.less +1 -1
  34. package/coms/zimoli/menuItem.js +4 -1
  35. package/coms/zimoli/menuList.js +4 -3
  36. package/coms/zimoli/model.js +1 -0
  37. package/coms/zimoli/on.js +18 -0
  38. package/coms/zimoli/radio.html +1 -3
  39. package/coms/zimoli/radio.less +22 -16
  40. package/coms/zimoli/render.js +118 -151
  41. package/coms/zimoli/renderDefaults.js +1 -0
  42. package/coms/zimoli/submit.js +41 -0
  43. package/coms/zimoli/table.html +16 -0
  44. package/coms/zimoli/table.js +23 -1
  45. package/coms/zimoli/table.less +57 -39
  46. package/coms/zimoli/tree.js +4 -4
  47. package/coms/zimoli/view.js +0 -5
  48. package/coms/zimoli/view.less +21 -11
  49. package/coms/zimoli/zimoli.js +21 -13
  50. package/package.json +1 -1
  51. package/public/efront.js +1 -1
  52. package/coms/zimoli/beian.html +0 -1
  53. package/coms/zimoli/beian.js +0 -5
  54. package/coms/zimoli/beian.less +0 -13
@@ -3,60 +3,92 @@
3
3
  */
4
4
 
5
5
  var { min, max, sin, cos, round, sqrt, random, PI, abs = a => a < 0 ? -a : a } = Math;
6
-
6
+ var [v_r, v_g, v_b] = [.299, .587, .114];
7
7
 
8
8
  var rgb4v = function (r, g, b, v) {
9
- v = v - rgb2v(r, g, b);
10
- return trim3v(r + v, g + v, b + v);
9
+ var d = v - rgb2v(r, g, b);
10
+ return [r + d, g + d, b + d];
11
11
  };
12
12
 
13
- var trim3v = function (r, g, b) {
14
- do {
15
- var rest = 0;
16
- var count = 1;
17
- if (r >= 255) rest += (r - 255) * .299, r = 255, count -= .299;
18
- if (g >= 255) rest += (g - 255) * .587, g = 255, count -= .587;
19
- if (b >= 255) rest += (b - 255) * .114, b = 255, count -= .114;
20
- if (count > 0.01 && rest > 0) {
21
- rest = rest / count;
22
- if (r < 255) r += rest;
23
- if (g < 255) g += rest;
24
- if (b < 255) b += rest;
25
- }
26
- } while (rest > 0);
27
- do {
28
- var rest = 0;
29
- var count = 1;
30
- if (r <= 0) rest += r * .299, r = 0, count -= .299;
31
- if (g <= 0) rest += g * .587, g = 0, count -= .587;
32
- if (b <= 0) rest += b * .114, b = 0, count -= .114;
33
- if (count > 0.01 && rest > 0) {
34
- rest = rest / count;
35
- if (r > 0) r += rest;
36
- if (g > 0) g += rest;
37
- if (b > 0) b += rest;
38
- }
39
- } while (rest > 0);
13
+
14
+
15
+ var rgb4h = function (r, g, b, h) {
16
+ var [p, q, s] = [r, g, b].sort();
17
+ var m = s - p;
18
+ h = (h % 360 + 360) % 360;
19
+ if (h < 60) {
20
+ r = s;
21
+ g = p + m * h / 60;
22
+ b = p;
23
+ }
24
+ else if (h < 120) {
25
+ r = p + m * (120 - h) / 60;
26
+ g = s;
27
+ b = p;
28
+ }
29
+ else if (h < 180) {
30
+ r = p;
31
+ g = s;
32
+ b = p + m * (h - 120) / 60
33
+ }
34
+ else if (h < 240) {
35
+ r = p;
36
+ g = p + m * (240 - h) / 60;
37
+ b = s;
38
+ }
39
+ else if (h < 300) {
40
+ r = p + m * (h - 240) / 60;
41
+ g = p;
42
+ b = s;
43
+ }
44
+ else {
45
+ r = s;
46
+ g = p;
47
+ b = p + m * (360 - h) / 60;
48
+ }
40
49
  return [r, g, b];
41
- }
50
+ };
51
+
52
+
53
+ var rgb2h = function (r, g, b) {
54
+ var m = max(r, g, b);
55
+ var n = min(r, g, b);
56
+ var h;
57
+ if (m === n) h = 0;
58
+ else if (m === r) {
59
+ if (g >= b) {
60
+ h = 60 * (g - b) / (m - n);
61
+ } else {
62
+ h = 360 + 60 * (g - b) / (m - n);
63
+ }
64
+ }
65
+ else if (m === g) {
66
+ h = 120 + 60 * (b - r) / (m - n);
67
+ }
68
+ else if (m === b) {
69
+ h = 240 + 60 * (r - g) / (m - n);
70
+
71
+ }
72
+ return h;
73
+ };
42
74
 
43
75
  var rgb2s = function (r, g, b) {
44
- var m = Math.min(r, g, b);
76
+ var m = min(r, g, b);
45
77
  if (m) {
46
78
  r -= m;
47
79
  g -= m;
48
80
  b -= m;
49
81
  }
50
- return Math.max(r, g, b) / 255;
82
+ return max(r, g, b) / 255;
51
83
  };
52
84
  var rgb4s = function (r, g, b, s) {
53
- var m = Math.min(r, g, b);
85
+ var m = min(r, g, b);
54
86
  if (m) {
55
87
  r -= m;
56
88
  g -= m;
57
89
  b -= m;
58
90
  }
59
- s = s * 255 / Math.max(r, g, b);
91
+ s = s * 255 / (max(r, g, b) || 1);
60
92
  if (s) {
61
93
  r *= s;
62
94
  g *= s;
@@ -69,37 +101,45 @@ var rgb4s = function (r, g, b, s) {
69
101
  function rotate_rgb(RGBA, theta) {
70
102
  var [r, g, b, a] = RGBA;
71
103
  if (isNaN(theta)) return [r, g, b, a];
104
+ var h = rgb2h(r, g, b);
72
105
  var s = rgb2s(r, g, b);
73
106
  var v = rgb2v(r, g, b);
74
- var u = sqrt(3) / 3;
75
- var pu = 1 / 3;
76
- var cosa = cos(theta);
77
- var sina = sin(theta);
78
- var vera = 1 - cosa;
79
- var red = (cosa + pu * vera) * r + (pu * vera - u * sina) * g + (pu * vera + u * sina) * b;
80
- var green = (pu * vera + u * sina) * r + (cosa + pu * vera) * g + (pu * vera - u * sina) * b;
81
- var blue = (pu * vera - u * sina) * r + (pu * vera + u * sina) * g + (cosa + pu * vera) * b;
82
- var m = mode([red, green, blue]);
83
- var _min = min(red, green, blue);
84
- var d = [m - red, m - green, m - blue]
85
- if (_min < 0) {
86
- var index = red < 0 ? 0 : green < 0 ? 1 : 2;
87
- var [dr, dg, db] = single(d, -_min / d[index]);
88
- } else {
89
- var _max = max(red, green, blue);
90
- if (_max > 255) {
91
- var index = red > 255 ? 0 : green > 255 ? 1 : 2;
92
- var [dr, dg, db] = single(d, (255 - _max) / d[index]);
93
- } else {
94
- var dr, dg, db = dr = dg = 0;
95
- }
96
- }
97
- red += dr;
98
- green += dg;
99
- blue += db;
100
- [red, green, blue] = rgb4s(red, green, blue, s);
101
- [red, green, blue] = rgb4v(red, green, blue, v);
102
- return [red, green, blue, a];
107
+ h += theta * 180 / Math.PI;
108
+ [r, g, b] = rgb4h(r, g, b, h);
109
+ [r, g, b] = rgb4s(r, g, b, s);
110
+ [r, g, b] = rgb4v(r, g, b, v);
111
+ return [r, g, b];
112
+ // var s = rgb2s(r, g, b);
113
+ // var v = rgb2v(r, g, b);
114
+ // var u = sqrt(3) / 3;
115
+ // var pu = 1 / 3;
116
+ // var cosa = cos(theta);
117
+ // var sina = sin(theta);
118
+ // var vera = 1 - cosa;
119
+ // var red = (cosa + pu * vera) * r + (pu * vera - u * sina) * g + (pu * vera + u * sina) * b;
120
+ // var green = (pu * vera + u * sina) * r + (cosa + pu * vera) * g + (pu * vera - u * sina) * b;
121
+ // var blue = (pu * vera - u * sina) * r + (pu * vera + u * sina) * g + (cosa + pu * vera) * b;
122
+ // var m = mode([red, green, blue]);
123
+ // var _min = min(red, green, blue);
124
+ // var d = [m - red, m - green, m - blue]
125
+ // if (_min < 0) {
126
+ // var index = red < 0 ? 0 : green < 0 ? 1 : 2;
127
+ // var [dr, dg, db] = single(d, -_min / d[index]);
128
+ // } else {
129
+ // var _max = max(red, green, blue);
130
+ // if (_max > 255) {
131
+ // var index = red > 255 ? 0 : green > 255 ? 1 : 2;
132
+ // var [dr, dg, db] = single(d, (255 - _max) / d[index]);
133
+ // } else {
134
+ // var dr, dg, db = dr = dg = 0;
135
+ // }
136
+ // }
137
+ // red += dr;
138
+ // green += dg;
139
+ // blue += db;
140
+ // [red, green, blue] = rgb4s(red, green, blue, s);
141
+ // [red, green, blue] = rgb4v(red, green, blue, v);
142
+ // return [red, green, blue, a];
103
143
  }
104
144
  // 对比度
105
145
  function contrast_rgb(RGBA, ratio) {
@@ -225,22 +265,24 @@ function single(c, u) {
225
265
  return [r * u, g * u, b * u];
226
266
  }
227
267
  function angle(c1, c2) {
228
- c1 = parse(c1);
229
- c2 = parse(c2);
230
- c1 = normal(c1);
231
- c2 = normal(c2);
232
- var [r1, g1, b1] = single(c1);
233
- var [r2, g2, b2] = single(c2);
234
- var c = [g1 * b2 - g2 * b1, b1 * r2 - b2 * r1, r1 * g2 - r2 * g1];
235
- var d = r1 * r2 + g1 * g2 + b1 * b2;
236
- var e = c[0] > 0 ? mode(c) : -mode(c);
237
- var theta = Math.asin(e > 1 ? 1 : e < -1 ? -1 : e);
238
- var phi = Math.acos(d > 1 ? 1 : d < -1 ? -1 : d);
239
- if (theta < 0) {
240
- theta = Math.PI * 2 - phi;
241
- } else {
242
- theta = phi;
243
- }
268
+ var theta = rgb2h(c2[0], c2[1], c2[2]) - rgb2h(c1[0], c1[1], c1[2]);
269
+ if (theta < 0) theta += 360;
270
+ // c1 = parse(c1);
271
+ // c2 = parse(c2);
272
+ // c1 = normal(c1);
273
+ // c2 = normal(c2);
274
+ // var [r1, g1, b1] = single(c1);
275
+ // var [r2, g2, b2] = single(c2);
276
+ // var c = [g1 * b2 - g2 * b1, b1 * r2 - b2 * r1, r1 * g2 - r2 * g1];
277
+ // var d = r1 * r2 + g1 * g2 + b1 * b2;
278
+ // var e = c[0] > 0 ? mode(c) : -mode(c);
279
+ // var theta = Math.asin(e > 1 ? 1 : e < -1 ? -1 : e);
280
+ // var phi = Math.acos(d > 1 ? 1 : d < -1 ? -1 : d);
281
+ // if (theta < 0) {
282
+ // theta = Math.PI * 2 - phi;
283
+ // } else {
284
+ // theta = phi;
285
+ // }
244
286
  return theta;
245
287
  }
246
288
  function equal(c1, c2) {
@@ -273,9 +315,9 @@ var colorDesigner = {
273
315
  contrast: 1
274
316
  };
275
317
  var rgb2v = function (r, g, b) {
276
- r *= .299;
277
- g *= .587;
278
- b *= .114;
318
+ r *= v_r;
319
+ g *= v_g;
320
+ b *= v_b;
279
321
  return r + g + b;
280
322
  };
281
323
  var v2rgb = function (v, r, g, b) {
@@ -320,6 +362,9 @@ extend(color, {
320
362
  contrast(color, ratio) {
321
363
  return doWith(contrast_rgb, color, ratio);
322
364
  },
365
+ rgb2h,
366
+ rgb4h,
367
+ rgb4s,
323
368
  rgb2v,
324
369
  rgb4v,
325
370
  rgb2s,
@@ -4,9 +4,7 @@ var xy2c = function (a, x, y) {
4
4
  return a * x * (1 - y) + (.5 + x / 2) * y * 255;
5
5
  };
6
6
  var z2rgb = function (z) {
7
- var c = color.rotate(sample, z * (Math.PI + Math.PI));
8
- var [r, g, b] = color.parse(c);
9
- return color.rgb4s(r, g, b, 1);
7
+ return color.rgb4h(255, 0, 0, z * 360);
10
8
  };
11
9
  var z2c = function (z) {
12
10
  return color.stringify(z2rgb(z));
@@ -87,7 +85,7 @@ var c2xy = function (c1, c2) {
87
85
  var getCanvas = function (e) {
88
86
  return e.getElementsByTagName('canvas')[0];
89
87
  };
90
- var sample = "#ff4949";
88
+ var sample = "#ff0000";
91
89
  var buildpad = function (pad, c = sample) {
92
90
  var canvas = getCanvas(pad);
93
91
  canvas.width = 256;
@@ -323,7 +323,7 @@ function addDirect(a) {
323
323
  if (typeof a === 'string' || a instanceof RegExp) cors_hosts.push(a);
324
324
  }
325
325
  function notCross(domain) {
326
- if (location_host === domain.slice(0, location_host.length)) return true;
326
+ if (location_host === domain.slice(0, location_host.length) || !/^https?\:\/\/|^s?\/\//.test(domain)) return true;
327
327
  for (var cx = 0, dx = cors_hosts.length; cx < dx; cx++) {
328
328
  var host = cors_hosts[cx];
329
329
  if (host instanceof RegExp) {
@@ -166,6 +166,7 @@ function cssTargetStyleSheet(stylesheet, innerCss) {
166
166
  * @param {|string} oValue
167
167
  */
168
168
  var css = function (target, oStyle, oValue) {
169
+ if (!oStyle) return;
169
170
  if (isElement(target)) {
170
171
  if (/^style$/i.test(target.tagName)) {
171
172
  cssTargetStyleSheet(target, oStyle, oValue);
@@ -269,9 +269,9 @@ function parseConfig(api) {
269
269
  });
270
270
  return '';
271
271
  });
272
- url.replace(/[\?\#][\s\S]*$/, '').replace(/\:\w+/g, function (p) {
272
+ url.replace(/[\?\#][\s\S]*$/, '').replace(/([\:\\]\:|\:\w+)/g, function (p) {
273
273
  p = p.slice(1);
274
- if (!required[p]) {
274
+ if (!required[p] && p !== ':') {
275
275
  required.push(p);
276
276
  required[p] = p;
277
277
  }
@@ -310,7 +310,11 @@ var parseData = function (sourceText) {
310
310
  sourceText = sourceText.replace(/^[^\(]+\(([\s\S]*)\)[^\)]*$/, "$1");
311
311
  }
312
312
  try {
313
- sourceText = parseYML(sourceText);
313
+ if (/^[\[\{][\d\:,]+[\}\]],|^(Infinity|''|NaN|\d+|)$|^\/[\s\S]*?\/\w*$/.test(sourceText)) {
314
+ sourceText = JSAM.parse(sourceText);
315
+ } else {
316
+ sourceText = parseYML(sourceText);
317
+ }
314
318
  } catch (e) {
315
319
  throw "数据无法解析";
316
320
  }
@@ -495,8 +499,9 @@ var privates = {
495
499
  var coinmethod = method.slice(0, spliterIndex).toLowerCase();
496
500
  var realmethod = coinmethod.replace(/\W+$/g, '');
497
501
  var rest = [];
498
- var uri = url.replace(/#[\s\S]*$/, "").replace(/\:[a-z\_][\w]*/gi, function (d) {
502
+ var uri = url.replace(/#[\s\S]*$/, "").replace(/[\\\:]\:|\:[a-z\_][\w]*/gi, function (d) {
499
503
  d = d.slice(1);
504
+ if (d === ":") return d;
500
505
  rest.push(d);
501
506
  return seekResponse(params, d) || '';
502
507
  });
@@ -538,7 +543,8 @@ var privates = {
538
543
  ok(e.response || e.responseText);
539
544
  }).error(xhr => {
540
545
  try {
541
- oh(parseData(xhr.response || xhr.responseText || xhr.statusText || xhr.status));
546
+ var e = getErrorMessage(parseData(xhr.response || xhr.responseText || xhr.statusText || xhr.status));
547
+ oh({ status: xhr.status, error: e })
542
548
  } catch (error) {
543
549
  oh(error);
544
550
  }
@@ -607,8 +613,7 @@ function responseCrash(e, data) {
607
613
  } else {
608
614
  data.error = e;
609
615
  }
610
- error_report(data.error_message, 'error');
611
-
616
+ error_report(data.error_message, e.status < 500 ? 'warn' : 'error');
612
617
  }
613
618
 
614
619
  var data = {
@@ -829,7 +834,6 @@ var data = {
829
834
  this.responseLoading(instance);
830
835
  var params = privates.pack(sid, params1);
831
836
  if (!privates.validApi(api, params)) throw aborted;
832
-
833
837
  var { method, uri, params, selector } = privates.prepare(api.method, api.url, params);
834
838
  var promise = new Promise(function (ok, oh) {
835
839
  var headers = api.headers;
@@ -850,7 +854,6 @@ var data = {
850
854
  }
851
855
  });
852
856
  }).then(function (response) {
853
-
854
857
  return transpile(seekResponse(parseData(response), selector), api.transpile, api.root);
855
858
  });
856
859
  return promise;
@@ -914,6 +917,10 @@ var data = {
914
917
  localStorage.setItem(sourceDataId, JSAM.stringify(dataSourceMap));
915
918
  }
916
919
  },
920
+ getSource(sourceid) {
921
+ if (sourceid) return dataSourceMap[sourceid];
922
+ return dataSourceMap;
923
+ },
917
924
  clearSource() {
918
925
  localStorage.removeItem(sourceDataId);
919
926
  sessionStorage.removeItem(sourceDataId);
@@ -46,6 +46,8 @@ function drag(target, initialEvent, preventOverflow, isMovingSource) {
46
46
  var [target_left, target_top] = getOffset(target);
47
47
  if (abs(target_left - event.screenX - saved_delta.x) < MOVELOCK_DELTA && abs(target_top - event.screenY - saved_delta.y) < MOVELOCK_DELTA) return;
48
48
  saved_delta.ing = true;
49
+ drag.target = target;
50
+ dispatch("dragstart", target);
49
51
  if (isElement(target) && !/absolute|fixed/.test(getComputedStyle(target).position)) {
50
52
  clone = toCloneTarget(target, isMovingSource);
51
53
  appendChild(document.body, clone);
@@ -62,7 +64,6 @@ function drag(target, initialEvent, preventOverflow, isMovingSource) {
62
64
  clone.style.zIndex = zIndex();
63
65
  extraClones.map(e => e.style.zIndex = clone.style.zIndex);
64
66
  }
65
- dispatch("dragstart", target);
66
67
  }
67
68
  drag.target = clone;
68
69
  var offsetLeft = saved_delta.x + event.screenX;
@@ -5,6 +5,19 @@ var encode62 = {
5
5
  src,
6
6
  map,
7
7
  time_delta: parseInt("zzzzz", 36),
8
+ geta(string) {
9
+ string = String(string)
10
+ string = string.length + string + "2017-08-19";
11
+ var buff = src.split('');
12
+ for (var cx = 0, dx = buff.length + src.length, sl = string.length, cl = buff.length; cx < dx; cx++) {
13
+ var s1 = string.charCodeAt(cx % sl) % cl;
14
+ var s2 = cx % cl;
15
+ var btemp = buff[s1];
16
+ buff[s1] = buff[s2];
17
+ buff[s2] = btemp;
18
+ }
19
+ return buff.join('');
20
+ },
8
21
  timedecode(string) {
9
22
  var { time_delta } = this;
10
23
  var time_rest = string.slice(string.length - time_delta.toString(36).length, string.length);
@@ -1,8 +1,10 @@
1
1
  <div class="head">
2
2
  <span ng-bind=field.name></span>
3
+ <span class="required" ng-if="field.required">*</span>
3
4
  </div>
4
5
  <div class="body">
5
6
  <model _data=data _field=field></model>
7
+ <span class="error" ng-bind="error"></span>
6
8
  </div>
7
9
  <div class="foot" ng-if="field.msg">
8
10
  <span ng-bind=field.msg></span>
@@ -1,19 +1,43 @@
1
1
  function main(elem) {
2
- var result = elem;
3
- if (isElement(elem) && elem.hasAttribute("ng-src")) {
4
- elem = option(elem);
5
- care(elem, function (p) {
6
- var [f, data] = p;
7
- elem.innerHTML = field;
8
- render(elem, {
9
- model,
10
- data,
11
- field: f
12
- });
13
- }, false);
14
- } else {
15
- result = option.apply(null, arguments);
16
- }
17
- result.removeAttribute("tabindex");
18
- return result;
2
+ elem = option.apply(null, arguments);
3
+ var scope = {};
4
+ care(elem, function (p) {
5
+ if (elem.childNodes.length) return;
6
+ var [f, data] = p;
7
+ elem.innerHTML = field;
8
+ render(elem, scope = {
9
+ model,
10
+ data,
11
+ error: null,
12
+ field: f
13
+ });
14
+ elem.oldValue = data[f.key];
15
+ elem.setAttribute("field", f.key);
16
+ }, false);
17
+ elem.setAttribute("field", '');
18
+ elem.renders = [function () {
19
+ if (!this.src) return;
20
+ var [f, data] = this.src;
21
+ if (!f || !data) return;
22
+ var v = data[f.key];
23
+ if (!this.checked) if (v === this.oldValue || isEmpty(this.oldValue) && isEmpty(v)) return;
24
+ this.checked = false;
25
+ this.setAttribute("dirty", '');
26
+ var error = valid(f, data);
27
+ if (error) {
28
+ this.setAttribute("error", error);
29
+ switch (error) {
30
+ case "empty":
31
+ scope.error = `${f.name}是必填字段!`;
32
+ break;
33
+ }
34
+ }
35
+ else {
36
+ this.removeAttribute('error');
37
+ scope.error = null;
38
+ }
39
+ this.oldValue = data[f.key];
40
+ }]
41
+ elem.removeAttribute("tabindex");
42
+ return elem;
19
43
  }
@@ -32,4 +32,23 @@
32
32
 
33
33
  .input {
34
34
  width: 100%;
35
+ }
36
+
37
+ .required {
38
+ color: #c24;
39
+ display: inline-block;
40
+ }
41
+
42
+ &.error,
43
+ &[error] {
44
+ background: #f322;
45
+
46
+ model>* {
47
+ background: #f322;
48
+ border-color: #f32;
49
+ outline: 1px solid #f32;
50
+ }
51
+ .error{
52
+ color:#c32;
53
+ }
35
54
  }
@@ -2,5 +2,13 @@ function form(elem) {
2
2
  if (!elem) {
3
3
  elem = document.createElement("form");
4
4
  }
5
+ if (/form/i.test(elem.tagName)) {
6
+ on("submit")(elem, function (event) {
7
+ event.preventDefault();
8
+ var fields = elem.querySelectorAll(".field");
9
+ for (var f of fields) f.checked = true;
10
+ render.refresh();
11
+ });
12
+ }
5
13
  return elem;
6
14
  }
@@ -121,18 +121,8 @@ function main() {
121
121
  minWidth = arg;
122
122
  }
123
123
  });
124
- var src = element.getAttribute("src") || element.getAttribute("ng-src") || element.getAttribute("v-src");
125
- if (src) {
126
- var parsedSrc = render.parseRepeat(src);
127
- if (!parsedSrc) {
128
- element.setAttribute("ng-src", src);
129
- element.removeAttribute("src");
130
- var generator = getGenerator(element);
131
- } else {
132
- element.setAttribute("ng-src", parsedSrc.srcName);
133
- element.removeAttribute("src");
134
- var generator = getGenerator(element, parsedSrc);
135
- }
124
+ if ("$src" in element) {
125
+ var generator = getGenerator(element);
136
126
  care(element, function () {
137
127
  var index = element.index();
138
128
  element.clean();
@@ -1,7 +1,12 @@
1
1
 
2
2
  var _slider = createElement(div);
3
- var getGenerator = function (container, parsedSrc) {
3
+ var empty = function (index, item) {
4
+ if (!item) return;
5
+ return document.createElement('empty');
6
+ };
7
+ var getGenerator = function (container) {
4
8
  if (!container) return;
9
+ if (!container.childNodes.length) return container.$generator || empty;
5
10
  var template = document.createElement("div");
6
11
  var templates = [].concat.apply([], container.childNodes).filter(a => {
7
12
  if (a.hasAttribute('insert')) {
@@ -20,26 +25,27 @@ var getGenerator = function (container, parsedSrc) {
20
25
  appendChild(template, templates);
21
26
  container.insertBefore = _slider.insertBefore;
22
27
  container.appendChild = _slider.appendChild;
23
- return function (index, com) {
28
+ var scopes = container.$parentScopes.concat(container.$scope);
29
+ return container.$generator = function (index, com) {
24
30
  if (!com) {
25
31
  if (!container.src || index >= container.src.length) return;
26
32
  com = container.src[index];
27
33
  }
28
34
  if (!com) return;
29
- var template1 = template.cloneNode();
30
- template1.innerHTML = template.innerHTML;
35
+ var template1 = template.cloneNode(true);
31
36
  if (!template1.childNodes.length) return template1;
32
37
  var item = template1.childNodes[0];
33
38
  item.with = [].concat.apply([], template1.childNodes).slice(1);
39
+ var parsedSrc = container.$src;
34
40
  if (parsedSrc) {
35
41
  var { keyName, itemName, indexName } = parsedSrc;
36
- var newScope = extend(Object.create(container.$scope), {
42
+ var newScope = {
37
43
  [keyName || '$key']: index,
38
44
  [itemName || '$item']: com,
39
45
  [indexName || '$index']: index
40
- });
41
- var newItem = render(item, newScope);
42
- newItem.with = render(item.with, newScope);
46
+ };
47
+ var newItem = render(item, newScope, scopes);
48
+ if (item.with.length) newItem.with = render(item.with, newScope, scopes);
43
49
  } else {
44
50
  var newScope = container.src[index];
45
51
  if (!isObject(newScope)) newScope = {
@@ -59,8 +65,8 @@ var getGenerator = function (container, parsedSrc) {
59
65
  return this.$item;
60
66
  }
61
67
  }
62
- var newItem = render(item, newScope, [container.$scope]);
63
- newItem.with = render(newItem.with = item.with, newScope, [container.$scope]);
68
+ var newItem = render(item, newScope, scopes);
69
+ newItem.with = render(newItem.with = item.with, newScope, scopes);
64
70
  }
65
71
  return newItem;
66
72
  };
@@ -29,15 +29,21 @@ function getTreeFromData(array) {
29
29
  var tab = 0;
30
30
  var run = function (item, parent) {
31
31
  item.tab = tab;
32
- var total = 0;
32
+ var count = 0, total = 0;
33
33
  item.parent = parent;
34
34
  item.root = root;
35
35
  if (item.length) {
36
36
  tab++;
37
- item.forEach(item => total += run(item, parent));
37
+ for (var cx = 0, dx = item.length; cx < dx; cx++) {
38
+ var i = item[cx];
39
+ run(i, parent);
40
+ count += i.count || 1;
41
+ total += i.total;
42
+ }
38
43
  tab--;
39
44
  }
40
- return item.total = total || 1;
45
+ item.total = total + item.length;
46
+ return item.count = count;
41
47
  };
42
48
  run(root);
43
49
  return root;
@@ -14,6 +14,10 @@
14
14
 
15
15
  >.button {
16
16
  border: none;
17
+ width: 100%;
18
+ cursor: pointer;
19
+ padding: 0;
20
+ margin: 0;
17
21
 
18
22
  >.track {
19
23