App.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:6k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!
  2.  * Ext JS Library 3.0.0
  3.  * Copyright(c) 2006-2009 Ext JS, LLC
  4.  * licensing@extjs.com
  5.  * http://www.extjs.com/license
  6.  */
  7. /**
  8.  * Ext.App
  9.  * @extends Ext.util.Observable
  10.  * @author Chris Scott
  11.  */
  12. Ext.App = function(config) {
  13.     // set up StateProvider
  14.     this.initStateProvider();
  15.     // array of views
  16.     this.views = [];
  17.     Ext.apply(this, config);
  18.     if (!this.api.actions) { this.api.actions = {}; }
  19.     // init when onReady fires.
  20.     Ext.onReady(this.onReady, this);
  21.     Ext.App.superclass.constructor.apply(this, arguments);
  22. }
  23. Ext.extend(Ext.App, Ext.util.Observable, {
  24.     /***
  25.      * response status codes.
  26.      */
  27.     STATUS_EXCEPTION :          'exception',
  28.     STATUS_VALIDATION_ERROR :   "validation",
  29.     STATUS_ERROR:               "error",
  30.     STATUS_NOTICE:              "notice",
  31.     STATUS_OK:                  "ok",
  32.     STATUS_HELP:                "help",
  33.     /**
  34.      * @cfg {Object} api
  35.      * remoting api.  should be defined in your own config js.
  36.      */
  37.     api: {
  38.         url: null,
  39.         type: null,
  40.         actions: {}
  41.     },
  42.     // private, ref to message-box Element.
  43.     msgCt : null,
  44.     // @protected, onReady, executes when Ext.onReady fires.
  45.     onReady : function() {
  46.         // create the msgBox container.  used for App.setAlert
  47.         this.msgCt = Ext.DomHelper.insertFirst(document.body, {id:'msg-div'}, true);
  48.         this.msgCt.setStyle('position', 'absolute');
  49.         this.msgCt.setStyle('z-index', 9999);
  50.         this.msgCt.setWidth(300);
  51.     },
  52.     initStateProvider : function() {
  53.         /*
  54.          * set days to be however long you think cookies should last
  55.          */
  56.         var days = '';        // expires when browser closes
  57.         if(days){
  58.             var date = new Date();
  59.             date.setTime(date.getTime()+(days*24*60*60*1000));
  60.             var exptime = "; expires="+date.toGMTString();
  61.         } else {
  62.             var exptime = null;
  63.         }
  64.         // register provider with state manager.
  65.         Ext.state.Manager.setProvider(new Ext.state.CookieProvider({
  66.             path: '/',
  67.             expires: exptime,
  68.             domain: null,
  69.             secure: false
  70.         }));
  71.     },
  72.     /**
  73.      * registerView
  74.      * register an application view component.
  75.      * @param {Object} view
  76.      */
  77.     registerView : function(view) {
  78.         this.views.push(view);
  79.     },
  80.     /**
  81.      * getViews
  82.      * return list of registered views
  83.      */
  84.     getViews : function() {
  85.         return this.views;
  86.     },
  87.     /**
  88.      * registerActions
  89.      * registers new actions for API
  90.      * @param {Object} actions
  91.      */
  92.     registerActions : function(actions) {
  93.         Ext.apply(this.api.actions, actions);
  94.     },
  95.     /**
  96.      * getAPI
  97.      * return Ext Remoting api
  98.      */
  99.     getAPI : function() {
  100.         return this.api;
  101.     },
  102.     /***
  103.      * setAlert
  104.      * show the message box.  Aliased to addMessage
  105.      * @param {String} msg
  106.      * @param {Bool} status
  107.      */
  108.     setAlert : function(status, msg) {
  109.         this.addMessage(status, msg);
  110.     },
  111.     /***
  112.      * adds a message to queue.
  113.      * @param {String} msg
  114.      * @param {Bool} status
  115.      */
  116.     addMessage : function(status, msg) {
  117.         var delay = 3;    // <-- default delay of msg box is 1 second.
  118.         if (status == false) {
  119.             delay = 5;    // <-- when status is error, msg box delay is 3 seconds.
  120.         }
  121.         // add some smarts to msg's duration (div by 13.3 between 3 & 9 seconds)
  122.         delay = msg.length / 13.3;
  123.         if (delay < 3) {
  124.             delay = 3;
  125.         }
  126.         else if (delay > 9) {
  127.             delay = 9;
  128.         }
  129.         this.msgCt.alignTo(document, 't-t');
  130.         Ext.DomHelper.append(this.msgCt, {html:this.buildMessageBox(status, String.format.apply(String, Array.prototype.slice.call(arguments, 1)))}, true).slideIn('t').pause(delay).ghost("t", {remove:true});
  131.     },
  132.     /***
  133.      * buildMessageBox
  134.      */
  135.     buildMessageBox : function(title, msg) {
  136.         switch (title) {
  137.             case true:
  138.                 title = this.STATUS_OK;
  139.                 break;
  140.             case false:
  141.                 title = this.STATUS_ERROR;
  142.                 break;
  143.         }
  144.         return [
  145.             '<div class="app-msg">',
  146.             '<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>',
  147.             '<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"><h3 class="x-icon-text icon-status-' + title + '">', title, '</h3>', msg, '</div></div></div>',
  148.             '<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',
  149.             '</div>'
  150.         ].join('');
  151.     },
  152.     /**
  153.      * decodeStatusIcon
  154.      * @param {Object} status
  155.      */
  156.     decodeStatusIcon : function(status) {
  157.         iconCls = '';
  158.         switch (status) {
  159.             case true:
  160.             case this.STATUS_OK:
  161.                 iconCls = this.ICON_OK;
  162.                 break;
  163.             case this.STATUS_NOTICE:
  164.                 iconCls = this.ICON_NOTICE;
  165.                 break;
  166.             case false:
  167.             case this.STATUS_ERROR:
  168.                 iconCls = this.ICON_ERROR;
  169.                 break;
  170.             case this.STATUS_HELP:
  171.                 iconCls = this.ICON_HELP;
  172.                 break;
  173.         }
  174.         return iconCls;
  175.     },
  176.     /***
  177.      * setViewState, alias for Ext.state.Manager.set
  178.      * @param {Object} key
  179.      * @param {Object} value
  180.      */
  181.     setViewState : function(key, value) {
  182.         Ext.state.Manager.set(key, value);
  183.     },
  184.     /***
  185.      * getViewState, aliaz for Ext.state.Manager.get
  186.      * @param {Object} cmd
  187.      */
  188.     getViewState : function(key) {
  189.         return Ext.state.Manager.get(key);
  190.     },
  191.     /**
  192.      * t
  193.      * translation function.  needs to be implemented.  simply echos supplied word back currently.
  194.      * @param {String} to translate
  195.      * @return {String} translated.
  196.      */
  197.     t : function(words) {
  198.         return words;
  199.     },
  200.     handleResponse : function(res) {
  201.         if (res.type == this.STATUS_EXCEPTION) {
  202.             return this.handleException(res);
  203.         }
  204.         if (res.message.length > 0) {
  205.             this.setAlert(res.status, res.message);
  206.         }
  207.     },
  208.     handleException : function(res) {
  209.         Ext.MessageBox.alert(res.type.toUpperCase(), res.message);
  210.     }
  211. });