]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/controller.js
internal: an alternative to default_focus
[working/Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / controller.js
1 dump('entering util/controller.js\n');
2
3 if (typeof util == 'undefined') util = {};
4 util.controller = function () {
5
6     JSAN.use('util.error'); this.error = new util.error();
7
8     return this;
9 };
10
11 util.controller.prototype = {
12
13     'cmds' : {},
14
15     'init' : function (params) {
16
17         if (typeof params.control_map == 'undefined') throw('util.controller.init: No control_map');
18
19         this.event_listeners = new EventListenerList();
20         this.control_map = params.control_map;
21         this.window_knows_me_by = params.window_knows_me_by;
22         this.render_list = [];
23         this.view = {};
24         
25         for (var i in this.control_map) {
26             var cmd = document.getElementById(i);
27             if (cmd) {
28                 for (var j in this.control_map[i][0]) {
29                     if (this.control_map[i][1]) {
30                         var ev_type = this.control_map[i][0][j];
31                         switch(ev_type) {
32                             case 'render':
33                                 this.render_list.push( [i, this.control_map[i][1](cmd)] ); 
34                             break;
35                             case 'oncommand':
36                                 if (!this.window_knows_me_by) 
37                                     throw('util.controller: on_command requires window_knows_me_by');
38                                 var s = 'try{'+this.window_knows_me_by+".cmds."+i+"(event);}catch(E){alert(E);}";
39                                 cmd.setAttribute(ev_type, s);
40                                 this.cmds[i] = this.control_map[i][1];
41                             break;
42                             default: this.event_listeners.add(cmd, ev_type,this.control_map[i][1],false);
43                         }
44                     }
45                 }
46             }
47             this.view[i] = cmd;
48         }
49     },
50
51     'cleanup' : function() {
52         var obj = this;
53         obj.event_listeners.removeAll();
54     },
55
56     'render' : function(id,param) {
57         for (var i in this.render_list) {
58             try {
59                 if (id) {
60                     if (id == this.render_list[i][0]) this.render_list[i][1](param);
61                 } else {
62                     this.render_list[i][1](param);
63                 }
64             } catch(E) {
65                 var error = 'Problem in util.controller.render with\n' 
66                     + this.render_list[i] + '\n\n' + js2JSON(E);
67                 this.error.sdump('D_WARN',error);
68             }
69         }
70     }
71 }
72 dump('exiting util/controller.js\n');