X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/e7d1ef97b3d612aaa64a4bc0742b7ede49e807d4..db3139e6d432413b4bc06c68c5a75c3bc8e4c8dd:/src/smartxml/smartxml.js diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 01a0a2a..e3c831d 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -6,7 +6,7 @@ define([ ], function($, _, Backbone, events) { 'use strict'; - +/* globals Node */ var TEXT_NODE = Node.TEXT_NODE; @@ -82,7 +82,7 @@ $.extend(DocumentNode.prototype, { }, sameNode: function(otherNode) { - return otherNode && this.nativeNode === otherNode.nativeNode; + return !!(otherNode) && this.nativeNode === otherNode.nativeNode; }, parent: function() { @@ -184,7 +184,7 @@ $.extend(ElementNode.prototype, { detach: function() { var next; - if(parent && this.isSurroundedByTextElements()) { + if(this.parent() && this.isSurroundedByTextElements()) { next = this.next(); this.prev().appendText(next.getText()); next.detach(); @@ -272,6 +272,15 @@ $.extend(ElementNode.prototype, { this._$.prepend(nativeNode); }), + insertAtIndex: function(nativeNode, index) { + var contents = this.contents(); + if(index < contents.length) { + return contents[index].before(nativeNode); + } else if(index === contents.length) { + return this.append(nativeNode); + } + }, + unwrapContent: function() { var parent = this.parent(); if(!parent) { @@ -437,6 +446,7 @@ $.extend(Document.prototype, Backbone.Events, { createDocumentNode: function(from) { if(!(from instanceof Node)) { if(from.text !== undefined) { + /* globals document */ from = document.createTextNode(from.text); } else { var node = $('<' + from.tagName + '>'); @@ -474,17 +484,17 @@ $.extend(Document.prototype, Backbone.Events, { }, wrapNodes: function(params) { - if(!(params.element1.parent().sameNode(params.element2.parent()))) { + if(!(params.node1.parent().sameNode(params.node2.parent()))) { throw new Error('Wrapping non-sibling nodes not supported.'); } - var parent = params.element1.parent(), + var parent = params.node1.parent(), parentContents = parent.contents(), wrapper = this.createDocumentNode({ tagName: params._with.tagName, attrs: params._with.attrs}), - idx1 = parent.indexOf(params.element1), - idx2 = parent.indexOf(params.element2); + idx1 = parent.indexOf(params.node1), + idx2 = parent.indexOf(params.node2); if(idx1 > idx2) { var tmp = idx1;