diff options
Diffstat (limited to 'js/mediators/io-mediator.js')
-rw-r--r-- | js/mediators/io-mediator.js | 207 |
1 files changed, 189 insertions, 18 deletions
diff --git a/js/mediators/io-mediator.js b/js/mediators/io-mediator.js index 56869839..e763c67c 100644 --- a/js/mediators/io-mediator.js +++ b/js/mediators/io-mediator.js | |||
@@ -39,6 +39,12 @@ exports.IoMediator = Montage.create(Component, { | |||
39 | enumerable: false, | 39 | enumerable: false, |
40 | value: ProjectIo | 40 | value: ProjectIo |
41 | }, | 41 | }, |
42 | //////////////////////////////////////////////////////////////////// | ||
43 | // | ||
44 | appTemplatesUrl: { | ||
45 | enumerable: false, | ||
46 | value: new RegExp(chrome.extension.getURL('js/document/templates/montage-html/'), 'gi') | ||
47 | }, | ||
42 | //////////////////////////////////////////////////////////////////// | 48 | //////////////////////////////////////////////////////////////////// |
43 | // | 49 | // |
44 | fileNew: { | 50 | fileNew: { |
@@ -146,22 +152,27 @@ exports.IoMediator = Montage.create(Component, { | |||
146 | //Copy webGL library if needed | 152 | //Copy webGL library if needed |
147 | if (file.webgl.length > 0) { | 153 | if (file.webgl.length > 0) { |
148 | for (var i in this.application.ninja.coreIoApi.ninjaLibrary.libs) { | 154 | for (var i in this.application.ninja.coreIoApi.ninjaLibrary.libs) { |
149 | //if (this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name === 'Assets' || this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name === 'RDGE') { | 155 | //Checking for RDGE library to be available |
150 | if (this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name === 'RDGE') { | 156 | if (this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name === 'RDGE') { |
151 | this.application.ninja.coreIoApi.ninjaLibrary.copyLibToCloud(file.document.root, (this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name+this.application.ninja.coreIoApi.ninjaLibrary.libs[i].version).toLowerCase()); | 157 | this.application.ninja.coreIoApi.ninjaLibrary.copyLibToCloud(file.document.root, (this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name+this.application.ninja.coreIoApi.ninjaLibrary.libs[i].version).toLowerCase()); |
158 | } else { | ||
159 | //TODO: Error handle no available library to copy | ||
152 | } | 160 | } |
153 | } | 161 | } |
154 | } | 162 | } |
155 | // | 163 | |
164 | //TODO: Add check for Monatage library to copy | ||
165 | |||
166 | //Getting content from function to properly handle saving assets (as in external if flagged) | ||
156 | contents = this.parseNinjaTemplateToHtml(file); | 167 | contents = this.parseNinjaTemplateToHtml(file); |
157 | break; | 168 | break; |
158 | default: | 169 | default: |
159 | contents = file.content; | 170 | contents = file.content; |
160 | break; | 171 | break; |
161 | } | 172 | } |
162 | // | 173 | //Making call to save file |
163 | save = this.fio.saveFile({uri: file.document.uri, contents: contents}); | 174 | save = this.fio.saveFile({uri: file.document.uri, contents: contents}); |
164 | // | 175 | //Checking for callback |
165 | if (callback) callback(save); | 176 | if (callback) callback(save); |
166 | } | 177 | } |
167 | }, | 178 | }, |
@@ -170,7 +181,7 @@ exports.IoMediator = Montage.create(Component, { | |||
170 | fileSaveAs: { | 181 | fileSaveAs: { |
171 | enumerable: false, | 182 | enumerable: false, |
172 | value: function (copyTo, copyFrom, callback) { | 183 | value: function (copyTo, copyFrom, callback) { |
173 | // | 184 | //TODO: Implement Save As functionality |
174 | } | 185 | } |
175 | }, | 186 | }, |
176 | //////////////////////////////////////////////////////////////////// | 187 | //////////////////////////////////////////////////////////////////// |
@@ -178,7 +189,7 @@ exports.IoMediator = Montage.create(Component, { | |||
178 | fileDelete: { | 189 | fileDelete: { |
179 | enumerable: false, | 190 | enumerable: false, |
180 | value: function (file, callback) { | 191 | value: function (file, callback) { |
181 | // | 192 | //TODO: Implement Delete functionality |
182 | } | 193 | } |
183 | }, | 194 | }, |
184 | //////////////////////////////////////////////////////////////////// | 195 | //////////////////////////////////////////////////////////////////// |
@@ -195,18 +206,151 @@ exports.IoMediator = Montage.create(Component, { | |||
195 | } | 206 | } |
196 | }, | 207 | }, |
197 | //////////////////////////////////////////////////////////////////// | 208 | //////////////////////////////////////////////////////////////////// |
198 | //TODO: Expand to allow more templates | 209 | //TODO: Expand to allow more templates, clean up variables |
199 | parseNinjaTemplateToHtml: { | 210 | parseNinjaTemplateToHtml: { |
200 | enumerable: false, | 211 | enumerable: false, |
201 | value: function (template) { | 212 | value: function (template) { |
202 | // | 213 | //Injecting head and body into old document |
203 | template.document.content.document.body.innerHTML = template.body; | 214 | template.document.content.document.body.innerHTML = template.body; |
204 | template.document.content.document.head.innerHTML = template.head; | 215 | template.document.content.document.head.innerHTML = template.head; |
205 | //TODO: Remove temp fix for styles | 216 | //Getting all CSS (style or link) tags |
206 | if (template.style) { | 217 | var styletags = template.document.content.document.getElementsByTagName('style'), |
207 | template.document.content.document.head.getElementsByTagName('style')[0].innerHTML = this.getCssFromRules(template.style.cssRules); | 218 | linktags = template.document.content.document.getElementsByTagName('link'); |
219 | //Looping through link tags and removing file recreated elements | ||
220 | for (var j in styletags) { | ||
221 | if (styletags[j].getAttribute) { | ||
222 | if(styletags[j].getAttribute('data-ninja-uri') !== null && !styletags[j].getAttribute('data-ninja-template')) {//TODO: Use querySelectorAll | ||
223 | try { | ||
224 | //Checking head first | ||
225 | template.document.content.document.head.removeChild(styletags[j]); | ||
226 | } catch (e) { | ||
227 | try { | ||
228 | //Checking body if not in head | ||
229 | template.document.content.document.body.removeChild(styletags[j]); | ||
230 | } catch (e) { | ||
231 | //Error, not found! | ||
232 | } | ||
233 | } | ||
234 | |||
235 | } | ||
236 | } | ||
237 | } | ||
238 | //TODO: Add logic to only enble tags we disabled | ||
239 | for (var l in linktags) { | ||
240 | if (linktags[l].getAttribute && linktags[l].getAttribute('disabled')) {//TODO: Use querySelectorAll | ||
241 | linktags[l].removeAttribute('disabled'); | ||
242 | } | ||
243 | } | ||
244 | //Checking for type of save: styles = <style> only | css = <style> and <link> (all CSS) | ||
245 | if (template.styles) { | ||
246 | //Getting all style tags | ||
247 | var styleCounter = 0, | ||
248 | docStyles = template.document.content.document.getElementsByTagName('style'); | ||
249 | //Looping through all style tags | ||
250 | for(var i in template.styles) { | ||
251 | if (template.styles[i].ownerNode) { | ||
252 | if (template.styles[i].ownerNode.getAttribute) { | ||
253 | //Checking for node not to be loaded from file | ||
254 | if (template.styles[i].ownerNode.getAttribute('data-ninja-uri') === null && !template.styles[i].ownerNode.getAttribute('data-ninja-template')) { | ||
255 | //Inseting data from rules array into tag as string | ||
256 | docStyles[styleCounter].innerHTML = this.getCssFromRules(template.styles[i].cssRules); | ||
257 | //Syncing <style> tags count since it might be mixed with <link> | ||
258 | styleCounter++; | ||
259 | } | ||
260 | } | ||
261 | } | ||
262 | } | ||
263 | } else if (template.css) { | ||
264 | //Getting all style and link tags | ||
265 | var styleCounter = 0, | ||
266 | docStyles = template.document.content.document.getElementsByTagName('style'), | ||
267 | docLinks = template.document.content.document.getElementsByTagName('link'); | ||
268 | //Removing Ninja Data Attributes | ||
269 | for (var n in docLinks) { | ||
270 | if (docLinks[n].attributes) { | ||
271 | for (var m in docLinks[n].attributes) { | ||
272 | if (docLinks[n].attributes[m].name && docLinks[n].attributes[m].name.indexOf('data-ninja')!=-1) { | ||
273 | docLinks[n].removeAttribute(docLinks[n].attributes[m].name); | ||
274 | } | ||
275 | } | ||
276 | } | ||
277 | } | ||
278 | // | ||
279 | for(var i in template.css) { | ||
280 | if (template.css[i].ownerNode) { | ||
281 | if (template.css[i].ownerNode.getAttribute) { | ||
282 | if (template.css[i].ownerNode.getAttribute('data-ninja-uri') === null && !template.css[i].ownerNode.getAttribute('data-ninja-template')) {//TODO: Use querySelectorAll | ||
283 | //Inseting data from rules array into <style> as string | ||
284 | docStyles[styleCounter].innerHTML = this.getCssFromRules(template.css[i].cssRules); | ||
285 | styleCounter++; | ||
286 | } else { | ||
287 | //Checking for attributes to be added to tag upon saving | ||
288 | for (var k in docLinks) { | ||
289 | if (docLinks[k].getAttribute) { | ||
290 | if (docLinks[k].getAttribute('href') && ('/'+docLinks[k].getAttribute('href')) === template.css[i].ownerNode.getAttribute('data-ninja-file-url')) { | ||
291 | for (var l in template.css[i].ownerNode.attributes) { | ||
292 | if (template.css[i].ownerNode.attributes[l].value) { | ||
293 | if (template.css[i].ownerNode.attributes[l].name.indexOf('data-ninja')!=-1) { | ||
294 | //Ninja attribute... | ||
295 | } else { | ||
296 | docLinks[k].setAttribute(template.css[i].ownerNode.attributes[l].name, template.css[i].ownerNode.attributes[l].value); | ||
297 | } | ||
298 | } | ||
299 | } | ||
300 | } | ||
301 | } | ||
302 | } | ||
303 | //Saving data from rules array converted to string into <link> file | ||
304 | var save = this.fio.saveFile({uri: template.css[i].ownerNode.getAttribute('data-ninja-uri'), contents: this.getCssFromRules(template.css[i].cssRules)}); | ||
305 | } | ||
306 | } | ||
307 | } | ||
308 | } | ||
309 | } | ||
310 | //Checking for webGL elements in document | ||
311 | if (template.webgl.length) { | ||
312 | // | ||
313 | var json, matchingtags = [], webgltag, scripts = template.document.content.document.getElementsByTagName('script'); | ||
314 | // | ||
315 | for (var i in scripts) { | ||
316 | if (scripts[i].getAttribute) { | ||
317 | if (scripts[i].getAttribute('data-ninja-webgl') !== null) {//TODO: Use querySelectorAll | ||
318 | matchingtags.push(scripts[i]); | ||
319 | } | ||
320 | } | ||
321 | } | ||
322 | // | ||
323 | if (matchingtags.length) { | ||
324 | if (matchingtags.length === 1) { | ||
325 | webgltag = matchingtags[0]; | ||
326 | } else { | ||
327 | //TODO: Add logic to handle multiple tags, perhaps combine to one | ||
328 | webgltag = matchingtags[matchingtags.length-1]; //Saving all data to last one... | ||