source: trunk/web/addons/job_monarch/lib/extjs-30/examples/shared/extjs/App.js @ 625

Last change on this file since 625 was 625, checked in by ramonb, 15 years ago

lib/extjs-30:

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