X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/24f79c15db362b3646ce15d0dc6d9c703040e892..65c64d3696e38bda0e2259d48c8d02978da7a3d8:/src/smartxml/smartxml.js diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index cbb2ba8..ffbe4c2 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -27,7 +27,9 @@ $.extend(DocumentNode.prototype, { }, detach: function() { + var parent = this.parent(); this._$.detach(); + this.triggerChangeEvent('nodeDetached', {parent: parent}); return this; }, @@ -36,7 +38,20 @@ $.extend(DocumentNode.prototype, { }, parent: function() { - return this.nativeNode.parentNode ? this.document.createElementNode(this.nativeNode.parentNode) : null; + var parentNode = this.nativeNode.parentNode; + if(parentNode && parentNode.nodeType === Node.ELEMENT_NODE) { + return this.document.createElementNode(parentNode); + } + return null; + }, + + parents: function() { + var parent = this.parent(), + parents = parent ? parent.parents() : []; + if(parent) { + parents.unshift(parent); + } + return parents; }, after: function(node) { @@ -384,6 +399,25 @@ $.extend(Document.prototype, Backbone.Events, { return wrapper; }, + getSiblingParents: function(params) { + var parents1 = [params.node1].concat(params.node1.parents()).reverse(), + parents2 = [params.node2].concat(params.node2.parents()).reverse(), + noSiblingParents = null; + + if(parents1.length === 0 || parents2.length === 0 || !(parents1[0].sameNode(parents2[0]))) { + return noSiblingParents; + } + + var i; + for(i = 0; i < Math.min(parents1.length, parents2.length); i++) { + if(parents1[i].sameNode(parents2[i])) { + continue; + } + break; + } + return {node1: parents1[i], node2: parents2[i]}; + }, + _wrapText: function(params) { params = _.extend({textNodeIdx: 0}, params); if(typeof params.textNodeIdx === 'number') { @@ -432,6 +466,11 @@ $.extend(Document.prototype, Backbone.Events, { wrapperElement.after({text: suffixOutside}); } return wrapperElement; + }, + + trigger: function() { + //console.log('trigger: ' + arguments[0] + (arguments[1] ? ', ' + arguments[1].type : '')); + Backbone.Events.trigger.apply(this, arguments); } });