X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/cca351c564d1bc9eabf6aca2bc13d41218443703..ee83d407018193482c72fdc57a8cfea17d38127a:/modules/documentCanvas/canvas.js?ds=sidebyside diff --git a/modules/documentCanvas/canvas.js b/modules/documentCanvas/canvas.js index 0585d12..cafed1a 100644 --- a/modules/documentCanvas/canvas.js +++ b/modules/documentCanvas/canvas.js @@ -62,12 +62,16 @@ Canvas.prototype.nodeInsertAfter = function(options) { }; Canvas.prototype.nodeWrap = function(options) { + options = _.extend({textNodeIdx: 0}, options); + var element = $(this.content.find('#' + options.inside.getId()).get(0)); var elementContents = element.contents(); - if(elementContents.length !== 1 || elementContents.get(0).nodeType != 3) + if(elementContents.length === 0 || + elementContents.length - 1 < options.textNodeIdx || + elementContents.get(options.textNodeIdx).nodeType != 3) return false; - var textElement = elementContents.get(0); + var textElement = elementContents.get(options.textNodeIdx); var prefix = textElement.data.substr(0, options.offsetStart); var suffix = textElement.data.substr(options.offsetEnd); @@ -98,7 +102,7 @@ Canvas.prototype.nodeSplit = function(options) { var node = this; if(passed) succeedingNodes.push(node); - if(node.isSameNode(textNode.get(0))) + if(node === textNode.get(0)) passed = true; }); @@ -125,7 +129,7 @@ Canvas.prototype.nodeRemove = function(options) { Canvas.prototype.listCreate = function(options) { var element1 = $(this.content.find('#' + options.start.getId()).get(0)); var element2 = $(this.content.find('#' + options.end.getId()).get(0)); - if(!element1.parent().get(0).isSameNode(element2.parent().get(0))) + if(!element1.parent().get(0) === element2.parent().get(0)) return false; var parent = element1.parent(); @@ -142,7 +146,7 @@ Canvas.prototype.listCreate = function(options) { var canvas = this; parent.contents().each(function() { var node = this; - if(node.isSameNode(element1.get(0))) + if(node === element1.get(0)) place = 'inside'; if(place === 'inside') { var $node; @@ -156,12 +160,24 @@ Canvas.prototype.listCreate = function(options) { $node.attr('wlxml-class', 'item'); nodesToWrap.push($node); } - if(node.isSameNode(element2.get(0))) + if(node === element2.get(0)) return false; }); var list = canvasNode.create({tag: 'div', klass: 'list-items' + (options.type === 'enum' ? '-enum' : '')}).dom; //this._createNode('div', 'list-items'); - element1.before(list); + + var parentNode = options.start.parent(); + + var toret; + if(parentNode && parentNode.isOfClass('list-items')) { + list.wrap('
'); + toret = list.parent(); + } else { + toret = list; + } + + + element1.before(toret); nodesToWrap.forEach(function(node) { node.remove(); @@ -174,9 +190,19 @@ Canvas.prototype.listRemove = function(options) { var listElement = options.pointer.getClass() === 'list-items' ? pointerElement : pointerElement.parents('[wlxml-class|="list-items"][wlxml-tag]'); - listElement.find('[wlxml-class=item]').each(function() { - $(this).removeAttr('wlxml-class'); - }); + var nested = false; + if(listElement.length > 1) { + listElement = $(listElement[0]); + nested = true; + } + + if(nested) { + listElement.unwrap(); + } else { + listElement.find('[wlxml-class=item]').each(function() { + $(this).removeAttr('wlxml-class'); + }); + } listElement.children().unwrap(); };