From a5ee11857f923d3e49b44c0a8c480e9d0b026d5b Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Wed, 22 Feb 2012 23:18:12 -0800 Subject: CSS Panel Update --- js/controllers/styles-controller.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index 44ca50e1..aa5a4e7f 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -94,11 +94,18 @@ var stylesController = exports.StylesController = Montage.create(Component, { // Returns null if sheet not found (as in non-ninja projects) // Setter will handle null case this.defaultStylesheet = this.getSheetFromElement(this.CONST.DEFAULT_SHEET_ID); - - //debugger; + + this.userStyleSheets = nj.toArray(document._document.styleSheets).filter(function(sheet) { + return sheet !== this._stageStylesheet; + }, this); + + NJevent('styleSheetsReady', this); }, enumerable : false }, + userStyleSheets : { + value : null + }, _stageStylesheet : { value : null }, -- cgit v1.2.3 From 1433f2bdf2e5b8c5c18fed5e9c17fd983ab3606d Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Fri, 2 Mar 2012 10:55:51 -0800 Subject: CSS Panel - Updating components, created toolbar components, and small changes to styles controller --- js/controllers/styles-controller.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index 33084169..d36c8cb9 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -190,6 +190,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { ///// attach specificity to rule object ///// if rule is css keyframes, return rule and don't attach specificity if (rule instanceof WebKitCSSKeyframesRule) { + return rule; } rule[this.CONST.SPECIFICITY_KEY] = this.getSpecificity(rule.selectorText); @@ -1184,6 +1185,8 @@ var stylesController = exports.StylesController = Montage.create(Component, { this.styleSheetModified(sheet); + NJevent('newStyleSheet', sheet); + return sheet; } }, @@ -1243,11 +1246,16 @@ var stylesController = exports.StylesController = Montage.create(Component, { clearDirtyStyleSheets : { value: function(doc) { - if(!doc) { + this.dirtyStyleSheets.length = 0; + + if(doc) { this.dirtyStyleSheets = null; - this.dirtyStyleSheets = []; + this.dirtyStyleSheets = this.dirtyStyleSheets.filter(function(sheet) { + return sheet.document !== doc; + }); } + } }, -- cgit v1.2.3 From 9617e4d3870c9872dc1837a67a6f927fd2680476 Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Tue, 1 May 2012 16:23:43 -0700 Subject: Styles Controller - Fix error when trying dispatch stylesheet change event --- js/controllers/styles-controller.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index f7c98023..3422427c 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -803,7 +803,9 @@ var stylesController = exports.StylesController = Montage.create(Component, { ///// method to apply/test the new value dec.setProperty(property, value, priority); - this.styleSheetModified(rule.parentStyleSheet); + if(rule.parentStyleSheet) { + this.styleSheetModified(rule.parentStyleSheet); + } ///// Return browser value for value we just set return dec.getPropertyValue(property); -- cgit v1.2.3 From a62f57cf6beee332ff60a48f5e26d0084b4a5432 Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Mon, 7 May 2012 10:38:29 -0700 Subject: Style sheets - Add sheet action --- js/controllers/styles-controller.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index 3422427c..dfe7c69a 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -1252,6 +1252,8 @@ var stylesController = exports.StylesController = Montage.create(Component, { doc.head.appendChild(sheetElement); sheet = this.getSheetFromElement(sheetElement, doc); + this.userStyleSheets.push(sheet); + this.styleSheetModified(sheet); NJevent('newStyleSheet', sheet); -- cgit v1.2.3 From 0cbfa32fa4e62be128b6478dcba0aa9db902f78b Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Wed, 9 May 2012 18:23:17 -0700 Subject: Styles Controller - Added fix for setting style on cached, multi-target rule. Added fix for setting style on cached, multi-target rule. Also added parameter to selector override to augment specificity of selector --- js/controllers/styles-controller.js | 45 ++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 10 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index dfe7c69a..02c3dad9 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -217,10 +217,12 @@ var stylesController = exports.StylesController = Montage.create(Component, { } var selectorToOverride = getSelector.bind(this)(element, ruleToOverride), - overrideData, rule; + overrideData, rule, isRuleLocked; + + isRuleLocked = this.isSheetLocked(ruleToOverride.parentStyleSheet); ///// Get the overriding selector and className - overrideData = this.createOverrideSelector(selectorToOverride, element.nodeName); + overrideData = this.createOverrideSelector(selectorToOverride, element.nodeName, isRuleLocked); ///// Create new rule with selector and insert it after the rule we're overriding rule = this.addRule(overrideData.selector + ' { }', this.getRuleIndex(ruleToOverride)+1); @@ -234,7 +236,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { }, createOverrideSelector : { - value: function(selectorToOverride, classPrefix, className) { + value: function(selectorToOverride, classPrefix, increaseSpecificity, className) { var tokens = selectorToOverride.split(/\s/), newClass = className || this.generateClassName(classPrefix, true), lastToken, pseudoSplit, base, pseudo, newToken, newSelector; @@ -255,10 +257,19 @@ var stylesController = exports.StylesController = Montage.create(Component, { if(base.indexOf('#') !== -1) { newToken = base + '.' + newClass + pseudo; } else { - ///// Replace last class or attribute selector - ///// Get everything right before the last class or attribute selector - ///// to support compound selector values: (i.e. .firstClass.secondClass) - newToken = base.substring(0, Math.max(base.lastIndexOf('.'), base.lastIndexOf('['))); + if(increaseSpecificity) { + ///// Increases specificity by one class selector + ///// We'll do a direct append to the base class + ///// if we want to increase the specificity + newToken = base; + } else { + ///// Maintains original specificity + ///// Replace last class or attribute selector + ///// Get everything right before the last class or attribute selector + ///// to support compound selector values: (i.e. .firstClass.secondClass) + newToken = base.substring(0, Math.max(base.lastIndexOf('.'), base.lastIndexOf('['))); + } + ///// Append the generated class newToken += '.' + newClass + pseudo; } @@ -979,12 +990,13 @@ var stylesController = exports.StylesController = Montage.create(Component, { var doc = element.ownerDocument, useImportant = false, cache = this._getCachedRuleForProperty(element, property), - dominantRule, override, className, browserValue; + dominantRule, override, className, browserValue, cacheMatchesMany; if(cache) { ///// We've cached the rule for this property! //console.log('Styles Controller :: setElementStyle - We found the cached rule!'); dominantRule = cache; + cacheMatchesMany = this.matchesMultipleElements(dominantRule, doc); } else { ///// Use Dominant Rule logic to find the right place to add the style ///// Pass "true" to method to return an override object, which @@ -992,7 +1004,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { dominantRule = this.getDominantRuleForElement(element, property, true, isStageElement); } - + ///// Did we find a dominant rule? if(!dominantRule) { ///// No. This means there was no rule with this property, and no @@ -1010,6 +1022,13 @@ var stylesController = exports.StylesController = Montage.create(Component, { useImportant = dominantRule.useImportant; dominantRule = override.rule; this.addClass(element, override.className); + } else if(cacheMatchesMany) { + ///// Only happens when the cached rule applies to multiple + ///// elements - we must create override + override = this.createOverrideRule(dominantRule, element); + useImportant = !!dominantRule.style.getPropertyPriority(property); + dominantRule = override.rule; + this.addClass(element, override.className); } @@ -1017,7 +1036,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { browserValue = this.setStyle(dominantRule, property, value, useImportant); ///// Only cache the dominant rule if the style value was valid, and not already cached - if(browserValue && !cache) { + if(browserValue && (!cache || cacheMatchesMany)) { this._setCachedRuleForProperty(element, property, dominantRule); } @@ -1280,6 +1299,12 @@ var stylesController = exports.StylesController = Montage.create(Component, { } }, + isSheetLocked : { + value: function(sheet) { + return !!sheet.ownerNode.dataset['ninjaFileReadOnly']; + } + }, + ///// Style Sheet Modified ///// Method to call whenever a stylesheet change is made ///// Dispatches an event, and keeps list of dirty style sheets -- cgit v1.2.3 From 5164c2415c8a0750c21299325bb1caa8a97fc5b5 Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Wed, 16 May 2012 14:10:14 -0700 Subject: Styles Controller - Fix issue with clearing dirty stylesheet list --- js/controllers/styles-controller.js | 1 - 1 file changed, 1 deletion(-) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index cbc00676..60b2ca92 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -1345,7 +1345,6 @@ var stylesController = exports.StylesController = Montage.create(Component, { this.dirtyStyleSheets.length = 0; if(doc) { - this.dirtyStyleSheets = null; this.dirtyStyleSheets = this.dirtyStyleSheets.filter(function(sheet) { return sheet.document !== doc; }); -- cgit v1.2.3 From b5439f436cac405c4bbf7e01ead9cee5dbc71a73 Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Wed, 16 May 2012 16:04:00 -0700 Subject: CSS Panel - Style sheets dirty flag added --- js/controllers/styles-controller.js | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index 60b2ca92..22f29bd8 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -1315,6 +1315,9 @@ var stylesController = exports.StylesController = Montage.create(Component, { return sheetObj.stylesheet === sheet; }); + ///// Dispatch modified event + NJevent('styleSheetModified', eventData); + ///// If the sheet doesn't already exist in the list of modified ///// sheets, dispatch dirty event and add the sheet to the list if(sheetSearch.length === 0) { @@ -1348,6 +1351,8 @@ var stylesController = exports.StylesController = Montage.create(Component, { this.dirtyStyleSheets = this.dirtyStyleSheets.filter(function(sheet) { return sheet.document !== doc; }); + } else { + this.dirtyStyleSheets = []; } -- cgit v1.2.3 From 4e43fe2c97833c0847a53484c9589697e64137dc Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Thu, 17 May 2012 16:05:26 -0700 Subject: Styles Controller - Null out active document --- js/controllers/styles-controller.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index 22f29bd8..c8b9376e 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -83,6 +83,11 @@ var stylesController = exports.StylesController = Montage.create(Component, { ///// If the document is null set default stylesheets to null if(!document) { + this._activeDocument = null; + this._stageStylesheet = null; + this.defaultStylesheet = null; + this.userStyleSheets = []; + this.clearDirtyStyleSheets(); return false; } @@ -120,7 +125,10 @@ var stylesController = exports.StylesController = Montage.create(Component, { if(sheet) { this._defaultStylesheet = sheet; } else { - + if(sheet === null) { + this._defaultStylesheet = null; + return false; + } ///// Use the last stylesheet in the document as the default var sheets = this._activeDocument._document.styleSheets, -- cgit v1.2.3 From eff40602cac6821f8272177c24b6bf3de399f8b1 Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Thu, 17 May 2012 21:11:33 -0700 Subject: multiple documents - enable opening multiple documents and initial switching Signed-off-by: Valerio Virgillito --- js/controllers/document-controller.js | 71 +++++++++++++++++------------------ 1 file changed, 35 insertions(+), 36 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index cf46e73e..50874725 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -454,58 +454,57 @@ var DocumentController = exports.DocumentController = Montage.create(Component, // Open document callback _onOpenDocument: { value: function(doc){ - + var currentDocument; if(this.activeDocument) { // There is a document currently opened - - + currentDocument = this.activeDocument; //this.application.ninja.stage.stageView.showCodeViewBar(false); //this.application.ninja.stage.stageView.restoreAllPanels(); - // - /* - if(this.activeDocument.currentView === "design"){ - this.activeDocument.saveAppState(); - this.activeDocument.container.parentNode.style["display"] = "none"; - this.application.ninja.stage.hideCanvas(true); - this.application.ninja.stage.stageView.hideRulers(); - } + //this.activeDocument.saveAppState(); - this.activeDocument.container.style["display"] = "none"; - */ - - /* - this.activeDocument.container.style["display"] = "block"; - if(this.activeDocument.currentView === "design"){ - this.activeDocument.container.parentNode.style["display"] = "block"; - this.activeDocument.restoreAppState(); - }else{ - //hide the iframe when switching to code view - document.getElementById("iframeContainer").style.display = "none"; - } - - */ - // hide current document + // TODO: Do we need this? + //this.application.ninja.stage.hideCanvas(true); + //this.application.ninja.stage.stageView.hideRulers(); + + //this.activeDocument.restoreAppState(); } else { // There is no document opened - // Set the active document - this.activeDocument = doc; + // Show the rulers + // TODO: Move this indo design view + this.application.ninja.stage.stageView.showRulers(); // Show the canvas this.application.ninja.stage.hideCanvas(false); + } - // Show the rulers - // TODO: Move this indo design view - this.application.ninja.stage.stageView.showRulers(); - // Initialize the documentRoot styles - this.initializeRootStyles(doc.documentRoot); - // Flag to stop stylesheet dirty event - this._hackInitialStyles = false; + // Set the active document + this.activeDocument = doc; + + // Initialize the documentRoot styles + this.initializeRootStyles(doc.documentRoot); + // Flag to stop stylesheet dirty event + this._hackInitialStyles = false; + + this.switchDocuments(currentDocument, doc); + + NJevent("onOpenDocument", doc); + + //Setting opacity to be viewable after load + //doc.model.views.design.iframe.style.opacity = 1; + + } + }, + + switchDocuments: { + value: function(current, newDocument) { + newDocument.model.views.design.iframe.style.opacity = 1; - NJevent("onOpenDocument", doc); + if(current) { + current.model.views.design.hide(); } } }, -- cgit v1.2.3 From 7a94696e19b14e15261df516e2ba75e693b1313d Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Fri, 18 May 2012 00:21:56 -0700 Subject: enabling basic document switching Signed-off-by: Valerio Virgillito --- js/controllers/document-controller.js | 37 +++++++++++++++------------------- js/controllers/selection-controller.js | 4 ++-- 2 files changed, 18 insertions(+), 23 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index 50874725..fc1f2c0f 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -459,16 +459,7 @@ var DocumentController = exports.DocumentController = Montage.create(Component, // There is a document currently opened currentDocument = this.activeDocument; - //this.application.ninja.stage.stageView.showCodeViewBar(false); //this.application.ninja.stage.stageView.restoreAllPanels(); - - //this.activeDocument.saveAppState(); - - // TODO: Do we need this? - //this.application.ninja.stage.hideCanvas(true); - //this.application.ninja.stage.stageView.hideRulers(); - - //this.activeDocument.restoreAppState(); } else { // There is no document opened @@ -480,7 +471,6 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this.application.ninja.stage.hideCanvas(false); } - // Set the active document this.activeDocument = doc; @@ -489,22 +479,27 @@ var DocumentController = exports.DocumentController = Montage.create(Component, // Flag to stop stylesheet dirty event this._hackInitialStyles = false; - this.switchDocuments(currentDocument, doc); - - NJevent("onOpenDocument", doc); - - //Setting opacity to be viewable after load - //doc.model.views.design.iframe.style.opacity = 1; - + this.switchDocuments(currentDocument, doc, true); } }, switchDocuments: { - value: function(current, newDocument) { - newDocument.model.views.design.iframe.style.opacity = 1; + value: function(currentDocument, newDocument, didCreate) { + + if(currentDocument) { + currentDocument.serializeDocument(); - if(current) { - current.model.views.design.hide(); + currentDocument.model.views.design.hide(); + } + + if(didCreate) { + newDocument.model.views.design.iframe.style.opacity = 1; + NJevent("onOpenDocument", newDocument); + } else { + this.activeDocument = newDocument; + newDocument.model.views.design.show(); + newDocument.deserializeDocument(); + NJevent("switchDocument"); } } }, diff --git a/js/controllers/selection-controller.js b/js/controllers/selection-controller.js index 6e40abb5..1092615a 100755 --- a/js/controllers/selection-controller.js +++ b/js/controllers/selection-controller.js @@ -81,10 +81,10 @@ exports.SelectionController = Montage.create(Component, { handleSwitchDocument: { value: function() { - if(this.application.ninja.documentController.activeDocument.currentView === "design"){ +// if(this.application.ninja.documentController.activeDocument.currentView === "design"){ this._isDocument = this.application.ninja.selectedElements.length === 0; NJevent("selectionChange", {"elements": this.application.ninja.selectedElements, "isDocument": this._isDocument} ); - } +// } } }, -- cgit v1.2.3 From e9dddef38507cafcf5702ce6a512b4005609acef Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Fri, 18 May 2012 01:14:41 -0700 Subject: Fixing the save as paths Signed-off-by: Valerio Virgillito --- js/controllers/document-controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index fc1f2c0f..ea4022b8 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -177,8 +177,8 @@ var DocumentController = exports.DocumentController = Montage.create(Component, value: function(event) { var saveAsSettings = event._event.settings || {}; if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){ - saveAsSettings.fileName = this.activeDocument.name; - saveAsSettings.folderUri = this.activeDocument.uri.substring(0, this.activeDocument.uri.lastIndexOf("/")); + saveAsSettings.fileName = this.activeDocument.model.file.name; + saveAsSettings.folderUri = this.activeDocument.model.file.uri.substring(0, this.activeDocument.model.file.uri.lastIndexOf("/")); saveAsSettings.callback = this.saveAsCallback.bind(this); this.application.ninja.newFileController.showSaveAsDialog(saveAsSettings); } -- cgit v1.2.3 From 24d1873302b2fffc25d254e15e8aa36f59eedb88 Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Fri, 18 May 2012 01:36:05 -0700 Subject: fixed a switch documents bug where the layout was getting called before setting the container. Signed-off-by: Valerio Virgillito --- js/controllers/document-controller.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index ea4022b8..f1523d87 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -492,6 +492,8 @@ var DocumentController = exports.DocumentController = Montage.create(Component, currentDocument.model.views.design.hide(); } + this.application.ninja.stage.clearAllCanvas(); + if(didCreate) { newDocument.model.views.design.iframe.style.opacity = 1; NJevent("onOpenDocument", newDocument); @@ -499,7 +501,7 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this.activeDocument = newDocument; newDocument.model.views.design.show(); newDocument.deserializeDocument(); - NJevent("switchDocument"); + NJevent("onSwitchDocument"); } } }, -- cgit v1.2.3 From 197a7646e472fcea616764685c8d03c6063e66f5 Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Fri, 18 May 2012 14:05:06 -0700 Subject: CSS Panel - Add support for deleting style sheets --- js/controllers/styles-controller.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index f6977a00..c5076771 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -821,7 +821,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { ///// method to apply/test the new value dec.setProperty(property, value, priority); - if(rule.parentStyleSheet) { + if(rule.type !== 'inline' && rule.parentStyleSheet) { this.styleSheetModified(rule.parentStyleSheet); } @@ -1289,6 +1289,27 @@ var stylesController = exports.StylesController = Montage.create(Component, { return sheet; } }, + + ///// Remove Style sheet + ///// Removes style sheet from document + + removeStyleSheet : { + value: function(sheet) { + var sheetEl = sheet.ownerNode; + + if(sheetEl) { + sheetEl.disabled = true; + this.userStyleSheets.splice(this.userStyleSheets.indexOf(sheet), 1); + + ///// Mark for removal for i/o + sheetEl.setAttribute('data-ninja-remove', 'true'); + + NJevent('removeStyleSheet', sheet); + } + + + } + }, ///// Gets the stylesheet object associated with passed-in ///// element or element id, with option context (document) -- cgit v1.2.3 From 4553f48aa17024922569faea1f62e9251a0c0185 Mon Sep 17 00:00:00 2001 From: Eric Guzman Date: Fri, 18 May 2012 14:35:09 -0700 Subject: Style sheets - Add support for removing default style sheet --- js/controllers/styles-controller.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index c5076771..00d67b89 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -173,13 +173,17 @@ var stylesController = exports.StylesController = Montage.create(Component, { addRule : { value : function(selector, declaration, stylesheet, index) { - //console.log("Add rule"); + stylesheet = stylesheet || this._defaultStylesheet; + + if(stylesheet === null) { + stylesheet = this.defaultStylesheet = this.createStylesheet(); + } + var rulesLength = this._defaultStylesheet.rules.length, argType = (typeof declaration), ruleText = selector, - stylesheet = stylesheet || this._defaultStylesheet, - property, rule; - + rule; + index = index || (argType === 'number') ? declaration : rulesLength; if(argType === 'string') { @@ -1295,12 +1299,18 @@ var stylesController = exports.StylesController = Montage.create(Component, { removeStyleSheet : { value: function(sheet) { - var sheetEl = sheet.ownerNode; + var sheetEl = sheet.ownerNode, sheetCount; if(sheetEl) { sheetEl.disabled = true; this.userStyleSheets.splice(this.userStyleSheets.indexOf(sheet), 1); + ///// Check to see if we're removing the default style sheet + if(sheet === this._defaultStylesheet) { + sheetCount = this.userStyleSheets.length; + this.defaultStylesheet = (sheetCount) ? this.userStyleSheets[sheetCount-1] : null; + } + ///// Mark for removal for i/o sheetEl.setAttribute('data-ninja-remove', 'true'); -- cgit v1.2.3 From d878aa470074d5698a316512b513949fa22073f2 Mon Sep 17 00:00:00 2001 From: Jose Antonio Marquez Date: Fri, 18 May 2012 15:23:15 -0700 Subject: Fixing save logic Moved dirty marker clearing code to model. --- js/controllers/document-controller.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index f1523d87..cf618360 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -145,18 +145,19 @@ var DocumentController = exports.DocumentController = Montage.create(Component, value: function(event) { // if((typeof this.activeDocument !== "undefined") && this.application.ninja.coreIoApi.cloudAvailable()){ - // - this.activeDocument.model.save(this.testCallback.bind(this)); //this.fileSaveResult.bind(this) + //Currently we don't need a callback handler + //this.activeDocument.model.save(this.saveExecuted.bind(this)); + this.activeDocument.model.save(); } else { - //Error: + //Error: cloud not available and/or no active document } } }, - testCallback: { + //////////////////////////////////////////////////////////////////// + // + saveExecuted: { value: function (value) { - console.log(value); - //TODO: Move this to the model.save() - this.activeDocument.model.needsSave = false; + //File saved, any callbacks or events should go here } }, //////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From fdfba499f0b84360b96096fa866a981e96e8756c Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Fri, 18 May 2012 16:35:56 -0700 Subject: fixing the color chip for the document root Signed-off-by: Valerio Virgillito --- js/controllers/document-controller.js | 2 ++ js/controllers/elements/body-controller.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index f1523d87..7721d32d 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -489,6 +489,8 @@ var DocumentController = exports.DocumentController = Montage.create(Component, if(currentDocument) { currentDocument.serializeDocument(); + this.application.ninja.selectionController._selectionContainer = null; + currentDocument.model.views.design.propertiesPanel.clear(); currentDocument.model.views.design.hide(); } diff --git a/js/controllers/elements/body-controller.js b/js/controllers/elements/body-controller.js index 5c23dcf7..7a3a66f5 100755 --- a/js/controllers/elements/body-controller.js +++ b/js/controllers/elements/body-controller.js @@ -30,7 +30,7 @@ exports.BodyController = Montage.create(ElementController, { value: function(el, p) { switch(p) { case "background" : - return this.application.ninja.colorController.getColorObjFromCss(this.application.ninja.stylesController.getElementStyle(el, "background-color", true, true)); + return this.application.ninja.colorController.getColorObjFromCss(this.application.ninja.stylesController.getElementStyle(el, "background-color", false, true)); case "border": return 0; case "height": -- cgit v1.2.3 From 7a22f7b368ef549a5b30c58a0f3900685b764bdb Mon Sep 17 00:00:00 2001 From: Ananya Sen Date: Fri, 18 May 2012 16:56:16 -0700 Subject: integrated open code view document in new dom architecture Signed-off-by: Ananya Sen --- js/controllers/code-editor-controller.js | 40 ++++++++++---------- js/controllers/document-controller.js | 65 ++++++++++++-------------------- js/controllers/styles-controller.js | 2 +- 3 files changed, 44 insertions(+), 63 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/code-editor-controller.js b/js/controllers/code-editor-controller.js index 7913cfc1..e7163bd8 100644 --- a/js/controllers/code-editor-controller.js +++ b/js/controllers/code-editor-controller.js @@ -68,7 +68,7 @@ var CodeEditorController = exports.CodeEditorController = Montage.create(Compone * Creates an editor instance */ createEditor : { - value:function(doc, type, documentType){ + value:function(codeDocumentView, type, documentType, textDocument){ var self = this, editorOptions = null; editorOptions = { @@ -76,17 +76,17 @@ var CodeEditorController = exports.CodeEditorController = Montage.create(Compone matchBrackets:true, mode: type, onChange: function(){ - var historySize = doc.editor.historySize(); + var historySize = codeDocumentView.editor.historySize(); if(historySize.undo>0){ - doc.needsSave = true; + textDocument.model.needsSave = true; }else if(historySize.undo===0 && historySize.redo>0){ - doc.needsSave = false; + textDocument.model.needsSave = false; } }, onCursorActivity: function() { - doc.editor.matchHighlight("CodeMirror-matchhighlight"); - doc.editor.setLineClass(doc.editor.hline, null, null); - doc.editor.hline = doc.editor.setLineClass(doc.editor.getCursor().line, null, "activeline"); + codeDocumentView.editor.matchHighlight("CodeMirror-matchhighlight"); + codeDocumentView.editor.setLineClass(codeDocumentView.editor.hline, null, null); + codeDocumentView.editor.hline = codeDocumentView.editor.setLineClass(codeDocumentView.editor.getCursor().line, null, "activeline"); } }; @@ -95,9 +95,7 @@ var CodeEditorController = exports.CodeEditorController = Montage.create(Compone editorOptions.onKeyEvent = function(cm, keyEvent){self._codeCompletionKeyEventHandler.call(self, cm, keyEvent, documentType)}; } - var editor = self.codeEditor.fromTextArea(doc.textArea, editorOptions); - - //editor.setOption("theme", "night"); + var editor = self.codeEditor.fromTextArea(codeDocumentView.textArea, editorOptions); return editor; } @@ -215,22 +213,22 @@ var CodeEditorController = exports.CodeEditorController = Montage.create(Compone autoFormatSelection:{ value: function(){ - var range = this.getSelectedRange(this.application.ninja.documentController.activeDocument.editor); - this.application.ninja.documentController.activeDocument.editor.autoFormatRange(range.from, range.to); + var range = this.getSelectedRange(this.application.ninja.documentController.activeDocument.model.views.code.editor); + this.application.ninja.documentController.activeDocument.model.views.code.editor.autoFormatRange(range.from, range.to); } }, commentSelection:{ value: function(isComment){ - var range = this.getSelectedRange(this.application.ninja.documentController.activeDocument.editor); - this.application.ninja.documentController.activeDocument.editor.commentRange(isComment, range.from, range.to); + var range = this.getSelectedRange(this.application.ninja.documentController.activeDocument.model.views.code.editor); + this.application.ninja.documentController.activeDocument.model.views.code.editor.commentRange(isComment, range.from, range.to); } }, handleThemeSelection:{ value: function(){ - this.application.ninja.documentController.activeDocument.editor.setOption("theme", this.editorTheme); - this.application.ninja.stage.stageView.applyTheme("cm-s-"+this.editorTheme); + this.application.ninja.documentController.activeDocument.model.views.code.editor.setOption("theme", this.editorTheme); + this.application.ninja.documentController.activeDocument.model.views.code.applyTheme("cm-s-"+this.editorTheme); } }, @@ -238,10 +236,10 @@ var CodeEditorController = exports.CodeEditorController = Montage.create(Compone value:function(value){ var originalFont=13,originalLineHeight=16; this._zoomFactor = value; - this.application.ninja.documentController.activeDocument.container.style.fontSize = ""+((value/100)*originalFont)+"px"; - this.application.ninja.documentController.activeDocument.container.style.cursor = "text"; - this.application.ninja.documentController.activeDocument.container.querySelector(".CodeMirror").style.lineHeight = ""+((value/100)*originalLineHeight)+"px"; - this.application.ninja.documentController.activeDocument.editor.refresh();//refresh editor display for xoom + this.application.ninja.documentController.activeDocument.model.views.code.textViewContainer.style.fontSize = ""+((value/100)*originalFont)+"px"; + this.application.ninja.documentController.activeDocument.model.views.code.textViewContainer.style.cursor = "text"; + this.application.ninja.documentController.activeDocument.model.views.code.textViewContainer.querySelector(".CodeMirror").style.lineHeight = ""+((value/100)*originalLineHeight)+"px"; + this.application.ninja.documentController.activeDocument.model.views.code.editor.refresh();//refresh editor display for xoom } }, @@ -250,7 +248,7 @@ var CodeEditorController = exports.CodeEditorController = Montage.create(Compone //set theme this.handleThemeSelection(); //check autocomplete support - this.handleCodeCompletionSupport(this.application.ninja.documentController.activeDocument.documentType); + this.handleCodeCompletionSupport(this.application.ninja.documentController.activeDocument.model.file.extension); //set zoom this.handleZoom(this._zoomFactor); } diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index cf46e73e..a795d652 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -13,7 +13,8 @@ var Montage = require("montage/core/core").Montage, TextDocument = require("js/document/text-document").TextDocument; // New Document Objects -var Document = require("js/document/document-html").HtmlDocument; +var Document_HTML = require("js/document/document-html").HtmlDocument; +var Document_Text = require("js/document/document-text").TextDocument; //////////////////////////////////////////////////////////////////////// // var DocumentController = exports.DocumentController = Montage.create(Component, { @@ -320,32 +321,30 @@ var DocumentController = exports.DocumentController = Montage.create(Component, //////////////////////////////////////////////////////////////////// openDocument: { - value: function(doc) { + value: function(file) { var template, dimensions; - if (doc.content.body.indexOf('Ninja-Banner Dimensions@@@') !== -1) { - dimensions = (doc.content.body.split('Ninja-Banner Dimensions@@@'))[1].split('-->')[0].split('x'); - dimensions = {width: parseInt(dimensions[0]), height: parseInt(dimensions[1])}; - template = {type: 'banner', size: dimensions}; - } + // TODO: HACKS to remove - this.documentHackReference = doc; + this.documentHackReference = file; document.getElementById("iframeContainer").style.overflow = "hidden"; // - switch (doc.extension) { + switch (file.extension) { case 'html': + + if (file.content.body.indexOf('Ninja-Banner Dimensions@@@') !== -1) { + dimensions = (file.content.body.split('Ninja-Banner Dimensions@@@'))[1].split('-->')[0].split('x'); + dimensions = {width: parseInt(dimensions[0]), height: parseInt(dimensions[1])}; + template = {type: 'banner', size: dimensions}; + } + //Open in designer view this._hackRootFlag = false; - Montage.create(Document).init(doc, this, this._onOpenDocument, 'design', template); + Montage.create(Document_HTML).init(file, this, this._onOpenDocument, 'design', template); break; default: - //Open in code view - var code = Montage.create(TextDocument, {"source": {value: doc.content}}), docuuid = Uuid.generate(), textArea; - textArea = this.application.ninja.stage.stageView.createTextAreaElement(docuuid); - code.initialize(doc, docuuid, textArea, textArea.parentNode); - //code.init(doc.name, doc.uri, doc.extension, null, docuuid); - code.textArea.value = doc.content; - this.application.ninja.stage.stageView.createTextView(code); - break; + //Open in code view + Montage.create(Document_Text).init(file, this, this._onOpenTextDocument, 'code'); + break; } } }, @@ -514,9 +513,10 @@ var DocumentController = exports.DocumentController = Montage.create(Component, _onOpenTextDocument: { value: function(doc) { if(this.activeDocument) { + if(this.activeDocument.currentView === "design"){ this.activeDocument.saveAppState(); - this.activeDocument.container.parentNode.style["display"] = "none"; + this.activeDocument.parentContainer.style["display"] = "none"; this.application.ninja.stage.hideCanvas(true); this.application.ninja.stage.stageView.hideRulers(); } @@ -526,28 +526,11 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this.application.ninja.stage._scrollFlag = false; // TODO HACK to prevent type error on Hide/Show Iframe this.activeDocument = doc; - - var type; - - switch(doc.documentType) { - case "css" : - type = "css"; - break; - case "js" : - type = "javascript"; - break; - } - - DocumentController._codeEditor.editor = CodeMirror.fromTextArea(doc.textArea, { - lineNumbers: true, - mode: type, - onCursorActivity: function() { - DocumentController._codeEditor.editor.setLineClass(DocumentController._codeEditor.hline, null); - DocumentController._codeEditor.hline = DocumentController._codeEditor.editor.setLineClass(DocumentController._codeEditor.editor.getCursor().line, "activeline"); - } - }); - DocumentController._codeEditor.hline = DocumentController._codeEditor.editor.setLineClass(0, "activeline"); - + //hide the iframe when switching to code view + document.getElementById("iframeContainer").style.display = "none"; + doc.model.views.code.showCodeViewBar(true); + this.application.ninja.codeEditorController.applySettings(); + doc.model.views.code.collapseAllPanels(); } }, diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index ae504f0e..3a942364 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js @@ -111,7 +111,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { set : function(sheet) { if(sheet) { this._defaultStylesheet = sheet; - } else { + } else if(this._activeDocument.model && this._activeDocument.model.views && this._activeDocument.model.views.design){//check that the document has a design view ///// Use the last stylesheet in the document as the default -- cgit v1.2.3 From 6f5ffa17c72dd0aef7a02e3496154514750143c2 Mon Sep 17 00:00:00 2001 From: Ananya Sen Date: Fri, 18 May 2012 18:38:09 -0700 Subject: save for code view documents in the new dom architecture Signed-off-by: Ananya Sen --- js/controllers/document-controller.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index 86b1d057..814a30e1 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -356,7 +356,8 @@ var DocumentController = exports.DocumentController = Montage.create(Component, console.log("URI is: ", uri); } }, - + + //todo: remove this funciton as it is not used textDocumentOpened: { value: function(doc) { @@ -413,6 +414,11 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this.application.ninja.stage.hideCanvas(true); + if(this._documents.length === 0){ + document.getElementById("iframeContainer").style.display="block"; + document.getElementById("codeViewContainer").style.display="block"; + } + NJevent("closeDocument", doc.model.file.uri); //TODO: Delete object here -- cgit v1.2.3 From 2cc8e58f6bb9f64a7473e62aecd013fa55167231 Mon Sep 17 00:00:00 2001 From: Ananya Sen Date: Mon, 21 May 2012 16:42:26 -0700 Subject: - added opening multiple code and design view documents - switching between multiple code and design view documents - Note: closing of documents, when multiple documents are open, is not yet implemented Signed-off-by: Ananya Sen --- js/controllers/document-controller.js | 105 +++++++++++++++++++++------------- 1 file changed, 64 insertions(+), 41 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index 814a30e1..26c3ebaa 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -52,10 +52,6 @@ var DocumentController = exports.DocumentController = Montage.create(Component, if(!!this._activeDocument){ if(this._documents.indexOf(doc) === -1) this._documents.push(doc); this._activeDocument.isActive = true; - - if(!!this._activeDocument.editor){ - this._activeDocument.editor.focus(); - } } } }, @@ -312,10 +308,9 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this.activeDocument.uri = fileUri; //save a new file //use the ioMediator.fileSaveAll when implemented - this.activeDocument._userDocument.name=filename; - this.activeDocument._userDocument.root=destination; - this.activeDocument._userDocument.uri=fileUri; - this.application.ninja.ioMediator.fileSave(this.activeDocument.save(), this.fileSaveResult.bind(this)); + this.activeDocument.model.file.name=filename; + this.activeDocument.model.file.uri=fileUri; + this.activeDocument.model.save(); // } }, @@ -408,7 +403,7 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this._activeDocument = null; - this.application.ninja.stage.stageView.hideRulers(); + this.application.ninja.stage.hideRulers(); // document.getElementById("iframeContainer").style.display="block"; @@ -471,7 +466,7 @@ var DocumentController = exports.DocumentController = Montage.create(Component, // Show the rulers // TODO: Move this indo design view - this.application.ninja.stage.stageView.showRulers(); + this.application.ninja.stage.showRulers(); // Show the canvas this.application.ninja.stage.hideCanvas(false); @@ -489,53 +484,81 @@ var DocumentController = exports.DocumentController = Montage.create(Component, } }, + + _onOpenTextDocument: { + value: function(doc) { + var currentDocument=null; + if(this.activeDocument) { + // There is a document currently opened + currentDocument = this.activeDocument; + } + + this.application.ninja.stage._scrollFlag = false; // TODO HACK to prevent type error on Hide/Show Iframe + this.activeDocument = doc; + document.getElementById("iframeContainer").style.display = "none"; + this.application.ninja.codeEditorController.applySettings(); + this.switchDocuments(currentDocument, doc, true); + } + }, + switchDocuments: { value: function(currentDocument, newDocument, didCreate) { - if(currentDocument) { + if(currentDocument && currentDocument.currentView === "design") { currentDocument.serializeDocument(); - this.application.ninja.selectionController._selectionContainer = null; currentDocument.model.views.design.propertiesPanel.clear(); - currentDocument.model.views.design.hide(); } - this.application.ninja.stage.clearAllCanvas(); + if(currentDocument) { + currentDocument.model.currentView.hide(); + currentDocument.model.isActive = false; + } + if(currentDocument && newDocument && (currentDocument.model.parentContainer !== newDocument.model.parentContainer)){ + currentDocument.model.parentContainer.style["display"] = "none"; + } - if(didCreate) { - newDocument.model.views.design.iframe.style.opacity = 1; - NJevent("onOpenDocument", newDocument); - } else { - this.activeDocument = newDocument; - newDocument.model.views.design.show(); - newDocument.deserializeDocument(); - NJevent("onSwitchDocument"); + if(newDocument && newDocument.currentView === "code"){ + this.application.ninja.stage.showCodeViewBar(true); + this.application.ninja.stage.collapseAllPanels(); + this.application.ninja.stage.hideCanvas(true); + this.application.ninja.stage.hideRulers(); + + newDocument.model.views.code.editor.focus(); + + }else if(currentDocument && newDocument && newDocument.currentView === "design"){ + this.application.ninja.stage.showCodeViewBar(false); + this.application.ninja.stage.restoreAllPanels(); + this.application.ninja.stage.hideCanvas(false); + this.application.ninja.stage.showRulers(); } - } - }, + this.application.ninja.stage.clearAllCanvas(); - _onOpenTextDocument: { - value: function(doc) { - if(this.activeDocument) { + if(didCreate) { + newDocument.model.currentView.show(); + newDocument.model.parentContainer.style["display"] = "block"; + if(newDocument.currentView === "design") { + newDocument.model.views.design.iframe.style.opacity = 1; + NJevent("onOpenDocument", newDocument); + } + } + else { + this.activeDocument = newDocument; - if(this.activeDocument.currentView === "design"){ - this.activeDocument.saveAppState(); - this.activeDocument.parentContainer.style["display"] = "none"; - this.application.ninja.stage.hideCanvas(true); - this.application.ninja.stage.stageView.hideRulers(); + newDocument.model.currentView.show(); + if(currentDocument && newDocument && (currentDocument.model.parentContainer !== newDocument.model.parentContainer)){ + newDocument.model.parentContainer.style["display"] = "block"; } - this.activeDocument.container.style["display"] = "none"; + if(newDocument.currentView === "design") { + newDocument.deserializeDocument(); + NJevent("onSwitchDocument"); + }else{ + newDocument.model.isActive = true; + this.application.ninja.codeEditorController.applySettings();//should be called after activeDocument is updated + } } - - this.application.ninja.stage._scrollFlag = false; // TODO HACK to prevent type error on Hide/Show Iframe - this.activeDocument = doc; - //hide the iframe when switching to code view - document.getElementById("iframeContainer").style.display = "none"; - doc.model.views.code.showCodeViewBar(true); - this.application.ninja.codeEditorController.applySettings(); - doc.model.views.code.collapseAllPanels(); } }, -- cgit v1.2.3 From 58df45d43614b5364aa84832c7c0aa06a9d086fc Mon Sep 17 00:00:00 2001 From: Ananya Sen Date: Mon, 21 May 2012 16:46:45 -0700 Subject: - fixed save as Signed-off-by: Ananya Sen --- js/controllers/document-controller.js | 1 - 1 file changed, 1 deletion(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index 26c3ebaa..b4aff2f0 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -311,7 +311,6 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this.activeDocument.model.file.name=filename; this.activeDocument.model.file.uri=fileUri; this.activeDocument.model.save(); - // } }, -- cgit v1.2.3 From 9b6da637d9654727426c6d78f17e3804bbd84ce5 Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Tue, 22 May 2012 14:42:43 -0700 Subject: fixing a few document switching issues. Signed-off-by: Valerio Virgillito --- js/controllers/document-controller.js | 90 ++++++++++++++++------------------- 1 file changed, 42 insertions(+), 48 deletions(-) (limited to 'js/controllers') diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index b4aff2f0..d99fadbb 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js @@ -9,12 +9,8 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot var Montage = require("montage/core/core").Montage, Component = require("montage/ui/component").Component, Uuid = require("montage/core/uuid").Uuid, - HTMLDocument = require("js/document/html-document").HTMLDocument, - TextDocument = require("js/document/text-document").TextDocument; - - // New Document Objects -var Document_HTML = require("js/document/document-html").HtmlDocument; -var Document_Text = require("js/document/document-text").TextDocument; + HTMLDocument = require("js/document/document-html").HtmlDocument, + TextDocument = require("js/document/document-text").TextDocument; //////////////////////////////////////////////////////////////////////// // var DocumentController = exports.DocumentController = Montage.create(Component, { @@ -308,8 +304,8 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this.activeDocument.uri = fileUri; //save a new file //use the ioMediator.fileSaveAll when implemented - this.activeDocument.model.file.name=filename; - this.activeDocument.model.file.uri=fileUri; + this.activeDocument.model.file.name = filename; + this.activeDocument.model.file.uri = fileUri; this.activeDocument.model.save(); } }, @@ -334,11 +330,11 @@ var DocumentController = exports.DocumentController = Montage.create(Component, //Open in designer view this._hackRootFlag = false; - Montage.create(Document_HTML).init(file, this, this._onOpenDocument, 'design', template); + Montage.create(HTMLDocument).init(file, this, this._onOpenDocument, 'design', template); break; default: //Open in code view - Montage.create(Document_Text).init(file, this, this._onOpenTextDocument, 'code'); + Montage.create(TextDocument).init(file, this, this._onOpenTextDocument, 'code'); break; } } @@ -404,17 +400,16 @@ var DocumentController = exports.DocumentController = Montage.create(Component, this.application.ninja.stage.hideRulers(); -// document.getElementById("iframeContainer").style.display="block"; - this.application.ninja.stage.hideCanvas(true); + //TODO: Use references for those instead of calling getElementById if(this._documents.length === 0){ document.getElementById("iframeContainer").style.display="block"; document.getElementById("codeViewContainer").style.display="block"; } - NJevent("closeDocument", doc.model.file.uri); + //TODO: Delete object here } }, @@ -458,8 +453,6 @@ var DocumentController = exports.DocumentController = Montage.create(Component, if(this.activeDocument) { // There is a document currently opened currentDocument = this.activeDocument; - - //this.application.ninja.stage.stageView.restoreAllPanels(); } else { // There is no document opened @@ -486,16 +479,17 @@ var DocumentController = exports.DocumentController = Montage.create(Component, _onOpenTextDocument: { value: function(doc) { - var currentDocument=null; + var currentDocument = null; if(this.activeDocument) { // There is a document currently opened currentDocument = this.activeDocument; } - this.application.ninja.stage._scrollFlag = false; // TODO HACK to prevent type error on Hide/Show Iframe - this.activeDocument = doc; + this.application.ninja.currentDocument = this.activeDocument = doc; + document.getElementById("iframeContainer").style.display = "none"; this.application.ninja.codeEditorController.applySettings(); + this.switchDocuments(currentDocument, doc, true); } }, @@ -503,57 +497,57 @@ var DocumentController = exports.DocumentController = Montage.create(Component, switchDocuments: { value: function(currentDocument, newDocument, didCreate) { - if(currentDocument && currentDocument.currentView === "design") { - currentDocument.serializeDocument(); - this.application.ninja.selectionController._selectionContainer = null; - currentDocument.model.views.design.propertiesPanel.clear(); - } - if(currentDocument) { - currentDocument.model.currentView.hide(); + if(currentDocument.currentView === "design") { + currentDocument.serializeDocument(); + this.application.ninja.selectionController._selectionContainer = null; + currentDocument.model.views.design.propertiesPanel.clear(); + } + currentDocument.model.isActive = false; - } - if(currentDocument && newDocument && (currentDocument.model.parentContainer !== newDocument.model.parentContainer)){ - currentDocument.model.parentContainer.style["display"] = "none"; - } - if(newDocument && newDocument.currentView === "code"){ - this.application.ninja.stage.showCodeViewBar(true); - this.application.ninja.stage.collapseAllPanels(); - this.application.ninja.stage.hideCanvas(true); - this.application.ninja.stage.hideRulers(); + currentDocument.model.currentView.hide(); - newDocument.model.views.code.editor.focus(); + if(currentDocument.model.parentContainer !== newDocument.model.parentContainer) { + currentDocument.model.parentContainer.style["display"] = "none"; + newDocument.model.parentContainer.style["display"] = "block"; + } - }else if(currentDocument && newDocument && newDocument.currentView === "design"){ - this.application.ninja.stage.showCodeViewBar(false); - this.application.ninja.stage.restoreAllPanels(); - this.application.ninja.stage.hideCanvas(false); - this.application.ninja.stage.showRulers(); + if(currentDocument.currentView === "code" && newDocument.currentView === "design") { + this.application.ninja.stage.showCodeViewBar(false); + this.application.ninja.stage.restoreAllPanels(); + this.application.ninja.stage.hideCanvas(false); +