From df0ff2d95fa546b84567c422db9aab4bbd63e8b2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Wed, 17 Jul 2013 13:50:29 +0200 Subject: [PATCH] Refactoring: Moving commands out of canvasManager --- modules/documentCanvas/canvasManager.js | 51 ------------ modules/documentCanvas/commands.js | 99 ++++++++++++++++++++++++ modules/documentCanvas/documentCanvas.js | 5 +- 3 files changed, 102 insertions(+), 53 deletions(-) create mode 100644 modules/documentCanvas/commands.js diff --git a/modules/documentCanvas/canvasManager.js b/modules/documentCanvas/canvasManager.js index a306d14..69cfd07 100644 --- a/modules/documentCanvas/canvasManager.js +++ b/modules/documentCanvas/canvasManager.js @@ -23,7 +23,6 @@ var Manager = function(canvas, sandbox) { this.canvas = canvas; this.sandbox = sandbox; this.shownAlready = false; - this.gridToggled = false; this.scrollbarPosition = 0; this.currentNode = null; var manager = this; @@ -182,56 +181,6 @@ Manager.prototype.onBackspaceKey = function(e) { } }; -Manager.prototype.command = function(command, params) { - - 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') { - if(this.canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { - this.canvas.list.extractItems({element1: parent1, element2: parent2}); - } else if(!cursor.isSelecting()) { - var toUnwrap = cursor.getPosition().element, - parent = toUnwrap.unwrap(); - this.canvas.setCurrentElement(parent); - } - } 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(cursor.isSelecting() && cursor.isSelectingSiblings()) { - if(cursor.isSelectingWithinElement()) { - selectionStart.element.wrapWithNodeElement({tag: params.wlxmlTag, klass: params.wlxmlClass, start: selectionStart.offset, end: selectionEnd.offset}); - } - else { - var parent = selectionStart.element.parent(); - this.canvas.wrapText({ - inside: parent, - _with: {tag: params.wlxmlTag, klass: params.wlxmlClass}, - offsetStart: selectionStart.offset, - offsetEnd: selectionEnd.offset, - textNodeIdx: [parent.childIndex(selectionStart.element), parent.childIndex(selectionEnd.element)] - }); - } - } - } -}; - return Manager; diff --git a/modules/documentCanvas/commands.js b/modules/documentCanvas/commands.js new file mode 100644 index 0000000..52f03d8 --- /dev/null +++ b/modules/documentCanvas/commands.js @@ -0,0 +1,99 @@ +define([ + +], function() { + +'use strict'; + + +var gridToggled = false; + +var commands = { + _cmds: {}, + register: function(name, command) { + this._cmds[name] = command; + }, + + run: function(name, params, canvas) { + return this._cmds[name](canvas, params); + } +}; + +commands.register('unwrap-node', function(canvas) { + var cursor = canvas.getCursor(), + selectionStart = cursor.getSelectionStart(), + selectionEnd = cursor.getSelectionEnd(), + parent1 = selectionStart.element.parent() || undefined, + parent2 = selectionEnd.element.parent() || undefined; + + if(canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { + canvas.list.extractItems({element1: parent1, element2: parent2}); + } else if(!cursor.isSelecting()) { + var toUnwrap = cursor.getPosition().element, + parent = toUnwrap.unwrap(); + canvas.setCurrentElement(parent); + } +}); + +commands.register('wrap-node', function(canvas) { + var cursor = canvas.getCursor(), + selectionStart = cursor.getSelectionStart(), + selectionEnd = cursor.getSelectionEnd(), + parent1 = selectionStart.element.parent() || undefined, + parent2 = selectionEnd.element.parent() || undefined; + + if(canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { + canvas.list.create({element1: parent1, element2: parent2}); + } +}); + +commands.register('toggle-list', function(canvas, params) { + var cursor = canvas.getCursor(), + selectionStart = cursor.getSelectionStart(), + selectionEnd = cursor.getSelectionEnd(), + parent1 = selectionStart.element.parent() || undefined, + parent2 = selectionEnd.element.parent() || undefined; + + if(params.toggle) { + canvas.list.create({element1: parent1, element2: parent2}); + } else { + if(canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) { + canvas.list.extractItems({element1: parent1, element2: parent2, merge: false}); + } + } +}); + +commands.register('toggle-grid', function(canvas, params) { + canvas.doc().dom().find('[wlxml-tag]').toggleClass('rng-common-hoveredNode', params.toggle); + gridToggled = params.toggle; +}); + +commands.register('newNodeRequested', function(canvas, params) { + var cursor = canvas.getCursor(), + selectionStart = cursor.getSelectionStart(), + selectionEnd = cursor.getSelectionEnd(); + + if(cursor.isSelecting() && cursor.isSelectingSiblings()) { + if(cursor.isSelectingWithinElement()) { + selectionStart.element.wrapWithNodeElement({tag: params.wlxmlTag, klass: params.wlxmlClass, start: selectionStart.offset, end: selectionEnd.offset}); + } + else { + var parent = selectionStart.element.parent(); + canvas.wrapText({ + inside: parent, + _with: {tag: params.wlxmlTag, klass: params.wlxmlClass}, + offsetStart: selectionStart.offset, + offsetEnd: selectionEnd.offset, + textNodeIdx: [parent.childIndex(selectionStart.element), parent.childIndex(selectionEnd.element)] + }); + } + } +}); + + +return { + run: function(name, params, canvas) { + return commands.run(name, params, canvas); + } +}; + +}); \ No newline at end of file diff --git a/modules/documentCanvas/documentCanvas.js b/modules/documentCanvas/documentCanvas.js index 4cf3558..73917f7 100644 --- a/modules/documentCanvas/documentCanvas.js +++ b/modules/documentCanvas/documentCanvas.js @@ -6,7 +6,8 @@ define([ './canvas', './canvasManager', './canvas/canvas', -'libs/text!./template.html'], function(_, transformations, Canvas, CanvasManager, canvas3, template) { +'./commands', +'libs/text!./template.html'], function(_, transformations, Canvas, CanvasManager, canvas3, commands, template) { 'use strict'; @@ -68,7 +69,7 @@ return function(sandbox) { canvas.setCurrentElement(element); }, command: function(command, params) { - manager.command(command, params); + commands.run(command, params, canvas); } }; -- 2.20.1