aboutsummaryrefslogtreecommitdiff
path: root/js/controllers/document-controller.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/controllers/document-controller.js')
-rwxr-xr-xjs/controllers/document-controller.js555
1 files changed, 265 insertions, 290 deletions
diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js
index c6bf4c6b..2c34eedf 100755
--- a/js/controllers/document-controller.js
+++ b/js/controllers/document-controller.js
@@ -9,31 +9,18 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
9var Montage = require("montage/core/core").Montage, 9var Montage = require("montage/core/core").Montage,
10 Component = require("montage/ui/component").Component, 10 Component = require("montage/ui/component").Component,
11 Uuid = require("montage/core/uuid").Uuid, 11 Uuid = require("montage/core/uuid").Uuid,
12 HTMLDocument = require("js/document/html-document").HTMLDocument, 12 HTMLDocument = require("js/document/document-html").HtmlDocument,
13 TextDocument = require("js/document/text-document").TextDocument; 13 TextDocument = require("js/document/document-text").TextDocument;
14
15 // New Document Objects
16var Document = require("js/document/document-html").HtmlDocument;
17//////////////////////////////////////////////////////////////////////// 14////////////////////////////////////////////////////////////////////////
18// 15//
19var DocumentController = exports.DocumentController = Montage.create(Component, { 16exports.DocumentController = Montage.create(Component, {
20 hasTemplate: { 17 //
21 value: false 18 hasTemplate: {value: false},
22 }, 19 _documents: {value: []},
23 20 //TODO: what is this?!?!
24 webTemplate: { 21 _hackInitialStyles: {value: true},
25 value: false
26 },
27
28 _documents: {
29 value: []
30 },
31
32 _hackRootFlag: {
33 value: false
34 },
35
36 _activeDocument: { value: null }, 22 _activeDocument: { value: null },
23 //TODO: Are any of these needed?
37 _iframeCounter: { value: 1, enumerable: false }, 24 _iframeCounter: { value: 1, enumerable: false },
38 _iframeHolder: { value: null, enumerable: false }, 25 _iframeHolder: { value: null, enumerable: false },
39 _textHolder: { value: null, enumerable: false }, 26 _textHolder: { value: null, enumerable: false },
@@ -44,21 +31,19 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
44 return this._activeDocument; 31 return this._activeDocument;
45 }, 32 },
46 set: function(doc) { 33 set: function(doc) {
47 if(!!this._activeDocument){ this._activeDocument.isActive = false;} 34 //if(!!this._activeDocument){ this._activeDocument.isActive = false;}
35
48 this._activeDocument = doc; 36 this._activeDocument = doc;
37
49 if(!!this._activeDocument){ 38 if(!!this._activeDocument){
50 if(this._documents.indexOf(doc) === -1) this._documents.push(doc); 39 if(this._documents.indexOf(doc) === -1) this._documents.push(doc);
51 this._activeDocument.isActive = true; 40 this._activeDocument.isActive = true;
52
53 if(!!this._activeDocument.editor){
54 this._activeDocument.editor.focus();
55 }
56 } 41 }
57 } 42 }
58 }, 43 },
59 44
60 deserializedFromTemplate: { 45 deserializedFromTemplate: {
61 value: function() { 46 value: function() { //TODO: Add event naming consistency (save, fileOpen and newFile should be consistent, all file events should be executeFile[operation name])
62 this.eventManager.addEventListener("appLoaded", this, false); 47 this.eventManager.addEventListener("appLoaded", this, false);
63 this.eventManager.addEventListener("executeFileOpen", this, false); 48 this.eventManager.addEventListener("executeFileOpen", this, false);
64 this.eventManager.addEventListener("executeNewFile", this, false); 49 this.eventManager.addEventListener("executeNewFile", this, false);
@@ -69,37 +54,30 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
69 this.eventManager.addEventListener("executeFileCloseAll", this, false); 54 this.eventManager.addEventListener("executeFileCloseAll", this, false);
70 55
71 this.eventManager.addEventListener("styleSheetDirty", this, false); 56 this.eventManager.addEventListener("styleSheetDirty", this, false);
72
73 this.eventManager.addEventListener("addComponentFirstDraw", this, false);
74
75 // Temporary add listeners for the new stage templates
76 this.eventManager.addEventListener("executeWebpageOpen", this, false);
77 this.eventManager.addEventListener("executeNewWebpage", this, false);
78 } 57 }
79 }, 58 },
80 59
81 handleAddComponentFirstDraw: {
82 value: function (e) {
83 //TODO: Add logic to reparse the document for dynamically added styles
84 //console.log(e);
85 }
86 },
87
88
89
90
91 60
92//////////////////////////////////////////////////////////////////// 61 //TODO: Ensure these APIs are not needed
62 redirectRequests: {
63 value: false
64 },
65 ////////////////////////////////////////////////////////////////////
93 // 66 //
94 handleWebRequest: { 67 handleWebRequest: {
95 value: function (request) { 68 value: function (request) {
96 //TODO: Check if frameId is proper 69 //TODO: Check if frameId is proper
97 if (this._hackRootFlag && request.parentFrameId !== -1) { 70 if (this.redirectRequests && request.parentFrameId !== -1) {
98 //TODO: Optimize creating string 71 //Checking for proper URL redirect (from different directories)
99 //console.log(request); 72 if (request.url.indexOf('js/document/templates/banner') !== -1) {
100 //console.log(this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1], request.url); 73 return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split(chrome.extension.getURL('js/document/templates/banner/'))[1]};
101 //return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split('/')[request.url.split('/').length-1]}; 74 } else if (request.url.indexOf('js/document/templates/html') !== -1) {
102 return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split(chrome.extension.getURL('js/document/templates/montage-html/'))[1]}; 75 return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split(chrome.extension.getURL('js/document/templates/html/'))[1]};
76 } else if (request.url.indexOf('js/document/templates/app') !== -1) {
77 return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split(chrome.extension.getURL('js/document/templates/app/'))[1]};
78 } else {
79 //Error, not a valid folder
80 }
103 } 81 }
104 } 82 }
105 }, 83 },
@@ -120,7 +98,6 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
120 }, 98 },
121 //////////////////////////////////////////////////////////////////// 99 ////////////////////////////////////////////////////////////////////
122 100
123
124 101
125 102
126 103
@@ -140,47 +117,47 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
140 } 117 }
141 }, 118 },
142 119
143 handleExecuteWebpageOpen: {
144 value: function(event) {
145 this.webTemplate = true;
146 this.handleExecuteFileOpen(event);
147 }
148 },
149
150 handleExecuteNewWebpage: {
151 value: function(event) {
152 this.webTemplate = true;
153 this.handleExecuteNewFile(event);
154 }
155 },
156
157 handleExecuteNewFile: { 120 handleExecuteNewFile: {
158 value: function(event) { 121 value: function(event) {
159 var newFileSettings = event._event.settings || {}; 122 var newFileSettings = event._event.settings || {};
160 if (this.application.ninja.coreIoApi.cloudAvailable()) { 123 if (this.application.ninja.coreIoApi.cloudAvailable()) {
161 newFileSettings.callback = this.createNewFile.bind(this); 124 newFileSettings.callback = this.createNewFile.bind(this);
162 this.application.ninja.newFileController.showNewFileDialog(newFileSettings); 125 this.application.ninja.newFileController.showNewFileDialog(newFileSettings);
163 }
164 } 126 }
127 }
165 }, 128 },
166 //////////////////////////////////////////////////////////////////// 129 ////////////////////////////////////////////////////////////////////
167 //TODO: Check for appropiate structures 130 //
168 handleExecuteSave: { 131 handleExecuteSave: {
169 value: function(event) { 132 value: function(event) {
170 if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){ 133 //
171 //Text and HTML document classes should return the same save object for fileSave 134 if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){
172 this.application.ninja.ioMediator.fileSave(this.activeDocument.save(), this.fileSaveResult.bind(this)); 135 //Currently we don't need a callback handler
173 } 136 //this.activeDocument.model.save(this.saveExecuted.bind(this));
137 this.activeDocument.model.save();
138 } else {
139 //Error: cloud not available and/or no active document
140 }
174 } 141 }
175 }, 142 },
176 //////////////////////////////////////////////////////////////////// 143 ////////////////////////////////////////////////////////////////////
144 //
145 saveExecuted: {
146 value: function (value) {
147 //File saved, any callbacks or events should go here (must be added in handleExecuteSave passed as callback)
148 }
149 },
150 ////////////////////////////////////////////////////////////////////
177 //TODO: Check for appropiate structures 151 //TODO: Check for appropiate structures
178 handleExecuteSaveAll: { 152 handleExecuteSaveAll: {
179 value: function(event) { 153 value: function(event) {
180 if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){ 154 //
181 //Text and HTML document classes should return the same save object for fileSave 155 if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){
182 this.application.ninja.ioMediator.fileSave(this.activeDocument.saveAll(), this.fileSaveResult.bind(this)); 156 //
183 } 157 this.activeDocument.model.saveAll();
158 } else {