X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/efe36f4f1b5df351eeb4d40a54c3900cf9a7079b..45c6e40d4312a3bc53fb0c64574d9e5b1f298193:/src/editor/modules/documentCanvas/documentCanvas.js?ds=sidebyside diff --git a/src/editor/modules/documentCanvas/documentCanvas.js b/src/editor/modules/documentCanvas/documentCanvas.js index 3ebab2e..9a88b75 100644 --- a/src/editor/modules/documentCanvas/documentCanvas.js +++ b/src/editor/modules/documentCanvas/documentCanvas.js @@ -1,21 +1,31 @@ // Module that implements main WYSIWIG edit area define([ +'libs/jquery', 'libs/underscore', +'fnpjs/logging/logging', './canvas/canvas', -'./commands', -'libs/text!./template.html'], function(_, canvas3, commands, template) { +'libs/text!./template.html'], function($, _, logging, canvas3, template) { 'use strict'; + +var logger = logging.getLogger('documentCanvas'); + return function(sandbox) { - var canvas = canvas3.fromXML('', sandbox.publish); + var canvas = canvas3.fromXMLDocument(null); var canvasWrapper = $(template); var shownAlready = false; var scrollbarPosition = 0, + actionHandlers = {}, cursorPosition; + + canvas.on('selectionChanged', function(selection) { + sandbox.publish('selectionChanged', selection); + }); + canvasWrapper.onShow = function() { if(!shownAlready) { shownAlready = true; @@ -33,39 +43,49 @@ return function(sandbox) { /* public api */ return { - start: function() { sandbox.publish('ready'); }, - getView: function() { - return canvasWrapper; + start: function() { + sandbox.getPlugins().forEach(function(plugin) { + var handlers; + if(plugin.canvas) { + handlers = plugin.canvas.actionHandlers; + if(handlers && !_.isArray(handlers)) { + handlers = [handlers]; + } + actionHandlers[plugin.name] = handlers; + } + }); + sandbox.publish('ready'); }, - setDocument: function(xml) { - canvas.loadWlxml(xml); - canvasWrapper.find('#rng-module-documentCanvas-content').empty().append(canvas.view()); - sandbox.publish('documentSet'); + getView: function() { + return canvasWrapper; }, - getDocument: function() { - return canvas.toXML(); + getCanvas: function() { + return canvas; }, - modifyCurrentNodeElement: function(attr, value) { - var currentNodeElement = canvas.getCurrentNodeElement(); - if(attr === 'class' || attr === 'tag') { - currentNodeElement['setWlxml'+(attr[0].toUpperCase() + attr.substring(1))](value); - } else { - currentNodeElement.setWlxmlMetaAttr(attr, value); - } - sandbox.publish('currentNodeElementChanged', currentNodeElement); + setDocument: function(wlxmlDocument) { + canvas.loadWlxmlDocument(wlxmlDocument); + canvasWrapper.find('#rng-module-documentCanvas-content').empty().append(canvas.view()); }, - highlightElement: function(element) { - element.toggleHighlight(true); + highlightElement: function(node) { + canvas.toggleElementHighlight(node, true); }, - dimElement: function(element) { - element.toggleHighlight(false); + dimElement: function(node) { + canvas.toggleElementHighlight(node, false); }, - jumpToElement: function(element) { - canvas.setCurrentElement(element); + jumpToElement: function(node) { + canvas.setCurrentElement(node); }, - command: function(command, params) { - commands.run(command, params, canvas); - sandbox.publish('contentChanged'); + onAfterActionExecuted: function(action, ret) { + if(ret && ret instanceof canvas.wlxmlDocument.CaretFragment && ret.isValid()) { + logger.debug('The action returned a valid fragment'); + canvas.setCurrentElement(ret.node, {caretTo: ret.offset}); + return; + } + logger.debug('No valid fragment returned from the action'); + + (actionHandlers[action.getPluginName()] || []).forEach(function(handler) { + handler(canvas, action, ret); + }); } };