Skip to content

Commit 03c447a

Browse files
committed
make relocateGroup function similarly for dom and vdom
1 parent 452c74d commit 03c447a

File tree

1 file changed

+11
-33
lines changed

1 file changed

+11
-33
lines changed

diffDOM.js

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,7 @@
10931093
},
10941094
applyDiff: function(tree, diff) {
10951095
var node = this.getFromRoute(tree, diff.route),
1096-
newNode, reference, route, groupLength, from, to, child, c, i;
1096+
newNode, reference, route, c;
10971097

10981098
switch (diff.action) {
10991099
case 'addAttribute':
@@ -1145,28 +1145,17 @@
11451145
node.selected = diff.newValue;
11461146
break;
11471147
case 'replaceElement':
1148-
newNode = objToNode(diff.newValue);
1149-
node.parentNode.replaceChild(newNode, node);
1148+
node.parentNode.replaceChild(objToNode(diff.newValue), node);
11501149
break;
11511150
case 'relocateGroup':
1152-
groupLength = diff.groupLength;
1153-
from = diff.from;
1154-
to = diff.to;
1155-
reference = node.childNodes[to + groupLength];
1156-
// slide elements up
1157-
if (from < to) {
1158-
for (i = 0; i < groupLength; i += 1) {
1159-
child = node.childNodes[from];
1160-
node.insertBefore(child, reference);
1151+
Array.apply(null, new Array(diff.groupLength)).map(function() {
1152+
return node.removeChild(node.childNodes[diff.from]);
1153+
}).forEach(function(childNode, index){
1154+
if(index===0) {
1155+
reference = node.childNodes[diff.to];
11611156
}
1162-
} else {
1163-
// slide elements down
1164-
reference = node.childNodes[to];
1165-
for (i = 0; i < groupLength; i += 1) {
1166-
child = node.childNodes[from + i];
1167-
node.insertBefore(child, reference);
1168-
}
1169-
}
1157+
node.insertBefore(childNode,reference);
1158+
});
11701159
break;
11711160
case 'removeElement':
11721161
node.parentNode.removeChild(node);
@@ -1175,13 +1164,7 @@
11751164
route = diff.route.slice();
11761165
c = route.splice(route.length - 1, 1)[0];
11771166
node = this.getFromRoute(tree, route);
1178-
newNode = objToNode(diff.element);
1179-
if (c >= node.childNodes.length) {
1180-
node.appendChild(newNode);
1181-
} else {
1182-
reference = node.childNodes[c];
1183-
node.insertBefore(newNode, reference);
1184-
}
1167+
node.insertBefore(objToNode(diff.element), node.childNodes[c]);
11851168
break;
11861169
case 'removeTextElement':
11871170
if (!node || node.nodeType !== 3) {
@@ -1197,12 +1180,7 @@
11971180
if (!node || !node.childNodes) {
11981181
return false;
11991182
}
1200-
if (c >= node.childNodes.length) {
1201-
node.appendChild(newNode);
1202-
} else {
1203-
reference = node.childNodes[c];
1204-
node.insertBefore(newNode, reference);
1205-
}
1183+
node.insertBefore(newNode, node.childNodes[c]);
12061184
break;
12071185
default:
12081186
console.log('unknown action');

0 commit comments

Comments
 (0)