efront 3.22.5 → 3.22.6

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.
@@ -12,7 +12,7 @@ var dragview = function (event) {
12
12
  var deltaY = savedY - event.clientY;
13
13
 
14
14
  if (!moving) {
15
- if (Math.abs(deltaX) < MOVELOCK_DELTA && Math.abs(deltaY) < MOVELOCK_DELTA) return;
15
+ if (!onclick.preventClick) return;
16
16
  if (deltaX > 0 && !freeOffset(page.style.left || 0) || Math.abs(deltaY) >= Math.abs(deltaX)) {
17
17
  moving = -1;
18
18
  } else {
@@ -40,7 +40,7 @@ var dragview = function (dragview) {
40
40
  var deltaY = savedY - event.clientY;
41
41
  event.preventDefault();
42
42
  if (!moving) {
43
- if (Math.abs(deltaX) < MOVELOCK_DELTA && Math.abs(deltaY) < MOVELOCK_DELTA) return;
43
+ if (!onclick.preventClick) return;
44
44
  if (Math.abs(deltaY) >= Math.abs(deltaX)) {
45
45
  moving = -1;
46
46
  } else {
@@ -65,6 +65,7 @@ var scrollX = function (targetBox, moveChildren) {
65
65
  vscroll.X.call(targetBox, scrollDelta / 16, false);
66
66
  moveChildren();
67
67
  }
68
+ return scrollDelta;
68
69
  };
69
70
  var scrollY = arriswise(scrollX, arguments);
70
71
  var moveMarginY = arriswise(moveMarginX, arguments);
@@ -85,6 +86,7 @@ var bindTarget = function (index, element) {
85
86
 
86
87
  var hooka = function (matcher, move, event, targetChild, isMovingSource) {
87
88
  var boxfinder;
89
+ var isMovingSource = isMovingSource !== false;
88
90
  if (isMovingSource === false) boxfinder = matcher, matcher = null;
89
91
  var that = this;
90
92
 
@@ -189,8 +191,12 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
189
191
  that.removeAttribute('dragchildren');
190
192
  removeClass(targetBox, "dropping");
191
193
  var dst, appendSibling, delta;
192
- var src = previousElements.length;
193
- if (previousElements.length && previousElements[0].moved) for (var cx = 1, dx = previousElements.length + 1; cx < dx; cx++) {
194
+ var k0 = -1;
195
+ for (var k0 in previousElements) break;
196
+ if (previousElements.length) var src = previousElements.length - k0;
197
+ else var src = 0;
198
+ if (k0 >= 0 && previousElements[k0].moved) for (var k in previousElements) {
199
+ var cx = +k + 1;
194
200
  if (!previousElements[cx]) {
195
201
  dst = 0;
196
202
  delta = 0;
@@ -202,14 +208,16 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
202
208
  break;
203
209
  }
204
210
  }
205
-
206
- if (followedElements.length && followedElements[0].moved) for (var cx = 1, dx = followedElements.length + 1; cx < dx; cx++) {
211
+ var k0 = -1;
212
+ for (var k0 in followedElements) break;
213
+ if (k0 >= 0 && followedElements[k0].moved) for (var k in followedElements) {
214
+ var cx = +k + 1;
207
215
  if (!followedElements[cx]) {
208
- dst = followedElements.length + previousElements.length;
216
+ dst = targetBox.children.length - 1;
209
217
  delta = 0;
210
218
  appendSibling = appendChild.after;
211
219
  } else if (!followedElements[cx].moved) {
212
- dst = previousElements.length + cx;
220
+ dst = targetBox.children.length - followedElements.length + cx - 1;
213
221
  delta = 1;
214
222
  appendSibling = appendChild.before;
215
223
  break;
@@ -219,7 +227,8 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
219
227
  var children = targetBox.children;
220
228
  var srcElement = children[src];
221
229
  var dstElement = children[dst + delta];
222
- src = bindTarget(src, srcElement);
230
+ console.log(targetChild, src)
231
+ src = bindTarget(src, isMovingSource ? targetChild : srcElement);
223
232
  dst = bindTarget(dst, dstElement);
224
233
  var needFire = !isFunction(move) || move(src, dst, dst + delta, appendSibling, targetBox) !== false;
225
234
  if (needFire && srcElement === children[src] && dstElement === children[dst + delta] && srcElement && dstElement) appendSibling(dstElement, srcElement);
@@ -239,8 +248,60 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
239
248
  var offmousup = on("mouseup")(window, offall);
240
249
  var autoScroll = function () {
241
250
  if (autoScroll.ing) return;
242
- if (scroll);
243
- autoScroll.ing = setInterval(scroll, 16);
251
+ if (scroll) autoScroll.ing = setInterval(function () {
252
+ var delta = scroll(targetBox, moveChildren);
253
+ if (isMovingSource === false) { }
254
+ else if (delta < 0) {
255
+ var p = null;
256
+ for (var k in previousElements) {
257
+ if (!previousElements[k].parentNode) {
258
+ delete previousElements[k];
259
+ continue;
260
+ }
261
+ if (previousElements[+k + 1] && previousElements[k].previousElementSibling !== previousElements[+k + 1]) {
262
+ previousElements.splice(+k + 1, previousElements.length - k - 1);
263
+ break;
264
+ }
265
+ }
266
+ var k = 0;
267
+ for (var k in followedElements) {
268
+ if (followedElements[k].parentNode) break;
269
+ delete followedElements[k];
270
+ }
271
+ var p = previousElements[previousElements.length - 1] || followedElements[k];
272
+ if (p && p.previousElementSibling) {
273
+ k -= 1;
274
+ if (k >= 0) followedElements[k] = p.previousElementSibling;
275
+ else if (p === followedElements[0]) setOpacity(p.previousElementSibling, draggingSourceOpacity);
276
+ else previousElements.push(p.previousElementSibling);
277
+ }
278
+ }
279
+ else if (delta > 0) {
280
+ for (var k in followedElements) {
281
+ if (!followedElements[k].parentNode) {
282
+ delete followedElements[k];
283
+ continue;
284
+ }
285
+ if (followedElements[+k + 1] && followedElements[k].nextElementSibling !== followedElements[+k + 1]) {
286
+ followedElements.splice(+k + 1, followedElements.length - k - 1);
287
+ break;
288
+ }
289
+ }
290
+
291
+ var k = 0;
292
+ for (var k in previousElements) {
293
+ if (previousElements[k].parentNode) break;
294
+ delete previousElements[k];
295
+ }
296
+ var f = followedElements[followedElements.length - 1] || previousElements[k];
297
+ if (f && f.nextElementSibling) {
298
+ k -= 1;
299
+ if (k >= 0) previousElements[k] = f.nextElementSibling;
300
+ else if (f === previousElements[0]) setOpacity(f.nextElementSibling, draggingSourceOpacity);
301
+ else followedElements.push(f.nextElementSibling);
302
+ }
303
+ }
304
+ }, 16);
244
305
  };
245
306
  var cancelScroll = function () {
246
307
  clearInterval(autoScroll.ing);
@@ -74,7 +74,7 @@
74
74
  </tr>
75
75
  </tbody>
76
76
  </table>
77
- <list>
77
+ <list cell-list>
78
78
  <div>&nbsp;cell_1</div>
79
79
  <div>&nbsp;cell_2</div>
80
80
  <div>&nbsp;cell_3</div>
@@ -88,4 +88,8 @@
88
88
  <div>&nbsp;cell_b</div>
89
89
  <div>&nbsp;cell_c</div>
90
90
  <div>&nbsp;cell_d</div>
91
- </list>
91
+ </list>
92
+
93
+ <xlist -src="a in xsrc">
94
+ <div> list-item <span -bind="a"></span></div>
95
+ </xlist>
@@ -3,7 +3,22 @@ function main() {
3
3
  page.innerHTML = autodragchildren_test;
4
4
  var body = page.querySelector("tbody");
5
5
  autodragchildren(body, body);
6
- var list = page.querySelector("list");
7
- autodragchildren(list, list);
6
+ var cellList = page.querySelector("list");
7
+ autodragchildren(cellList, cellList);
8
+ var xList = page.querySelector("xlist");
9
+ render(xList, {
10
+ xlist: list,
11
+ xsrc: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
12
+ })
13
+ autodragchildren(xList, xList, function (src, dst) {
14
+ var xsrc = xList.$scope.xsrc;
15
+ var src = src.target.index || 0;
16
+ var dst = xList.children[dst].index || 0;
17
+ var [e] = xsrc.splice(src, 1);
18
+ xsrc.splice(dst, 0, e);
19
+ render.refresh();
20
+ return false;
21
+ });
22
+
8
23
  return page;
9
24
  }
@@ -1,8 +1,13 @@
1
- list {
1
+ list[cell-list] {
2
+ display: table-row;
2
3
  >div {
3
- display: inline-block;
4
+ display: table-cell;
4
5
  }
5
6
  }
7
+ xlist>div{
8
+ display: inline-block;
9
+ padding: 0 6px;
10
+ }
6
11
 
7
12
  .row(@x) {
8
13
  @row: ~"[row@{x}]";
@@ -22,7 +22,7 @@ function bindtouch(target, bindder, lockDirection = false) {
22
22
  var deltay = clientY - saved_y;
23
23
  if (lockDirection) {
24
24
  if (!direction) {
25
- if (abs(deltax) < MOVELOCK_DELTA && abs(deltay) < MOVELOCK_DELTA) return;
25
+ if (!onclick.preventClick) return;
26
26
  if (target.onmovestart) {
27
27
  target.onmovestart();
28
28
  }
@@ -31,7 +31,7 @@ function bindtouch(target, bindder, lockDirection = false) {
31
31
  } else if (abs(deltax) <= .618 * abs(deltay)) {
32
32
  direction = "y";
33
33
  } else {
34
- return;
34
+ direction = 'o';
35
35
  }
36
36
  }
37
37
  if (direction !== lockDirection)
@@ -61,7 +61,7 @@ var cloneChildren = function (td, copy, clone) {
61
61
  });
62
62
  break;
63
63
  default:
64
- var children = [].slice.call(td.childNodes, 0).filter(isMaybeVisible);
64
+ var children = Array.prototype.slice.call(td.childNodes, 0).filter(isMaybeVisible);
65
65
  children.sort((a, b) => {
66
66
  return getZIndex(a) - getZIndex(b);
67
67
  }).forEach(clone);
@@ -130,21 +130,20 @@ var cloneVisible = function (td) {
130
130
  var _left, _top, _right, _bottom;
131
131
  var span = document.createElement("x");
132
132
  var hasSvg = false;
133
-
134
133
  var clone = function (td) {
135
134
  if (!isMaybeVisible(td)) return;
136
135
  if (td.nodeType === 3) {
137
136
  var copy = span.cloneNode();
138
137
  copy.appendChild(td.cloneNode());
139
138
  var parentNode = td.parentNode;
139
+ parentNode.insertBefore(copy, td);
140
140
  parentNode.removeChild(td);
141
- parentNode.appendChild(copy);
142
141
  var { left, top, width, height } = getScreenPosition(copy);
143
142
  var style = getComputedStyle(copy);
144
143
  copyStyle(style, copy.style, cloneProperties);
145
144
  copy.style.lineHeight = height + "px";
145
+ parentNode.insertBefore(td, copy);
146
146
  parentNode.removeChild(copy);
147
- parentNode.appendChild(td);
148
147
  result.appendChild(copy);
149
148
  } else if (td.nodeType !== 1) return;
150
149
 
@@ -187,7 +186,7 @@ var cloneVisible = function (td) {
187
186
  width: _right - _left + "px",
188
187
  height: _bottom - _top + "px"
189
188
  });
190
- [].map.call(result.children, function (element) {
189
+ Array.prototype.map.call(result.children, function (element) {
191
190
  var { left, top, width, height } = element.tempstyle;
192
191
  extend(element.style, {
193
192
  position: "absolute",
@@ -57,11 +57,9 @@ function drag(target, initialEvent, preventOverflow, isMovingSource) {
57
57
  var mousemove = function (event) {
58
58
  if (event.moveLocked) return;
59
59
  if (/resize/i.test(getComputedStyle(document.body).cursor)) return;
60
- event.moveLocked = true;
61
60
  if (!saved_delta.ing) {
62
- var abs = Math.abs;
63
61
  var [target_left, target_top] = getOffset(target);
64
- if (abs(target_left - event.screenX - saved_delta.x) < MOVELOCK_DELTA && abs(target_top - event.screenY - saved_delta.y) < MOVELOCK_DELTA) return;
62
+ if (!onclick.preventClick) return;
65
63
  saved_delta.ing = true;
66
64
  drag.target = target;
67
65
  dispatch("dragstart", target);
@@ -82,6 +80,7 @@ function drag(target, initialEvent, preventOverflow, isMovingSource) {
82
80
  saved_delta.x += clone_left - target_left;
83
81
  saved_delta.y += clone_top - target_top;
84
82
  }
83
+ event.moveLocked = true;
85
84
  drag.target = clone;
86
85
  var offsetLeft = saved_delta.x + event.screenX;
87
86
  var offsetTop = saved_delta.y + event.screenY;
@@ -46,21 +46,22 @@ function ylist(container, generator, $Y) {
46
46
  var children = list.childNodes;
47
47
  for (var cx = 0, dx = children.length; cx < dx; cx++) {
48
48
  var child = children[cx];
49
- if (!(isFinite(child.index) || nodeType === 2 && child.offsetHeight)) continue;
50
- child = getNodeTarget(child);
49
+ if (!(isFinite(child.index) && (nodeType === 0 || child.index !== null) || nodeType === 2 && child.offsetHeight)) continue;
50
+ if (nodeType === 1) child = getNodeTarget(child);
51
51
  return child;
52
52
  }
53
53
  return null;
54
54
  };
55
- var getFirstVisibleElement = function (deltaY = 0) {
55
+ var getFirstVisibleElement = function (deltaY) {
56
56
  var children = list.childNodes;
57
57
  var { scrollTop } = list;
58
- scrollTop += deltaY;
58
+ deltaY = +deltaY;
59
+ if (deltaY) scrollTop += deltaY;
59
60
  for (var cx = 0, dx = children.length; cx < dx; cx++) {
60
61
  var child = children[cx];
61
- if (!isFinite(child.index)) continue;
62
- child = getNodeTarget(child);
63
- if (child.offsetTop + child.offsetHeight > scrollTop) return child;
62
+ if (!isFinite(child.index) || child.index === null) continue;
63
+ var c = getNodeTarget(child);
64
+ if (c.offsetTop + c.offsetHeight > scrollTop) return deltaY === 0 ? child : c;
64
65
  }
65
66
  return null;
66
67
  };
@@ -86,16 +87,17 @@ function ylist(container, generator, $Y) {
86
87
  return scrollBy(deltab < deltat ? deltat : deltab);
87
88
  }
88
89
  };
89
- var getLastVisibleElement = function (deltaY = 0) {
90
+ var getLastVisibleElement = function (deltaY) {
90
91
  var { scrollTop } = list;
91
- scrollTop += deltaY;
92
+ deltaY = +deltaY;
93
+ if (deltaY) scrollTop += deltaY;
92
94
  var children = list.children;
93
95
  for (var cx = children.length - 1; cx >= 0; cx--) {
94
96
  var child = children[cx];
95
97
  if (!isFinite(child.index)) continue;
96
- child = getNodeTarget(child);
97
- if (child.offsetTop < scrollTop + list.clientHeight) {
98
- return child;
98
+ var c = getNodeTarget(child);
99
+ if (c.offsetTop < scrollTop + list.clientHeight) {
100
+ return deltaY === 0 ? child : c;
99
101
  }
100
102
  }
101
103
  return null;
@@ -106,7 +108,7 @@ function ylist(container, generator, $Y) {
106
108
  var map = {};
107
109
  for (var cx = 0, dx = children.length; cx < dx; cx++) {
108
110
  var child = children[cx];
109
- if (isFinite(child.index)) {
111
+ if (isFinite(child.index) && child.index !== null) {
110
112
  map[child.index] = child;
111
113
  }
112
114
  }
@@ -133,7 +135,8 @@ function ylist(container, generator, $Y) {
133
135
  if (itemIndex < 0) index--;
134
136
  var ratio = itemIndex - index || 0;
135
137
  var childrenMap = getChildrenMap();
136
- var offsetBottom = 0, ratioTop = 0, offset = index, last_item = getFirstElement() || null, last_index = last_item && last_item.index || offset;
138
+ var offsetBottom = 0, ratioTop = 0, offset = index, last_item = getFirstElement(0) || null, last_index = last_item && last_item.index || offset;
139
+ if (last_item) last_item = getNodeTarget(last_item);
137
140
  var count = 0, delta = 1, bottom_item, offsett = offset, offsetb = offset, top_item;
138
141
  var indexed_item;
139
142
  while (offsetBottom - ratioTop <= list.clientHeight + cache_height || indexed_item && top_item && indexed_item.offsetTop - top_item.offsetTop < cache_height) {
@@ -187,9 +190,9 @@ function ylist(container, generator, $Y) {
187
190
  var runbuild = lazy(function () {
188
191
  patchBottom();
189
192
  patchTop();
190
- var firstElement = getFirstElement(1), y;
193
+ var firstElement = getFirstElement(), y;
191
194
  if (firstElement) {
192
- y = firstElement.index * firstElement.offsetHeight;
195
+ y = firstElement.index * getNodeTarget(firstElement).offsetHeight;
193
196
  } else {
194
197
  y = 0;
195
198
  }
@@ -208,9 +211,10 @@ function ylist(container, generator, $Y) {
208
211
  list.insertBefore(topinsert, list.firstChild);
209
212
  //计算当前高度
210
213
  var currentY = function () {
211
- var firstElement = getFirstElement(1);
214
+ var firstElement = getFirstElement();
212
215
  if (!firstElement) return;
213
216
  var index = firstElement.index;
217
+ firstElement = getNodeTarget(firstElement);
214
218
  if (index < 0) index = index - index | 0;
215
219
  return index * firstElement.offsetHeight + list.scrollTop;
216
220
  };
@@ -298,7 +302,7 @@ function ylist(container, generator, $Y) {
298
302
  var cache_height = list.offsetHeight;
299
303
 
300
304
  var childrenMap = getChildrenMap();
301
- var first_element, flag_element = first_element = getFirstElement(1);
305
+ var first_element, flag_element = first_element = getFirstElement();
302
306
  if (!flag_element || !isFinite(flag_element.offsetTop)) return;
303
307
  var offset = flag_element.index || 0;
304
308
  var offsetTop = flag_element.offsetTop;
@@ -421,15 +425,17 @@ function ylist(container, generator, $Y) {
421
425
  list.scrollBy = scrollBy;
422
426
  list.index = function (update) {
423
427
  if (update === false) return saved_itemIndex;
424
- var firstVisible = getFirstVisibleElement();
428
+ var firstVisible = getFirstVisibleElement(0);
425
429
  if (!firstVisible) return saved_itemIndex;
426
430
  var index = firstVisible.index;
431
+ firstVisible = getNodeTarget(firstVisible);
432
+ if (!firstVisible) return saved_itemIndex;
427
433
  var firstElement = getFirstElement(1);
428
434
  var scrolled = (list.scrollTop - firstVisible.offsetTop + firstElement.offsetTop + .5 | 0) / firstVisible.offsetHeight;
429
435
  return index + scrolled;
430
436
  };
431
437
  list.topIndex = function () {
432
- var element = getFirstElement(1);
438
+ var element = getFirstElement();
433
439
  return element ? element.index : 0;
434
440
  };
435
441
  list.getIndexedElement = getIndexedElement;
@@ -20,7 +20,7 @@ function random_test() {
20
20
  var id = 0;
21
21
  var run = function () {
22
22
  if (id >= args.length) return;
23
- alert(toString(random.apply(null, args[id])));
23
+ console.log(toString(random.apply(null, args[id])));
24
24
  id++;
25
25
  setTimeout(run, 200);
26
26
  }
@@ -7,22 +7,24 @@
7
7
  <textarea _value="refilm_encode(steps[index])">
8
8
 
9
9
  </textarea>
10
- <table class="form">
11
- <thead>
12
- <tr>
13
- <td ng-repeat="(f,i) in refilms">
14
- <span ng-bind="f.name"></span>
15
- </td>
16
- </tr>
17
- </thead>
18
- <tbody>
19
- <tr ng-repeat="s in steps[index]">
20
- <td ng-repeat="r in refilms">
21
- <span bg-bind="String(s[r.key]||'')"></span>
22
- </td>
23
- </tr>
24
- </tbody>
25
- </table>
10
+ <div class="form">
11
+ <table>
12
+ <thead>
13
+ <tr>
14
+ <td ng-repeat="(f,i) in refilms">
15
+ <span ng-bind="f.name"></span>
16
+ </td>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <tr ng-repeat="s in steps[index]">
21
+ <td ng-repeat="r in refilms">
22
+ <span bg-bind="String(s[r.key]||'')"></span>
23
+ </td>
24
+ </tr>
25
+ </tbody>
26
+ </table>
27
+ </div>
26
28
  <form class="form">
27
29
  <field ng-src="[f,data]" ng-repeat="(f,i) in steps[index]"></field>
28
30
  </form>
@@ -28,17 +28,24 @@
28
28
  }
29
29
 
30
30
  >textarea,
31
- >table {
31
+ >.form {
32
32
  width: 400px;
33
33
  }
34
34
 
35
35
  >textarea,
36
36
  >form,
37
- >table {
37
+ >.form {
38
38
  overflow: auto;
39
39
  height: calc(~"100% - 220px");
40
40
  vertical-align: top;
41
41
  display: inline-block;
42
+ table{
43
+ width: auto;
44
+ }
45
+ td{
46
+ white-space: nowrap;
47
+ overflow: hidden;
48
+ }
42
49
  font-size: 16px;
43
50
  font-family: 仿宋;
44
51
  }
@@ -210,7 +210,7 @@ function slider(autoplay, circle = true) {
210
210
  var deltax = event.clientX - saved_x;
211
211
  var deltay = event.clientY - saved_y;
212
212
  if (!direction) {
213
- if (abs(deltax) < MOVELOCK_DELTA && abs(deltay) < MOVELOCK_DELTA) return;
213
+ if (!onclick.preventClick) return;
214
214
  if (abs(deltay) - abs(deltax) > 0) { //垂直方向
215
215
  direction = -1;
216
216
  } else { //水平方向
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.22.5",
3
+ "version": "3.22.6",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {