Skip to content

Commit f7f7a9f

Browse files
committed
add tests for form changes and fix issues with form changes, related to issue #5
1 parent 8e76681 commit f7f7a9f

File tree

5 files changed

+566
-29
lines changed

5 files changed

+566
-29
lines changed

diffDOM.js

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@
107107
if (node.value && (node.value !== clonedNode.value)) {
108108
clonedNode.value = node.value;
109109
}
110+
if (node.selected && !(clonedNode.selected)) {
111+
clonedNode.selected = true;
112+
} else if (!(node.selected) && clonedNode.selected) {
113+
clonedNode.selected = false;
114+
}
110115
}
111116
return clonedNode;
112117
};
@@ -178,7 +183,6 @@
178183
node.selected = objNode[SELECTED];
179184
}
180185
}
181-
// console.log(node);
182186
return node;
183187
};
184188

@@ -531,7 +535,7 @@
531535
},
532536
findOuterDiff: function (t1, t2, route) {
533537
var k;
534-
538+
535539
if (t1.nodeName != t2.nodeName) {
536540
k = {};
537541
k[ACTION] = REPLACE_ELEMENT;
@@ -540,7 +544,7 @@
540544
k[ROUTE] = route;
541545
return [new Diff(k)];
542546
}
543-
547+
544548
var slice = Array.prototype.slice,
545549
byName = function (a, b) {
546550
return a.name > b.name;
@@ -555,6 +559,24 @@
555559
return -1;
556560
},
557561
diffs = [];
562+
563+
564+
if ((t1.value || t2.value) && t1.value !== t2.value && t1.nodeName !== 'OPTION') {
565+
k = {};
566+
k[ACTION] = MODIFY_VALUE;
567+
k[OLD_VALUE] = t1.value;
568+
k[NEW_VALUE] = t2.value;
569+
k[ROUTE] = route;
570+
diffs.push(new Diff(k));
571+
}
572+
if ((t1.checked || t2.checked) && t1.checked !== t2.checked) {
573+
k = {};
574+
k[ACTION] = MODIFY_CHECKED;
575+
k[OLD_VALUE] = t1.checked;
576+
k[NEW_VALUE] = t2.checked;
577+
k[ROUTE] = route;
578+
diffs.push(new Diff(k));
579+
}
558580

559581
attr1.forEach(function (attr) {
560582
var pos = find(attr, attr2),
@@ -565,9 +587,8 @@
565587
k[ROUTE] = route;
566588
k[NAME] = attr.name;
567589
k[VALUE] = attr.value;
568-
569590
diffs.push(new Diff(k));
570-
return diffs;
591+
return [diffs];
571592
}
572593
var a2 = attr2.splice(pos, 1)[0];
573594
if (attr.value !== a2.value) {
@@ -579,8 +600,12 @@
579600
k[NEW_VALUE] = a2.value;
580601

581602
diffs.push(new Diff(k));
603+
582604
}
583605
});
606+
if (diffs.length > 0) {
607+
return diffs;
608+
};
584609
attr2.forEach(function (attr) {
585610
var k;
586611
k = {};
@@ -589,32 +614,21 @@
589614
k[NAME] = attr.name;
590615
k[VALUE] = attr.value;
591616
diffs.push(new Diff(k));
617+
592618
});
593-
594-
if ((t1.value || t2.value) && t1.value !== t2.value) {
595-
k = {};
596-
k[ACTION] = MODIFY_VALUE;
597-
k[OLD_VALUE] = t1.value;
598-
k[NEW_VALUE] = t2.value;
599-
k[ROUTE] = route;
600-
diffs.push(new Diff(k));
601-
}
602-
if ((t1.checked || t2.checked) && t1.checked !== t2.checked) {
603-
k = {};
604-
k[ACTION] = MODIFY_CHECKED;
605-
k[OLD_VALUE] = t1.checked;
606-
k[NEW_VALUE] = t2.checked;
607-
k[ROUTE] = route;
608-
diffs.push(new Diff(k));
609-
}
619+
610620
if ((t1.selected || t2.selected) && t1.selected !== t2.selected) {
621+
if (diffs.length > 0) {
622+
return diffs;
623+
}
611624
k = {};
612625
k[ACTION] = MODIFY_SELECTED;
613626
k[OLD_VALUE] = t1.selected;
614627
k[NEW_VALUE] = t2.selected;
615628
k[ROUTE] = route;
616629
diffs.push(new Diff(k));
617-
}
630+
}
631+
618632
return diffs;
619633
},
620634
findInnerDiff: function (t1, t2, route) {
@@ -749,7 +763,7 @@
749763
} else if (diff[ACTION] === MODIFY_SELECTED) {
750764
if (!node || typeof node.selected === 'undefined')
751765
return false;
752-
node.selected = diff[NEW_VALUE];
766+
node.selected = diff[NEW_VALUE];
753767
} else if (diff[ACTION] === MODIFY_TEXT_ELEMENT) {
754768
if (!node || node.nodeType != 3)
755769
return false;
@@ -868,7 +882,6 @@
868882
},
869883
};
870884

871-
872-
873885
window.diffDOM = diffDOM;
886+
window.cleanCloneNode = cleanCloneNode;
874887
}());

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ <h1>diffDOM</h1>
1313

1414
<h2>Tests</h2>
1515

16-
<p>There is a <a href="tests/random.html">test of random elements</a> and one of <a href="tests/basic.html">basic elements</a> that tended to throw errors in previous versions of this library.</p>
16+
<p>There is a <a href="tests/random.html">test of random elements</a>, one of <a href="tests/basic.html">basic elements</a>, and of <a href="tests/form.html">form elements</a> that tended to throw errors in previous versions of this library.</p>
1717

1818
<h2>Demo</h2>
1919

tests/basic.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ <h1>Test for diffDOM</h1>
533533

534534
try {
535535
reportDiv();
536-
print("diff operations for div #" + i + " -> div #" + (i + 1));
536+
print("diff operations for div #" + i + " div #" + (i + 1));
537537
diffs = dd.diff(divs[i], divs[i + 1]);
538538
console.log(diffs);
539539

0 commit comments

Comments
 (0)