aboutsummaryrefslogtreecommitdiff
path: root/js/mediators/io-mediator.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/mediators/io-mediator.js')
-rw-r--r--js/mediators/io-mediator.js207
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...
329 }
330 }
331