X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/4ab522037ab350b3f0257130bc6e4dbc6f183021..94e78db871e2d12a5698fced12f656dac563869f:/src/editor/modules/documentCanvas/documentCanvas.js diff --git a/src/editor/modules/documentCanvas/documentCanvas.js b/src/editor/modules/documentCanvas/documentCanvas.js index 6015089..5942d8f 100644 --- a/src/editor/modules/documentCanvas/documentCanvas.js +++ b/src/editor/modules/documentCanvas/documentCanvas.js @@ -2,20 +2,36 @@ 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.fromXMLDocument(null, sandbox.publish); + var canvasElements = []; + + sandbox.getPlugins().forEach(function(plugin) { + canvasElements = canvasElements.concat(plugin.canvasElements || []); + }); + + var canvas = canvas3.fromXMLDocument(null, canvasElements); 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,10 +49,25 @@ return function(sandbox) { /* public api */ return { - start: function() { sandbox.publish('ready'); }, + 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'); + }, getView: function() { return canvasWrapper; }, + getCanvas: function() { + return canvas; + }, setDocument: function(wlxmlDocument) { canvas.loadWlxmlDocument(wlxmlDocument); canvasWrapper.find('#rng-module-documentCanvas-content').empty().append(canvas.view()); @@ -50,8 +81,20 @@ return function(sandbox) { jumpToElement: function(node) { canvas.setCurrentElement(node); }, - command: function(command, params) { - commands.run(command, params, canvas, sandbox.getConfig().user); + onAfterActionExecuted: function(action, ret) { + if(ret && ret.isValid() && ret instanceof canvas.wlxmlDocument.NodeFragment) { + logger.debug('The action returned a valid fragment'); + var params = { + caretTo: ret instanceof canvas.wlxmlDocument.CaretFragment ? ret.offset : 'start' + }; + canvas.setCurrentElement(ret.node, params); + return; + } + logger.debug('No valid fragment returned from the action'); + + (actionHandlers[action.getPluginName()] || []).forEach(function(handler) { + handler(canvas, action, ret); + }); } };