]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/openils/XUL.js
Fix overzealous prompting for auth credentials, and some debug lines
[working/Evergreen.git] / Open-ILS / web / js / dojo / openils / XUL.js
1 if(!dojo._hasResource["openils.XUL"]) {
2
3     dojo.provide("openils.XUL");
4     dojo.require('dojo.cookie');
5     dojo.declare('openils.XUL', null, {});
6
7     openils.XUL.isXUL = function() {
8         return Boolean(dojo.cookie('xul')) || Boolean(window.IAMXUL);
9     }
10
11     openils.XUL.buildId = function() {
12         return window.XUL_BUILD_ID || '';
13     }
14     
15     openils.XUL.getStash = function() {
16         if(openils.XUL.isXUL()) {
17             try {
18                 if(openils.XUL.enableXPConnect()) {
19                     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
20                     var CacheClass = new Components.Constructor("@mozilla.org/openils_data_cache;1", "nsIOpenILS");
21                     return new CacheClass().wrappedJSObject.OpenILS.prototype.data;
22                 }
23             } catch(e) {
24                 console.log("Error loading XUL stash: " + e);
25                 return { 'error' : e };
26             }
27         }
28
29         return { 'error' : 'openils.XUL.isXUL() == false' };
30     }
31
32     openils.XUL.newTab = function(path, tabInfo, options) {
33         if(xulG == undefined) 
34             throw new Error('xulG is not defined.  Cannot open tab');
35         xulG.new_tab(path, tabInfo, options);
36     }
37
38     openils.XUL.newTabEasy = function(url, tab_name, extra_content_params) {
39         var content_params = {
40             "session": openils.User.authtoken,
41             "authtime": openils.User.authtime
42         };
43
44         ["url_prefix", "new_tab", "set_tab", "close_tab", "new_patron_tab",
45             "set_patron_tab", "volume_item_creator", "get_new_session",
46             "holdings_maintenance_tab", "set_tab_name", "open_chrome_window",
47             "url_prefix", "network_meter", "page_meter", "set_statusbar",
48             "set_help_context"
49         ].forEach(function(k) { content_params[k] = xulG[k]; });
50
51         if (extra_content_params)
52             dojo.mixin(content_params, extra_content_params);
53
54         xulG.new_tab(
55             xulG.url_prefix(url), {"tab_name": tab_name}, content_params
56         );
57     };
58
59     /**
60      * @return bool True if a new session was successfully created, false otherwise.
61      */
62     openils.XUL.getNewSession = function(callback) {
63         return xulG.get_new_session({callback : callback});
64     }
65
66     /** 
67      * This can be used by privileged Firefox in addition to XUL.
68      * To use use in Firefox directly, set signed.applets.codebase_principal_support to true in about:config
69      */ 
70     openils.XUL.enableXPConnect = function() {
71         try {
72             netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
73         } catch (E) {
74             if(dojo.isFF) {
75                 console.error("Unable to enable UniversalXPConnect privileges.  " +
76                     "Try setting 'signed.applets.codebase_principal_support' to true in about:config");
77             }
78             return false;
79         }
80         return true;
81     }
82
83     /* This class cuts down on the obscenely long incantations needed to
84      * use XPCOM components. */
85     openils.XUL.SimpleXPCOM = function() {};
86     openils.XUL.SimpleXPCOM.prototype = {
87         "FP": {
88             "iface": Components.interfaces.nsIFilePicker,
89             "cls": "@mozilla.org/filepicker;1"
90         },
91         "FIS": {
92             "iface": Components.interfaces.nsIFileInputStream,
93             "cls": "@mozilla.org/network/file-input-stream;1"
94         },
95         "SIS": {
96             "iface": Components.interfaces.nsIScriptableInputStream,
97             "cls": "@mozilla.org/scriptableinputstream;1"
98         },
99         "FOS": {
100             "iface": Components.interfaces.nsIFileOutputStream,
101             "cls": "@mozilla.org/network/file-output-stream;1"
102         },
103         "create": function(key) {
104             return Components.classes[this[key].cls].
105                 createInstance(this[key].iface);
106         },
107         "getPrivilegeManager": function() {
108             return netscape.security.PrivilegeManager;
109         }
110     };
111
112     openils.XUL.contentFromFileOpenDialog = function(windowTitle, sizeLimit) {
113         var api = new openils.XUL.SimpleXPCOM();
114
115         /* The following enablePrivilege() call must happen at this exact
116          * level of scope -- not wrapped in another function -- otherwise
117          * it doesn't work. */
118         api.getPrivilegeManager().enablePrivilege("UniversalXPConnect");
119
120         var picker = api.create("FP");
121         picker.init(
122             window, windowTitle || "Upload File", api.FP.iface.modeOpen
123         );
124         if (picker.show() == api.FP.iface.returnOK && picker.file) {
125             var fis = api.create("FIS");
126             var sis = api.create("SIS");
127
128             fis.init(picker.file, 1 /* MODE_RDONLY */, 0, 0);
129             sis.init(fis);
130
131             return sis.read(sizeLimit || -1);
132         } else {
133             return null;
134         }
135     };
136
137     openils.XUL.contentToFileSaveDialog = function(content, windowTitle) {
138         var api = new openils.XUL.SimpleXPCOM();
139         api.getPrivilegeManager().enablePrivilege("UniversalXPConnect");
140
141         var picker = api.create("FP");
142         picker.init(
143             window, windowTitle || "Save File", api.FP.iface.modeSave
144         );
145         var result = picker.show();
146         if (picker.file &&
147                 (result == api.FP.iface.returnOK ||
148                     result == api.FP.iface.returnReplace)) {
149             if (!picker.file.exists())
150                 picker.file.create(0, 0644); /* XXX hardcoded = bad */
151             var fos = api.create("FOS");
152             fos.init(picker.file, 42 /* WRONLY | CREAT | TRUNCATE */, 0644, 0);
153             return fos.write(content, content.length);
154         } else {
155             return 0;
156         }
157     };
158 }