]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/info_stat_cats.xul
LP#1086458: clean up after event listeners in circ/patron interface
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / patron / info_stat_cats.xul
1 <?xml version="1.0"?>
2 <!-- Application: Evergreen Staff Client -->
3 <!-- Screen: Patron Display -->
4
5 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
6 <!-- STYLESHEETS -->
7 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
8 <?xml-stylesheet href="/xul/server/skin/global.css" type="text/css"?>
9 <?xml-stylesheet href="/xul/server/skin/patron_display.css" type="text/css"?>
10
11 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
12 <!-- LOCALIZATION -->
13 <!DOCTYPE window PUBLIC "" ""[
14     <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
15 ]>
16
17 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
18 <!-- OVERLAYS -->
19 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
20
21 <window id="patron_info_stat_cats_win" width="700" height="550"
22     onload="try{ my_init(); font_helper(); persist_helper(); } catch(E) { alert(E); }"
23     onunload="try{  persist_helper_cleanup(); } catch(E) { alert(E); }"
24     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
25
26     <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
27     <!-- BEHAVIOR -->
28         <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
29         <scripts id="openils_util_scripts"/>
30
31     <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
32     <script>
33     <![CDATA[
34
35         function $(id) { return document.getElementById(id); }
36
37         function my_init() {
38             try {
39                 if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
40                 JSAN.errorLevel = "die"; // none, warn, or die
41                 JSAN.addRepository('/xul/server/');
42
43                 JSAN.use('util.error'); g.error = new util.error();
44                 JSAN.use('util.network'); g.network = new util.network();
45                 JSAN.use('util.date'); JSAN.use('util.money'); JSAN.use('patron.util'); JSAN.use('util.functional');
46                 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
47
48                 g.error.sdump('D_TRACE','my_init() for patron_info_stat_cats.xul');
49
50                 g.patron_id = xul_param('patron_id');
51
52                 refresh();
53
54             } catch(E) {
55                 var err_msg = $("commonStrings").getFormattedString('common.exception', ['patron/info_stat_cats', E]);
56                 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
57                 alert(err_msg);
58             }
59         }
60
61         function refresh() {
62             retrieve_fleshed_patron(); render_stat_cats();
63         }
64
65         function retrieve_fleshed_patron() {
66             try {
67
68                 g.patron = patron.util.retrieve_fleshed_au_via_id(ses(), g.patron_id);
69                 if (g.patron.ilsevent) throw(g.patron);
70
71             } catch(E) {
72                 g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.info_stat_cats.retrieve_fleshed_patron.failed'),E);
73                 g.patron = null;
74             }
75
76         }
77
78         function apply(node,field,value) {
79             util.widgets.apply(
80                 node,'name',field,
81                 function(n) {
82                     switch(n.nodeName) {
83                         case 'description' : n.appendChild( document.createTextNode( value ) ); break;
84                         case 'label' : n.value = value; break;
85                         default : n.value = value; break;
86                     }
87                 }
88             );
89         }
90
91         function render_stat_cats() {
92             JSAN.use('util.widgets'); util.widgets.remove_children('stat_cats_panel');
93             if (!g.patron) return;
94             var sp = $('stat_cats_panel');
95             var my_actsc = g.data.list.my_actsc;
96             /* I'm throwing all the patron's stat cat entry maps in here, and pruning it as we go through my_actsc.  Those left behind are "foreign" stat cats that need to pulled from the server. */
97             var scem_hash = {}; 
98             for (var i = 0; i < g.patron.stat_cat_entries().length; i++) {
99                 scem_hash[ g.patron.stat_cat_entries()[i].stat_cat() ] = function(a){ return g.patron.stat_cat_entries()[a]; }(i);
100             }
101
102             for (var i = 0; i < my_actsc.length; i++) {
103
104                 /* template */
105                 var actsc_node = $('actsc_template').cloneNode(true);
106                 sp.appendChild(actsc_node);
107                 actsc_node.hidden = false;
108                 apply(actsc_node,'name',my_actsc[i].name());
109                 if (get_bool(my_actsc[i].opac_visible())) {
110                     apply(actsc_node, 'opac', $("patronStrings").getString('staff.patron.info_stat_cats.render_stat_cats.opac_visible'));
111                 } else {
112                     apply(actsc_node, 'opac', $("patronStrings").getString('staff.patron.info_stat_cats.render_stat_cats.not_opac_visible'));
113                 }
114                 apply(actsc_node,'owner',g.data.hash.aou[my_actsc[i].owner()].shortname());
115
116                 var nl = actsc_node.getElementsByAttribute('name','entry');
117                 var entry_placeholder;
118                 if (nl.length>0) entry_placeholder = nl[0];
119
120                 if (entry_placeholder && scem_hash[ my_actsc[i].id() ]) {
121
122                     /* template */
123                     var actsce_node = $('actsce_template').cloneNode(true); entry_placeholder.appendChild(actsce_node); actsce_node.hidden = false;
124                     var sc_id = my_actsc[i].id();
125                     var scem = scem_hash[ sc_id ];
126                     apply(actsce_node,'value',scem.stat_cat_entry());
127                     delete scem_hash[ sc_id ];
128
129                 }
130             }
131
132             for (var i in scem_hash) {
133
134                 try {
135
136                 var sc_id = scem_hash[i].stat_cat();
137                 if (sc_id == null || sc_id == '') throw(scem_hash[i]);
138                 var sc = g.network.simple_request('FM_ACTSC_RETRIEVE_BATCH', [ ses(), [ sc_id ] ]);
139                 if (!sc || typeof sc.ilsevent != 'undefined') { throw(sc); continue; }
140                 sc = sc[0];
141
142                 /* template */
143                 var actsc_node = $('actsc_template').cloneNode(true);
144                 sp.appendChild(actsc_node);
145                 actsc_node.hidden = false;
146
147                 apply(actsc_node,'name',sc.name());
148                 if (get_bool(sc.opac_visible())) {
149                     apply(actsc_node, 'opac', $("patronStrings").getString('staff.patron.info_stat_cats.render_stat_cats.opac_visible'));
150                 } else {
151                     apply(actsc_node, 'opac', $("patronStrings").getString('staff.patron.info_stat_cats.render_stat_cats.not_opac_visible'));
152                 }
153                 apply(actsc_node,'owner',g.data.hash.aou[sc.owner()].shortname());
154
155                 var nl = actsc_node.getElementsByAttribute('name','entry');
156                 var entry_placeholder;
157                 if (nl.length>0) entry_placeholder = nl[0];
158
159                 if (entry_placeholder) {
160
161                     /* template */
162                     var actsce_node = $('actsce_template').cloneNode(true);
163                     entry_placeholder.appendChild(actsce_node);
164                     actsce_node.hidden = false;
165
166                     var scem = scem_hash[ i ];
167                     apply(actsce_node,'value',scem.stat_cat_entry());
168
169                 }
170
171                 } catch(E) {
172                     g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.info_stat_cats.render_stat_cats.rendering_exception'),E);
173                 }
174             }
175         }
176         
177     ]]>
178     </script>
179     
180     <messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
181
182     <stack hidden="true" id="actsc_template" flex="1">
183         <groupbox flex="1" style="background-color: black;"/>
184         <groupbox flex="1" style="background-color: #99CC66; -moz-border-radius-topright: 35px;" >
185             <hbox>
186                 <description name="name" style="font-weight: bold"/>
187                 <spacer flex="1"/>
188                 <description name="opac" style="font-weight: bold"/>
189                 <description name="owner" style="font-weight: bold"/>
190             </hbox>
191             <vbox name="entry"/>
192         </groupbox>
193     </stack>
194
195     <hbox hidden="true" id="actsce_template" flex="1">
196         <description name="value"/>
197     </hbox>
198
199     <vbox flex="1" class="my_overflow" id="stat_cats_panel">
200     </vbox>
201
202
203 </window>
204