// wrapped by build app define("dojox/mobile/app/StageController", ["dijit","dojo","dojox","dojo/require!dojox/mobile/app/SceneController"], function(dijit,dojo,dojox){ dojo.provide("dojox.mobile.app.StageController"); dojo.experimental("dojox.mobile.app.StageController"); dojo.require("dojox.mobile.app.SceneController"); dojo.declare("dojox.mobile.app.StageController", null,{ // scenes: Array // The list of scenes currently in existence in the app. scenes: null, effect: "fade", constructor: function(node){ this.domNode = node; this.scenes = []; if(dojo.config.mobileAnim){ this.effect = dojo.config.mobileAnim; } }, getActiveSceneController: function(){ return this.scenes[this.scenes.length - 1]; }, pushScene: function(sceneName, params){ if(this._opInProgress){ return; } this._opInProgress = true; // Push new scenes as the first element on the page. var node = dojo.create("div", { "class": "scene-wrapper", style: { visibility: "hidden" } }, this.domNode); var controller = new dojox.mobile.app.SceneController({}, node); if(this.scenes.length > 0){ this.scenes[this.scenes.length -1].assistant.deactivate(); } this.scenes.push(controller); var _this = this; dojo.forEach(this.scenes, this.setZIndex); controller.stageController = this; controller.init(sceneName, params).addCallback(function(){ if(_this.scenes.length == 1){ controller.domNode.style.visibility = "visible"; _this.scenes[_this.scenes.length - 1].assistant.activate(params); _this._opInProgress = false; }else{ _this.scenes[_this.scenes.length - 2] .performTransition( _this.scenes[_this.scenes.length - 1].domNode, 1, _this.effect, null, function(){ // When the scene is ready, activate it. _this.scenes[_this.scenes.length - 1].assistant.activate(params); _this._opInProgress = false; }); } }); }, setZIndex: function(controller, idx){ dojo.style(controller.domNode, "zIndex", idx + 1); }, popScene: function(data){ // performTransition: function(/*String*/moveTo, /*Number*/dir, /*String*/transition, // /*Object|null*/context, /*String|Function*/method /*optional args*/){ if(this._opInProgress){ return; } var _this = this; if(this.scenes.length > 1){ this._opInProgress = true; this.scenes[_this.scenes.length - 2].assistant.activate(data); this.scenes[_this.scenes.length - 1] .performTransition( _this.scenes[this.scenes.length - 2].domNode, -1, this.effect, null, function(){ // When the scene is no longer visible, destroy it _this._destroyScene(_this.scenes[_this.scenes.length - 1]); _this.scenes.splice(_this.scenes.length - 1, 1); _this._opInProgress = false; }); }else{ console.log("cannot pop the scene if there is just one"); } }, popScenesTo: function(sceneName, data){ if(this._opInProgress){ return; } while(this.scenes.length > 2 && this.scenes[this.scenes.length - 2].sceneName != sceneName){ this._destroyScene(this.scenes[this.scenes.length - 2]); this.scenes.splice(this.scenes.length - 2, 1); } this.popScene(data); }, _destroyScene: function(scene){ scene.assistant.deactivate(); scene.assistant.destroy(); scene.destroyRecursive(); } }); });