From: Aleksander Ɓukasz Date: Thu, 24 Oct 2013 10:51:19 +0000 (+0200) Subject: smartxml: wrapping TextNode content X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/58425daa1aa7e717e92eaec170262de31ed47bc0?ds=inline smartxml: wrapping TextNode content A little bit different api to introduce additional features. --- diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 7c68e06..2e507db 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -41,10 +41,13 @@ $.extend(DocumentNode.prototype, { }, wrapWith: function(node) { + node = node instanceof ElementNode ? node : this.document.createElementNode(node); + if(this.parent()) { this.before(node); } node.append(this); + return node; }, triggerChangeEvent: function(type, metaData) { @@ -245,7 +248,7 @@ $.extend(Document.prototype, Backbone.Events, { createElementNode: function(from) { if(!(from instanceof HTMLElement)) { - from = $('<' + from.tagName + '>'); + from = $('<' + from.tagName + '>')[0]; } return new this.ElementNodeFactory(from, this); }, diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 15fe394..58156c2 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -178,6 +178,23 @@ describe('smartxml', function() { var event = spy.args[0][0]; expect(event.type).to.equal('nodeTextChange'); }); + + describe('Wrapping TextNode contents', function() { + + it('wraps DocumentTextElement', function() { + var node = elementNodeFromXML('
Alice
'), + textNode = node.contents()[0]; + + var returned = textNode.wrapWith({tagName: 'header'}), + parent = textNode.parent(), + parent2 = node.contents()[0]; + + expect(returned.sameNode(parent)).to.be.equal(true, 'wrapper is a parent'); + expect(returned.sameNode(parent2)).to.be.equal(true, 'wrapper has a correct parent'); + expect(returned.getTagName()).to.equal('header'); + }); + }); + }); describe('Manipulations', function() { @@ -197,16 +214,6 @@ describe('smartxml', function() { expect(node.parent().sameNode(wrapper)).to.be.true; }); - it('wraps text node with element node', function() { - var node = elementNodeFromXML('
Alice
'), - textNode = node.contents()[0], - wrapper = elementNodeFromXML(''); - - textNode.wrapWith(wrapper); - expect(textNode.parent().sameNode(wrapper)).to.be.true; - expect(node.contents()).to.have.length(1); - }); - it('unwraps element node contents', function() { var node = elementNodeFromXML('
Alice
has propably a cat
!
'), outerDiv = node.contents()[1];