From b31ffcb46eae55b9c66457e2330b16e8db84f1d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Wed, 11 Dec 2013 13:14:04 +0100 Subject: [PATCH] smartxml: Document can create node from xml string --- src/smartxml/smartxml.js | 26 ++++++++++++++++++-------- src/smartxml/smartxml.test.js | 9 +++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 52236b6..d9e44be 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -268,17 +268,22 @@ $.extend(Document.prototype, Backbone.Events, { createDocumentNode: function(from) { if(!(from instanceof Node)) { - if(from.text !== undefined) { - /* globals document */ - from = document.createTextNode(from.text); + if(typeof from === 'string') { + from = parseXML(from); + this.normalizeXML(from); } else { - var node = $('<' + from.tagName + '>'); + if(from.text !== undefined) { + /* globals document */ + from = document.createTextNode(from.text); + } else { + var node = $('<' + from.tagName + '>'); - _.keys(from.attrs || {}).forEach(function(key) { - node.attr(key, from.attrs[key]); - }); + _.keys(from.attrs || {}).forEach(function(key) { + node.attr(key, from.attrs[key]); + }); - from = node[0]; + from = node[0]; + } } } var Factory, typeMethods, typeTransformations; @@ -309,11 +314,16 @@ $.extend(Document.prototype, Backbone.Events, { loadXML: function(xml, options) { options = options || {}; this._defineDocumentProperties($(parseXML(xml))); + this.normalizeXML(this.dom); if(!options.silent) { this.trigger('contentSet'); } }, + normalizeXML: function(nativeNode) { + void(nativeNode); // noop + }, + toXML: function() { return this.root.toXML(); }, diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index d82f823..cc68cdd 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -60,6 +60,15 @@ describe('smartxml', function() { expect(emptyTextNode.getText()).to.equal('', 'empty ok'); expect(nonEmptyTextNode.getText()).to.equal('alice', 'non empty ok'); }); + + it('creates nodes from xml strings', function() { + var doc = getDocumentFromXML('
'), + node = doc.createDocumentNode('Alice'); + expect(node.getTagName()).to.equal('a'); + expect(node.contents().length).to.equal(2); + expect(node.contents()[0].getText()).to.equal('Alice'); + expect(node.contents()[1].getTagName()).to.equal('b'); + }); }); describe('DocumentNode', function() { -- 2.20.1