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