diff options
Diffstat (limited to 'js/document')
-rwxr-xr-x | js/document/document-html.js | 14 | ||||
-rwxr-xr-x | js/document/mediators/template.js | 33 | ||||
-rwxr-xr-x | js/document/models/base.js | 69 | ||||
-rwxr-xr-x | js/document/models/html.js | 5 | ||||
-rw-r--r-- | js/document/templates/app/main.js | 7 | ||||
-rwxr-xr-x | js/document/views/design.js | 21 |
6 files changed, 113 insertions, 36 deletions
diff --git a/js/document/document-html.js b/js/document/document-html.js index 8b82c40f..56f4e3d3 100755 --- a/js/document/document-html.js +++ b/js/document/document-html.js | |||
@@ -36,7 +36,7 @@ exports.HtmlDocument = Montage.create(Component, { | |||
36 | //////////////////////////////////////////////////////////////////// | 36 | //////////////////////////////////////////////////////////////////// |
37 | // | 37 | // |
38 | exclusionList: { | 38 | exclusionList: { |
39 | value: ["HTML", "BODY", "NINJA-CONTENT"] | 39 | value: ["HTML", "BODY", "NINJA-CONTENT", "NINJA-VIEWPORT"] |
40 | }, | 40 | }, |
41 | //////////////////////////////////////////////////////////////////// | 41 | //////////////////////////////////////////////////////////////////// |
42 | // | 42 | // |
@@ -108,6 +108,12 @@ exports.HtmlDocument = Montage.create(Component, { | |||
108 | handleViewReady: { | 108 | handleViewReady: { |
109 | value: function(mObjects) { | 109 | value: function(mObjects) { |
110 | this.model.mObjects = mObjects; | 110 | this.model.mObjects = mObjects; |
111 | // TODO: Find a better way to initialize this property | ||
112 | // Assign the domContainer to be the document root on open | ||
113 | if(typeof this.model.domContainer !== "undefined") { | ||
114 | this.model.domContainer = this.model.documentRoot; | ||
115 | } | ||
116 | |||
111 | //Making callback after view is loaded | 117 | //Making callback after view is loaded |
112 | this.loaded.callback.call(this.loaded.context, this); | 118 | this.loaded.callback.call(this.loaded.context, this); |
113 | } | 119 | } |
@@ -116,10 +122,8 @@ exports.HtmlDocument = Montage.create(Component, { | |||
116 | // | 122 | // |
117 | closeDocument: { | 123 | closeDocument: { |
118 | value: function (context, callback) { | 124 | value: function (context, callback) { |
119 | //Closing document and getting outcome | 125 | //Closing document (sending null to close all views) |
120 | var closed = this.model.close(null); | 126 | this.model.close(null, function () {if (callback) callback.call(context, this);}.bind(this)); |
121 | //Making callback if specified | ||
122 | if (callback) callback.call(context, this); | ||
123 | } | 127 | } |
124 | }, | 128 | }, |
125 | //////////////////////////////////////////////////////////////////// | 129 | //////////////////////////////////////////////////////////////////// |
diff --git a/js/document/mediators/template.js b/js/document/mediators/template.js index 50fad1c3..c5b46c3a 100755 --- a/js/document/mediators/template.js +++ b/js/document/mediators/template.js | |||
@@ -145,6 +145,29 @@ exports.TemplateDocumentMediator = Montage.create(Component, { | |||
145 | template.file.content.document.body.setAttribute(template.body.attributes[n].name, template.body.attributes[n].value); | 145 | template.file.content.document.body.setAttribute(template.body.attributes[n].name, template.body.attributes[n].value); |
146 | } | 146 | } |
147 | } | 147 | } |
148 | // | ||
149 | if(template.template) { | ||
150 | // | ||
151 | // TODO - Need to handle banner and animation templates. | ||
152 | //Copying attributes to maintain same properties as <ninja-content> | ||
153 | var ninjaContentTagMem = template.document.getElementsByTagName('ninja-content')[0], ninjaContentTagDoc = template.file.content.document.getElementsByTagName('ninja-content')[0]; | ||
154 | if (ninjaContentTagMem && ninjaContentTagMem.getAttribute('data-ninja-style') !== null) { | ||
155 | ninjaContentTagDoc.setAttribute('style', ninjaContentTagMem.getAttribute('data-ninja-style')); | ||
156 | ninjaContentTagDoc.removeAttribute('data-ninja-style'); | ||
157 | } else if (ninjaContentTagMem && ninjaContentTagMem.getAttribute('data-ninja-style') === null) { | ||
158 | ninjaContentTagDoc.removeAttribute('style'); | ||
159 | ninjaContentTagDoc.removeAttribute('data-ninja-style'); | ||
160 | } | ||
161 | } else { | ||
162 | if (template.body && template.body.getAttribute('data-ninja-style') !== null) { | ||
163 | template.file.content.document.body.setAttribute('style', template.body.getAttribute('data-ninja-style')); | ||
164 | template.file.content.document.body.removeAttribute('data-ninja-style'); | ||
165 | } else if (template.body && template.body.getAttribute('data-ninja-style') === null) { | ||
166 | template.file.content.document.body.removeAttribute('style'); | ||
167 | template.file.content.document.body.removeAttribute('data-ninja-style'); | ||
168 | } | ||
169 | } | ||
170 | |||
148 | wipeAttributes(template.file.content.document.head); | 171 | wipeAttributes(template.file.content.document.head); |
149 | //Copying attributes to maintain same properties as the <head> | 172 | //Copying attributes to maintain same properties as the <head> |
150 | for (var m in template.document.head.attributes) { | 173 | for (var m in template.document.head.attributes) { |
@@ -155,6 +178,7 @@ exports.TemplateDocumentMediator = Montage.create(Component, { | |||
155 | //Copying attributes to maintain same properties as the <html> | 178 | //Copying attributes to maintain same properties as the <html> |
156 | var htmlTagMem = template.document.getElementsByTagName('html')[0], htmlTagDoc = template.file.content.document.getElementsByTagName('html')[0]; | 179 | var htmlTagMem = template.document.getElementsByTagName('html')[0], htmlTagDoc = template.file.content.document.getElementsByTagName('html')[0]; |
157 | wipeAttributes(htmlTagDoc); | 180 | wipeAttributes(htmlTagDoc); |
181 | // | ||
158 | for (var m in htmlTagMem.attributes) { | 182 | for (var m in htmlTagMem.attributes) { |
159 | if (htmlTagMem.attributes[m].value) { | 183 | if (htmlTagMem.attributes[m].value) { |
160 | if (htmlTagMem.attributes[m].value.replace(/montage-app-bootstrapping/gi, '').length>0) { | 184 | if (htmlTagMem.attributes[m].value.replace(/montage-app-bootstrapping/gi, '').length>0) { |
@@ -162,10 +186,19 @@ exports.TemplateDocumentMediator = Montage.create(Component, { | |||
162 | } | 186 | } |
163 | } | 187 | } |
164 | } | 188 | } |
189 | // | ||
190 | if (htmlTagMem && htmlTagMem.getAttribute('data-ninja-style') !== null) { | ||
191 | htmlTagDoc.setAttribute('style', htmlTagMem.getAttribute('data-ninja-style')); | ||
192 | htmlTagDoc.removeAttribute('data-ninja-style'); | ||
193 | } else if (htmlTagMem && htmlTagMem.getAttribute('data-ninja-style') === null) { | ||
194 | htmlTagDoc.removeAttribute('style'); | ||
195 | htmlTagDoc.removeAttribute('data-ninja-style'); | ||
196 | } | ||
165 | //Getting list of current nodes (Ninja DOM) | 197 | //Getting list of current nodes (Ninja DOM) |
166 | presentNodes = template.file.content.document.getElementsByTagName('*'); | 198 | presentNodes = template.file.content.document.getElementsByTagName('*'); |
167 | //Looping through nodes to determine origin and removing if not inserted by Ninja | 199 | //Looping through nodes to determine origin and removing if not inserted by Ninja |
168 | for (var n in presentNodes) { | 200 | for (var n in presentNodes) { |
201 | // | ||
169 | if (presentNodes[n].getAttribute && presentNodes[n].getAttribute('data-ninja-node') === null) { | 202 | if (presentNodes[n].getAttribute && presentNodes[n].getAttribute('data-ninja-node') === null) { |
170 | toremovetags.push(presentNodes[n]); | 203 | toremovetags.push(presentNodes[n]); |
171 | } else if (presentNodes[n].getAttribute && presentNodes[n].getAttribute('data-ninja-node') !== null) { | 204 | } else if (presentNodes[n].getAttribute && presentNodes[n].getAttribute('data-ninja-node') !== null) { |
diff --git a/js/document/models/base.js b/js/document/models/base.js index 9c26bd2a..1daec5c0 100755 --- a/js/document/models/base.js +++ b/js/document/models/base.js | |||
@@ -6,8 +6,9 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
6 | 6 | ||
7 | //////////////////////////////////////////////////////////////////////// | 7 | //////////////////////////////////////////////////////////////////////// |
8 | // | 8 | // |
9 | var Montage = require("montage/core/core").Montage, | 9 | var Montage = require("montage/core/core").Montage, |
10 | Component = require("montage/ui/component").Component; | 10 | Component = require("montage/ui/component").Component, |
11 | NinjaPrompt = require("js/components/prompt.reel").NinjaPrompt; | ||
11 | //////////////////////////////////////////////////////////////////////// | 12 | //////////////////////////////////////////////////////////////////////// |
12 | // | 13 | // |
13 | exports.BaseDocumentModel = Montage.create(Component, { | 14 | exports.BaseDocumentModel = Montage.create(Component, { |
@@ -65,6 +66,9 @@ exports.BaseDocumentModel = Montage.create(Component, { | |||
65 | _selection: { | 66 | _selection: { |
66 | value: [] | 67 | value: [] |
67 | }, | 68 | }, |
69 | domContainer: { | ||
70 | value: null | ||
71 | }, | ||
68 | //////////////////////////////////////////////////////////////////// | 72 | //////////////////////////////////////////////////////////////////// |
69 | // | 73 | // |
70 | selection: { | 74 | selection: { |
@@ -277,30 +281,59 @@ exports.BaseDocumentModel = Montage.create(Component, { | |||
277 | if (this.callback) this.callback(result); | 281 | if (this.callback) this.callback(result); |
278 | } | 282 | } |
279 | }, | 283 | }, |
284 | //////////////////////////////////////////////////////////////////// | ||
285 | // | ||
286 | handleSavePrompt: { | ||
287 | value: function (continueToClose, callback) { | ||
288 | //TODO: Perhaps add logic to save the file is the user wants | ||
289 | if (continueToClose) { | ||
290 | if (callback) callback(); | ||
291 | } else { | ||
292 | //User canceled | ||
293 | //this.saveAll(null, callback); | ||
294 | } | ||
295 | } | ||
296 | }, | ||
280 | //////////////////////////////////////////////////////////////////// | 297 | //////////////////////////////////////////////////////////////////// |
281 | //TODO: Implement better logic to include different views on single document | 298 | //TODO: Implement better logic to include different views on single document |
282 | close: { | 299 | close: { |
283 | value: function (view, callback) { | 300 | value: function (view, callback) { |
284 | //Outcome of close (pending on save logic) | 301 | //Checking if files needs to be saved to avoid losing data |
285 | var success; | ||
286 | // | ||
287 | if (this.needsSave) { | 302 | if (this.needsSave) { |
288 | //TODO: Prompt user to save or lose data | 303 | //Creating prompt to ask user to save the file |
304 | var prompt = NinjaPrompt.create(); | ||
305 | prompt.initialize('confirm', {message: 'Do you want to save the changes you made in the document '+this.file.name+'?\n\nYour changes will be lost if you do not save them.'}, function (result){this.handleSavePrompt(result, callback);}.bind(this)); | ||
306 | //Showing the prompt, it will make callback with user input | ||
307 | prompt.show(); | ||
289 | } else { | 308 | } else { |
290 | //Close file | 309 | //TODO: Add support for other views |
291 | success = true; | 310 | if (!view || view === 'design') { |
292 | } | 311 | this.closeView('design'); |
293 | //Checking for view mode to close | 312 | } |
294 | if (this.views.design && (!view || view === 'design')) { | 313 | //Making callback |
295 | //TODO: Create a destroy method, this is messy | 314 | if (callback) callback(); |
296 | this.views.design.pauseAndStopVideos(); | ||
297 | this.parentContainer.removeChild(this.views.design.iframe); | ||
298 | this.views.design = null; | ||
299 | } | 315 | } |
300 | //Returning result of operation | 316 | |
301 | return success; | ||
302 | } | 317 | } |
303 | } | 318 | }, |
319 | //////////////////////////////////////////////////////////////////// | ||
320 | // | ||
321 | closeView: { | ||
322 | value: function (view) { | ||
323 | //Checking for view mode to close | ||
324 | switch (view.toLowerCase()) { | ||
325 | case 'design': | ||
326 | //TODO: Make into clean method in the design view | ||
327 | this.views.design.pauseAndStopVideos(); | ||
328 | this.parentContainer.removeChild(this.views.design.iframe); | ||
329 | this.views.design = null; | ||
330 | break; | ||
331 | default: | ||