1 if(!dojo._hasResource["openils.XUL"]) {
3 dojo.provide("openils.XUL");
4 dojo.require('dojo.cookie');
5 dojo.declare('openils.XUL', null, {});
7 openils.XUL.isXUL = function() {
8 return Boolean(dojo.cookie('xul')) || Boolean(window.IAMXUL);
12 openils.XUL.buildId = function() {
13 return window.XUL_BUILD_ID || '';
16 openils.XUL.getStash = function() {
17 if(openils.XUL.isXUL()) {
19 if(openils.XUL.enableXPConnect()) {
20 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
21 var CacheClass = new Components.Constructor("@mozilla.org/openils_data_cache;1", "nsIOpenILS");
22 return new CacheClass().wrappedJSObject.OpenILS.prototype.data;
25 console.log("Error loading XUL stash: " + e);
26 return { 'error' : e };
30 return { 'error' : 'openils.XUL.isXUL() == false' };
33 openils.XUL.newTab = function(path, tabInfo, options) {
35 throw new Error('xulG is not defined. Cannot open tab');
36 xulG.new_tab(path, tabInfo, options);
39 openils.XUL.newTabEasy = function(
40 url, tab_name, extra_content_params, wrap_in_browser
42 var content_params = {
43 "session": openils.User.authtoken,
44 "authtime": openils.User.authtime
47 ["url_prefix", "new_tab", "set_tab", "close_tab", "new_patron_tab",
48 "set_patron_tab", "volume_item_creator", "get_new_session",
49 "holdings_maintenance_tab", "set_tab_name", "open_chrome_window",
50 "url_prefix", "network_meter", "page_meter", "set_statusbar",
52 ].forEach(function(k) { content_params[k] = xulG[k]; });
54 if (extra_content_params)
55 dojo.mixin(content_params, extra_content_params);
57 var loc = xulG.url_prefix(url);
59 if (wrap_in_browser) {
60 var urls = xulG.urls || window.urls;
61 loc = urls.XUL_BROWSER + "?url=" + window.escape(loc);
62 content_params = dojo.mixin(
64 "no_xulG": false, "show_print_button": true,
65 "show_nav_buttons": true,
66 "passthru_content_params": extra_content_params
71 xulG.new_tab(loc, {"tab_name": tab_name}, content_params);
75 * @return bool True if a new session was successfully created, false otherwise.
77 openils.XUL.getNewSession = function(callback) {
78 return xulG.get_new_session({callback : callback});
82 * This can be used by privileged Firefox in addition to XUL.
83 * To use use in Firefox directly, set signed.applets.codebase_principal_support to true in about:config
85 openils.XUL.enableXPConnect = function() {
87 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
90 console.error("Unable to enable UniversalXPConnect privileges. " +
91 "Try setting 'signed.applets.codebase_principal_support' to true in about:config");
98 /* This class cuts down on the obscenely long incantations needed to
99 * use XPCOM components. */
100 openils.XUL.SimpleXPCOM = function() {};
101 openils.XUL.SimpleXPCOM.prototype = {
103 "iface": Components.interfaces.nsIFilePicker,
104 "cls": "@mozilla.org/filepicker;1"
107 "iface": Components.interfaces.nsIFileInputStream,
108 "cls": "@mozilla.org/network/file-input-stream;1"
111 "iface": Components.interfaces.nsIScriptableInputStream,
112 "cls": "@mozilla.org/scriptableinputstream;1"
115 "iface": Components.interfaces.nsIFileOutputStream,
116 "cls": "@mozilla.org/network/file-output-stream;1"
118 "create": function(key) {
119 return Components.classes[this[key].cls].
120 createInstance(this[key].iface);
122 "getPrivilegeManager": function() {
123 return netscape.security.PrivilegeManager;
127 openils.XUL.contentFromFileOpenDialog = function(windowTitle, sizeLimit) {
128 var api = new openils.XUL.SimpleXPCOM();
130 /* The following enablePrivilege() call must happen at this exact
131 * level of scope -- not wrapped in another function -- otherwise
132 * it doesn't work. */
133 api.getPrivilegeManager().enablePrivilege("UniversalXPConnect");
135 var picker = api.create("FP");
137 window, windowTitle || "Upload File", api.FP.iface.modeOpen
139 if (picker.show() == api.FP.iface.returnOK && picker.file) {
140 var fis = api.create("FIS");
141 var sis = api.create("SIS");
143 fis.init(picker.file, 1 /* MODE_RDONLY */, 0, 0);
146 return sis.read(sizeLimit || -1);
152 openils.XUL.contentToFileSaveDialog = function(content, windowTitle, dispositionArgs) {
153 var api = new openils.XUL.SimpleXPCOM();
154 api.getPrivilegeManager().enablePrivilege("UniversalXPConnect");
156 var picker = api.create("FP");
158 window, windowTitle || "Save File", api.FP.iface.modeSave
161 if (dispositionArgs) {
163 * https://developer.mozilla.org/En/NsIFilePicker
165 * { defaultString : 'MyExport.csv',
166 defaultExtension : '.csv',
168 filterExtension : '*.csv',
169 filterAll : true } */
171 picker.defaultString = dispositionArgs.defaultString;
172 picker.defaultExtension = dispositionArgs.defaultExtension;
173 if (dispositionArgs.filterName) {
175 dispositionArgs.filterName,
176 dispositionArgs.filterExtension
179 if (dispositionArgs.filterAll)
180 picker.appendFilters(picker.filterAll)
183 var result = picker.show();
185 (result == api.FP.iface.returnOK ||
186 result == api.FP.iface.returnReplace)) {
187 if (!picker.file.exists())
188 picker.file.create(0, 0644); /* XXX hardcoded = bad */
189 var fos = api.create("FOS");
190 fos.init(picker.file, 42 /* WRONLY | CREAT | TRUNCATE */, 0644, 0);
191 return fos.write(content, content.length);