diff options
Diffstat (limited to 'js/mediators/io-mediator.js')
-rw-r--r-- | js/mediators/io-mediator.js | 88 |
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 |