]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/browser.js
ab877db56dec4abb7d507f99b1f3d7c39f72521f
[working/Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / browser.js
1 dump('entering util.browser.js\n');
2
3 if (typeof util == 'undefined') util = {};
4 util.browser = function (params) {
5     try {
6         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
7         JSAN.use('util.error'); this.error = new util.error();
8     } catch(E) {
9         dump('util.browser: ' + E + '\n');
10     }
11 }
12
13 util.browser.prototype = {
14
15     'init' : function( params ) {
16
17         try {
18             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
19
20             var obj = this;
21
22             obj.url = params['url'];
23             obj.push_xulG = params['push_xulG'];
24             obj.html_source = params['html_source'];
25             obj.browser_id = params['browser_id'];
26             obj.debug_label = params['debug_label'];
27             obj.passthru_content_params = params['passthru_content_params'];
28             obj.on_url_load = params['on_url_load'];
29
30             JSAN.use('util.controller'); obj.controller = new util.controller();
31             obj.controller.init(
32                 {
33                     control_map : {
34                         'cmd_broken' : [
35                             ['command'],
36                             function() { alert('Not Yet Implemented'); }
37                         ],
38                         'cmd_debug' : [
39                             ['command'],
40                             function() {
41                                 var curr_url = obj.get_content().location.href;
42                                 var url = window.prompt('Original URL: ' + obj.url + '\nCurrent URL: ' + curr_url + '\nEnter new URL:',curr_url);
43                                 if (url) { obj.get_content().location.href = url; }
44                             }
45                         ],
46                         'cmd_print' : [
47                             ['command'],
48                             function() {
49                                 try {
50                                     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
51                                     var content = obj.get_content();
52                                     JSAN.use('util.print'); var p = new util.print();
53                                     var print_params = {};
54                                     if (obj.html_source) {
55                                         print_params.msg = obj.html_source;
56                                     }
57                                     JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.stash_retrieve();
58                                     if (data.print_strategy == 'webBrowserPrint' || !data.print_strategy) {
59                                         // Override the print strategy temporarily in this context
60                                         print_params.print_strategy = 'window.print';
61                                     }
62                                     p.NSPrint(content,false,print_params);
63                                 } catch(E) {
64                                     alert('browser.js, cmd_print exception: ' + E);
65                                 }
66                             }
67                         ],
68                         'cmd_forward' : [
69                             ['command'],
70                             function() {
71                                 try {
72                                     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
73                                     var n = obj.getWebNavigation();
74                                     if (n.canGoForward) n.goForward();
75                                 } catch(E) {
76                                     var err = 'cmd_forward: ' + E;
77                                     obj.error.sdump('D_ERROR',err);
78                                 }
79                             }
80                         ],
81                         'cmd_back' : [
82                             ['command'],
83                             function() {
84                                 try {
85                                     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
86                                     var n = obj.getWebNavigation();
87                                     if (n.canGoBack) n.goBack();
88                                 } catch(E) {
89                                     var err = 'cmd_back: ' + E;
90                                     obj.error.sdump('D_ERROR',err);
91                                 }
92                             }
93                         ],
94                         'cmd_reload' : [
95                             ['command'],
96                             function() {
97                                 try {
98                                     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
99                                     var n = obj.getWebNavigation();
100                                     n.reload( Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE );
101                                 } catch(E) {
102                                     var err = 'cmd_reload: ' + E;
103                                     obj.error.sdump('D_ERROR',err);
104                                 }
105                             }
106                         ]
107                     }
108                 }
109             );
110             obj.controller.render();
111
112             var browser_id = 'browser_browser'; if (obj.browser_id) browser_id = obj.browser_id;
113             obj.controller.view.browser_browser = document.getElementById(browser_id);
114
115             obj.buildProgressListener();
116             /*
117             dump('obj.controller.view.browser_browser.addProgressListener = ' 
118                 + obj.controller.view.browser_browser.addProgressListener + '\n');
119             */
120             obj.controller.view.browser_browser.addProgressListener(obj.progressListener,
121                             Components.interfaces.nsIWebProgress.NOTIFY_ALL );
122
123             obj.controller.view.browser_browser.setAttribute('src',obj.url);
124             //dump('browser url = ' + obj.url + '\n');
125
126             window.help_context_set_locally = true;
127
128         } catch(E) {
129             this.error.sdump('D_ERROR','util.browser.init: ' + E + '\n');
130         }
131     },
132
133     'get_content' : function() {
134         try {
135             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
136             if (this.controller.view.browser_browser.contentWindow.wrappedJSObject) {
137                 return this.controller.view.browser_browser.contentWindow.wrappedJSObject;
138             } else {
139                 return this.controller.view.browser_browser.contentWindow;
140             }
141         } catch(E) {
142             this.error.sdump('D_ERROR','util.browser.get_content(): ' + E);
143         }
144     },
145
146     'push_variables' : function() {
147         try {
148             var obj = this;
149             var s = '';
150             try { s += obj.url + '\n' + obj.get_content().location.href + '\n'; } catch(E) { s+=E + '\n'; }
151             if (!obj.push_xulG) return;
152             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
153             var cw = this.get_content();
154             cw.IAMXUL = true;
155             cw.XUL_BUILD_ID = '/xul/server/'.split(/\//)[2];
156             cw.xulG = obj.passthru_content_params || {};
157             cw.xulG.set_tab = window.xulG.set_tab;
158             cw.xulG.new_tab = window.xulG.new_tab;
159             cw.xulG.new_patron_tab = window.xulG.new_patron_tab;
160             cw.xulG.set_patron_tab = window.xulG.set_patron_tab;
161             cw.xulG.volume_item_creator = window.xulG.volume_item_creator;
162             cw.xulG.get_new_session = window.xulG.get_new_session;
163             cw.xulG.holdings_maintenance_tab = window.xulG.holdings_maintenance_tab;
164             cw.xulG.url_prefix = window.xulG.url_prefix;
165             cw.xulG.urls = window.urls;
166             try { s += ('******** cw = ' + cw + ' cw.xulG = ' + (cw.xulG) + '\n'); } catch(E) { s+=E + '\n'; }
167             obj.error.sdump('D_BROWSER',s);
168         } catch(E) {
169             this.error.sdump('D_ERROR','util.browser.push_variables: ' + E + '\n');
170         }
171     },
172
173     'getWebNavigation' : function() {
174         try {
175             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
176             var wn = this.controller.view.browser_browser.webNavigation;
177             var s = this.url + '\n' + this.get_content().location.href + '\n';
178             s += ('getWebNavigation() = ' + wn + '\n');
179             //this.error.sdump('D_BROWSER',s);
180             return wn;
181         } catch(E) {
182             this.error.sdump('D_ERROR','util.browser.getWebNavigation(): ' + E );
183         }
184     },
185
186     'updateNavButtons' : function() {
187         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
188         var obj = this; 
189         var s = obj.url + '\n' + obj.get_content().location.href + '\n';
190         try {
191             var n = obj.getWebNavigation();
192             s += ('webNavigation = ' + n + '\n');
193             s += ('webNavigation.canGoForward = ' + n.canGoForward + '\n');
194             if (n.canGoForward) {
195                 if (typeof obj.controller.view.cmd_forward != 'undefined') {
196                     obj.controller.view.cmd_forward.disabled = false;
197                     obj.controller.view.cmd_forward.setAttribute('disabled','false');
198                 }
199             } else {
200                 if (typeof obj.controller.view.cmd_forward != 'undefined') {
201                     obj.controller.view.cmd_forward.disabled = true;
202                     obj.controller.view.cmd_forward.setAttribute('disabled','true');
203                 }
204             }
205         } catch(E) {
206             s += E + '\n';
207         }
208         try {
209             var n = obj.getWebNavigation();
210             s += ('webNavigation = ' + n + '\n');
211             s += ('webNavigation.canGoBack = ' + n.canGoBack + '\n');
212             if (n.canGoBack) {
213                 if (typeof obj.controller.view.cmd_back != 'undefined') {
214                     obj.controller.view.cmd_back.disabled = false;
215                     obj.controller.view.cmd_back.setAttribute('disabled','false');
216                 }
217             } else {
218                 if (typeof obj.controller.view.cmd_back != 'undefined') {
219                     obj.controller.view.cmd_back.disabled = true;
220                     obj.controller.view.cmd_back.setAttribute('disabled','true');
221                 }
222             }
223         } catch(E) {
224             s += E + '\n';
225         }
226         //this.error.sdump('D_BROWSER',s);
227
228         // Let's also update @protocol, @hostname, @port, and @pathname on the <help> widget
229         if (xulG.set_help_context) {
230             try {
231                 var help_params = {
232                     'protocol' : obj.get_content().location.protocol,
233                     'hostname' : obj.get_content().location.hostname,
234                     'port' : obj.get_content().location.port,
235                     'pathname' : obj.get_content().location.pathname,
236                     'src' : ''
237                 };
238                 xulG.set_help_context(help_params);
239             } catch(E) {
240                 dump('Error in browser.js, setting location on help widget: ' + E);
241             }
242         } else {
243             dump(location.href + ': browser.js, updateNavButtons, xulG = ' + xulG + ' xulG.set_help_context = ' + xulG.set_help_context + '\n');
244         }
245     },
246
247     'buildProgressListener' : function() {
248
249         try {
250             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
251
252             var obj = this;
253             obj.progressListener = {
254                 onProgressChange    : function(){},
255                 onLocationChange    : function(){},
256                 onStatusChange        : function(){},
257                 onSecurityChange    : function(){},
258                 onStateChange         : function ( webProgress, request, stateFlags, status) {
259                     try {
260                         netscape.security.PrivilegeManager.enablePrivilege( "UniversalXPConnect" );
261                         var s = obj.url + '\n' + obj.get_content().location.href + '\n';
262                         const nsIWebProgressListener = Components.interfaces.nsIWebProgressListener;
263                         const nsIChannel = Components.interfaces.nsIChannel;
264                         ////// handle the throbber
265                         var throbber = xulG.page_meter;
266                         if (throbber) {
267                             var busy = false;
268                             if (!(stateFlags & nsIWebProgressListener.STATE_RESTORING)) {
269                                 busy = true;
270                                 throbber.on();
271                             }
272                             if (stateFlags & nsIWebProgressListener.STATE_STOP) {
273                                 busy = false;
274                                 setTimeout(
275                                     function() {
276                                         if (!busy) { throbber.off(); }
277                                     }, 2000
278                                 );
279                             }
280                         }
281                         //////
282                         if (stateFlags == 65540 || stateFlags == 65537 || stateFlags == 65552) { return; }
283                         s += ('onStateChange: stateFlags = ' + stateFlags + ' status = ' + status + '\n');
284                         if (stateFlags & nsIWebProgressListener.STATE_IS_REQUEST) {
285                             s += ('\tSTATE_IS_REQUEST\n');
286                         }
287                         if (stateFlags & nsIWebProgressListener.STATE_IS_DOCUMENT) {
288                             s += ('\tSTATE_IS_DOCUMENT\n');
289                             if( stateFlags & nsIWebProgressListener.STATE_STOP ) {
290                                 obj.push_variables(); obj.updateNavButtons();
291                                 if (typeof obj.on_url_load == 'function') {
292                                     try {
293                                         obj.error.sdump('D_TRACE','calling on_url_load');
294                                         var helpers = {
295                                             'doc_write' : function(html) {
296                                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
297                                                 obj.get_content().document.write(html);
298                                             },
299                                             'doc_close' : function() {
300                                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
301                                                 obj.get_content().document.close();
302                                             }
303                                         }
304                                         obj.on_url_load( obj.controller.view.browser_browser, obj, helpers );
305                                     } catch(E) {
306                                         obj.error.sdump('D_ERROR','on_url_load: ' + E );
307                                     }
308                                 }
309                                 if (obj.debug_label) {
310                                     try {
311                                         document.getElementById(obj.debug_label).setAttribute('tooltiptext','url: ' + obj.get_content().location.href);
312                                     } catch(E) {
313                                         obj.error.sdump('D_ERROR','on_url_load, debug_label: ' + E );
314                                     }
315                                 }
316                             }
317                         }
318                         if (stateFlags & nsIWebProgressListener.STATE_IS_NETWORK) {
319                             s += ('\tSTATE_IS_NETWORK\n');
320                         }
321                         if (stateFlags & nsIWebProgressListener.STATE_IS_WINDOW) {
322                             s += ('\tSTATE_IS_WINDOW\n');
323                         }
324                         if (stateFlags & nsIWebProgressListener.STATE_START) {
325                             s += ('\tSTATE_START\n');
326                         }
327                         if (stateFlags & nsIWebProgressListener.STATE_REDIRECTING) {
328                             s += ('\tSTATE_REDIRECTING\n');
329                         }
330                         if (stateFlags & nsIWebProgressListener.STATE_TRANSFERING) {
331                             s += ('\tSTATE_TRANSFERING\n');
332                         }
333                         if (stateFlags & nsIWebProgressListener.STATE_NEGOTIATING) {
334                             s += ('\tSTATE_NEGOTIATING\n');
335                         }
336                         if (stateFlags & nsIWebProgressListener.STATE_STOP) {
337                             s += ('\tSTATE_STOP\n');
338                         }
339                         //obj.error.sdump('D_BROWSER',s);    
340                         if (throbber) { throbber.tooltip(s); }
341                     } catch(E) {
342                         obj.error.sdump('D_ERROR','util.browser.progresslistener.onstatechange: ' + (E));
343                     }
344                 }
345             }
346             obj.progressListener.QueryInterface = function(){return this;};
347         } catch(E) {
348             this.error.sdump('D_ERROR','util.browser.buildProgressListener: ' + E + '\n');
349         }
350     }
351 }
352
353 dump('exiting util.browser.js\n');