]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/openils/XUL.js
Acq: Added a working LI search interface.
[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                                 var CacheClass = new Components.Constructor("@mozilla.org/openils_data_cache;1", "nsIOpenILS");
20                                 return new CacheClass().wrappedJSObject.OpenILS.prototype.data;
21                 }
22             } catch(e) {
23                 console.log("Error loading XUL stash: " + e);
24             }
25         }
26
27         return {};
28     }
29
30     openils.XUL.newTab = function(path, tabInfo, options) {
31         if(xulG == undefined) 
32             throw new Error('xulG is not defined.  Cannot open tab');
33         xulG.new_tab(path, tabInfo, options);
34     }
35
36     /** 
37      * This can be used by privileged Firefox in addition to XUL.
38      * To use use in Firefox directly, set signed.applets.codebase_principal_support to true in about:config
39      */ 
40     openils.XUL.enableXPConnect = function() {
41         try {
42             netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
43         } catch (E) {
44             if(dojo.isFF) {
45                 console.error("Unable to enable UniversalXPConnect privileges.  " +
46                     "Try setting 'signed.applets.codebase_principal_support' to true in about:config");
47             }
48             return false;
49         }
50         return true;
51     }
52
53     /* This class cuts down on the obscenely long incantations needed to
54      * use XPCOM components. */
55     openils.XUL.SimpleXPCOM = function() {};
56     openils.XUL.SimpleXPCOM.prototype = {
57         "FP": {
58             "iface": Components.interfaces.nsIFilePicker,
59             "cls": "@mozilla.org/filepicker;1"
60         },
61         "FIS": {
62             "iface": Components.interfaces.nsIFileInputStream,
63             "cls": "@mozilla.org/network/file-input-stream;1"
64         },
65         "SIS": {
66             "iface": Components.interfaces.nsIScriptableInputStream,
67             "cls": "@mozilla.org/scriptableinputstream;1"
68         },
69         "create": function(key) {
70             return Components.classes[this[key].cls].
71                 createInstance(this[key].iface);
72         },
73         "getPrivilegeManager": function() {
74             return netscape.security.PrivilegeManager;
75         }
76     };
77
78     openils.XUL.contentFromFileOpenDialog = function(windowTitle) {
79         try {
80             var api = new openils.XUL.SimpleXPCOM();
81
82             /* The following enablePrivilege() call must happen at this exact
83              * level of scope -- not wrapped in another function -- otherwise
84              * it doesn't work. */
85             api.getPrivilegeManager().enablePrivilege("UniversalXPConnect");
86
87             var picker = api.create("FP");
88             picker.init(
89                 window, windowTitle || "Upload File", api.FP.iface.modeOpen
90             );
91             if (picker.show() == api.FP.iface.returnOK && picker.file) {
92                 var fis = api.create("FIS");
93                 var sis = api.create("SIS");
94
95                 fis.init(picker.file, 1 /* MODE_RDONLY */, 0, 0);
96                 sis.init(fis);
97
98                 return sis.read(-1);
99             } else {
100                 return null;
101             }
102         } catch(E) {
103             alert(E);
104             return null;
105         }
106     };
107 }