]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/browser.js
let the passthru xulG have some basic menu frame functions
[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.alt_print = params['alt_print'];
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_print' : [
39                                                         ['command'],
40                                                         function() {
41                                                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
42                                                                 if (obj.alt_print) {
43                                                                         JSAN.use('util.print'); var p = new util.print();
44                                                                         p.NSPrint(obj.get_content(),false,{});
45                                                                 } else {
46                                                                         obj.get_content().print();
47                                                                 }
48                                                         }
49                                                 ],
50                                                 'cmd_forward' : [
51                                                         ['command'],
52                                                         function() {
53                                                                 try {
54                                                                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
55                                                                         var n = obj.getWebNavigation();
56                                                                         if (n.canGoForward) n.goForward();
57                                                                 } catch(E) {
58                                                                         var err = 'cmd_forward: ' + E;
59                                                                         obj.error.sdump('D_ERROR',err);
60                                                                 }
61                                                         }
62                                                 ],
63                                                 'cmd_back' : [
64                                                         ['command'],
65                                                         function() {
66                                                                 try {
67                                                                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
68                                                                         var n = obj.getWebNavigation();
69                                                                         if (n.canGoBack) n.goBack();
70                                                                 } catch(E) {
71                                                                         var err = 'cmd_back: ' + E;
72                                                                         obj.error.sdump('D_ERROR',err);
73                                                                 }
74                                                         }
75                                                 ],
76                                         }
77                                 }
78                         );
79                         obj.controller.render();
80
81                         var browser_id = 'browser_browser'; if (obj.browser_id) browser_id = obj.browser_id;
82                         obj.controller.view.browser_browser = document.getElementById(browser_id);
83
84                         obj.buildProgressListener();
85                         /*
86                         dump('obj.controller.view.browser_browser.addProgressListener = ' 
87                                 + obj.controller.view.browser_browser.addProgressListener + '\n');
88                         */
89                         obj.controller.view.browser_browser.addProgressListener(obj.progressListener,
90                                         Components.interfaces.nsIWebProgress.NOTIFY_ALL );
91
92                         obj.controller.view.browser_browser.setAttribute('src',obj.url);
93                         //dump('browser url = ' + obj.url + '\n');
94
95                 } catch(E) {
96                         this.error.sdump('D_ERROR','util.browser.init: ' + E + '\n');
97                 }
98         },
99
100         'get_content' : function() {
101                 try {
102                         if (this.controller.view.browser_browser.contentWindow.wrappedJSObject) {
103                                 return this.controller.view.browser_browser.contentWindow.wrappedJSObject;
104                         } else {
105                                 return this.controller.view.browser_browser.contentWindow;
106                         }
107                 } catch(E) {
108                         this.error.sdump('D_ERROR','util.browser.get_content(): ' + E);
109                 }
110         },
111
112         'push_variables' : function() {
113                 try {
114                         var obj = this;
115                         var s = '';
116                         try { s += obj.url + '\n' + obj.get_content().location.href + '\n'; } catch(E) { s+=E + '\n'; }
117                         if (!obj.push_xulG) return;
118                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
119                         var cw = this.get_content();
120                         cw.IAMXUL = true;
121                         cw.xulG = obj.passthru_content_params || {};
122                         cw.xulG.set_tab = window.xulG.set_tab;
123                         cw.xulG.new_tab = window.xulG.new_tab;
124                         cw.xulG.url_prefix = window.xulG.url_prefix;
125                         try { s += ('******** cw = ' + cw + ' cw.xulG = ' + js2JSON(cw.xulG) + '\n'); } catch(E) { s+=E + '\n'; }
126                         obj.error.sdump('D_BROWSER',s);
127                 } catch(E) {
128                         this.error.sdump('D_ERROR','util.browser.push_variables: ' + E + '\n');
129                 }
130         },
131
132         'getWebNavigation' : function() {
133                 try {
134                         var wn = this.controller.view.browser_browser.webNavigation;
135                         var s = this.url + '\n' + this.get_content().location.href + '\n';
136                         s += ('getWebNavigation() = ' + wn + '\n');
137                         //this.error.sdump('D_BROWSER',s);
138                         return wn;
139                 } catch(E) {
140                         this.error.sdump('D_ERROR','util.browser.getWebNavigation(): ' + E );
141                 }
142         },
143
144         'updateNavButtons' : function() {
145                 var obj = this; 
146                 var s = obj.url + '\n' + obj.get_content().location.href + '\n';
147                 try {
148                         var n = obj.getWebNavigation();
149                         s += ('webNavigation = ' + n + '\n');
150                         s += ('webNavigation.canGoForward = ' + n.canGoForward + '\n');
151                         if (n.canGoForward) {
152                                 if (typeof obj.controller.view.cmd_forward != 'undefined') {
153                                         obj.controller.view.cmd_forward.disabled = false;
154                                         obj.controller.view.cmd_forward.setAttribute('disabled','false');
155                                 }
156                         } else {
157                                 if (typeof obj.controller.view.cmd_forward != 'undefined') {
158                                         obj.controller.view.cmd_forward.disabled = true;
159                                         obj.controller.view.cmd_forward.setAttribute('disabled','true');
160                                 }
161                         }
162                 } catch(E) {
163                         s += E + '\n';
164                 }
165                 try {
166                         var n = obj.getWebNavigation();
167                         s += ('webNavigation = ' + n + '\n');
168                         s += ('webNavigation.canGoBack = ' + n.canGoBack + '\n');
169                         if (n.canGoBack) {
170                                 if (typeof obj.controller.view.cmd_back != 'undefined') {
171                                         obj.controller.view.cmd_back.disabled = false;
172                                         obj.controller.view.cmd_back.setAttribute('disabled','false');
173                                 }
174                         } else {
175                                 if (typeof obj.controller.view.cmd_back != 'undefined') {
176                                         obj.controller.view.cmd_back.disabled = true;
177                                         obj.controller.view.cmd_back.setAttribute('disabled','true');
178                                 }
179                         }
180                 } catch(E) {
181                         s += E + '\n';
182                 }
183
184                 //this.error.sdump('D_BROWSER',s);
185         },
186
187         'buildProgressListener' : function() {
188
189                 try {
190                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
191
192                         var obj = this;
193                         obj.progressListener = {
194                                 onProgressChange        : function(){},
195                                 onLocationChange        : function(){},
196                                 onStatusChange          : function(){},
197                                 onSecurityChange        : function(){},
198                                 onStateChange           : function ( webProgress, request, stateFlags, status) {
199                                         try {
200                                                 netscape.security.PrivilegeManager.enablePrivilege( "UniversalXPConnect" );
201                                                 var s = obj.url + '\n' + obj.get_content().location.href + '\n';
202                                                 const nsIWebProgressListener = Components.interfaces.nsIWebProgressListener;
203                                                 const nsIChannel = Components.interfaces.nsIChannel;
204                                                 if (stateFlags == 65540 || stateFlags == 65537 || stateFlags == 65552) { return; }
205                                                 s += ('onStateChange: stateFlags = ' + stateFlags + ' status = ' + status + '\n');
206                                                 if (stateFlags & nsIWebProgressListener.STATE_IS_REQUEST) {
207                                                         s += ('\tSTATE_IS_REQUEST\n');
208                                                 }
209                                                 if (stateFlags & nsIWebProgressListener.STATE_IS_DOCUMENT) {
210                                                         s += ('\tSTATE_IS_DOCUMENT\n');
211                                                         if( stateFlags & nsIWebProgressListener.STATE_STOP ) {
212                                                                 obj.push_variables(); obj.updateNavButtons();
213                                                                 if (typeof obj.on_url_load == 'function') {
214                                                                         try {
215                                                                                 obj.error.sdump('D_TRACE','calling on_url_load');
216                                                                                 obj.on_url_load( obj.controller.view.browser_browser );
217                                                                                 if (obj.debug_label) {
218                                                                                         try {
219                                                                                                 document.getElementById(obj.debug_label).setAttribute('tooltiptext','url: ' + obj.get_content().location.href);
220                                                                                         } catch(E) {
221                                                                                                 obj.error.sdump('D_ERROR','on_url_load, debug_label: ' + E );
222                                                                                         }
223                                                                                 }
224                                                                         } catch(E) {
225                                                                                 obj.error.sdump('D_ERROR','on_url_load: ' + E );
226                                                                         }
227                                                                 }
228                                                         }
229                                                 }
230                                                 if (stateFlags & nsIWebProgressListener.STATE_IS_NETWORK) {
231                                                         s += ('\tSTATE_IS_NETWORK\n');
232                                                 }
233                                                 if (stateFlags & nsIWebProgressListener.STATE_IS_WINDOW) {
234                                                         s += ('\tSTATE_IS_WINDOW\n');
235                                                 }
236                                                 if (stateFlags & nsIWebProgressListener.STATE_START) {
237                                                         s += ('\tSTATE_START\n');
238                                                 }
239                                                 if (stateFlags & nsIWebProgressListener.STATE_REDIRECTING) {
240                                                         s += ('\tSTATE_REDIRECTING\n');
241                                                 }
242                                                 if (stateFlags & nsIWebProgressListener.STATE_TRANSFERING) {
243                                                         s += ('\tSTATE_TRANSFERING\n');
244                                                 }
245                                                 if (stateFlags & nsIWebProgressListener.STATE_NEGOTIATING) {
246                                                         s += ('\tSTATE_NEGOTIATING\n');
247                                                 }
248                                                 if (stateFlags & nsIWebProgressListener.STATE_STOP) {
249                                                         s += ('\tSTATE_STOP\n');
250                                                 }
251                                                 //obj.error.sdump('D_BROWSER',s);       
252                                         } catch(E) {
253                                                 obj.error.sdump('D_ERROR','util.browser.progresslistener.onstatechange: ' + js2JSON(E));
254                                         }
255                                 }
256                         }
257                         obj.progressListener.QueryInterface = function(){return this;};
258                 } catch(E) {
259                         this.error.sdump('D_ERROR','util.browser.buildProgressListener: ' + E + '\n');
260                 }
261         },
262 }
263
264 dump('exiting util.browser.js\n');