X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/9ebf1ada325abec0fe83789b04f6a8af576818a4..de1034273c0aa6897014dbfb6c6c92d809fd0556:/src/smartxml/smartxml.js diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index a357977..c176f08 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -36,6 +36,10 @@ $.extend(DocumentNode.prototype, { this._$ = $(nativeNode); }, + isRoot: function() { + return this.document.root.sameNode(this); + }, + detach: function() { var parent = this.parent(); this._$.detach(); @@ -84,7 +88,9 @@ $.extend(DocumentNode.prototype, { triggerChangeEvent: function(type, metaData) { var event = new events.ChangeEvent(type, $.extend({node: this}, metaData || {})); - this.document.trigger('change', event); + if(type === 'nodeDetached' || this.document.containsNode(event.meta.node)) { + this.document.trigger('change', event); + } }, getNodeInsertion: function(node) { @@ -243,6 +249,22 @@ $.extend(ElementNode.prototype, { }; }, + /** + * Removes parent of a node if node has no siblings. + */ + unwrap: function() { + if(this.isRoot()) { + return; + } + var parent = this.parent(), + grandParent; + if(parent.contents().length === 1) { + grandParent = parent.parent(); + parent.unwrapContent(); + return grandParent; + } + }, + wrapText: function(params) { return this.document._wrapText(_.extend({inside: this}, params)); }, @@ -358,7 +380,7 @@ $.extend(Document.prototype, Backbone.Events, { }, containsNode: function(node) { - return node._$.parents().index(this.root._$) !== -1; + return this.root && (node.nativeNode === this.root.nativeNode || node._$.parents().index(this.root._$) !== -1); }, wrapNodes: function(params) {