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.js88
1 files changed, 58 insertions, 30 deletions
diff --git a/js/mediators/io-mediator.js b/js/mediators/io-mediator.js
index 30180155..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 ////////////////////////////////////////////////////////////////////
@@ -205,7 +210,7 @@ exports.IoMediator = Montage.create(Component, {
205 //Getting all CSS (style or link) tags 210 //Getting all CSS (style or link) tags
206 var styletags = template.document.content.document.getElementsByTagName('style'), 211 var styletags = template.document.content.document.getElementsByTagName('style'),
207 linktags = template.document.content.document.getElementsByTagName('link'), 212 linktags = template.document.content.document.getElementsByTagName('link'),
208 url = new RegExp(chrome.extension.getURL('js/document/templates/montage-html/'), 'gi'); 213 url = new RegExp(chrome.extension.getURL('js/document/templates/montage-html/'), 'gi'); //TODO: Make public into var
209 //Looping through link tags and removing file recreated elements 214 //Looping through link tags and removing file recreated elements
210 for (var j in styletags) { 215 for (var j in styletags) {
211 if (styletags[j].getAttribute) { 216 if (styletags[j].getAttribute) {
@@ -255,6 +260,17 @@ exports.IoMediator = Montage.create(Component, {
255 var styleCounter = 0, 260 var styleCounter = 0,
256 docStyles = template.document.content.document.getElementsByTagName('style'), 261 docStyles = template.document.content.document.getElementsByTagName('style'),
257 docLinks = template.document.content.document.getElementsByTagName('link'); 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 //
258 for(var i in template.css) { 274 for(var i in template.css) {
259 if (template.css[i].ownerNode) { 275 if (template.css[i].ownerNode) {
260 if (template.css[i].ownerNode.getAttribute) { 276 if (template.css[i].ownerNode.getAttribute) {
@@ -263,6 +279,22 @@ exports.IoMediator = Montage.create(Component, {
263 docStyles[styleCounter].innerHTML = this.getCssFromRules(template.css[i].cssRules); 279 docStyles[styleCounter].innerHTML = this.getCssFromRules(template.css[i].cssRules);
264 styleCounter++; 280 styleCounter++;
265 } else { 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 }
266 //Saving data from rules array converted to string into <link> file 298 //Saving data from rules array converted to string into <link> file
267 var save = this.fio.saveFile({uri: template.css[i].ownerNode.getAttribute('data-ninja-uri'), contents: this.getCssFromRules(template.css[i].cssRules)}); 299 var save = this.fio.saveFile({uri: template.css[i].ownerNode.getAttribute('data-ninja-uri'), contents: this.getCssFromRules(template.css[i].cssRules)});
268 } 300 }
@@ -313,7 +345,7 @@ exports.IoMediator = Montage.create(Component, {
313 webgltag.innerHTML = json; 345 webgltag.innerHTML = json;
314 } 346 }
315 // 347 //
316 return this.getPretyHtml(template.document.content.document.documentElement.outerHTML.replace(url, '')); 348 return this.getPrettyHtml(template.document.content.document.documentElement.outerHTML.replace(url, ''));
317 } 349 }
318 }, 350 },
319 //////////////////////////////////////////////////////////////////// 351 ////////////////////////////////////////////////////////////////////
@@ -333,14 +365,19 @@ exports.IoMediator = Montage.create(Component, {
333 //TODO: Add better logic for creating this string 365 //TODO: Add better logic for creating this string
334 url = new RegExp(chrome.extension.getURL('js/document/templates/montage-html/'), 'gi'); 366 url = new RegExp(chrome.extension.getURL('js/document/templates/montage-html/'), 'gi');
335 //Returning the CSS string 367 //Returning the CSS string
336 return this.getPretyCss(css.replace(url, '')); 368 return this.getPrettyCss(css.replace(url, ''));
337 } 369 }
338 }, 370 },
339 //////////////////////////////////////////////////////////////////// 371 ////////////////////////////////////////////////////////////////////
340 //Using prettification code from http://jsbeautifier.org 372 ////////////////////////////////////////////////////////////////////
373 //Pretty methods (minified)
341 /* 374 /*
342 Copyright (c) 2009 - 2011, Einar Lielmanis 375 is-beautify javascript code courtesy of Einar Lielmanis:
343 376 Code from https://github.com/einars/js-beautify
377 License https://github.com/einars/js-beautify/blob/master/license.txt
378 Used with author's permission, as stated below
379
380 Copyright (c) 2009 - 2011, Einar Lielmanis
344 Permission is hereby granted, free of charge, to any person 381 Permission is hereby granted, free of charge, to any person
345 obtaining a copy of this software and associated documentation 382 obtaining a copy of this software and associated documentation
346 files (the "Software"), to deal in the Software without 383 files (the "Software"), to deal in the Software without
@@ -348,30 +385,21 @@ exports.IoMediator = Montage.create(Component, {
348 copy, modify, merge, publish, distribute, sublicense, and/or sell 385 copy, modify, merge, publish, distribute, sublicense, and/or sell
349 copies of the Software, and to permit persons to whom the 386 copies of the Software, and to permit persons to whom the
350 Software is furnished to do so, subject to the following 387 Software is furnished to do so, subject to the following
351 conditions: 388 conditions:The above copyright notice and this permission notice shall be
352
353 The above copyright notice and this permission notice shall be
354 included in all copies or substantial portions of the Software. 389 included in all copies or substantial portions of the Software.
355 390 */
356 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 391 //For HTML, including any JS or CSS (single string/file)
357 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 392 getPrettyHtml: {
358 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
359 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
360 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
361 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
362 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
363 OTHER DEALINGS IN THE SOFTWARE.
364 */
365 getPretyHtml: {
366 enumerable: false, 393 enumerable: false,
367 value: function style_html(a,b){function h(){this.pos=0;this.token="";this.current_mode="CONTENT";this.tags={parent:"parent1",parentcount:1,parent1:""};this.tag_type="";this.token_text=this.last_token=this.last_text=this.token_type="";this.Utils={whitespace:"\n\r\t ".split(""),single_token:"br,input,link,meta,!doctype,basefont,base,area,hr,wbr,param,img,isindex,?xml,embed".split(","),extra_liners:"head,body,/html".split(","),in_array:function(a,b){for(var c=0;c<b.length;c++){if(a===b[c]){return true}}return false}};this.get_content=function(){var a="";var b=[];var c=false;while(this.input.charAt(this.pos)!=="<"){if(this.pos>=this.input.length){return b.length?b.join(""):["","TK_EOF"]}a=this.input.charAt(this.pos);this.pos++;this.line_char_count++;if(this.Utils.in_array(a,this.Utils.whitespace)){if(b.length){c=true}this.line_char_count--;continue}else if(c){if(this.line_char_count>=this.max_char){b.push("\n");for(var d=0;d<this.indent_level;d++){b.push(this.indent_string)}this.line_char_count=0}else{b.push(" ");this.line_char_count++}c=false}b.push(a)}return b.length?b.join(""):""};this.get_contents_to=function(a){if(this.pos==this.input.length){return["","TK_EOF"]}var b="";var c="";var d=new RegExp("</"+a+"\\s*>","igm");d.lastIndex=this.pos;var e=d.exec(this.input);var f=e?e.index:this.input.length;if(this.pos<f){c=this.input.substring(this.pos,f);this.pos=f}return c};this.record_tag=function(a){if(this.tags[a+"count"]){this.tags[a+"count"]++;this.tags[a+this.tags[a+"count"]]=this.indent_level}else{this.tags[a+"count"]=1;this.tags[a+this.tags[a+"count"]]=this.indent_level}this.tags[a+this.tags[a+"count"]+"parent"]=this.tags.parent;this.tags.parent=a+this.tags[a+"count"]};this.retrieve_tag=function(a){if(this.tags[a+"count"]){var b=this.tags.parent;while(b){if(a+this.tags[a+"count"]===b){break}b=this.tags[b+"parent"]}if(b){this.indent_level=this.tags[a+this.tags[a+"count"]];this.tags.parent=this.tags[b+"parent"]}delete this.tags[a+this.tags[a+"count"]+"parent"];delete this.tags[a+this.tags[a+"count"]];if(this.tags[a+"count"]==1){delete this.tags[a+"count"]}else{this.tags[a+"count"]--}}};this.get_tag=function(){var a="";var b=[];var c=false;do{if(this.pos>=this.input.length){return b.length?b.join(""):["","TK_EOF"]}a=this.input.charAt(this.pos);this.pos++;this.line_char_count++;if(this.Utils.in_array(a,this.Utils.whitespace)){c=true;this.line_char_count--;continue}if(a==="'"||a==='"'){if(!b[1]||b[1]!=="!"){a+=this.get_unformatted(a);c=true}}if(a==="="){c=false}if(b.length&&b[b.length-1]!=="="&&a!==">"&&c){if(this.line_char_count>=this.max_char){this.print_newline(false,b);this.line_char_count=0}else{b.push(" ");this.line_char_count++}c=false}b.push(a)}while(a!==">");var d=b.join("");var e;if(d.indexOf(" ")!=-1){e=d.indexOf(" ")}else{e=d.indexOf(">")}var f=d.substring(1,e).toLowerCase();if(d.charAt(d.length-2)==="/"||this.Utils.in_array(f,this.Utils.single_token)){this.tag_type="SINGLE"}else if(f==="script"){this.record_tag(f);this.tag_type="SCRIPT"}else if(f==="style"){this.record_tag(f);this.tag_type="STYLE"}else if(this.Utils.in_array(f,unformatted)){var g=this.get_unformatted("</"+f+">",d);b.push(g);this.tag_type="SINGLE"}else if(f.charAt(0)==="!"){if(f.indexOf("[if")!=-1){if(d.indexOf("!IE")!=-1){var g=this.get_unformatted("-->",d);b.push(g)}this.tag_type="START"}else if(f.indexOf("[endif")!=-1){this.tag_type="END";this.unindent()}else if(f.indexOf("[cdata[")!=-1){var g=this.get_unformatted("]]>",d);b.push(g);this.tag_type="SINGLE"}else{var g=this.get_unformatted("-->",d);b.push(g);this.tag_type="SINGLE"}}else{if(f.charAt(0)==="/"){this.retrieve_tag(f.substring(1));this.tag_type="END"}else{this.record_tag(f);this.tag_type="START"}if(this.Utils.in_array(f,this.Utils.extra_liners)){this.print_newline(true,this.output)}}return b.join("")};this.get_unformatted=function(a,b){if(b&&b.indexOf(a)!=-1){return""}var c="";var d="";var e=true;do{if(this.pos>=this.input.length){return d}c=this.input.charAt(this.pos);this.pos++;if(this.Utils.in_array(c,this.Utils.whitespace)){if(!e){this.line_char_count--;continue}if(c==="\n"||c==="\r"){d+="\n";this.line_char_count=0;continue}}d+=c;this.line_char_count++;e=true}while(d.indexOf(a)==-1);return d};this.get_token=function(){var a;if(this.last_token==="TK_TAG_SCRIPT"||this.last_token==="TK_TAG_STYLE"){var b=this.last_token.substr(7);a=this.get_contents_to(b);if(typeof a!=="string"){return a}return[a,"TK_"+b]}if(this.current_mode==="CONTENT"){a=this.get_content();if(typeof a!=="string"){return a}else{return[a,"TK_CONTENT"]}}if(this.current_mode==="TAG"){a=this.get_tag();if(typeof a!=="string"){return a}else{var c="TK_TAG_"+this.tag_type;return[a,c]}}};this.get_full_indent=function(a){a=this.indent_level+a||0;if(a<1)return"";return Array(a+1).join(this.indent_string)};this.printer=function(a,b,c,d,e){this.input=a||"";this.output=[];this.indent_character=b;this.indent_string="";this.indent_size=c;this.brace_style=e;this.indent_level=0;this.max_char=d;this.line_char_count=0;for(var f=0;f<this.indent_size;f++){this.indent_string+=this.indent_character}this.print_newline=function(a,b){this.line_char_count=0;if(!b||!b.length){return}if(!a){while(this.Utils.in_array(b[b.length-1],this.Utils.whitespace)){b.pop()}}b.push("\n");for(var c=0;c<this.indent_level;c++){b.push(this.indent_string)}};this.print_token=function(a){this.output.push(a)};this.indent=function(){this.indent_level++};this.unindent=function(){if(this.indent_level>0){this.indent_level--}}};return this}var c,d,e,f,g;b=b||{};d=b.indent_size||4;e=b.indent_char||" ";g=b.brace_style||"collapse";f=b.max_char||"70";unformatted=b.unformatted||["a"];c=new h;c.printer(a,e,d,f,g);while(true){var i=c.get_token();c.token_text=i[0];c.token_type=i[1];if(c.token_type==="TK_EOF"){break}switch(c.token_type){case"TK_TAG_START":c.print_newline(false,c.output);c.print_token(c.token_text);c.indent();c.current_mode="CONTENT";break;case"TK_TAG_STYLE":case"TK_TAG_SCRIPT":c.print_newline(false,c.output);c.print_token(c.token_text);c.current_mode="CONTENT";break;case"TK_TAG_END":if(c.last_token==="TK_CONTENT"&&c.last_text===""){var j=c.token_text.match(/\w+/)[0];var k=c.output[c.output.length-1].match(/<\s*(\w+)/);if(k===null||k[1]!==j)c.print_newline(true,c.output)}c.print_token(c.token_text);c.current_mode="CONTENT";break;case"TK_TAG_SINGLE":c.print_newline(false,c.output);c.print_token(c.token_text);c.current_mode="CONTENT";break;case"TK_CONTENT":if(c.token_text!==""){c.print_token(c.token_text)}c.current_mode="TAG";break;case"TK_STYLE":case"TK_SCRIPT":if(c.token_text!==""){c.output.push("\n");var l=c.token_text;if(c.token_type=="TK_SCRIPT"){var m=typeof js_beautify=="function"&&js_beautify}else if(c.token_type=="TK_STYLE"){var m=typeof css_beautify=="function"&&css_beautify}if(b.indent_scripts=="keep"){var n=0}else if(b.indent_scripts=="separate"){var n=-c.indent_level}else{var n=1}var o=c.get_full_indent(n);if(m){l=m(l.replace(/^\s*/,o),b)}else{var p=l.match(/^\s*/)[0];var q=p.match(/[^\n\r]*$/)[0].split(c.indent_string).length-1;var r=c.ge