123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- // wrapped by build app
- define("dojox/mobile/app/SceneController", ["dijit","dojo","dojox","dojo/require!dojox/mobile/_base"], function(dijit,dojo,dojox){
- dojo.provide("dojox.mobile.app.SceneController");
- dojo.experimental("dojox.mobile.app.SceneController");
- dojo.require("dojox.mobile._base");
- (function(){
- var app = dojox.mobile.app;
- var templates = {};
- dojo.declare("dojox.mobile.app.SceneController", dojox.mobile.View, {
- stageController: null,
- keepScrollPos: false,
- init: function(sceneName, params){
- // summary:
- // Initializes the scene by loading the HTML template and code, if it has
- // not already been loaded
- this.sceneName = sceneName;
- this.params = params;
- var templateUrl = app.resolveTemplate(sceneName);
- this._deferredInit = new dojo.Deferred();
- if(templates[sceneName]){
- // If the template has been cached, do not load it again.
- this._setContents(templates[sceneName]);
- }else{
- // Otherwise load the template
- dojo.xhrGet({
- url: templateUrl,
- handleAs: "text"
- }).addCallback(dojo.hitch(this, this._setContents));
- }
- return this._deferredInit;
- },
- _setContents: function(templateHtml){
- // summary:
- // Sets the content of the View, and invokes either the loading or
- // initialization of the scene assistant.
- templates[this.sceneName] = templateHtml;
- this.domNode.innerHTML = "<div>" + templateHtml + "</div>";
- var sceneAssistantName = "";
- var nameParts = this.sceneName.split("-");
- for(var i = 0; i < nameParts.length; i++){
- sceneAssistantName += nameParts[i].substring(0, 1).toUpperCase()
- + nameParts[i].substring(1);
- }
- sceneAssistantName += "Assistant";
- this.sceneAssistantName = sceneAssistantName;
- var _this = this;
- dojox.mobile.app.loadResourcesForScene(this.sceneName, function(){
- console.log("All resources for ",_this.sceneName," loaded");
- var assistant;
- if(typeof(dojo.global[sceneAssistantName]) != "undefined"){
- _this._initAssistant();
- }else{
- var assistantUrl = app.resolveAssistant(_this.sceneName);
- dojo.xhrGet({
- url: assistantUrl,
- handleAs: "text"
- }).addCallback(function(text){
- try{
- dojo.eval(text);
- }catch(e){
- console.log("Error initializing code for scene " + _this.sceneName
- + '. Please check for syntax errors');
- throw e;
- }
- _this._initAssistant();
- });
- }
- });
- },
- _initAssistant: function(){
- // summary:
- // Initializes the scene assistant. At this point, the View is
- // populated with the HTML template, and the scene assistant type
- // is declared.
- console.log("Instantiating the scene assistant " + this.sceneAssistantName);
- var cls = dojo.getObject(this.sceneAssistantName);
- if(!cls){
- throw Error("Unable to resolve scene assistant "
- + this.sceneAssistantName);
- }
- this.assistant = new cls(this.params);
- this.assistant.controller = this;
- this.assistant.domNode = this.domNode.firstChild;
- this.assistant.setup();
- this._deferredInit.callback();
- },
- query: function(selector, node){
- // summary:
- // Queries for DOM nodes within either the node passed in as an argument
- // or within this view.
- return dojo.query(selector, node || this.domNode)
- },
- parse: function(node){
- var widgets = this._widgets =
- dojox.mobile.parser.parse(node || this.domNode, {
- controller: this
- });
- // Tell all widgets what their controller is.
- for(var i = 0; i < widgets.length; i++){
- widgets[i].set("controller", this);
- }
- },
- getWindowSize: function(){
- // TODO, this needs cross browser testing
- return {
- w: dojo.global.innerWidth,
- h: dojo.global.innerHeight
- }
- },
- showAlertDialog: function(props){
- var size = dojo.marginBox(this.assistant.domNode);
- var dialog = new dojox.mobile.app.AlertDialog(
- dojo.mixin(props, {controller: this}));
- this.assistant.domNode.appendChild(dialog.domNode);
- console.log("Appended " , dialog.domNode, " to ", this.assistant.domNode);
- dialog.show();
- },
- popupSubMenu: function(info){
- var widget = new dojox.mobile.app.ListSelector({
- controller: this,
- destroyOnHide: true,
- onChoose: info.onChoose
- });
- this.assistant.domNode.appendChild(widget.domNode);
- widget.set("data", info.choices);
- widget.show(info.fromNode);
- }
- });
- })();
- });
|