smartxml: emitting nodeDetached event
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 25 Oct 2013 14:25:25 +0000 (16:25 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 25 Oct 2013 14:25:25 +0000 (16:25 +0200)
src/smartxml/smartxml.js
src/smartxml/smartxml.test.js

index cbb2ba8..18664c7 100644 (file)
@@ -27,7 +27,9 @@ $.extend(DocumentNode.prototype, {
     },
 
     detach: function() {
     },
 
     detach: function() {
+        var parent = this.parent();
         this._$.detach();
         this._$.detach();
+        this.triggerChangeEvent('nodeDetached', {parent: parent});
         return this;
     },
 
         return this;
     },
 
index e7aa8d4..8154ff5 100644 (file)
@@ -370,6 +370,20 @@ describe('smartxml', function() {
     });
 
     describe('Events', function() {
     });
 
     describe('Events', function() {
+        it('emits nodeDetached event on node detach', function() {
+            var node = elementNodeFromXML('<div><div></div></div>'),
+                innerNode = node.contents()[0],
+                spy = sinon.spy();
+            node.document.on('change', spy);
+            
+            var detached = innerNode.detach(),
+                event = spy.args[0][0];
+
+            expect(event.type).to.equal('nodeDetached');
+            expect(event.meta.node.sameNode(detached, 'detached node in event meta'));
+            expect(event.meta.parent.sameNode(node), 'original parent node in event meta');
+        }),
+
         it('emits nodeAdded event when appending new node', function() {
             var node = elementNodeFromXML('<div></div>'),
                 spy = sinon.spy();
         it('emits nodeAdded event when appending new node', function() {
             var node = elementNodeFromXML('<div></div>'),
                 spy = sinon.spy();