X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/1b8f7d0e5974d649dff89f50f2a26783a29af5d7..f3acead9b013a34d21bd75867c3351862b5df07f:/modules/documentCanvas/canvas.js diff --git a/modules/documentCanvas/canvas.js b/modules/documentCanvas/canvas.js index c71950d..23cdf0a 100644 --- a/modules/documentCanvas/canvas.js +++ b/modules/documentCanvas/canvas.js @@ -61,52 +61,40 @@ Canvas.prototype.nodeInsertAfter = function(options) { element.after(options.node.dom); }; -Canvas.prototype.nodeWrap2 = function(options) { - var container = $(this.content.find('#' + options.inside.getId()).get(0)); - - var containerContent = container.contents(); - var idx1 = Math.min.apply(Math, options.textNodeIdx); - var idx2 = Math.max.apply(Math, options.textNodeIdx); - var textNode1 = $(containerContent.get(idx1)); - var textNode2 = $(containerContent.get(idx2)); +Canvas.prototype.nodeWrap = function(options) { + options = _.extend({textNodeIdx: 0}, options); + if(typeof options.textNodeIdx === 'number') + options.textNodeIdx = [options.textNodeIdx]; + + var container = $(this.content.find('#' + options.inside.getId()).get(0)), + containerContent = container.contents(), + idx1 = Math.min.apply(Math, options.textNodeIdx), + idx2 = Math.max.apply(Math, options.textNodeIdx), + textNode1 = $(containerContent.get(idx1)), + textNode2 = $(containerContent.get(idx2)), + sameNode = textNode1.get(0) === textNode2.get(0), + prefixOutside = textNode1.text().substr(0, options.offsetStart), + prefixInside = textNode1.text().substr(options.offsetStart), + suffixInside = textNode2.text().substr(0, options.offsetEnd), + suffixOutside = textNode2.text().substr(options.offsetEnd) + ; textNode1.after(options._with.dom); textNode1.detach(); - textNode2.detach(); - - options._with.dom.before(textNode1.text().substr(0, options.offsetStart)); - options._with.dom.append(textNode1.text().substr(options.offsetStart)); - for(var i = idx1 + 1; i < idx2; i++) { - options._with.dom.append(containerContent[i]); + options._with.dom.before(prefixOutside); + if(sameNode) { + var core = textNode1.text().substr(options.offsetStart, options.offsetEnd - options.offsetStart); + options._with.setContent(core); + } else { + textNode2.detach(); + options._with.dom.append(prefixInside); + for(var i = idx1 + 1; i < idx2; i++) { + options._with.dom.append(containerContent[i]); + } + options._with.dom.append(suffixInside); } - options._with.dom.append(textNode2.text().substr(0, options.offsetEnd)); - options._with.dom.after(textNode2.text().substr(options.offsetEnd)); -}; - -Canvas.prototype.nodeWrap = function(options) { - options = _.extend({textNodeIdx: 0}, options); - - if(options.textNodeIdx instanceof Array) - return this.nodeWrap2(options); - - var element = $(this.content.find('#' + options.inside.getId()).get(0)); - - var elementContents = element.contents(); - if(elementContents.length === 0 || - elementContents.length - 1 < options.textNodeIdx || - elementContents.get(options.textNodeIdx).nodeType != 3) - return false; - var textElement = elementContents.get(options.textNodeIdx); - - var prefix = textElement.data.substr(0, options.offsetStart); - var suffix = textElement.data.substr(options.offsetEnd); - var core = textElement.data.substr(options.offsetStart, options.offsetEnd - options.offsetStart); - options._with.setContent(core); - - $(textElement).replaceWith(options._with.dom); - options._with.dom.before(prefix); - options._with.dom.after(suffix); + options._with.dom.after(suffixOutside); }; Canvas.prototype.nodeSplit = function(options) {