1 dump('entering main/main.js\n');
8 function grant_perms(url) {
9 var perms = "UniversalXPConnect UniversalPreferencesWrite UniversalBrowserWrite UniversalPreferencesRead UniversalBrowserRead UniversalFileRead";
10 dump('Granting ' + perms + ' to ' + url + '\n');
11 var pref = Components.classes["@mozilla.org/preferences-service;1"]
12 .getService(Components.interfaces.nsIPrefBranch);
14 pref.setCharPref("capability.principal.codebase.p0.granted", perms);
15 pref.setCharPref("capability.principal.codebase.p0.id", url);
16 pref.setCharPref("capability.principal.codebase.p1.granted", perms);
17 pref.setCharPref("capability.principal.codebase.p1.id", url.replace('http:','https:'));
18 pref.setBoolPref("dom.disable_open_during_load",false);
19 pref.setBoolPref("browser.popups.showPopupBlocker",false);
24 function clear_the_cache() {
26 var cacheClass = Components.classes["@mozilla.org/network/cache-service;1"];
27 var cacheService = cacheClass.getService(Components.interfaces.nsICacheService);
28 cacheService.evictEntries(Components.interfaces.nsICache.STORE_ON_DISK);
29 cacheService.evictEntries(Components.interfaces.nsICache.STORE_IN_MEMORY);
31 dump(E+'\n');alert(E);
35 function toOpenWindowByType(inType, uri) { /* for Venkman */
37 var winopts = "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar";
38 window.open(uri, "_blank", winopts);
44 function start_debugger() {
47 try { start_venkman(); } catch(E) { alert(E); }
52 function start_inspector() {
55 try { inspectDOMDocument(); } catch(E) { alert(E); }
60 function start_chrome_list() {
63 try { startChromeList(); } catch(E) { alert(E); }
68 function start_js_shell() {
71 try { window.open('chrome://open_ils_staff_client/content/util/shell.html','shell','chrome,resizable,scrollbars'); } catch(E) { alert(E); }
76 function main_init() {
77 dump('entering main_init()\n');
81 // Now we can safely load the strings without the cache getting wiped
82 offlineStrings = document.getElementById('offlineStrings');
83 authStrings = document.getElementById('authStrings');
85 if (typeof JSAN == 'undefined') {
87 offlineStrings.getString('common.jsan.missing')
90 /////////////////////////////////////////////////////////////////////////////
92 var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
94 JSAN.errorLevel = "die"; // none, warn, or die
95 JSAN.addRepository('..');
97 //JSAN.use('test.test'); test.test.hello_world();
102 JSAN.use('util.error');
103 G.error = new util.error();
104 G.error.sdump('D_ERROR', offlineStrings.getString('main.testing'));
106 JSAN.use('util.window');
107 G.window = new util.window();
109 JSAN.use('auth.controller');
110 G.auth = new auth.controller( { 'window' : mw } );
112 JSAN.use('OpenILS.data');
113 G.data = new OpenILS.data();
114 G.data.on_error = G.auth.logoff;
116 JSAN.use('util.file');
117 G.file = new util.file();
119 G.file.get('ws_info');
120 G.ws_info = G.file.get_object(); G.file.close();
124 G.data.ws_info = G.ws_info; G.data.stash('ws_info');
126 G.auth.on_login = function() {
128 var url = G.auth.controller.view.server_prompt.value || urls.remote;
130 G.data.server_unadorned = url; G.data.stash('server_unadorned'); G.data.stash_retrieve();
132 if (! url.match( '^http://' ) ) { url = 'http://' + url; }
134 G.data.server = url; G.data.stash('server');
135 G.data.session = { 'key' : G.auth.session.key, 'auth' : G.auth.session.authtime }; G.data.stash('session');
136 G.data.stash_retrieve();
138 var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
139 var cookieUri = ios.newURI("http://" + G.data.server_unadorned, null, null);
140 var cookieUriSSL = ios.newURI("https://" + G.data.server_unadorned, null, null);
141 var cookieSvc = Components.classes["@mozilla.org/cookieService;1"].getService(Components.interfaces.nsICookieService);
143 cookieSvc.setCookieString(cookieUri, null, "ses="+G.data.session.key, null);
144 cookieSvc.setCookieString(cookieUriSSL, null, "ses="+G.data.session.key, null);
147 alert(offlineStrings.getFormattedString(main.session_cookie.error, [E]));
159 if (G.data.ws_info && G.data.ws_info[G.auth.controller.view.server_prompt.value]) {
160 JSAN.use('util.widgets');
161 var deck = document.getElementById('progress_space');
162 util.widgets.remove_children( deck );
163 var iframe = document.createElement('iframe'); deck.appendChild(iframe);
164 iframe.setAttribute( 'src', url + '/xul/server/main/data.xul' );
165 iframe.contentWindow.xulG = xulG;
166 G.data_xul = iframe.contentWindow;
169 var deck = G.auth.controller.view.ws_deck;
170 JSAN.use('util.widgets'); util.widgets.remove_children('ws_deck');
171 var iframe = document.createElement('iframe'); deck.appendChild(iframe);
172 iframe.setAttribute( 'src', url + '/xul/server/main/ws_info.xul' );
173 iframe.contentWindow.xulG = xulG;
174 deck.selectedIndex = deck.childNodes.length - 1;
178 G.auth.on_standalone = function() {
180 G.window.open(urls.XUL_STANDALONE,'Offline','chrome,resizable');
186 G.auth.on_standalone_export = function() {
188 JSAN.use('util.file'); var file = new util.file('pending_xacts');
189 if (file._file.exists()) {
190 var file2 = new util.file('');
191 var f = file2.pick_file( { 'mode' : 'save', 'title' : offlineStrings.getString('main.transaction_export.title') } );
194 var r = G.error.yns_alert(
195 offlineStrings.getFormattedString('main.transaction_export.prompt', [f.leafName]),
196 offlineStrings.getString('main.transaction_export.prompt.title'),
197 offlineStrings.getString('common.yes'),
198 offlineStrings.getString('common.no'),
200 offlineStrings.getString('common.confirm')
202 if (r != 0) { file.close(); return; }
204 var e_file = new util.file(''); e_file._file = f;
205 e_file.write_content( 'truncate', file.get_content() );
207 var r = G.error.yns_alert(
208 offlineStrings.getFormattedString('main.transaction_export.success.prompt', [f.leafName]),
209 offlineStrings.getString('main.transaction_export.success.title'),
210 offlineStrings.getString('common.yes'),
211 offlineStrings.getString('common.no'),
213 offlineStrings.getString('common.confirm')
217 var filename = 'pending_xacts_exported_' + new Date().getTime();
218 var t_file = new util.file(filename);
219 while (t_file._file.exists()) {
220 filename = 'pending_xacts_' + new Date().getTime() + '.exported';
221 t_file = new util.file(filename);
223 throw(offlineStrings.getString('main.transaction_export.filename.error'));
226 file._file.moveTo(null,filename);
228 alert(offlineStrings.getString('main.transaction_export.duplicate.warning'));
231 alert(offlineStrings.getString('main.transaction_export.no_filename.error'));
234 alert(offlineStrings.getString('main.transaction_export.no_transactions.error'));
242 G.auth.on_standalone_import = function() {
244 JSAN.use('util.file'); var file = new util.file('pending_xacts');
245 if (file._file.exists()) {
246 alert(offlineStrings.getString('main.transaction_import.outstanding.error'));
248 var file2 = new util.file('');
249 var f = file2.pick_file( { 'mode' : 'open', 'title' : offlineStrings.getString('main.transaction_import.title')} );
250 if (f && f.exists()) {
251 var i_file = new util.file(''); i_file._file = f;
252 file.write_content( 'truncate', i_file.get_content() );
254 var r = G.error.yns_alert(
255 offlineStrings.getFormattedString('main.transaction_import.delete.prompt', [f.leafName]),
256 offlineStrings.getString('main.transaction_import.success'),
257 offlineStrings.getString('common.yes'),
258 offlineStrings.getString('common.no'),
260 offlineStrings.getString('common.confirm')
273 G.auth.on_debug = function(action) {
276 G.window.open(urls.XUL_DEBUG_CONSOLE,'testconsole','chrome,resizable');
280 alert(offlineStrings.getString('main.on_debug.clear_cache'));
283 alert(offlineStrings.getString('main.on_debug.debug'));
289 // XML_HTTP_SERVER will get reset to G.auth.controller.view.server_prompt.value
291 /////////////////////////////////////////////////////////////////////////////
293 var version = '/xul/server/'.split(/\//)[2];
294 if (version == 'server') {
295 version = 'versionless debug build';
296 document.getElementById('debug_gb').hidden = false;
299 if (pref && pref.getBoolPref('open-ils.debug_options')) {
300 document.getElementById('debug_gb').hidden = false;
303 window.title = authStrings.getFormattedString('staff.auth.titlebar.label', version);
304 var x = document.getElementById('about_btn');
309 G.window.open('about.html','about','chrome,resizable,width=800,height=600');
310 } catch(E) { alert(E); }
315 var y = document.getElementById('new_window_btn');
319 if (G.data.session) {
321 //G.data_xul.g.open_menu();
322 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
323 var mframe = xulG.window.open(( String(urls.XUL_MENU_FRAME).match(/^chrome:/) ? '' : G.data.server ) + urls.XUL_MENU_FRAME
324 + '?server='+window.escape(G.data.server),
325 'main'+xulG.window.window_name_increment(),'chrome,resizable'
328 } catch(E) { alert(E); }
330 alert ( offlineStrings.getString('main.new_window_btn.login_first_warning') );
336 JSAN.use('util.mozilla');
337 var z = document.getElementById('locale_menupopup');
339 while (z.lastChild) z.removeChild(z.lastChild);
340 var locales = util.mozilla.chromeRegistry().getLocalesForPackage( String( location.href ).split(/\//)[2] );
341 var current_locale = util.mozilla.prefs().getCharPref('general.useragent.locale');
342 while (locales.hasMore()) {
343 var locale = locales.getNext();
344 var parts = locale.split(/-/);
347 label = locale + ' : ' + util.mozilla.languages().GetStringFromName(parts[0]);
348 if (parts.length > 1) {
350 label += ' (' + util.mozilla.regions().GetStringFromName(parts[1].toLowerCase()) + ')';
352 label += ' (' + parts[1] + ')';
358 var mi = document.createElement('menuitem');
359 mi.setAttribute('label',label);
360 mi.setAttribute('value',locale);
361 if (locale == current_locale) {
362 if (z.parentNode.tagName == 'menulist') {
363 mi.setAttribute('selected','true');
364 z.parentNode.setAttribute('label',label);
365 z.parentNode.setAttribute('value',locale);
371 var xx = document.getElementById('apply_locale_btn');
375 util.mozilla.change_locale(z.parentNode.value);
380 if ( found_ws_info_in_Achrome() && pref && pref.getBoolPref("open-ils.write_in_user_chrome_directory") ) {
381 //var hbox = x.parentNode; var b = document.createElement('button');
382 //b.setAttribute('label','Migrate legacy settings'); hbox.appendChild(b);
383 //b.addEventListener(
387 // handle_migration();
388 // } catch(E) { alert(E); }
392 if (window.confirm(offlineStrings.getString('main.settings.migrate'))) {
393 setTimeout( function() { handle_migration(); }, 0 );
398 var error = offlineStrings.getFormattedString('common.exception', [E, '']);
399 try { G.error.sdump('D_ERROR',error); } catch(E) { dump(error); }
402 dump('exiting main_init()\n');
405 function found_ws_info_in_Achrome() {
406 JSAN.use('util.file');
407 var f = new util.file();
408 var f_in_chrome = f.get('ws_info','chrome');
409 var path = f_in_chrome.exists() ? f_in_chrome.path : false;
414 function found_ws_info_in_Uchrome() {
415 JSAN.use('util.file');
416 var f = new util.file();
417 var f_in_uchrome = f.get('ws_info','uchrome');
418 var path = f_in_uchrome.exists() ? f_in_uchrome.path : false;
423 function handle_migration() {
424 if ( found_ws_info_in_Uchrome() ) {
425 alert(offlineStrings.getFormattedString('main.settings.migrate.failed', [found_ws_info_in_Uchrome(), found_ws_info_in_Achrome()])
428 var dirService = Components.classes["@mozilla.org/file/directory_service;1"].getService( Components.interfaces.nsIProperties );
429 var f_new = dirService.get( "UChrm", Components.interfaces.nsIFile );
430 var f_old = dirService.get( "AChrom", Components.interfaces.nsIFile );
431 f_old.append(myPackageDir); f_old.append("content"); f_old.append("conf");
432 if (window.confirm(offlineStrings.getFormattedString("main.settings.migrate.confirm", [f_old.path, f_new.path]))) {
433 var files = f_old.directoryEntries;
434 while (files.hasMoreElements()) {
435 var file = files.getNext();
436 var file2 = file.QueryInterface( Components.interfaces.nsILocalFile );
438 file2.moveTo( f_new, '' );
440 alert(offlineStrings.getFormattedString('main.settings.migrate.error', [file2.path, f_new.path]) + '\n');
443 location.href = location.href; // huh?
448 dump('exiting main/main.js\n');