smartxml: attaching previous parent of a moved node to nodeMoved event
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 11 Feb 2014 11:06:51 +0000 (12:06 +0100)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 11 Feb 2014 11:06:51 +0000 (12:06 +0100)
src/smartxml/core.js
src/smartxml/smartxml.js
src/smartxml/smartxml.test.js

index 665f9d5..ec2c643 100644 (file)
@@ -13,7 +13,7 @@ var INSERTION = function(implementation) {
             nodeParent,
             returned;
         options = options || {};
             nodeParent,
             returned;
         options = options || {};
-        if(!(this.document.containsNode(this))) {
+        if(!(this.document.containsNode(this)) || !insertion.isNew) {
             nodeParent = insertion.ofNode.parent();
         }
         returned = implementation.call(this, insertion.ofNode);
             nodeParent = insertion.ofNode.parent();
         }
         returned = implementation.call(this, insertion.ofNode);
index 9227e0f..102a506 100644 (file)
@@ -123,6 +123,9 @@ $.extend(DocumentNode.prototype, {
         var node = (metaData && metaData.node) ? metaData.node : this,
             event = new events.ChangeEvent(type, $.extend({node: node}, metaData || {}));
         if(type === 'nodeDetached' || this.document.containsNode(event.meta.node)) {
         var node = (metaData && metaData.node) ? metaData.node : this,
             event = new events.ChangeEvent(type, $.extend({node: node}, metaData || {}));
         if(type === 'nodeDetached' || this.document.containsNode(event.meta.node)) {
+            if(type === 'nodeMoved') {
+                event.meta.parent = origParent;
+            }
             this.document.trigger('change', event);
         }
         if((type === 'nodeAdded' || type === 'nodeMoved') && !this.document.containsNode(this) && nodeWasContained) {
             this.document.trigger('change', event);
         }
         if((type === 'nodeAdded' || type === 'nodeMoved') && !this.document.containsNode(this) && nodeWasContained) {
index 7b42580..1e778ce 100644 (file)
@@ -932,6 +932,7 @@ describe('smartxml', function() {
             expect(spy.callCount).to.equal(1);
             expect(event.type).to.equal('nodeMoved');
             expect(event.meta.node.sameNode(appended)).to.be.true;
             expect(spy.callCount).to.equal(1);
             expect(event.type).to.equal('nodeMoved');
             expect(event.meta.node.sameNode(appended)).to.be.true;
+            expect(node.document.root.sameNode(event.meta.parent)).to.equal(true, 'previous parent attached to event meta');
         });
         
         it('emits nodeAdded event when prepending new node', function() {
         });
         
         it('emits nodeAdded event when prepending new node', function() {