]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/hide.js
internal: an alternative to default_focus
[working/Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / hide.js
1 dump('entering util/hide.js\n');
2
3 if (typeof util == 'undefined') var util = {};
4 util.hide = {};
5
6 util.hide.EXPORT_OK    = [
7     'generate_dialog',
8     'generate_css'
9 ];
10 util.hide.EXPORT_TAGS    = { ':all' : util.hide.EXPORT_OK };
11
12 util.hide.generate_dialog = function(setting,org) {
13     JSAN.use('util.network'); JSAN.use('OpenILS.data');
14     var data = new OpenILS.data(); data.stash_retrieve();
15     var network = new util.network();
16
17     // gather the hideable elements and determine how we might best label them
18     var nl = document.getElementsByAttribute('hideable','*');
19     var hideable = {};
20     for (var i = 0; i < nl.length; i++) {
21         var hname = nl[i].getAttribute('hideable');
22         var value = nl[i].getAttribute('value');
23         var label = nl[i].getAttribute('label');
24
25         if (typeof hideable[hname] == 'undefined') {
26             hideable[hname] = hname;
27         }
28
29         if (nl[i].nodeName == 'label' && value) {
30             hideable[hname] = value;
31         }
32
33         if (label) {
34             hideable[hname] = label;
35         }
36     }
37
38     // put them into a sorted array
39     var elements = [];
40     for (var hname in hideable) {
41         elements.push( { 'hname' : hname, 'label' : hideable[hname] } );
42     }
43     elements = elements.sort(
44         function(a,b) {
45             if (a.label < b.label) return -1;
46             if (a.label > b.label) return 1;
47             return 0;
48         }
49     );
50
51     // create our dialog
52     JSAN.use('util.widgets');
53     var vbox = document.createElement('vbox');
54     var menu_box = document.createElement('hbox');
55     vbox.appendChild(menu_box);
56     var perm = 'STAFF_LOGIN'; // let's be less restrictive up front, since
57     // staff may want to configure and then call over a manager for a perm
58     // override
59     var menu = util.widgets.render_perm_org_menu(perm,ses('ws_ou'));
60     if (!menu) {
61         alert(
62             $('offlineStrings').getFormattedString(
63                 'util.hide_elements.missing_permission',
64                 [ perm ]
65             )
66         );
67         return false;
68     }
69     menu_box.appendChild(menu);
70
71     var already_hidden = {};
72     var aous_req = network.simple_request(
73         'FM_AOUS_SPECIFIC_RETRIEVE',
74         [
75             org || ses('ws_ou'),
76             setting,
77             ses()
78         ]
79     );
80     if (aous_req) {
81         var desc = document.createElement('description');
82         vbox.appendChild(desc);
83         var msg = $('offlineStrings').getFormattedString(
84             'util.hide_elements.current_setting_preamble',
85             [ ses('ws_ou_shortname'), data.hash.aou[ aous_req.org ].shortname() ]
86         );
87         desc.appendChild( document.createTextNode( msg ) );
88
89         for (var i in aous_req.value) {
90             already_hidden[aous_req.value[i]] = true;
91         }
92
93         /* update data.hash.aous while we have fresh data */
94         data.hash.aous[setting] = aous_req.value;
95         data.stash('hash');
96
97     } else {
98         var desc = document.createElement('description');
99         vbox.appendChild(desc);
100         var msg = $('offlineStrings').getFormattedString(
101             'util.hide_elements.current_setting_nonexistent',
102             [ ses('ws_ou_shortname') ]
103         );
104         desc.appendChild( document.createTextNode( msg ) );
105
106         data.hash.aous[setting] = null;
107         data.stash('hash');
108     }
109
110     for (var i = 0; i < elements.length; i++) {
111         var checkbox = document.createElement('checkbox');
112         checkbox.setAttribute('label',elements[i].label);
113         checkbox.setAttribute('value',elements[i].hname);
114         if (already_hidden[elements[i].hname]) {
115             checkbox.setAttribute('checked','true');
116         }
117         vbox.appendChild(checkbox);
118     }
119
120
121     var results = widget_prompt(
122         vbox,
123         {
124             'title' : $('offlineStrings').getString('util.hide_elements.title'),
125             'desc' : $('offlineStrings').getString('util.hide_elements.desc'),
126             'access' : 'method',
127             'method' : function() {
128                 var hide_these = [];
129                 for (var i = 0; i < vbox.childNodes.length; i++) {
130                     var checkbox = vbox.childNodes[i];
131                     if (checkbox.checked) {
132                         hide_these.push( checkbox.getAttribute('value') );
133                     }
134                 }
135                 return { 'org' : menu.value, 'elements' : hide_these };
136             }
137         }
138     );
139     if (!results) { return; }
140
141     var params = {};
142     params[setting] = results.elements.length > 0
143         ? results.elements
144         : null; // delete the setting so we can inherit from higher orgs
145     var result = network.simple_request(
146         'FM_AOUS_UPDATE',
147         [
148             ses(),
149             results.org,
150             params
151         ]
152     );
153     if (result == 1) {
154
155         if (results.elements.length > 0) {
156             alert($('offlineStrings').getString('util.hide_elements.update_setting.update_success'));
157         } else {
158             alert($('offlineStrings').getString('util.hide_elements.update_setting.delete_success'));
159         }
160         data.hash.aous[setting] = params[setting];
161         data.stash('hash');
162
163         util.hide.generate_css(setting);
164
165     } else {
166         alert($('offlineStrings').getString('util.hide_elements.update_setting.failure'));
167     }
168 }
169
170 util.hide.generate_css = function(setting) {
171     JSAN.use('OpenILS.data');
172     var data = new OpenILS.data(); data.stash_retrieve();
173     var hidden = {};
174     for (var i in data.hash.aous[setting]) {
175         hidden[data.hash.aous[setting][i]] = true;
176     }
177  
178     var nl = document.getElementsByAttribute('hideable','*');
179     for (var i = 0; i < nl.length; i++) {
180         var hname = nl[i].getAttribute('hideable');
181         if (hidden[hname]) {
182             addCSSClass(nl[i],'hideme');
183         } else {
184             removeCSSClass(nl[i],'hideme');
185         }
186     }
187 }
188
189 dump('exiting util/hide.js\n');