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