X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/b3f4fee8a2f01bf946bf28f9abd8b782e67dc186..0032858d24ed6dba11f8943072cd6db475a2dd17:/src/smartxml/smartxml.js?ds=inline diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 6f3d7de..a583848 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -36,6 +36,10 @@ $.extend(DocumentNode.prototype, { this._$ = $(nativeNode); }, + clone: function() { + return this.document.createDocumentNode(this._$.clone(true, true)[0]); + }, + isRoot: function() { return this.document.root.sameNode(this); }, @@ -351,6 +355,44 @@ $.extend(TextNode.prototype, { } }, + split: function(params) { + var parentElement = this.parent(), + passed = false, + succeedingChildren = [], + prefix = this.getText().substr(0, params.offset), + suffix = this.getText().substr(params.offset); + + parentElement.contents().forEach(function(child) { + if(passed) { + succeedingChildren.push(child); + } + if(child.sameNode(this)) { + passed = true; + } + }.bind(this)); + + if(prefix.length > 0) { + this.setText(prefix); + } + else { + this.detach(); + } + + var attrs = {}; + parentElement.getAttrs().forEach(function(attr) {attrs[attr.name] = attr.value; }); + var newElement = this.document.createDocumentNode({tagName: parentElement.getTagName(), attrs: attrs}); + parentElement.after(newElement); + + if(suffix.length > 0) { + newElement.append({text: suffix}); + } + succeedingChildren.forEach(function(child) { + newElement.append(child); + }); + + return {first: parentElement, second: newElement}; + }, + triggerTextChangeEvent: function() { var event = new events.ChangeEvent('nodeTextChange', {node: this}); this.document.trigger('change', event); @@ -359,7 +401,7 @@ $.extend(TextNode.prototype, { var parseXML = function(xml) { - return $(xml)[0]; + return $($.trim(xml))[0]; }; var Document = function(xml) { @@ -372,7 +414,7 @@ $.extend(Document.prototype, Backbone.Events, { createDocumentNode: function(from) { if(!(from instanceof Node)) { - if(from.text) { + if(from.text !== undefined) { from = document.createTextNode(from.text); } else { var node = $('<' + from.tagName + '>'); @@ -531,7 +573,7 @@ var defineDocumentProperties = function(doc, $document) { return { documentFromXML: function(xml) { - return new Document(parseXML(xml)); + return new Document(xml); }, elementNodeFromXML: function(xml) {