X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/6535ed0c525f70c936a8e25ff38df5157b15c04c..80c653023eaa918f6b736e84d12e17d3c9c24d88:/modules/documentCanvas/canvasManager.js diff --git a/modules/documentCanvas/canvasManager.js b/modules/documentCanvas/canvasManager.js deleted file mode 100644 index 69cfd07..0000000 --- a/modules/documentCanvas/canvasManager.js +++ /dev/null @@ -1,187 +0,0 @@ -define([ -'libs/jquery-1.9.1.min', -'./canvasNode' -], function($, canvasNode) { - -'use strict'; - -var getCursorPosition = function() { - var selection = window.getSelection(); - var anchorNode = $(selection.anchorNode); - var parent = anchorNode.parent(); - return { - textNode: anchorNode, - textNodeOffset: selection.anchorOffset, - textNodeIndex: parent.contents().index(anchorNode), - parentNode: parent, - focusNode: $(selection.focusNode).parent(), - isAtEnd: selection.anchorOffset === anchorNode.text().length - }; -}; - -var Manager = function(canvas, sandbox) { - this.canvas = canvas; - this.sandbox = sandbox; - this.shownAlready = false; - this.scrollbarPosition = 0; - this.currentNode = null; - var manager = this; - - // canvas.doc().dom().find('#rng-module-documentCanvas-content').on('keyup', function() { - // manager.sandbox.publish('contentChanged'); - // }); - - // canvas.doc().dom().on('mouseover', '[wlxml-tag]', function(e) { - // e.stopPropagation(); - // manager.sandbox.publish('nodeHovered', canvasNode.create($(e.target))); - // }); - // canvas.doc().dom().on('mouseout', '[wlxml-tag]', function(e) { - // e.stopPropagation(); - // manager.sandbox.publish('nodeBlured', canvasNode.create($(e.target))); - // }); - // canvas.doc().dom().on('click', '[wlxml-tag]', function(e) { - // e.stopPropagation(); - // console.log('clicked node type: '+e.target.nodeType); - // manager.selectNode(canvasNode.create($(e.target))); - // }); - - // canvas.doc().dom().on('keyup', '#rng-module-documentCanvas-contentWrapper', function(e) { - // var anchor = $(window.getSelection().anchorNode); - - // if(anchor[0].nodeType === Node.TEXT_NODE) - // anchor = anchor.parent(); - // if(!anchor.is('[wlxml-tag]')) - // return; - // manager.selectNode(canvasNode.create(anchor)); - // }); - - // canvas.doc().dom().on('keydown', '#rng-module-documentCanvas-contentWrapper', function(e) { - // if(e.which === 13) { - // manager.onEnterKey(e); - // } - // if(e.which === 8) { - // manager.onBackspaceKey(e); - // } - // }); - - // canvas.doc().dom().onShow = function() { - // if(!manager.shownAlready) { - // manager.shownAlready = true; - // manager.selectFirstNode(); - // } else if(manager.currentNode) { - // manager.movecaretToNode(manager.getNodeElement(manager.currentNode)); - // canvas.doc().dom().find('#rng-module-documentCanvas-contentWrapper').scrollTop(manager.scrollbarPosition); - // } - // }; - // canvas.doc().dom().onHide = function() { - // manager.scrollbarPosition = canvas.doc().dom().find('#rng-module-documentCanvas-contentWrapper').scrollTop(); - // }; -}; - -Manager.prototype.selectNode = function(cnode, options) { - options = options || {}; - var nodeElement = this.getNodeElement(cnode); - - this.dimNode(cnode); - - this.canvas.doc().dom().find('.rng-module-documentCanvas-currentNode').removeClass('rng-module-documentCanvas-currentNode'); - nodeElement.addClass('rng-module-documentCanvas-currentNode'); - - if(options.movecaret) { - this.movecaretToNode(nodeElement, options.movecaret); - } - - this.currentNode = cnode; - this.sandbox.publish('nodeSelected', cnode); -}; - -Manager.prototype.getNodeElement = function(cnode) { - return this.canvas.doc().dom().find('#'+cnode.getId()); -}; - -Manager.prototype.highlightNode = function(cnode) { - var nodeElement = this.getNodeElement(cnode); - if(!this.gridToggled) { - nodeElement.addClass('rng-common-hoveredNode'); - var label = nodeElement.attr('wlxml-tag'); - if(nodeElement.attr('wlxml-class')) - label += ' / ' + nodeElement.attr('wlxml-class'); - var tag = $('
').addClass('rng-module-documentCanvas-hoveredNodeTag').text(label); - nodeElement.append(tag); - } -}; - -Manager.prototype.dimNode = function(cnode) { - var nodeElement = this.getNodeElement(cnode); - if(!this.gridToggled) { - nodeElement.removeClass('rng-common-hoveredNode'); - nodeElement.find('.rng-module-documentCanvas-hoveredNodeTag').remove(); - } -}; - -Manager.prototype.selectFirstNode = function() { - var firstNodeWithText = this.canvas.doc().dom().find('[wlxml-tag]').filter(function() { - return $(this).clone().children().remove().end().text().trim() !== ''; - }).first(); - var node; - if(firstNodeWithText.length) - node = $(firstNodeWithText[0]); - else { - node = this.canvas.doc().dom().find('[wlxml-class|="p"]'); - } - this.selectNode(canvasNode.create(node), {movecaret: true}); -}; - -Manager.prototype.movecaretToNode = function(nodeElement, where) { - if(!nodeElement.length) - return; - var range = document.createRange(); - range.selectNodeContents(nodeElement[0]); - - var collapseArg = true; - if(where === 'end') - collapseArg = false; - range.collapse(collapseArg); - var selection = document.getSelection(); - selection.removeAllRanges(); - selection.addRange(range); -}; - -Manager.prototype.onEnterKey = function(e) { - e.preventDefault(); - var pos = getCursorPosition(); - var contextNode = this.canvas.getNodeById(pos.parentNode.attr('id')); - var newNode; - - if(pos.isAtEnd) { - newNode = canvasNode.create({tag: pos.parentNode.attr('wlxml-tag'), klass: pos.parentNode.attr('wlxml-class')}); - this.canvas.nodeInsertAfter({node: newNode, after: this.canvas.getNodeById(pos.parentNode.attr('id'))}); - } else { - newNode = this.canvas.nodeSplit({node: contextNode, textNodeIdx: pos.textNodeIndex, offset: pos.textNodeOffset}); - } - if(newNode) - this.selectNode(newNode, {movecaret: true}); - this.sandbox.publish('contentChanged'); -}; - -Manager.prototype.onBackspaceKey = function(e) { - var pos = getCursorPosition(); - var len = pos.textNode.text().length; - if(len === 1) { - // Prevent deleting node by browser after last character removed; - e.preventDefault(); - pos.parentNode.text(''); - } - if(len === 0) { - e.preventDefault(); - var toRemove = canvasNode.create(pos.textNode); - var prevNode = this.canvas.getPrecedingNode({node:toRemove}); - this.canvas.nodeRemove({node: toRemove}); // jesli nie ma tekstu, to anchor nie jest tex nodem - this.selectNode(prevNode, {movecaret: 'end'}); - } -}; - - -return Manager; - -}); \ No newline at end of file