X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/5b4122c6f8f4fef93526a0029aa6a4ba5f329cfa..64d042cd7d4cd9786bb5305bb4f066d061052e13:/src/smartxml/smartxml.js
diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js
index 80ee43c..b81b0f0 100644
--- a/src/smartxml/smartxml.js
+++ b/src/smartxml/smartxml.js
@@ -100,14 +100,20 @@ $.extend(ElementNode.prototype, DocumentNode.prototype, {
setTag: function(tagName) {
var node = this.document.createElementNode({tagName: tagName}),
- oldTagName = this.getTagName();
+ oldTagName = this.getTagName(),
+ myContents = this._$.contents();
this.getAttrs().forEach(function(attribute) {
node.setAttr(attribute.name, attribute.value, true);
});
node.setData(this.getData());
+ if(this.sameNode(this.document.root)) {
+ defineDocumentProperties(this.document, node._$);
+ }
+ this._$.replaceWith(node._$);
this._setNativeNode(node._$[0]);
+ this._$.append(myContents);
this.triggerChangeEvent('nodeTagChange', {oldTagName: oldTagName, newTagName: this.getTagName()});
},
@@ -183,8 +189,12 @@ $.extend(ElementNode.prototype, DocumentNode.prototype, {
toXML: function() {
var wrapper = $('
');
- wrapper.append(this._$);
+ wrapper.append(this._getXMLDOMToDump());
return wrapper.html();
+ },
+
+ _getXMLDOMToDump: function() {
+ return this._$;
}
});
@@ -232,18 +242,12 @@ $.extend(Document.prototype, Backbone.Events, {
return new this.TextNodeFactory(nativeNode, this);
},
- loadXML: function(xml) {
- var $document = $(parseXML(xml));
-
- var doc = this;
- Object.defineProperty(this, 'root', {get: function() {
- return doc.createElementNode($document[0]);
- }, configurable: true});
- Object.defineProperty(this, 'dom', {get: function() {
- return $document[0];
- }, configurable: true});
-
- this.trigger('contentSet');
+ loadXML: function(xml, options) {
+ options = options || {};
+ defineDocumentProperties(this, $(parseXML(xml)));
+ if(!options.silent) {
+ this.trigger('contentSet');
+ }
},
toXML: function() {
@@ -251,6 +255,14 @@ $.extend(Document.prototype, Backbone.Events, {
}
});
+var defineDocumentProperties = function(doc, $document) {
+ Object.defineProperty(doc, 'root', {get: function() {
+ return doc.createElementNode($document[0]);
+ }, configurable: true});
+ Object.defineProperty(doc, 'dom', {get: function() {
+ return $document[0];
+ }, configurable: true});
+};
return {
documentFromXML: function(xml) {