efront 3.22.3 → 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.
@@ -6,4 +6,7 @@
6
6
  </div>
7
7
  <div foot>
8
8
  <button pending.="pending" type="submit">登录</button>
9
+ </div>
10
+ <div message>
11
+ 登录之前需要使用&nbsp;<b>efront password</b>&nbsp;命令在服务器上设置密码
9
12
  </div>
@@ -9,7 +9,7 @@ function main(host) {
9
9
  page.innerHTML = login;
10
10
  drag.on(page);
11
11
  fields[0].readonly = !!host;
12
- on("append")(page, function () {
12
+ on("mounted")(page, function () {
13
13
  move.bindPosition(page, [.5, .5]);
14
14
  });
15
15
  renderWithDefaults(page, {
@@ -4,11 +4,24 @@
4
4
 
5
5
  [foot],
6
6
  [head] {
7
- &::before{
7
+ &::before {
8
8
  display: none;
9
9
  }
10
+
10
11
  text-align: center;
11
12
  }
12
- .button{
13
- padding: 0px 40px;
13
+
14
+ [message] {
15
+ padding: 2px 4px;
16
+ line-height: 1.2;
17
+ text-align: center;
18
+ color: #29c;
19
+ border-top: 1px solid #29c;
20
+ background: #29c1;
21
+ margin: 0 auto;
22
+ font-size: 12px;
14
23
  }
24
+
25
+ .button {
26
+ padding: 0px 40px;
27
+ }
@@ -5,10 +5,11 @@ var fields = refilm`
5
5
  var ip = e.data[e.field.key];
6
6
  var m = /(\d+\.){3}\d+$/.exec(ip);
7
7
  if (m) {
8
+ var l = document.createElement('label');
9
+ appendChild(e, l);
10
+ l.innerHTML = '&nbsp;';
8
11
  var setAddress = function (a) {
9
- var l = document.createElement('label');
10
12
  l.innerText = a;
11
- appendChild(e, l);
12
13
  };
13
14
  if (e.data.address) setAddress(e.data.address);
14
15
  else e.data.address = data.from("iplocation", { ip: m[0] }, function (a) {
@@ -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 {
@@ -139,10 +139,12 @@ function main(mainPath, historyName = "") {
139
139
  }, 20);
140
140
  }
141
141
  };
142
- on("transitionend")(layer, function (event) {
142
+ var update = function (event) {
143
143
  if (event.target !== this) return;
144
144
  dispatch(window, 'resize');
145
- });
145
+ };
146
+ on("transitionrun")(layer, update);
147
+ on("transitionend")(layer, update);
146
148
  layer.closeLeft = function () {
147
149
  closed = true;
148
150
  bindClass();
@@ -21,33 +21,33 @@ var moveChildrenX = function (targetBox, previousElements, followedElements, mov
21
21
  var dragPosition = getScreenPosition(dragTarget);
22
22
  var dragPositionLeft = dragPosition.left;
23
23
  var dragPositionRight = dragPosition.left + dragPosition.width;
24
- previousElements.map(function (element) {
24
+ previousElements.forEach(function (element) {
25
25
  var elementPosition = getScreenPosition(element);
26
26
  var elementCenter = elementPosition.left + elementPosition.width / 2;
27
27
  var delta = elementCenter - (element.moved || 0);
28
- if (delta + 7 <= dragPositionLeft) {
28
+ if (delta + 2 <= dragPositionLeft) {
29
29
  recover(element);
30
- } else if (delta - 7 >= dragPositionLeft) {
30
+ } else if (delta - 2 >= dragPositionLeft) {
31
31
  moveMargin(element, dragPosition.width);
32
32
  }
33
33
  });
34
- followedElements.map(function (element) {
34
+ followedElements.forEach(function (element) {
35
35
  var elementPosition = getScreenPosition(element);
36
36
  var elementCenter = elementPosition.left + elementPosition.width / 2;
37
37
  var delta = elementCenter - (element.moved || 0);
38
- if (delta + 6 <= dragPositionRight) {
38
+ if (delta + 2 <= dragPositionRight) {
39
39
  moveMargin(element, -dragPosition.width);
40
- } else if (delta - 6 >= dragPositionRight) {
40
+ } else if (delta - 2 >= dragPositionRight) {
41
41
  recover(element);
42
42
  }
43
43
  });
44
44
  } else {
45
- previousElements.map(recover);
46
- followedElements.map(recover);
45
+ previousElements.forEach(recover);
46
+ followedElements.forEach(recover);
47
47
  }
48
48
  } else {
49
- previousElements.map(recover);
50
- followedElements.map(recover);
49
+ previousElements.forEach(recover);
50
+ followedElements.forEach(recover);
51
51
  }
52
52
  };
53
53
  var scrollX = function (targetBox, moveChildren) {
@@ -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);
@@ -84,14 +85,9 @@ var bindTarget = function (index, element) {
84
85
  };
85
86
 
86
87
  var hooka = function (matcher, move, event, targetChild, isMovingSource) {
87
- var dragbox = this.dragbox;
88
- if (dragbox instanceof Function) {
89
- dragbox = dragbox.call(this);
90
- if (dragbox && !getTargetIn(dragbox, event.target)) return;
91
- }
92
- else {
93
- dragbox = this;
94
- }
88
+ var boxfinder;
89
+ var isMovingSource = isMovingSource !== false;
90
+ if (isMovingSource === false) boxfinder = matcher, matcher = null;
95
91
  var that = this;
96
92
 
97
93
  var draggingSourceOpacity = isMovingSource !== false ? 0 : 1;
@@ -100,7 +96,7 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
100
96
  moveMargin(element, 0);
101
97
  };
102
98
  var cloneCell = function (element) {
103
- var targets = getTargetIn(matcher, element, false);
99
+ var targets = matcher ? getTargetIn(matcher, element, false) : element;
104
100
  if (isArray(targets)) {
105
101
  var extra = targets.slice(1);
106
102
  targets = cloneVisible(targets[0]);
@@ -131,6 +127,7 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
131
127
  };
132
128
  var getBoundingClientRect = function () { return getScreenPosition(this.target) }
133
129
  var bindExtra = function (element) {
130
+ if (!matcher) return element;
134
131
  var targets = getTargetIn(matcher, element, false);
135
132
  if (isArray(targets)) {
136
133
  var [target] = targets;
@@ -150,11 +147,10 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
150
147
  }
151
148
  var targetBox, saved_opacity, saved_filter, moveMargin, moveChildren;
152
149
  var previousElements, followedElements, rebuildTargets, scroll;
153
- var that = this;
154
150
  var draginit = function () {
155
151
  that.setAttribute('dragchildren', '');
156
152
  if (targetBox) addClass(targetBox, 'dropping');
157
- if (getTargetIn(dragbox, targetChild)) {
153
+ if (isMovingSource !== false) {
158
154
  targetBox = targetChild.parentNode;
159
155
  previousElements = getPreviousElementSiblings(targetChild);
160
156
  followedElements = getFollowedElementSiblings(targetChild);
@@ -168,7 +164,7 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
168
164
  followedElements = [];
169
165
  moveChildren = () => { };
170
166
  rebuildTargets = function () {
171
- var temp = matcher(drag.target);
167
+ var temp = boxfinder(drag.target);
172
168
  if (temp === targetBox) return;
173
169
  if (previousElements) previousElements.map(recover);
174
170
  if (followedElements) followedElements.map(recover);
@@ -186,16 +182,21 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
186
182
  previousElements = [].slice.call(targetBox.children, 0).reverse();
187
183
  followedElements = [];
188
184
  [moveMargin, moveChildren, scroll] = getMoveFuncs(previousElements[0]);
189
- moveChildren = moveChildren.bind(null, that, previousElements, followedElements, moveMargin, recover);
185
+ moveChildren = moveChildren.bind(null, targetBox, previousElements, followedElements, moveMargin, recover);
190
186
  };
191
187
  }
192
188
  };
193
189
  var dragfire = function () {
190
+ if (!targetBox) return;
194
191
  that.removeAttribute('dragchildren');
195
192
  removeClass(targetBox, "dropping");
196
193
  var dst, appendSibling, delta;
197
- var src = previousElements.length;
198
- 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;
199
200
  if (!previousElements[cx]) {
200
201
  dst = 0;
201
202
  delta = 0;
@@ -207,14 +208,16 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
207
208
  break;
208
209
  }
209
210
  }
210
-
211
- 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;
212
215
  if (!followedElements[cx]) {
213
- dst = followedElements.length + previousElements.length;
216
+ dst = targetBox.children.length - 1;
214
217
  delta = 0;
215
218
  appendSibling = appendChild.after;
216
219
  } else if (!followedElements[cx].moved) {
217
- dst = previousElements.length + cx;
220
+ dst = targetBox.children.length - followedElements.length + cx - 1;
218
221
  delta = 1;
219
222
  appendSibling = appendChild.before;
220
223
  break;
@@ -224,7 +227,8 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
224
227
  var children = targetBox.children;
225
228
  var srcElement = children[src];
226
229
  var dstElement = children[dst + delta];
227
- src = bindTarget(src, srcElement);
230
+ console.log(targetChild, src)
231
+ src = bindTarget(src, isMovingSource ? targetChild : srcElement);
228
232
  dst = bindTarget(dst, dstElement);
229
233
  var needFire = !isFunction(move) || move(src, dst, dst + delta, appendSibling, targetBox) !== false;
230
234
  if (needFire && srcElement === children[src] && dstElement === children[dst + delta] && srcElement && dstElement) appendSibling(dstElement, srcElement);
@@ -244,8 +248,60 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
244
248
  var offmousup = on("mouseup")(window, offall);
245
249
  var autoScroll = function () {
246
250
  if (autoScroll.ing) return;
247
- if (scroll);
248
- 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);
249
305
  };
250
306
  var cancelScroll = function () {
251
307
  clearInterval(autoScroll.ing);
@@ -321,7 +377,7 @@ var hookEvent = function (matcher, move, event) {
321
377
  hooka.call(this, matcher, move, event, targetChild);
322
378
  };
323
379
  function addhook() {
324
- var mousedownEvent, targetElement, callback, matcher, dropid, allowdrops;
380
+ var mousedownEvent, targetElement, callback, boxfinder, dropid, allowdrops;
325
381
  [].forEach.call(arguments, function (arg) {
326
382
  switch (typeof arg) {
327
383
  case "string":
@@ -331,7 +387,7 @@ function addhook() {
331
387
  if (!callback) {
332
388
  callback = arg;
333
389
  } else {
334
- matcher = callback;
390
+ boxfinder = callback;
335
391
  callback = arg;
336
392
  }
337
393
  break;
@@ -354,7 +410,7 @@ function addhook() {
354
410
  if (!mousedownEvent) return;
355
411
  var target = targetElement || mousedownEvent.currentTarget;
356
412
  hooka.call(targetElement, function (target) {
357
- var res = [].filter.call(allowdrops || (matcher ? matcher(target) : document.querySelectorAll("[allowdrop]")), function (child) {
413
+ var res = Array.prototype.filter.call(allowdrops || (boxfinder ? boxfinder(target) : document.querySelectorAll("[allowdrop]")), function (child) {
358
414
  return target && overlap(child, target);
359
415
  }).filter(e => {
360
416
  var a = e.getAttribute("allowdrop");
@@ -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",
@@ -33,7 +33,7 @@ var setZIndex = function () {
33
33
  }
34
34
  };
35
35
  function drag(target, initialEvent, preventOverflow, isMovingSource) {
36
- if (/^(?:select|input|textarea)$/i.test(initialEvent.target.tagName) || getTargetIn(a => a.nodrag || a.hasAttribute('nodrag') || a.dragable === false, initialEvent.target)) return;
36
+ if (/^(?:select|input|textarea)$/i.test(initialEvent.target.tagName) || getTargetIn(a => a.nodrag || a.hasAttribute('nodrag'), initialEvent.target)) return;
37
37
  if (target.dragable === false) return;
38
38
  initialEvent.preventDefault();
39
39
  if (isArray(target)) {
@@ -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;
@@ -4,7 +4,7 @@
4
4
  <btn class="prev" ng-click="prev()">
5
5
 
6
6
  </btn>
7
- <xlist elementid='pglist' ng-src="page in pages" ng-style="{width:fromPixel(40*pages.length)}">
7
+ <xlist #pglist ng-src="page in pages">
8
8
  <btn class="item">
9
9
  <span ng-bind=page></span>
10
10
  </btn>