|
107 | 107 | if (node.value && (node.value !== clonedNode.value)) { |
108 | 108 | clonedNode.value = node.value; |
109 | 109 | } |
| 110 | + if (node.selected && !(clonedNode.selected)) { |
| 111 | + clonedNode.selected = true; |
| 112 | + } else if (!(node.selected) && clonedNode.selected) { |
| 113 | + clonedNode.selected = false; |
| 114 | + } |
110 | 115 | } |
111 | 116 | return clonedNode; |
112 | 117 | }; |
|
178 | 183 | node.selected = objNode[SELECTED]; |
179 | 184 | } |
180 | 185 | } |
181 | | - // console.log(node); |
182 | 186 | return node; |
183 | 187 | }; |
184 | 188 |
|
|
531 | 535 | }, |
532 | 536 | findOuterDiff: function (t1, t2, route) { |
533 | 537 | var k; |
534 | | - |
| 538 | + |
535 | 539 | if (t1.nodeName != t2.nodeName) { |
536 | 540 | k = {}; |
537 | 541 | k[ACTION] = REPLACE_ELEMENT; |
|
540 | 544 | k[ROUTE] = route; |
541 | 545 | return [new Diff(k)]; |
542 | 546 | } |
543 | | - |
| 547 | + |
544 | 548 | var slice = Array.prototype.slice, |
545 | 549 | byName = function (a, b) { |
546 | 550 | return a.name > b.name; |
|
555 | 559 | return -1; |
556 | 560 | }, |
557 | 561 | 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 | + } |
558 | 580 |
|
559 | 581 | attr1.forEach(function (attr) { |
560 | 582 | var pos = find(attr, attr2), |
|
565 | 587 | k[ROUTE] = route; |
566 | 588 | k[NAME] = attr.name; |
567 | 589 | k[VALUE] = attr.value; |
568 | | - |
569 | 590 | diffs.push(new Diff(k)); |
570 | | - return diffs; |
| 591 | + return [diffs]; |
571 | 592 | } |
572 | 593 | var a2 = attr2.splice(pos, 1)[0]; |
573 | 594 | if (attr.value !== a2.value) { |
|
579 | 600 | k[NEW_VALUE] = a2.value; |
580 | 601 |
|
581 | 602 | diffs.push(new Diff(k)); |
| 603 | + |
582 | 604 | } |
583 | 605 | }); |
| 606 | + if (diffs.length > 0) { |
| 607 | + return diffs; |
| 608 | + }; |
584 | 609 | attr2.forEach(function (attr) { |
585 | 610 | var k; |
586 | 611 | k = {}; |
|
589 | 614 | k[NAME] = attr.name; |
590 | 615 | k[VALUE] = attr.value; |
591 | 616 | diffs.push(new Diff(k)); |
| 617 | + |
592 | 618 | }); |
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 | + |
610 | 620 | if ((t1.selected || t2.selected) && t1.selected !== t2.selected) { |
| 621 | + if (diffs.length > 0) { |
| 622 | + return diffs; |
| 623 | + } |
611 | 624 | k = {}; |
612 | 625 | k[ACTION] = MODIFY_SELECTED; |
613 | 626 | k[OLD_VALUE] = t1.selected; |
614 | 627 | k[NEW_VALUE] = t2.selected; |
615 | 628 | k[ROUTE] = route; |
616 | 629 | diffs.push(new Diff(k)); |
617 | | - } |
| 630 | + } |
| 631 | + |
618 | 632 | return diffs; |
619 | 633 | }, |
620 | 634 | findInnerDiff: function (t1, t2, route) { |
|
749 | 763 | } else if (diff[ACTION] === MODIFY_SELECTED) { |
750 | 764 | if (!node || typeof node.selected === 'undefined') |
751 | 765 | return false; |
752 | | - node.selected = diff[NEW_VALUE]; |
| 766 | + node.selected = diff[NEW_VALUE]; |
753 | 767 | } else if (diff[ACTION] === MODIFY_TEXT_ELEMENT) { |
754 | 768 | if (!node || node.nodeType != 3) |
755 | 769 | return false; |
|
868 | 882 | }, |
869 | 883 | }; |
870 | 884 |
|
871 | | - |
872 | | - |
873 | 885 | window.diffDOM = diffDOM; |
| 886 | + window.cleanCloneNode = cleanCloneNode; |
874 | 887 | }()); |
0 commit comments