aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xjs/components/ui/icon-list-basic/icon.reel/icon.js5
-rwxr-xr-xjs/components/ui/tree-basic/treeItem.reel/treeItem.js5
-rwxr-xr-xjs/controllers/document-controller.js57
-rwxr-xr-xjs/controllers/styles-controller.js44
-rwxr-xr-xjs/data/menu-data.js2
-rwxr-xr-xjs/document/html-document.js94
-rwxr-xr-xjs/document/templates/montage-html/index.html1
-rwxr-xr-xjs/document/templates/montage-html/styles.css5
-rw-r--r--js/io/ui/file-picker/picker-navigator.reel/picker-navigator.js26
-rwxr-xr-xjs/io/ui/new-file-dialog/new-file-workflow-controller.js7
-rw-r--r--js/io/ui/save-as-dialog.reel/save-as-dialog.js4
-rw-r--r--js/mediators/io-mediator.js79
12 files changed, 256 insertions, 73 deletions
diff --git a/js/components/ui/icon-list-basic/icon.reel/icon.js b/js/components/ui/icon-list-basic/icon.reel/icon.js
index b0279207..72adbfa1 100755
--- a/js/components/ui/icon-list-basic/icon.reel/icon.js
+++ b/js/components/ui/icon-list-basic/icon.reel/icon.js
@@ -131,6 +131,11 @@ var Icon = exports.Icon = Montage.create(Component, {
131 openFolderEvent.initEvent("openFolder", false, false); 131 openFolderEvent.initEvent("openFolder", false, false);
132 openFolderEvent.folderUri = this.icondata.uri; 132 openFolderEvent.folderUri = this.icondata.uri;
133 this.element.dispatchEvent(openFolderEvent); 133 this.element.dispatchEvent(openFolderEvent);
134 }else{
135 var openFolderEvent = document.createEvent("Events");
136 openFolderEvent.initEvent("selectFile", false, false);
137 openFolderEvent.fileUri = this.icondata.uri;
138 this.element.dispatchEvent(openFolderEvent);
134 } 139 }
135 if(evt.bubbles){ 140 if(evt.bubbles){
136 evt.stopPropagation(); 141 evt.stopPropagation();
diff --git a/js/components/ui/tree-basic/treeItem.reel/treeItem.js b/js/components/ui/tree-basic/treeItem.reel/treeItem.js
index 755eab8c..4c71cb6b 100755
--- a/js/components/ui/tree-basic/treeItem.reel/treeItem.js
+++ b/js/components/ui/tree-basic/treeItem.reel/treeItem.js
@@ -225,6 +225,11 @@ exports.TreeItem = Montage.create(Component, {
225 openFolderEvent.initEvent("openFolder", false, false); 225 openFolderEvent.initEvent("openFolder", false, false);
226 openFolderEvent.folderUri = this.treeItemData.uri; 226 openFolderEvent.folderUri = this.treeItemData.uri;
227 this.element.dispatchEvent(openFolderEvent); 227 this.element.dispatchEvent(openFolderEvent);
228 }else{
229 var openFolderEvent = document.createEvent("Events");
230 openFolderEvent.initEvent("selectFile", false, false);
231 openFolderEvent.fileUri = this.treeItemData.uri;
232 this.element.dispatchEvent(openFolderEvent);
228 } 233 }
229 if(evt.bubbles){ 234 if(evt.bubbles){
230 evt.stopPropagation(); 235 evt.stopPropagation();
diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js
index fa611de4..3a77ed5f 100755
--- a/js/controllers/document-controller.js
+++ b/js/controllers/document-controller.js
@@ -58,6 +58,8 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
58 this.eventManager.addEventListener("executeFileOpen", this, false); 58 this.eventManager.addEventListener("executeFileOpen", this, false);
59 this.eventManager.addEventListener("executeNewFile", this, false); 59 this.eventManager.addEventListener("executeNewFile", this, false);
60 this.eventManager.addEventListener("executeSave", this, false); 60 this.eventManager.addEventListener("executeSave", this, false);
61 this.eventManager.addEventListener("executeSaveAs", this, false);
62 this.eventManager.addEventListener("executeSaveAll", this, false);
61 63
62 this.eventManager.addEventListener("recordStyleChanged", this, false); 64 this.eventManager.addEventListener("recordStyleChanged", this, false);
63 65
@@ -84,9 +86,10 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
84 // 86 //
85 handleAppLoaded: { 87 handleAppLoaded: {
86 value: function() { 88 value: function() {
87 //Adding an intercept to resources loaded to ensure user assets load from cloud simulator 89 //Checking for app not to be loaded via http/https to add app only listener
88 if (window.chrome.app.isInstalled) { 90 if (window.location.protocol !== 'http:' && window.location.protocol !== 'https:') {
89 chrome.webRequest.onBeforeRequest.addListener(this.handleWebRequest.bind(this), {urls: ["<all_urls>"]}, ["blocking"]); 91 //Adding an intercept to resources loaded to ensure user assets load from cloud simulator
92 chrome.webRequest.onBeforeRequest.addListener(this.handleWebRequest.bind(this), {urls: ["<all_urls>"]}, ["blocking"]);
90 } 93 }
91 } 94 }
92 }, 95 },
@@ -102,33 +105,57 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
102 handleExecuteFileOpen: { 105 handleExecuteFileOpen: {
103 value: function(event) { 106 value: function(event) {
104 var pickerSettings = event._event.settings || {}; 107 var pickerSettings = event._event.settings || {};
105 pickerSettings.callback = this.openFileWithURI.bind(this); 108 if (this.application.ninja.coreIoApi.cloudAvailable()) {
106 pickerSettings.pickerMode = "read"; 109 pickerSettings.callback = this.openFileWithURI.bind(this);
107 pickerSettings.inFileMode = true; 110 pickerSettings.pickerMode = "read";
108 this.application.ninja.filePickerController.showFilePicker(pickerSettings); 111 pickerSettings.inFileMode = true;
112 this.application.ninja.filePickerController.showFilePicker(pickerSettings);
113 }
109 } 114 }
110 }, 115 },
111 116
112 handleExecuteNewFile: { 117 handleExecuteNewFile: {
113 value: function(event) { 118 value: function(event) {
114 var newFileSettings = event._event.settings || {}; 119 var newFileSettings = event._event.settings || {};
115 newFileSettings.callback = this.createNewFile.bind(this); 120 if (this.application.ninja.coreIoApi.cloudAvailable()) {
116 this.application.ninja.newFileController.showNewFileDialog(newFileSettings); 121 newFileSettings.callback = this.createNewFile.bind(this);
122 this.application.ninja.newFileController.showNewFileDialog(newFileSettings);
123 }
117 } 124 }
118 }, 125 },
119
120
121 //////////////////////////////////////////////////////////////////// 126 ////////////////////////////////////////////////////////////////////
122 //TODO: Check for appropiate structures 127 //TODO: Check for appropiate structures
123 handleExecuteSave: { 128 handleExecuteSave: {
124 value: function(event) { 129 value: function(event) {
125 if(!!this.activeDocument){ 130 if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){
126 //Text and HTML document classes should return the same save object for fileSave 131 //Text and HTML document classes should return the same save object for fileSave
127 this.application.ninja.ioMediator.fileSave(this.activeDocument.save(), this.fileSaveResult.bind(this)); 132 this.application.ninja.ioMediator.fileSave(this.activeDocument.save(), this.fileSaveResult.bind(this));
133 }
128 } 134 }
135 },
136 ////////////////////////////////////////////////////////////////////
137 //TODO: Check for appropiate structures
138 handleExecuteSaveAll: {
139 value: function(event) {
140 if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){
141 //Text and HTML document classes should return the same save object for fileSave
142 this.application.ninja.ioMediator.fileSave(this.activeDocument.saveAll(), this.fileSaveResult.bind(this));
143 }
129 } 144 }
130 }, 145 },
131 //////////////////////////////////////////////////////////////////// 146 ////////////////////////////////////////////////////////////////////
147 handleExecuteSaveAs: {
148 value: function(event) {
149 var saveAsSettings = event._event.settings || {};
150 if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){
151 saveAsSettings.fileName = this.activeDocument.name;
152 saveAsSettings.folderUri = this.activeDocument.uri.substring(0, this.activeDocument.uri.lastIndexOf("/"));
153 //add callback
154 this.application.ninja.newFileController.showSaveAsDialog(saveAsSettings);
155 }
156 }
157 },
158
132 // 159 //
133 fileSaveResult: { 160 fileSaveResult: {
134 value: function (result) { 161 value: function (result) {
@@ -287,7 +314,7 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
287 if(this.activeDocument.uuid === id && this._documents.length > 0) {//closing the active document tab 314 if(this.activeDocument.uuid === id && this._documents.length > 0) {//closing the active document tab
288 var nextDocumentIndex = -1 ; 315 var nextDocumentIndex = -1 ;
289 if((this._documents.length > 0) && (closeDocumentIndex === 0)){ 316 if((this._documents.length > 0) && (closeDocumentIndex === 0)){
290 nextDocumentIndex = 1; 317 nextDocumentIndex = 0;
291 }else if((this._documents.length > 0) && (closeDocumentIndex > 0)){ 318 }else if((this._documents.length > 0) && (closeDocumentIndex > 0)){
292 nextDocumentIndex = closeDocumentIndex - 1; 319 nextDocumentIndex = closeDocumentIndex - 1;
293 } 320 }
diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js
index 885d710f..662816f5 100755
--- a/js/controllers/styles-controller.js
+++ b/js/controllers/styles-controller.js
@@ -317,7 +317,7 @@ var stylesController = exports.StylesController = Montage.create(Component, {
317 isInlineStyle : true, 317 isInlineStyle : true,
318 style : element.style 318 style : element.style
319 }; 319 };
320 320
321 ///// Now splice it into the matched rules 321 ///// Now splice it into the matched rules
322 ///// By inserting the inline style at the beginning, 322 ///// By inserting the inline style at the beginning,
323 ///// we keep the correct order of specificity 323 ///// we keep the correct order of specificity
@@ -572,37 +572,36 @@ var stylesController = exports.StylesController = Montage.create(Component, {
572 win = element.ownerDocument.defaultView, 572 win = element.ownerDocument.defaultView,
573 self = this; 573 self = this;
574 574
575 if(!win) {
576 return null;
577 }
578
579 if(!omitPseudos) { 575 if(!omitPseudos) {
580 pseudos.concat(['link', 'visited', 'active', 'hover', 'focus', 'first-letter', 576 pseudos.concat(['link', 'visited', 'active', 'hover', 'focus', 'first-letter',
581 'first-line', 'first-child', 'before', 'after', 'lang', 'target']); 577 'first-line', 'first-child', 'before', 'after', 'lang', 'target']);
582 } 578 }
583 579
584 pseudos.forEach(function(pseudo) { 580 try {
585 rules = rules.concat(nj.toArray(win.getMatchedCSSRules(element, pseudo)).filter(function(rule) { 581 pseudos.forEach(function(pseudo) {
586 //// useStageStyleSheet flag indicates whether to only return rules from the stylesheet, 582 rules = rules.concat(nj.toArray(win.getMatchedCSSRules(element, pseudo)).filter(function(rule) {
587 //// or only use rules for other stylesheets 583 //// useStageStyleSheet flag indicates whether to only return rules from the stylesheet,
588 584 //// or only use rules for other stylesheets
589 var sheetId = (rule.parentStyleSheet) ? rule.parentStyleSheet.ownerNode.id : null,
590 isStageStyleSheet = sheetId === this.CONST.STAGE_SHEET_ID;
591 585
592 ///// filter out (return false) depending on flag 586 var sheetId = (rule.parentStyleSheet) ? rule.parentStyleSheet.ownerNode.id : null,
593 if(useStageStyleSheet && !isStageStyleSheet) { return false; } 587 isStageStyleSheet = sheetId === this.CONST.STAGE_SHEET_ID;
594 if(!useStageStyleSheet && isStageStyleSheet) { return false; }