diff options
Diffstat (limited to 'js/document')
-rwxr-xr-x | js/document/document-html.js | 10 | ||||
-rwxr-xr-x | js/document/helpers/webgl-helper.js | 14 | ||||
-rwxr-xr-x | js/document/mediators/template.js | 98 | ||||
-rwxr-xr-x | js/document/models/base.js | 41 | ||||
-rwxr-xr-x | js/document/models/html.js | 25 | ||||
-rwxr-xr-x | js/document/templates/banner/index.html | 24 | ||||
-rwxr-xr-x | js/document/templates/html/index.html | 27 | ||||
-rwxr-xr-x | js/document/views/design.js | 42 |
8 files changed, 200 insertions, 81 deletions
diff --git a/js/document/document-html.js b/js/document/document-html.js index c9acd2e0..04565753 100755 --- a/js/document/document-html.js +++ b/js/document/document-html.js | |||
@@ -90,7 +90,7 @@ exports.HtmlDocument = Montage.create(Component, { | |||
90 | //Adding observer to know when template is ready | 90 | //Adding observer to know when template is ready |
91 | this._observer = new WebKitMutationObserver(this.handleTemplateReady.bind(this)); | 91 | this._observer = new WebKitMutationObserver(this.handleTemplateReady.bind(this)); |
92 | this._observer.observe(this.model.views.design.document.head, {childList: true}); | 92 | this._observer.observe(this.model.views.design.document.head, {childList: true}); |
93 | }.bind(this), template); | 93 | }.bind(this), template, {viewCallback: this.handleViewReady, context: this}); |
94 | } else { | 94 | } else { |
95 | //TODO: Identify default view (probably code) | 95 | //TODO: Identify default view (probably code) |
96 | } | 96 | } |
@@ -103,10 +103,14 @@ exports.HtmlDocument = Montage.create(Component, { | |||
103 | //Removing observer, only needed on initial load | 103 | //Removing observer, only needed on initial load |
104 | this._observer.disconnect(); | 104 | this._observer.disconnect(); |
105 | this._observer = null; | 105 | this._observer = null; |
106 | //Making callback after view is loaded | ||
107 | this.loaded.callback.call(this.loaded.context, this); | ||
108 | } | 106 | } |
109 | }, | 107 | }, |
108 | handleViewReady: { | ||
109 | value: function() { | ||
110 | //Making callback after view is loaded | ||
111 | this.loaded.callback.call(this.loaded.context, this); | ||
112 | } | ||
113 | }, | ||
110 | //////////////////////////////////////////////////////////////////// | 114 | //////////////////////////////////////////////////////////////////// |
111 | // | 115 | // |
112 | closeDocument: { | 116 | closeDocument: { |
diff --git a/js/document/helpers/webgl-helper.js b/js/document/helpers/webgl-helper.js index 84ddc547..6d9ced14 100755 --- a/js/document/helpers/webgl-helper.js +++ b/js/document/helpers/webgl-helper.js | |||
@@ -40,7 +40,7 @@ exports.webGlDocumentHelper = Montage.create(Component, { | |||
40 | if (elt) { | 40 | if (elt) { |
41 | var matLib = MaterialsModel.exportMaterials(); | 41 | var matLib = MaterialsModel.exportMaterials(); |
42 | this._glData = [matLib]; | 42 | this._glData = [matLib]; |
43 | this.collectGLData(elt, this._glData ); | 43 | this.collectGLData(this.iframe.contentWindow.document, this._glData ); |
44 | } else { | 44 | } else { |
45 | this._glData = null | 45 | this._glData = null |
46 | } | 46 | } |
@@ -97,10 +97,6 @@ exports.webGlDocumentHelper = Montage.create(Component, { | |||
97 | // | 97 | // |
98 | if (canvas) { | 98 | if (canvas) { |
99 | // | 99 | // |
100 | if (!canvas.elementModel) { | ||
101 | NJUtils.makeElementModel(canvas, "Canvas", "shape", true); | ||
102 | } | ||
103 | // | ||
104 | if (canvas.elementModel) { | 100 | if (canvas.elementModel) { |
105 | if (canvas.elementModel.shapeModel.GLWorld) { | 101 | if (canvas.elementModel.shapeModel.GLWorld) { |
106 | canvas.elementModel.shapeModel.GLWorld.clearTree(); | 102 | canvas.elementModel.shapeModel.GLWorld.clearTree(); |
@@ -194,6 +190,13 @@ exports.webGlDocumentHelper = Montage.create(Component, { | |||
194 | // | 190 | // |
195 | collectGLData: { | 191 | collectGLData: { |
196 | value: function( elt, dataArray ) { | 192 | value: function( elt, dataArray ) { |
193 | Array.prototype.slice.call(elt.querySelectorAll('[data-RDGE-id]'),0).forEach(function(glCanvas) { | ||
194 | dataArray.push(glCanvas.elementModel.shapeModel.GLWorld.exportJSON()); | ||
195 | }); | ||
196 | |||
197 | // Removing the old loop that went through all the elements. | ||
198 | // TODO: Remove the following code once QE has tested it. | ||
199 | /* | ||
197 | // | 200 | // |
198 | var i, data, nKids, child; | 201 | var i, data, nKids, child; |
199 | // | 202 | // |
@@ -209,6 +212,7 @@ exports.webGlDocumentHelper = Montage.create(Component, { | |||
209 | this.collectGLData( child, dataArray ); | 212 | this.collectGLData( child, dataArray ); |
210 | } | 213 | } |
211 | } | 214 | } |
215 | */ | ||
212 | } | 216 | } |
213 | } | 217 | } |
214 | //////////////////////////////////////////////////////////////////// | 218 | //////////////////////////////////////////////////////////////////// |
diff --git a/js/document/mediators/template.js b/js/document/mediators/template.js index 068a1f48..e04c16d9 100755 --- a/js/document/mediators/template.js +++ b/js/document/mediators/template.js | |||
@@ -8,7 +8,8 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
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 | TemplateCreator = require("node_modules/tools/template/template-creator").TemplateCreator; | 11 | TemplateCreator = require("node_modules/tools/template/template-creator").TemplateCreator, |
12 | ClassUuid = require("js/components/core/class-uuid").ClassUuid; | ||
12 | //////////////////////////////////////////////////////////////////////// | 13 | //////////////////////////////////////////////////////////////////////// |
13 | // | 14 | // |
14 | exports.TemplateDocumentMediator = Montage.create(Component, { | 15 | exports.TemplateDocumentMediator = Montage.create(Component, { |
@@ -83,9 +84,22 @@ exports.TemplateDocumentMediator = Montage.create(Component, { | |||
83 | parseHtmlToNinjaTemplate: { | 84 | parseHtmlToNinjaTemplate: { |
84 | value: function (html) { | 85 | value: function (html) { |
85 | //Creating temp object to mimic HTML | 86 | //Creating temp object to mimic HTML |
86 | var doc = window.document.implementation.createHTMLDocument(), template; | 87 | var doc = window.document.implementation.createHTMLDocument(), template, docHtmlTag, |
88 | hackHtml = document.createElement('html'), hackTag; | ||
87 | //Setting content to temp | 89 | //Setting content to temp |
88 | doc.getElementsByTagName('html')[0].innerHTML = html; | 90 | doc.getElementsByTagName('html')[0].innerHTML = html; |
91 | //TODO: Improve this, very bad way of copying attributes (in a pinch to get it working) | ||
92 | hackHtml.innerHTML = html.replace(/html/gi, 'ninjahtmlhack'); | ||
93 | hackTag = hackHtml.getElementsByTagName('ninjahtmlhack')[0]; | ||
94 | docHtmlTag = doc.getElementsByTagName('html')[0]; | ||
95 | //Looping through the attributes to copy them | ||
96 | for (var m in hackTag.attributes) { | ||
97 | if (hackTag.attributes[m].value) { | ||
98 | docHtmlTag.setAttribute(hackTag.attributes[m].name.replace(/ninjahtmlhack/gi, 'html'), hackTag.attributes[m].value.replace(/ninjahtmlhack/gi, 'html')); | ||
99 | } | ||
100 | } | ||
101 | //Garbage collection | ||
102 | hackHtml = hackTag = null; | ||
89 | //Creating return object | 103 | //Creating return object |
90 | return {head: doc.head.innerHTML, body: doc.body.innerHTML, document: doc}; | 104 | return {head: doc.head.innerHTML, body: doc.body.innerHTML, document: doc}; |
91 | } | 105 | } |
@@ -93,7 +107,7 @@ exports.TemplateDocumentMediator = Montage.create(Component, { | |||
93 | //////////////////////////////////////////////////////////////////// | 107 | //////////////////////////////////////////////////////////////////// |
94 | //TODO: Expand to allow more templates, clean up variables | 108 | //TODO: Expand to allow more templates, clean up variables |
95 | parseNinjaTemplateToHtml: { | 109 | parseNinjaTemplateToHtml: { |
96 | value: function (template, ninjaWrapper, libCopyCallback) { | 110 | value: function (saveExternalData, template, ninjaWrapper, libCopyCallback) { |
97 | //TODO: Improve reference for rootUrl | 111 | //TODO: Improve reference for rootUrl |
98 | var regexRootUrl, | 112 | var regexRootUrl, |
99 | rootUrl = this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1])), | 113 | rootUrl = this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1])), |
@@ -116,20 +130,36 @@ exports.TemplateDocumentMediator = Montage.create(Component, { | |||
116 | template.file.content.document.head.innerHTML = template.head.innerHTML.replace(regexRootUrl, ''); | 130 | template.file.content.document.head.innerHTML = template.head.innerHTML.replace(regexRootUrl, ''); |
117 | template.file.content.document.body.innerHTML = template.body.innerHTML.replace(regexRootUrl, ''); | 131 | template.file.content.document.body.innerHTML = template.body.innerHTML.replace(regexRootUrl, ''); |
118 | } | 132 | } |
133 | //Removes all attributes from node | ||
134 | function wipeAttributes (node) { | ||
135 | for (var f in node.attributes) { | ||
136 | node.removeAttribute(node.attributes[f].name); | ||
137 | } | ||
138 | } | ||
119 | //Copying attributes to maintain same properties as the <body> | 139 | //Copying attributes to maintain same properties as the <body> |
140 | wipeAttributes(template.file.content.document.body); | ||
120 | for (var n in template.body.attributes) { | 141 | for (var n in template.body.attributes) { |
121 | if (template.body.attributes[n].value) { | 142 | if (template.body.attributes[n].value) { |
122 | // | ||
123 | template.file.content.document.body.setAttribute(template.body.attributes[n].name, template.body.attributes[n].value); | 143 | template.file.content.document.body.setAttribute(template.body.attributes[n].name, template.body.attributes[n].value); |
124 | } | 144 | } |
125 | } | 145 | } |
126 | 146 | wipeAttributes(template.file.content.document.head); | |
127 | 147 | //Copying attributes to maintain same properties as the <head> | |
128 | 148 | for (var m in template.document.head.attributes) { | |
129 | //TODO: Add attribute copying for <HEAD> and <HTML> | 149 | if (template.document.head.attributes[m].value) { |
130 | 150 | template.file.content.document.head.setAttribute(template.document.head.attributes[m].name, template.document.head.attributes[m].value); | |
131 | 151 | } | |
132 | 152 | } | |
153 | //Copying attributes to maintain same properties as the <html> | ||
154 | var htmlTagMem = template.document.getElementsByTagName('html')[0], htmlTagDoc = template.file.content.document.getElementsByTagName('html')[0]; | ||
155 | wipeAttributes(htmlTagDoc); | ||
156 | for (var m in htmlTagMem.attributes) { | ||
157 | if (htmlTagMem.attributes[m].value) { | ||
158 | if (htmlTagMem.attributes[m].value.replace(/montage-app-bootstrapping/gi, '').length>0) { | ||
159 | htmlTagDoc.setAttribute(htmlTagMem.attributes[m].name, htmlTagMem.attributes[m].value.replace(/ montage-app-bootstrapping/gi, '')); | ||
160 | } | ||
161 | } | ||
162 | } | ||
133 | //Getting list of current nodes (Ninja DOM) | 163 | //Getting list of current nodes (Ninja DOM) |
134 | presentNodes = template.file.content.document.getElementsByTagName('*'); | 164 | presentNodes = template.file.content.document.getElementsByTagName('*'); |
135 | //Looping through nodes to determine origin and removing if not inserted by Ninja | 165 | //Looping through nodes to determine origin and removing if not inserted by Ninja |
@@ -328,7 +358,7 @@ exports.TemplateDocumentMediator = Montage.create(Component, { | |||
328 | 358 | ||
329 | 359 | ||
330 | 360 | ||
331 | //TODO: Make proper webGL/Canvas method | 361 | |
332 | 362 | ||
333 | // | 363 | // |
334 | var webgltag, webgllibtag, webglrdgetag, mjstag, mjslibtag, matchingtags = [], | 364 | var webgltag, webgllibtag, webglrdgetag, mjstag, mjslibtag, matchingtags = [], |
@@ -357,19 +387,33 @@ exports.TemplateDocumentMediator = Montage.create(Component, { | |||