aboutsummaryrefslogtreecommitdiff
path: root/js/mediators
diff options
context:
space:
mode:
Diffstat (limited to 'js/mediators')
-rw-r--r--js/mediators/io-mediator.js234
1 files changed, 187 insertions, 47 deletions
diff --git a/js/mediators/io-mediator.js b/js/mediators/io-mediator.js
index 65218526..c22d95be 100644
--- a/js/mediators/io-mediator.js
+++ b/js/mediators/io-mediator.js
@@ -41,9 +41,12 @@ exports.IoMediator = Montage.create(Component, {
41 }, 41 },
42 //////////////////////////////////////////////////////////////////// 42 ////////////////////////////////////////////////////////////////////
43 // 43 //
44 appTemplatesUrl: { 44 getAppTemplatesUrlRegEx: {
45 enumerable: false, 45 enumerable: false,
46 value: new RegExp(chrome.extension.getURL('js/document/templates/montage-html/'), 'gi') 46 value: function () {
47 var regex = new RegExp(chrome.extension.getURL('js/document/templates/montage-html').replace(/\//gi, '\\\/'), 'gi');
48 return regex;
49 }
47 }, 50 },
48 //////////////////////////////////////////////////////////////////// 51 ////////////////////////////////////////////////////////////////////
49 // 52 //
@@ -149,17 +152,7 @@ exports.IoMediator = Montage.create(Component, {
149 // 152 //
150 switch (file.mode) { 153 switch (file.mode) {
151 case 'html': 154 case 'html':
152 //Copy webGL library if needed 155
153 if (file.webgl && file.webgl.length > 0) {
154 for (var i in this.application.ninja.coreIoApi.ninjaLibrary.libs) {
155 //Checking for RDGE library to be available
156 if (this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name === 'RDGE') {
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
160 }
161 }
162 }
163 156
164 //TODO: Add check for Monatage library to copy 157 //TODO: Add check for Monatage library to copy
165 158
@@ -210,35 +203,51 @@ exports.IoMediator = Montage.create(Component, {
210 parseNinjaTemplateToHtml: { 203 parseNinjaTemplateToHtml: {
211 enumerable: false, 204 enumerable: false,
212 value: function (template) { 205 value: function (template) {
206 var regexRootUrl, rootUrl = this.application.ninja.coreIoApi.rootUrl+escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]));
207 regexRootUrl = new RegExp(rootUrl.replace(/\//gi, '\\\/'), 'gi');
213 //Injecting head and body into old document 208 //Injecting head and body into old document
214 template.document.content.document.body.innerHTML = template.body; 209 template.document.content.document.head.innerHTML = template.head.replace(regexRootUrl, '');
215 template.document.content.document.head.innerHTML = template.head; 210 template.document.content.document.body.innerHTML = template.body.replace(regexRootUrl, '');
216 //Getting all CSS (style or link) tags 211 //Getting all CSS (style or link) tags
217 var styletags = template.document.content.document.getElementsByTagName('style'), 212 var styletags = template.document.content.document.getElementsByTagName('style'),
218 linktags = template.document.content.document.getElementsByTagName('link'); 213 linktags = template.document.content.document.getElementsByTagName('link'),
219 //Looping through link tags and removing file recreated elements 214 toremovetags = [];
220 for (var j in styletags) { 215 //Getting styles tags to be removed from document
221 if (styletags[j].getAttribute) { 216 if (styletags.length) {
222 if(styletags[j].getAttribute('data-ninja-uri') !== null && !styletags[j].getAttribute('data-ninja-template')) {//TODO: Use querySelectorAll 217 for (var j=0; j<styletags.length; j++) {
223 try { 218 if (styletags[j].getAttribute) {
224 //Checking head first 219 if(styletags[j].getAttribute('data-ninja-uri') !== null && !styletags[j].getAttribute('data-ninja-template')) {
225 template.document.content.document.head.removeChild(styletags[j]); 220 toremovetags.push(styletags[j]);
226 } catch (e) { 221 } else if (styletags[j].getAttribute('data-ninja-external-url')) {
227 try { 222 toremovetags.push(styletags[j]);
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 } 223 }
234
235 } 224 }
236 } 225 }
237 } 226 }
238 //TODO: Add logic to only enble tags we disabled 227 //Removing styles tags from document
228 for (var h=0; toremovetags[h]; h++) {
229 try {
230 //Checking head first
231 template.document.content.document.head.removeChild(toremovetags[h]);
232 } catch (e) {
233 try {
234 //Checking body if not in head
235 template.document.content.document.body.removeChild(toremovetags[h]);
236 } catch (e) {
237 //Error, not found!
238 }
239 }
240 }
241 //Removing disabled tags from tags that were not originally disabled by user (Ninja enables all)
239 for (var l in linktags) { 242 for (var l in linktags) {
240 if (linktags[l].getAttribute && linktags[l].getAttribute('disabled')) {//TODO: Use querySelectorAll 243 if (linktags[l].getAttribute && linktags[l].getAttribute('disabled')) {//TODO: Use querySelectorAll
241 linktags[l].removeAttribute('disabled'); 244 for (var p=0; toremovetags[p]; p++) {
245 if (toremovetags[p].getAttribute('href') === linktags[l].getAttribute('href')) {
246 if (!toremovetags[p].getAttribute('data-ninja-disabled')) {
247 linktags[l].removeAttribute('disabled');
248 }
249 }
250 }
242 } 251 }
243 } 252 }
244 //Checking for type of save: styles = <style> only | css = <style> and <link> (all CSS) 253 //Checking for type of save: styles = <style> only | css = <style> and <link> (all CSS)
@@ -252,10 +261,12 @@ exports.IoMediator = Montage.create(Component, {
252 if (template.styles[i].ownerNode.getAttribute) { 261 if (template.styles[i].ownerNode.getAttribute) {
253 //Checking for node not to be loaded from file 262 //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')) { 263 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 264 if(docStyles[styleCounter]) {
256 docStyles[styleCounter].innerHTML = this.getCssFromRules(template.styles[i].cssRules); 265 //Inseting data from rules array into tag as string
257 //Syncing <style> tags count since it might be mixed with <link> 266 docStyles[styleCounter].innerHTML = this.getCssFromRules(template.styles[i].cssRules);
258 styleCounter++; 267 //Syncing <style> tags count since it might be mixed with <link>
268 styleCounter++;
269 }
259 } 270 }
260 } 271 }
261 } 272 }
@@ -281,9 +292,11 @@ exports.IoMediator = Montage.create(Component, {
281 if (template.css[i].ownerNode.getAttribute) { 292 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 293 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 294 //Inseting data from rules array into <style> as string
284 docStyles[styleCounter].innerHTML = this.getCssFromRules(template.css[i].cssRules); 295 if (docStyles[styleCounter] && !template.css[i].ownerNode.getAttribute('data-ninja-external-url')) {
285 styleCounter++; 296 docStyles[styleCounter].innerHTML = this.getCssFromRules(template.css[i].cssRules);
286 } else { 297 styleCounter++;
298 }
299 } else if (!template.css[i].ownerNode.getAttribute('data-ninja-template')){
287 //Checking for attributes to be added to tag upon saving 300 //Checking for attributes to be added to tag upon saving
288 for (var k in docLinks) { 301 for (var k in docLinks) {
289 if (docLinks[k].getAttribute) { 302 if (docLinks[k].getAttribute) {
@@ -300,23 +313,67 @@ exports.IoMediator = Montage.create(Component, {
300 } 313 }
301 } 314 }
302 } 315 }
316
317 ///////////////////////////////////////////////////////////////////////////////////////////
318 ///////////////////////////////////////////////////////////////////////////////////////////
319
320
321 var cleanedCss,
322 dirtyCss = this.getCssFromRules(template.css[i].cssRules),
323 fileUrl = template.css[i].ownerNode.getAttribute('data-ninja-file-url'),
324 fileRootUrl = this.application.ninja.coreIoApi.rootUrl+fileUrl.split(fileUrl.split('/')[fileUrl.split('/').length-1])[0],
325 cleanedCss = dirtyCss.replace(/(\b(?:(?:https?|ftp|file|[A-Za-z]+):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$]))/gi, parseNinjaUrl.bind(this));
326
327 function parseNinjaUrl (url) {
328 if (url.indexOf(this.application.ninja.coreIoApi.rootUrl) !== -1) {
329 return this.getUrlfromNinjaUrl(url, fileRootUrl, fileUrl);
330 } else {
331 return url;
332 }
333 }
334
335 ///////////////////////////////////////////////////////////////////////////////////////////
336 ///////////////////////////////////////////////////////////////////////////////////////////
337
338
339
340
303 //Saving data from rules array converted to string into <link> file 341 //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)}); 342 var save = this.fio.saveFile({uri: template.css[i].ownerNode.getAttribute('data-ninja-uri'), contents: cleanedCss});
343 //TODO: Add error handling for saving files
305 } 344 }
306 } 345 }
307 } 346 }
308 } 347 }
309 } 348 }
310 //Checking for webGL elements in document 349 //Checking for webGL elements in document
311 if (template.webgl && template.webgl.length) { 350 if (template.webgl && template.webgl.length > 0) {
351 var rdgeDirName, rdgeVersion;
352 //Copy webGL library if needed
353 for (var i in this.application.ninja.coreIoApi.ninjaLibrary.libs) {
354 //Checking for RDGE library to be available
355 if (this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name === 'RDGE') {
356 rdgeDirName = (this.application.ninja.coreIoApi.ninjaLibrary.libs[i].name+this.application.ninja.coreIoApi.ninjaLibrary.libs[i].version).toLowerCase();
357 rdgeVersion = this.application.ninja.coreIoApi.ninjaLibrary.libs[i].version;
358 this.application.ninja.coreIoApi.ninjaLibrary.copyLibToCloud(template.document.root, rdgeDirName);