aboutsummaryrefslogtreecommitdiff
path: root/js/mediators
diff options
context:
space:
mode:
authorJose Antonio Marquez2012-05-21 18:28:38 -0700
committerJose Antonio Marquez2012-05-21 18:28:38 -0700
commit11a5be59ff80e0672e9ecf36679be28effb7696c (patch)
tree276b4d9b2cf7fa6c2e96f982fdd71fd6cc406358 /js/mediators
parent2994a18010dec4023d904ddc28ca19101f206d6b (diff)
downloadninja-11a5be59ff80e0672e9ecf36679be28effb7696c.tar.gz
Modifying Canvas Data I/O
Changing methods to save all data to external files, this will be optional for the user. Currently save will only save to external files, but UI will allow user to save in file. Need to implement loading data on file open for external file, only works for in file currently. Modified the Runtime file to load all data itself to not bulk up the user document.
Diffstat (limited to 'js/mediators')
-rw-r--r--js/mediators/io-mediator.js147
1 files changed, 111 insertions, 36 deletions
diff --git a/js/mediators/io-mediator.js b/js/mediators/io-mediator.js
index 8fe88ee6..bbb78a8b 100644
--- a/js/mediators/io-mediator.js
+++ b/js/mediators/io-mediator.js
@@ -203,6 +203,59 @@ exports.IoMediator = Montage.create(Component, {
203 }, 203 },
204 //////////////////////////////////////////////////////////////////// 204 ////////////////////////////////////////////////////////////////////
205 // 205 //
206 getDataDirectory: {
207 value: function (path) {
208 //TODO: Implement user overwrite
209 return this._getUserDirectory(path+'data/');
210 }
211 },
212 ////////////////////////////////////////////////////////////////////
213 //
214 getNinjaDirectory: {
215 value: function (path) {
216 //TODO: Implement user overwrite
217 return this._getUserDirectory(this.getDataDirectory(path)+'ninja/');
218 }
219 },
220 ////////////////////////////////////////////////////////////////////
221 //
222 getCanvasDirectory: {
223 value: function (path) {
224 //TODO: Implement user overwrite
225 return this._getUserDirectory(this.getNinjaDirectory(path)+'canvas/');
226 }
227 },
228 ////////////////////////////////////////////////////////////////////
229 //
230 _getUserDirectory: {
231 value: function (path) {
232 //Checking for data directory
233 var check = this.application.ninja.coreIoApi.fileExists({uri: path}), directory;
234 //Creating directory if doesn't exists
235 switch (check.status) {
236 case 204: //Exists
237 directory = path;
238 break;
239 case 404: //Doesn't exists
240 directory = this.application.ninja.coreIoApi.createDirectory({uri: path});
241 //Checking for success
242 if (directory.status === 201) {
243 directory = path;
244 } else {
245 //Error
246 directory = null;
247 }
248 break;
249 default: //Error
250 directory = null;
251 break;
252 }
253 //Returning the path to the directory on disk (null for any error)
254 return directory;
255 }
256 },
257 ////////////////////////////////////////////////////////////////////
258 //
206 parseHtmlToNinjaTemplate: { 259 parseHtmlToNinjaTemplate: {
207 enumerable: false, 260 enumerable: false,
208 value: function (html) { 261 value: function (html) {
@@ -406,20 +459,19 @@ exports.IoMediator = Montage.create(Component, {
406 } 459 }
407 } 460 }
408 // 461 //
409 var matchingtags = [], scripts = template.file.content.document.getElementsByTagName('script'), webgltag, webgljstag, webgllibtag, webglrdgetag, mjstag, mjslibtag; 462 var matchingtags = [], scripts = template.file.content.document.getElementsByTagName('script'), webgltag, webgllibtag, webglrdgetag, mjstag, mjslibtag;
463 //this.getDataDirectory(template.file.root)
464 //this.getNinjaDirectory(template.file.root)
410 // 465 //
411 for (var i in scripts) { 466 for (var i in scripts) {
412 if (scripts[i].getAttribute) { 467 if (scripts[i].getAttribute) {
413 if (scripts[i].getAttribute('data-ninja-webgl') !== null) {//TODO: Use querySelectorAll 468 if (scripts[i].getAttribute('data-ninja-canvas') !== null) {//TODO: Use querySelectorAll
414 matchingtags.push(scripts[i]); 469 matchingtags.push(scripts[i]);
415 } 470 }
416 if (scripts[i].getAttribute('data-ninja-webgl-js') !== null) { 471 if (scripts[i].getAttribute('data-ninja-canvas-lib') !== null) {
417 webgljstag = scripts[i]; // TODO: Add logic to delete unneccesary tags
418 }
419 if (scripts[i].getAttribute('data-ninja-webgl-lib') !== null) {
420 webgllibtag = scripts[i]; // TODO: Add logic to delete unneccesary tags 472 webgllibtag = scripts[i]; // TODO: Add logic to delete unneccesary tags
421 } 473 }
422 if (scripts[i].getAttribute('data-ninja-webgl-rdge') !== null) { 474 if (scripts[i].getAttribute('data-ninja-canvas-rdge') !== null) {
423 webglrdgetag = scripts[i]; // TODO: Add logic to delete unneccesary tags 475 webglrdgetag = scripts[i]; // TODO: Add logic to delete unneccesary tags
424 } 476 }
425 if (scripts[i].getAttribute('type') === 'text/montage-serialization') { 477 if (scripts[i].getAttribute('type') === 'text/montage-serialization') {
@@ -432,7 +484,19 @@ exports.IoMediator = Montage.create(Component, {
432 } 484 }
433 //Checking for webGL elements in document 485 //Checking for webGL elements in document
434 if (template.webgl && template.webgl.length > 1) {//TODO: Should be length 0, hack for a temp fix 486 if (template.webgl && template.webgl.length > 1) {//TODO: Should be length 0, hack for a temp fix
435 var rdgeDirName, rdgeVersion; 487 var rdgeDirName, rdgeVersion, cvsDataDir = this.getCanvasDirectory(template.file.root), fileCvsDir, fileCvsDirAppend, cvsDirCounter = 1;
488 //
489 if (cvsDataDir) {
490 fileCvsDir = cvsDataDir+template.file.name.split('.'+template.file.extension)[0];
491 if (!this._getUserDirectory(fileCvsDir)) {
492 fileCvsDirAppend = fileCvsDir+cvsDirCounter;
493 while (!this._getUserDirectory(fileCvsDirAppend)) {
494 fileCvsDirAppend = fileCvsDir+(cvsDirCounter++);
495 }
496 }
497 //TODO: Allow user overwrite
498 fileCvsDir += '/';
499 }
436 //Copy webGL library if needed 500 //Copy webGL library if needed
437 for (var i in this.application.ninja.coreIoApi.ninjaLibrary.libs) { 501 for (var i in this.application.ninja.coreIoApi.ninjaLibrary.libs) {
438 //Checking for RDGE library to be available 502 //Checking for RDGE library to be available
@@ -453,12 +517,12 @@ exports.IoMediator = Montage.create(Component, {
453 webgltag = matchingtags[matchingtags.length - 1]; //Saving all data to last one... 517 webgltag = matchingtags[matchingtags.length - 1]; //Saving all data to last one...
454 } 518 }
455 } 519 }
456 // 520 //TODO: Add check for file needed
457 if (!webglrdgetag) { 521 if (!webglrdgetag) {
458 webglrdgetag = template.file.content.document.createElement('script'); 522 webglrdgetag = template.file.content.document.createElement('script');
459 webglrdgetag.setAttribute('type', 'text/javascript'); 523 webglrdgetag.setAttribute('type', 'text/javascript');
460 webglrdgetag.setAttribute('src', rdgeDirName + '/rdge-compiled.js'); 524 webglrdgetag.setAttribute('src', rdgeDirName + '/rdge-compiled.js');
461 webglrdgetag.setAttribute('data-ninja-webgl-rdge', 'true'); 525 webglrdgetag.setAttribute('data-ninja-canvas-rdge', 'true');
462 if (ninjaWrapper) { 526 if (ninjaWrapper) {
463 template.file.content.document.body.getElementsByTagName('ninja-content')[0].appendChild(webglrdgetag); 527 template.file.content.document.body.getElementsByTagName('ninja-content')[0].appendChild(webglrdgetag);
464 } else { 528 } else {
@@ -470,7 +534,7 @@ exports.IoMediator = Montage.create(Component, {
470 webgllibtag = template.file.content.document.createElement('script'); 534 webgllibtag = template.file.content.document.createElement('script');
471 webgllibtag.setAttribute('type', 'text/javascript'); 535 webgllibtag.setAttribute('type', 'text/javascript');
472 webgllibtag.setAttribute('src', rdgeDirName + '/canvas-runtime.js'); 536 webgllibtag.setAttribute('src', rdgeDirName + '/canvas-runtime.js');
473 webgllibtag.setAttribute('data-ninja-webgl-lib', 'true'); 537 webgllibtag.setAttribute('data-ninja-canvas-lib', 'true');
474 if (ninjaWrapper) { 538 if (ninjaWrapper) {
475 template.file.content.document.body.getElementsByTagName('ninja-content')[0].appendChild(webgllibtag); 539 template.file.content.document.body.getElementsByTagName('ninja-content')[0].appendChild(webgllibtag);
476 } else { 540 } else {
@@ -478,51 +542,62 @@ exports.IoMediator = Montage.create(Component, {
478 } 542 }
479 } 543 }
480 // 544 //
481 if (!webgltag) { 545 if (!webgltag && !fileCvsDir) {
482 webgltag = template.file.content.document.createElement('script'); 546 webgltag = template.file.content.document.createElement('script');
483 webgltag.setAttribute('data-ninja-webgl', 'true'); 547 webgltag.setAttribute('data-ninja-canvas', 'true');
484 if (ninjaWrapper) { 548 if (ninjaWrapper) {
485 template.file.content.document.body.getElementsByTagName('ninja-content')[0].appendChild(webgltag); 549 template.file.content.document.body.getElementsByTagName('ninja-content')[0].appendChild(webgltag);
486 } else { 550 } else {
487 template.file.content.document.head.appendChild(webgltag); 551 template.file.content.document.head.appendChild(webgltag);
488 } 552 }
489 } 553 }
490 //TODO: Remove this tag and place inside JS file 554
491 if (!webgljstag) {
492 webgljstag = template.file.content.document.createElement('script');
493 webgljstag.setAttribute('type', 'text/javascript');
494 webgljstag.setAttribute('data-ninja-webgl-js', 'true');
495 if (ninjaWrapper) {
496 template.file.content.document.body.getElementsByTagName('ninja-content')[0].appendChild(webgljstag);
497 } else {
498 template.file.content.document.head.appendChild(webgljstag);
499 }
500 }
501 //TODO: Decide if this should be over-writter or only written on creation 555 //TODO: Decide if this should be over-writter or only written on creation
502 var rootElement = 'document.body'; //TODO: Set actual root element 556 var rootElement = 'document.body'; //TODO: Set actual root element
503 webgljstag.innerHTML = "\ 557
504//Loading webGL/canvas data on window load\n\
505window.addEventListener('load', loadWebGL, false);\n\
506function loadWebGL (e) {\n\
507 window.removeEventListener('load', loadWebGL, false);\n\
508 //Calling method to initialize all webGL/canvas(es)\n\
509 NinjaCvsRt.initWebGl(" + rootElement + ", '" + rdgeDirName + "/');\n\
510}\
511 ";
512 //TODO: This data should be saved to a JSON file eventually 558 //TODO: This data should be saved to a JSON file eventually
513 var json = '\n({\n\t"version": "' + rdgeVersion + '",\n\t"directory": "' + rdgeDirName + '/",\n\t"data": ['; 559 var json = '\n({\n\t"version": "' + rdgeVersion + '",\n\t"directory": "' + rdgeDirName + '/",\n\t"data": [';
514 //Looping through data to create escaped array 560 //Looping through data to create escaped array
515 for (var j = 0; template.webgl[j]; j++) { 561 for (var j = 0; template.webgl[j]; j++) {
516 if (j === 0) { 562 if (j === 0) {
517 json += '\n\t\t\t"' + escape(template.webgl[j]) + '"'; 563 //if (fileCvsDir) {
564 // json += '\n\t\t\t"' + template.webgl[j] + '"';
565 //} else {
566 json += '\n\t\t\t"' + escape(template.webgl[j]) + '"';
567 //}
518 } else { 568 } else {
519 json += ',\n\t\t\t"' + escape(template.webgl[j]) + '"'; 569 //if (fileCvsDir) {
570 // json += ',\n\t\t\t"' + template.webgl[j] + '"';
571 //} else {
572 json += ',\n\t\t\t"' + escape(template.webgl[j]) + '"';
573 //}
520 } 574 }
521 } 575 }
522 //Closing array (make-shift JSON string to validate data in <script> tag)