aboutsummaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rwxr-xr-xjs/controllers/document-controller.js9
-rwxr-xr-xjs/controllers/selection-controller.js2
-rwxr-xr-xjs/controllers/undo-controller.js17
-rwxr-xr-xjs/document/html-document.js75
-rw-r--r--js/io/ui/file-picker/picker-navigator.reel/picker-navigator.js6
-rw-r--r--js/mediators/io-mediator.js92
6 files changed, 143 insertions, 58 deletions
diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js
index 64ff2c7e..194496a6 100755
--- a/js/controllers/document-controller.js
+++ b/js/controllers/document-controller.js
@@ -76,11 +76,14 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
76 // 76 //
77 handleWebRequest: { 77 handleWebRequest: {
78 value: function (request) { 78 value: function (request) {
79 if (this._hackRootFlag && request.url.indexOf('js/document/templates/montage-html') !== -1) { 79 //TODO: Check if frameId is proper
80 if (this._hackRootFlag && request.parentFrameId !== -1) {
80 //TODO: Optimize creating string 81 //TODO: Optimize creating string
81 return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split('/')[request.url.split('/').length-1]}; 82 //console.log(this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1], request.url);
82 } 83 //return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split('/')[request.url.split('/').length-1]};
84 return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split(chrome.extension.getURL('js/document/templates/montage-html/'))[1]};
83 } 85 }
86 }
84 }, 87 },
85 //////////////////////////////////////////////////////////////////// 88 ////////////////////////////////////////////////////////////////////
86 // 89 //
diff --git a/js/controllers/selection-controller.js b/js/controllers/selection-controller.js
index c4623d3f..08eb018f 100755
--- a/js/controllers/selection-controller.js
+++ b/js/controllers/selection-controller.js
@@ -98,6 +98,8 @@ exports.SelectionController = Montage.create(Component, {
98 this._isDocument = false; 98 this._isDocument = false;
99 } 99 }
100 NJevent("selectionChange", {"elements": this.application.ninja.selectedElements, "isDocument": this._isDocument} ); 100 NJevent("selectionChange", {"elements": this.application.ninja.selectedElements, "isDocument": this._isDocument} );
101
102 this._selectionContainer = this.application.ninja.currentSelectedContainer;
101 } 103 }
102 }, 104 },
103 105
diff --git a/js/controllers/undo-controller.js b/js/controllers/undo-controller.js
index 926803d3..19cfb6e6 100755
--- a/js/controllers/undo-controller.js
+++ b/js/controllers/undo-controller.js
@@ -71,22 +71,28 @@ exports.UndoController = Montage.create( Component, {
71 /** 71 /**
72 * Undo Queue 72 * Undo Queue
73 */ 73 */
74 _undoQueue: { value: [] }, 74 _undoQueue: { value: []},
75 75
76 undoQueue: { 76 undoQueue: {
77 get: function() { 77 get: function() {
78 return this._undoQueue; 78 return this._undoQueue;
79 },
80 set: function(value){
81 this._undoQueue = value;
79 } 82 }
80 }, 83 },
81 84
82 /** 85 /**
83 * Redo Queue 86 * Redo Queue
84 */ 87 */
85 _redoQueue: { value: [], enumerable: false }, 88 _redoQueue: { value: [], enumerable: false},
86 89
87 redoQueue: { 90 redoQueue: {
88 get: function() { 91 get: function() {
89 return this._redoQueue; 92 return this._redoQueue;
93 },
94 set: function(value){
95 this._redoQueue = value;
90 } 96 }
91 }, 97 },
92 98
@@ -202,5 +208,12 @@ exports.UndoController = Montage.create( Component, {
202 this.redoQueue.splice(0, this.redoQueue.length); 208 this.redoQueue.splice(0, this.redoQueue.length);
203 //this.redoQueue = []; 209 //this.redoQueue = [];
204 } 210 }
211 },
212
213 clearHistory:{
214 value: function(){
215 this.undoQueue.length = 0;
216 this.redoQueue.length = 0;
217 }
205 } 218 }
206}); \ No newline at end of file 219}); \ No newline at end of file
diff --git a/js/document/html-document.js b/js/document/html-document.js
index 5d507476..9353027d 100755
--- a/js/document/html-document.js
+++ b/js/document/html-document.js
@@ -59,6 +59,27 @@ exports.HTMLDocument = Montage.create(TextDocument, {
59 _gridVerticalSpacing: {value:0}, 59 _gridVerticalSpacing: {value:0},
60 //end - drawUtils state 60 //end - drawUtils state
61 61
62 _undoStack: { value: [] },
63 undoStack: {
64 get: function() {
65 return this._undoStack;
66 },
67 set:function(value){
68 this._undoStack = value;
69 }
70 },
71
72 _redoStack: { value: [], enumerable: false },
73
74 redoStack: {
75 get: function() {
76 return this._redoStack;
77 },
78 set:function(value){
79 this._redoStack = value;
80 }
81 },
82
62 83
63 // GETTERS / SETTERS 84 // GETTERS / SETTERS
64 85
@@ -464,16 +485,18 @@ exports.HTMLDocument = Montage.create(TextDocument, {
464 //If rules are null, assuming cross-origin issue 485 //If rules are null, assuming cross-origin issue
465 if(this._document.styleSheets[i].rules === null) { 486 if(this._document.styleSheets[i].rules === null) {
466 //TODO: Revisit URLs and URI creation logic, very hack right now 487 //TODO: Revisit URLs and URI creation logic, very hack right now
467 var fileUri, cssUrl, cssData, tag, query; 488 var fileUri, cssUrl, cssData, query, prefixUrl;
468 if (this._document.styleSheets[i].href.indexOf('js/document/templates/montage-html') !== -1) { 489 //TODO: Parse out relative URLs and map them to absolute
490 if (this._document.styleSheets[i].href.indexOf(chrome.extension.getURL('')) !== -1) {
469 //Getting the url of the CSS file 491 //Getting the url of the CSS file
470 cssUrl = this._document.styleSheets[i].href.split('js/document/templates/montage-html')[1]; 492 cssUrl = this._document.styleSheets[i].href.split('js/document/templates/montage-html')[1];//TODO: Parse out relative URLs and map them to absolute
471 //Creating the URI of the file (this is wrong should not be splitting cssUrl) 493 //Creating the URI of the file (this is wrong should not be splitting cssUrl)
472 fileUri = this.application.ninja.coreIoApi.cloudData.root+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+cssUrl.split('/')[1]; 494 fileUri = this.application.ninja.coreIoApi.cloudData.root+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+cssUrl;
495 fileUri = fileUri.replace(/\/\//gi, '/');
473 //Loading the data from the file 496 //Loading the data from the file
474 cssData = this.application.ninja.coreIoApi.readFile({uri: fileUri}); 497 cssData = this.application.ninja.coreIoApi.readFile({uri: fileUri});
475 //Creating tag with file content 498 //Creating tag with file content
476 tag = this.iframe.contentWindow.document.createElement('style'); 499 var tag = this.iframe.contentWindow.document.createElement('style');
477 tag.setAttribute('type', 'text/css'); 500 tag.setAttribute('type', 'text/css');
478 tag.setAttribute('data-ninja-uri', fileUri); 501 tag.setAttribute('data-ninja-uri', fileUri);
479 tag.setAttribute('data-ninja-file-url', cssUrl); 502 tag.setAttribute('data-ninja-file-url', cssUrl);
@@ -481,11 +504,14 @@ exports.HTMLDocument = Montage.create(TextDocument, {
481 tag.setAttribute('data-ninja-file-name', cssUrl.split('/')[cssUrl.split('/').length-1]); 504 tag.setAttribute('data-ninja-file-name', cssUrl.split('/')[cssUrl.split('/').length-1]);
482 //Copying attributes to maintain same properties as the <link> 505 //Copying attributes to maintain same properties as the <link>
483 for (var n in this._document.styleSheets[i].ownerNode.attributes) { 506 for (var n in this._document.styleSheets[i].ownerNode.attributes) {
484 if (this._document.styleSheets[i].ownerNode.attributes[n].value && this._document.styleSheets[i].ownerNode.attributes[n].name !== 'disabled') { 507 if (this._document.styleSheets[i].ownerNode.attributes[n].value && this._document.styleSheets[i].ownerNode.attributes[n].name !== 'disabled' && this._document.styleSheets[i].ownerNode.attributes[n].name !== 'disabled') {
485 tag.setAttribute(this._document.styleSheets[i].ownerNode.attributes[n].name, this._document.styleSheets[i].ownerNode.attributes[n].value); 508 tag.setAttribute(this._document.styleSheets[i].ownerNode.attributes[n].name, this._document.styleSheets[i].ownerNode.attributes[n].value);
486 } 509 }
487 } 510 }
488 tag.innerHTML = cssData.content; 511 //TODO: Fix regEx to have logic for all possible URLs strings
512 prefixUrl = '('+cssUrl.split(cssUrl.split('/')[cssUrl.split('/').length-1])[0]+'../';
513 prefixUrl = prefixUrl.replace('(/', '(');
514 tag.innerHTML = cssData.content.replace(/\(\.\.\//gi, prefixUrl);
489 //Looping through DOM to insert style tag at location of link element 515 //Looping through DOM to insert style tag at location of link element
490 query = this._templateDocument.html.querySelectorAll(['link']); 516 query = this._templateDocument.html.querySelectorAll(['link']);
491 for (var j in query) { 517 for (var j in query) {
@@ -498,15 +524,15 @@ exports.HTMLDocument = Montage.create(TextDocument, {
498 } 524 }
499 } else { 525 } else {
500 console.log('ERROR: Cross-Domain-Stylesheet detected, unable to load in Ninja'); 526 console.log('ERROR: Cross-Domain-Stylesheet detected, unable to load in Ninja');
501 /* 527 //None local stylesheet, probably on a CDN (locked)
502//None local stylesheet, probably on a CDN (locked)
503 tag = this.iframe.contentWindow.document.createElement('style'); 528 tag = this.iframe.contentWindow.document.createElement('style');
504 tag.setAttribute('type', 'text/css'); 529 tag.setAttribute('type', 'text/css');
505 tag.setAttribute('data-ninja-external-url', this._document.styleSheets[i].href); 530 tag.setAttribute('data-ninja-external-url', this._document.styleSheets[i].href);
506 tag.setAttribute('data-ninja-file-read-only', "true"); 531 tag.setAttribute('data-ninja-file-read-only', "true");
507 tag.setAttribute('data-ninja-file-name', this._document.styleSheets[i].href.split('/')[this._document.styleSheets[i].href.split('/').length-1]); 532 tag.setAttribute('data-ninja-file-name', this._document.styleSheets[i].href.split('/')[this._document.styleSheets[i].href.split('/').length-1]);
508 533
509 //TODO: Figure out cross-domain XHR issue, might need cloud to handle 534 /*
535//TODO: Figure out cross-domain XHR issue, might need cloud to handle
510 var xhr = new XMLHttpRequest(); 536 var xhr = new XMLHttpRequest();
511 xhr.open("GET", this._document.styleSheets[i].href, true); 537 xhr.open("GET", this._document.styleSheets[i].href, true);
512 xhr.send(); 538 xhr.send();
@@ -514,6 +540,7 @@ exports.HTMLDocument = Montage.create(TextDocument, {
514 if (xhr.readyState === 4) {