X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/0f2c47c0ac58d2ee6b7ce7981a8f277a6b237051..3b3bcea4776b283d1a29d81bdd190778428d41e2:/modules/documentCanvas/canvasManager.js?ds=inline diff --git a/modules/documentCanvas/canvasManager.js b/modules/documentCanvas/canvasManager.js index 3618e11..4b26135 100644 --- a/modules/documentCanvas/canvasManager.js +++ b/modules/documentCanvas/canvasManager.js @@ -182,68 +182,48 @@ Manager.prototype.onBackspaceKey = function(e) { } }; -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); + + var cursor = this.canvas.getCursor(), + selectionStart = cursor.getSelectionStart(), + selectionEnd = cursor.getSelectionEnd(), + parent1 = selectionStart.element.parent() || undefined, + parent2 = selectionEnd.element.parent() || undefined; if(command === 'unwrap-node') { - // this.canvas.nodeUnwrap({node: canvasNode.create(pos.parentNode)}); - // this.sandbox.publish('contentChanged'); - element1 = element1.parent(); - element2 = element2.parent(); - if(this.canvas.list.areItemsOfTheSameList({element1: element1, element2: element2})) { - this.canvas.list.extractItems({element1: element1, element2: element2}); + if(this.canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { + this.canvas.list.extractItems({element1: parent1, element2: parent2}); + } else if(!cursor.isSelecting()) { + cursor.getPosition().element.unwrap(); } } else if(command === 'wrap-node') { - element1 = element1.parent(); - element2 = element2.parent(); - if(this.canvas.list.areItemsOfTheSameList({element1: element1, element2: element2})) { - this.canvas.list.create({element1: element1, element2: element2}); + if(this.canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { + this.canvas.list.create({element1: parent1, element2: parent2}); } } else if(command === 'toggle-list') { - element1 = element1.parent(); - element2 = element2.parent(); if(params.toggle) { - this.canvas.list.create({element1: element1, element2: element2}); + this.canvas.list.create({element1: parent1, element2: parent2}); } else { - if(this.canvas.list.areItemsOfTheSameList({element1: element1, element2: element2})) { - this.canvas.list.extractItems({element1: element1, element2: element2, merge: false}); + 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}); + if(cursor.isSelecting() && cursor.isSelectingSiblings()) { + if(cursor.isSelectingWithinElement()) { + selectionStart.element.wrapWithNodeElement({tag: params.wlxmlTag, klass: params.wlxmlClass, start: selectionStart.offset, end: selectionEnd.offset}); } else { - if(parent.childIndex(element1) > parent.childIndex(element2)) { - var tmp = offsetStart; - offsetStart = offsetEnd; - offsetEnd = tmp; - } + var parent = selectionStart.element.parent(); this.canvas.wrapText({ inside: parent, _with: {tag: params.wlxmlTag, klass: params.wlxmlClass}, - offsetStart: offsetStart, - offsetEnd: offsetEnd, - textNodeIdx: [parent.childIndex(element1), parent.childIndex(element2)] + offsetStart: selectionStart.offset, + offsetEnd: selectionEnd.offset, + textNodeIdx: [parent.childIndex(selectionStart.element), parent.childIndex(selectionEnd.element)] }); } }