diff options
author | Jose Antonio Marquez | 2012-03-04 11:15:27 -0800 |
---|---|---|
committer | Jose Antonio Marquez | 2012-03-04 11:15:27 -0800 |
commit | b2de52888a7c976cc9ae40518e3653cec0aac296 (patch) | |
tree | 0d747d568392460da27e27dae519909ad9ba2cf0 /js/mediators | |
parent | 5c49635cc44815364f9a0296ffaa7acc34254937 (diff) | |
download | ninja-b2de52888a7c976cc9ae40518e3653cec0aac296.tar.gz |
Improved CSS URL cleaned
Added logic to accommodate any URLs in a CSS file inside the opened document root. Need to add logic for handling linked references above the root. Also need to reformat into a reusable method as it might be needed besides CSS.
Diffstat (limited to 'js/mediators')
-rw-r--r-- | js/mediators/io-mediator.js | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/js/mediators/io-mediator.js b/js/mediators/io-mediator.js index 0a851a4d..5917edba 100644 --- a/js/mediators/io-mediator.js +++ b/js/mediators/io-mediator.js | |||
@@ -330,29 +330,65 @@ exports.IoMediator = Montage.create(Component, { | |||
330 | } | 330 | } |
331 | } | 331 | } |
332 | } | 332 | } |
333 | var local, regex, fileCouldDirUrl, adjCss = this.getCssFromRules(template.css[i].cssRules), cssUrl = template.css[i].ownerNode.getAttribute('data-ninja-file-url'); | 333 | |
334 | //TODO: Assure logic for local directory | 334 | /////////////////////////////////////////////////////////////////////////////////////////// |
335 | local = cssUrl.split(cssUrl.split('/')[cssUrl.split('/').length-2])[0] || cssUrl.split(cssUrl.split('/')[cssUrl.split('/').length-1])[0] || cssUrl.split(cssUrl.split('/')[0])[0]; | 335 | /////////////////////////////////////////////////////////////////////////////////////////// |
336 | // | 336 | |
337 | fileCouldDirUrl = this.application.ninja.coreIoApi.rootUrl+escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+local).replace(/\/\//gi, '/')); | 337 | |
338 | // | 338 | var cleanedCss, fileCouldDirUrl, pathDepth, pathToDocRoot = '../'; |
339 | regex = new RegExp(fileCouldDirUrl.replace(/\//gi, '\\\/'), 'gi'); | 339 | dirtyCss = this.getCssFromRules(template.css[i].cssRules), |
340 | // | 340 | fileUrl = template.css[i].ownerNode.getAttribute('data-ninja-file-url'), |
341 | if (local.split('/').length > 2) { | 341 | fileRootUrl = this.application.ninja.coreIoApi.rootUrl+escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+fileUrl.split(fileUrl.split('/')[fileUrl.split('/').length-1])[0]).replace(/\/\//gi, '/')), |
342 | adjCss = adjCss.replace(regex, '../'); | 342 | localPath = fileUrl.split(fileUrl.split('/')[fileUrl.split('/').length-2])[0] || fileUrl.split(fileUrl.split('/')[fileUrl.split('/').length-1])[0] || fileUrl.split(fileUrl.split('/')[0])[0], |
343 | } else { | 343 | documentRootURL = this.application.ninja.coreIoApi.rootUrl+escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1])); |
344 | adjCss = adjCss.replace(regex, ''); | 344 | |
345 | pathDepth = Math.floor(localPath.split('/').length/2); | ||
346 | |||
347 | for (var p=0; p < pathDepth; p++) { | ||
348 | pathToDocRoot += '../'; | ||
349 | } | ||
350 | |||
351 | fileCouldDirUrl = this.application.ninja.coreIoApi.rootUrl+escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+localPath).replace(/\/\//gi, '/')); | ||
352 | |||
353 | 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)); | ||
354 | |||
355 | function parseNinjaUrl (url) { | ||
356 | // | ||
357 | if (url.indexOf(fileCouldDirUrl) !== -1 || url.indexOf(fileRootUrl) !== -1) { | ||
358 | // | ||
359 | if (pathDepth < 1 || url.indexOf(fileRootUrl) > -1) { | ||
360 | // | ||
361 | url = url.replace(new RegExp(fileRootUrl.replace(/\//gi, '\\\/'), 'gi'), ''); | ||
362 | } else { | ||
363 | // | ||
364 | url = url.replace(new RegExp(fileCouldDirUrl.replace(/\//gi, '\\\/'), 'gi'), '../'); | ||
365 | } | ||
366 | } else { | ||
367 | // | ||
368 | if (url.indexOf(documentRootURL) !== 1) { | ||
369 | url = url.replace(new RegExp(documentRootURL.replace(/\//gi, '\\\/'), 'gi'), pathToDocRoot); | ||
370 | } else if (url.indexOf(this.application.ninja.coreIoApi.rootUrl) !== 1) { | ||
371 | //TODO: Add logic for files above root document folder | ||
372 | } | ||
373 | } | ||
374 | //console.log("Returning: " + url); | ||
375 | //console.log("-----"); | ||
376 | return url; | ||
345 | } | 377 | } |
346 | 378 | ||
379 | //console.log(cleanedCss); | ||
380 | |||
381 | /////////////////////////////////////////////////////////////////////////////////////////// | ||
382 | /////////////////////////////////////////////////////////////////////////////////////////// | ||
383 | |||
347 | 384 | ||
348 | //console.log(adjCss); | ||
349 | //console.log(fileCouldDirUrl); | ||
350 | //return; | 385 | //return; |
351 | 386 | ||
352 | 387 | ||
353 | 388 | ||
354 | //Saving data from rules array converted to string into <link> file | 389 | //Saving data from rules array converted to string into <link> file |
355 | var save = this.fio.saveFile({uri: template.css[i].ownerNode.getAttribute('data-ninja-uri'), contents: adjCss}); | 390 | var save = this.fio.saveFile({uri: template.css[i].ownerNode.getAttribute('data-ninja-uri'), contents: cleanedCss}); |
391 | //TODO: Add error handling for saving files | ||
356 | } | 392 | } |
357 | } | 393 | } |
358 | } | 394 | } |