]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/window.js
1b3d4218caa5a804ad2614016a943dcba2687e8f
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / window.js
1 dump('entering util/window.js\n');
2
3 if (typeof util == 'undefined') util = {};
4 util.window = function () {
5         JSAN.use('util.error'); this.error = new util.error(); this.win = window;
6         return this;
7 };
8
9 util.window.prototype = {
10         
11         // list of open window references, used for debugging in shell
12         'win_list' : [],        
13
14         // list of Top Level menu interface window references
15         'appshell_list' : [],   
16
17         // list of documents for debugging.  BROKEN
18         'doc_list' : [],        
19
20         // Windows need unique names.  This number helps.
21         'window_name_increment' : 0, 
22
23         // This number gets put into the title bar for Top Level menu interface windows
24         'appshell_name_increment' : function() {
25                 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
26                 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
27                 var enumerator = windowManagerInterface.getEnumerator(null);
28
29                 var i = 0; while ( w = enumerator.getNext() ) { i++; }
30
31                 return i - 1;
32         },
33
34         // From: Bryan White on netscape.public.mozilla.xpfe, Oct 13, 2004
35         // Message-ID: <ckjh7a$18q1@ripley.netscape.com>
36         // Modified by Jason for Evergreen
37         'SafeWindowOpen' : function (url,title,features) {
38                 var w;
39
40                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
41                 netscape.security.PrivilegeManager.enablePrivilege("UniversalPreferencesRead");
42                 netscape.security.PrivilegeManager.enablePrivilege("UniversalPreferencesWrite");
43                 netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
44                 netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
45
46                 const CI = Components.interfaces;
47                 const PB = Components.classes["@mozilla.org/preferences-service;1"].getService(CI.nsIPrefBranch);
48
49                 var blocked = false;
50                 try {
51                         // pref 'dom.disable_open_during_load' is the main popup blocker preference
52                         blocked = PB.getBoolPref("dom.disable_open_during_load");
53                         if(blocked) PB.setBoolPref("dom.disable_open_during_load",false);
54                         w = this.win.open(url,title,features);
55                 } catch(E) {
56                         this.error.sdump('D_ERROR','window.SafeWindowOpen: ' + E + '\n');
57                         throw(E);
58                 }
59                 if(blocked) PB.setBoolPref("dom.disable_open_during_load",true);
60
61                 return w;
62         },
63
64         'open' : function(url,title,features) {
65                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
66                 if (!title) title = 'anon' + window_name_increment++;
67                 if (!features) features = 'chrome';
68                 this.error.sdump('D_WIN',
69                         'opening ' + url + ', ' + title + ', ' + features + ' from ' + this.win + '\n');
70                 var w = this.SafeWindowOpen(url,title,features);
71                 /*
72                 setTimeout( 
73                         function() { 
74                                 try { w.title = title; } catch(E) { dump('**'+E+'\n'); }
75                                 try { w.document.title = title; } catch(E) { dump('**'+E+'\n'); }
76                         }, 0 
77                 );
78                 */
79                 return w;
80         }
81 }
82
83 dump('exiting util/window.js\n');