X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/a29236f6a3f5166a3cace703dd5f89cf17405617..1c409979eddd9cd58c1efe2705328c91c95c592b:/modules/documentCanvas/canvasManager.js diff --git a/modules/documentCanvas/canvasManager.js b/modules/documentCanvas/canvasManager.js index 26bc4fa..afc3363 100644 --- a/modules/documentCanvas/canvasManager.js +++ b/modules/documentCanvas/canvasManager.js @@ -96,47 +96,6 @@ Manager.prototype.selectNode = function(cnode, options) { this.sandbox.publish('nodeSelected', cnode); }; -Manager.prototype.insertNewNode = function(wlxmlTag, wlxmlClass) { - var selection = window.getSelection(), - $anchorNode = $(selection.anchorNode), - $focusNode = $(selection.focusNode); - - - if(!selection.isCollapsed && $anchorNode.parent()[0] === $focusNode.parent()[0]) { - var textNodeIdx, - parent = $anchorNode.parent(), - parentContents = parent.contents(), - offsetStart = selection.anchorOffset, - offsetEnd = selection.focusOffset; - - if(selection.anchorNode === selection.focusNode) { - if(offsetStart > offsetEnd) { - var tmp = offsetStart; - offsetStart = offsetEnd; - offsetEnd = tmp; - } - textNodeIdx = parentContents.index($anchorNode); - } else { - if(parentContents.index($anchorNode) > parentContents.index($focusNode)) { - offsetStart = selection.focusOffset; - offsetEnd = selection.anchorOffset; - } - textNodeIdx = [parentContents.index($anchorNode), parentContents.index($focusNode)]; - } - - var wrapper = canvasNode.create({tag: wlxmlTag, klass: wlxmlClass}); - this.canvas.nodeWrap({inside: canvasNode.create(parent), - _with: wrapper, - offsetStart: offsetStart, - offsetEnd: offsetEnd, - textNodeIdx: textNodeIdx - }); - this.selectNode(wrapper, {movecaret: 'end'}); - } - - -}; - Manager.prototype.getNodeElement = function(cnode) { return this.canvas.doc().dom().find('#'+cnode.getId()); }; @@ -189,11 +148,6 @@ Manager.prototype.movecaretToNode = function(nodeElement, where) { selection.addRange(range); }; -Manager.prototype.toggleGrid = function(toggle) { - this.canvas.doc().dom().find('[wlxml-tag]').toggleClass('rng-common-hoveredNode', toggle); - this.gridToggled = toggle; -}; - Manager.prototype.onEnterKey = function(e) { e.preventDefault(); var pos = getCursorPosition(); @@ -228,28 +182,70 @@ Manager.prototype.onBackspaceKey = function(e) { } }; -Manager.prototype.command = function(command, meta) { - var pos = getCursorPosition(); - - if(command === 'createList') { - var node = canvasNode.create(pos.parentNode); - if(window.getSelection().getRangeAt(0).collapsed && this.canvas.nodeInsideList({node: node})) { - this.canvas.listRemove({pointer: node}); - this.selectNode(node, {movecaret: 'end'}); - this.sandbox.publish('contentChanged'); +Manager.prototype.toggleList = function(toggle) { + var selection = window.getSelection(), + node1 = $(selection.anchorNode).parent()[0], + node2 = $(selection.focusNode).parent()[0], + element1 = this.canvas.getDocumentElement(node1), + element2 = this.canvas.getDocumentElement(node2); + +}; + +Manager.prototype.command = function(command, params) { + var selection = window.getSelection(), + element1 = this.canvas.getDocumentElement(selection.anchorNode), + element2 = this.canvas.getDocumentElement(selection.focusNode), + parent1 = element1 ? element1.parent() : undefined, + parent2 = element2 ? element2.parent() : undefined; + + if(command === 'unwrap-node') { + // this.canvas.nodeUnwrap({node: canvasNode.create(pos.parentNode)}); + // this.sandbox.publish('contentChanged'); + if(this.canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { + this.canvas.list.extractItems({element1: parent1, element2: parent2}); + } else if (selection.isCollapsed) { + element1.unwrap(); } - else { - //if(!this.canvas.nodeInsideList({node: node})) { - this.canvas.listCreate({start: node, end: canvasNode.create(pos.focusNode), type: meta}); - this.selectNode(node, {movecaret: 'end'}); - this.sandbox.publish('contentChanged'); - //} + } else if(command === 'wrap-node') { + if(this.canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { + this.canvas.list.create({element1: parent1, element2: parent2}); + } + } else if(command === 'toggle-list') { + if(params.toggle) { + this.canvas.list.create({element1: parent1, element2: parent2}); + } else { + if(this.canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { + this.canvas.list.extractItems({element1: parent1, element2: parent2, merge: false}); + } + } + } else if(command == 'toggle-grid') { + this.canvas.doc().dom().find('[wlxml-tag]').toggleClass('rng-common-hoveredNode', params.toggle); + this.gridToggled = params.toggle; + } else if(command == 'newNodeRequested') { + if(!selection.isCollapsed && element1.parent().sameNode(element2.parent())) { + var parent = element1.parent(), + offsetStart = selection.anchorOffset, + offsetEnd = selection.focusOffset; + + if(element1.sameNode(element2)) { + element1.wrapWithNodeElement({tag: params.wlxmlTag, klass: params.wlxmlClass, start: offsetStart, end: offsetEnd}); + } + else { + if(parent.childIndex(element1) > parent.childIndex(element2)) { + var tmp = offsetStart; + offsetStart = offsetEnd; + offsetEnd = tmp; + } + this.canvas.wrapText({ + inside: parent, + _with: {tag: params.wlxmlTag, klass: params.wlxmlClass}, + offsetStart: offsetStart, + offsetEnd: offsetEnd, + textNodeIdx: [parent.childIndex(element1), parent.childIndex(element2)] + }); + } } - } else if(command === 'unwrap-node') { - this.canvas.nodeUnwrap({node: canvasNode.create(pos.parentNode)}); - this.sandbox.publish('contentChanged'); } - };