a398f26a96628898d2c5d33c06e2275072575073
[fnpeditor.git] / src / editor / modules / documentCanvas / documentCanvas.js
1 // Module that implements main WYSIWIG edit area
2
3 define([
4 'libs/underscore',
5 './canvas/canvas',
6 './commands',
7 'libs/text!./template.html'], function(_, canvas3, commands, template) {
8
9 'use strict';
10
11 return function(sandbox) {
12
13     var canvas = canvas3.fromXMLDocument(null, sandbox.publish);
14     var canvasWrapper = $(template);
15     var shownAlready = false;
16     var scrollbarPosition = 0,
17         cursorPosition;
18     
19     canvasWrapper.onShow = function() {
20         if(!shownAlready) {
21             shownAlready = true;
22             canvas.setCurrentElement(canvas.doc().getVerticallyFirstTextElement());
23         } else {
24             canvas.setCursorPosition(cursorPosition);
25             this.find('#rng-module-documentCanvas-contentWrapper').scrollTop(scrollbarPosition);
26         }
27     };
28     
29     canvasWrapper.onHide = function() {
30        scrollbarPosition = this.find('#rng-module-documentCanvas-contentWrapper').scrollTop();
31        cursorPosition = canvas.getCursor().getPosition();
32     };
33
34     /* public api */
35     return {
36         start: function() { sandbox.publish('ready'); },
37         getView: function() { 
38             return canvasWrapper;
39         },
40         setDocument: function(wlxmlDocument) {
41             canvas.loadWlxmlDocument(wlxmlDocument);
42             canvasWrapper.find('#rng-module-documentCanvas-content').empty().append(canvas.view());
43         },
44         getDocument: function() {
45             return canvas.toXML();
46         },
47         modifyCurrentNodeElement: function(attr, value) {
48             var currentNodeElement = canvas.getCurrentNodeElement();
49             if(attr === 'class' || attr === 'tag') {
50                 currentNodeElement['setWlxml'+(attr[0].toUpperCase() + attr.substring(1))](value);
51             } else {
52                 currentNodeElement.setWlxmlMetaAttr(attr, value);
53             }
54             sandbox.publish('currentNodeElementChanged', currentNodeElement);
55         },
56         highlightElement: function(element) {
57             element.toggleHighlight(true);
58         },
59         dimElement: function(element) {
60             element.toggleHighlight(false);
61         },
62         jumpToElement: function(element) {
63             canvas.setCurrentElement(element);
64         },
65         command: function(command, params) {
66             commands.run(command, params, canvas);
67             sandbox.publish('contentChanged');
68         }
69     };
70     
71 };
72
73 });