1 dump('entering main/main.js\n');
7 var openTabs = new Array();
9 var tempFocusWindow = null;
11 function grant_perms(url) {
12 var perms = "UniversalXPConnect UniversalPreferencesWrite UniversalBrowserWrite UniversalPreferencesRead UniversalBrowserRead UniversalFileRead";
13 dump('Granting ' + perms + ' to ' + url + '\n');
15 G.pref.setCharPref("capability.principal.codebase.p0.granted", perms);
16 G.pref.setCharPref("capability.principal.codebase.p0.id", url);
17 G.pref.setCharPref("capability.principal.codebase.p1.granted", perms);
18 G.pref.setCharPref("capability.principal.codebase.p1.id", url.replace('http:','https:'));
19 G.pref.setBoolPref("dom.disable_open_during_load",false);
20 G.pref.setBoolPref("browser.popups.showPopupBlocker",false);
25 function clear_the_cache() {
27 var cacheClass = Components.classes["@mozilla.org/network/cache-service;1"];
28 var cacheService = cacheClass.getService(Components.interfaces.nsICacheService);
29 cacheService.evictEntries(Components.interfaces.nsICache.STORE_ON_DISK);
30 cacheService.evictEntries(Components.interfaces.nsICache.STORE_IN_MEMORY);
32 dump(E+'\n');alert(E);
36 function toOpenWindowByType(inType, uri) { /* for Venkman */
38 var winopts = "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar";
39 window.open(uri, "_blank", winopts);
45 function start_debugger() {
48 try { start_venkman(); } catch(E) { alert(E); }
53 function start_inspector() {
56 try { inspectDOMDocument(); } catch(E) { alert(E); }
61 function start_chrome_list() {
64 try { startChromeList(); } catch(E) { alert(E); }
69 function start_js_shell() {
72 try { window.open('chrome://open_ils_staff_client/content/util/shell.html','shell','chrome,resizable,scrollbars'); } catch(E) { alert(E); }
77 function new_tabs(aTabList, aContinue) {
78 if(aTabList != null) {
79 openTabs = openTabs.concat(aTabList);
81 if(G.data.session) { // Just add to the list of stuff to open unless we are logged in
82 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
83 var targetwindow = null;
84 var focuswindow = null;
85 var focustab = {'focus' : true};
86 if(aContinue == true && tempWindow.closed == false) {
87 if(tempWindow.g == undefined || tempWindow.g.menu == undefined) {
94 targetwindow = tempWindow;
96 focuswindow = tempFocusWindow;
97 tempFocusWindow = null;
98 focustab = {'nofocus' : true};
100 else if(tempWindow != null) { // In theory, we are waiting on a setTimeout
101 if(tempWindow.closed == true) // But someone closed our window?
104 tempFocusWindow = null;
113 var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
114 getService(Components.interfaces.nsIWindowMediator);
115 // This may look out of place, but this is so we can continue this loop from down below
117 while(openTabs.length > 0) {
118 newTab = openTabs.shift();
119 if(newTab == 'new' || newTab == 'init') {
120 if(newTab != 'init' && openTabs.length > 0 && openTabs[0] != 'new') {
121 firstURL = openTabs.shift();
122 if(firstURL != 'tab') { // 'new' followed by 'tab' should be equal to 'init' in functionality, this should do that
124 firstURL = urls[firstURL];
126 firstURL = '&firstURL=' + window.escape(firstURL);
135 targetwindow = xulG.window.open(urls.XUL_MENU_FRAME
136 + '?server='+window.escape(G.data.server) + firstURL,
137 '_blank','chrome,resizable'
139 targetwindow.xulG = xulG;
140 if (focuswindow == null) {
141 focuswindow = targetwindow;
143 tempWindow = targetwindow;
144 tempFocusWindow = focuswindow;
147 new_tabs(null, true);
152 if(newTab == 'tab') {
155 else if(urls[newTab]) {
156 newTab = urls[newTab];
158 if(targetwindow != null) { // Already have a previous target window? Use it first.
159 if(targetwindow.g.menu.new_tab(newTab,focustab,null)) {
160 focustab = {'nofocus' : true};
164 var enumerator = wm.getEnumerator('eg_menu');
165 while(enumerator.hasMoreElements()) {
166 targetwindow = enumerator.getNext();
167 if(targetwindow.g.menu.new_tab(newTab,focustab,null)) {
168 focustab = {'nofocus' : true};
169 if (focuswindow == null) {
170 focuswindow = targetwindow;
175 // No windows found to add the tab to? Make a new one.
176 if(newTab == null) { // Were we making a "default" tab?
177 openTabs.unshift('init'); // 'init' does that for us!
180 openTabs.unshift('new',newTab);
184 if(focuswindow != null) {
190 function main_init() {
191 dump('entering main_init()\n');
194 if("arguments" in window && window.arguments.length > 0 && window.arguments[0].wrappedJSObject != undefined && window.arguments[0].wrappedJSObject.openTabs != undefined) {
195 openTabs = openTabs.concat(window.arguments[0].wrappedJSObject.openTabs);
198 // Now we can safely load the strings without the cache getting wiped
199 offlineStrings = document.getElementById('offlineStrings');
200 authStrings = document.getElementById('authStrings');
202 if (typeof JSAN == 'undefined') {
204 offlineStrings.getString('common.jsan.missing')
207 /////////////////////////////////////////////////////////////////////////////
209 JSAN.errorLevel = "die"; // none, warn, or die
210 JSAN.addRepository('..');
212 //JSAN.use('test.test'); test.test.hello_world();
217 G.pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
218 if (! G.pref.prefHasUserValue('general.useragent.override')) {
219 G.pref.setCharPref('general.useragent.override',navigator.userAgent + ' oils_xulrunner /xul/server/');
222 JSAN.use('util.error');
223 G.error = new util.error();
224 G.error.sdump('D_ERROR', offlineStrings.getString('main.testing'));
226 JSAN.use('util.window');
227 G.window = new util.window();
229 JSAN.use('auth.controller');
230 G.auth = new auth.controller( { 'window' : mw } );
232 JSAN.use('OpenILS.data');
233 G.data = new OpenILS.data();
234 G.data.on_error = G.auth.logoff;
236 JSAN.use('util.file');
237 G.file = new util.file();
239 G.file.get('ws_info');
240 G.ws_info = G.file.get_object(); G.file.close();
244 G.data.ws_info = G.ws_info; G.data.stash('ws_info');
246 G.auth.on_login = function() {
248 var url = G.auth.controller.view.server_prompt.value || urls.remote;
250 G.data.server_unadorned = url; G.data.stash('server_unadorned'); G.data.stash_retrieve();
252 if (! url.match( '^http://' ) ) { url = 'http://' + url; }
254 G.data.server = url; G.data.stash('server');
255 G.data.session = { 'key' : G.auth.session.key, 'auth' : G.auth.session.authtime }; G.data.stash('session');
256 G.data.stash_retrieve();
258 var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
259 var cookieUri = ios.newURI("http://" + G.data.server_unadorned, null, null);
260 var cookieUriSSL = ios.newURI("https://" + G.data.server_unadorned, null, null);
261 var cookieSvc = Components.classes["@mozilla.org/cookieService;1"].getService(Components.interfaces.nsICookieService);
263 cookieSvc.setCookieString(cookieUri, null, "ses="+G.data.session.key, null);
264 cookieSvc.setCookieString(cookieUriSSL, null, "ses="+G.data.session.key, null);
265 cookieSvc.setCookieString(cookieUri, null, "xul=1", null);
266 cookieSvc.setCookieString(cookieUriSSL, null, "xul=1", null);
269 alert(offlineStrings.getFormattedString(main.session_cookie.error, [E]));
282 if (G.data.ws_info && G.data.ws_info[G.auth.controller.view.server_prompt.value]) {
283 JSAN.use('util.widgets');
284 var deck = document.getElementById('progress_space');
285 util.widgets.remove_children( deck );
286 var iframe = document.createElement('iframe'); deck.appendChild(iframe);
287 iframe.setAttribute( 'src', url + urls.XUL_LOGIN_DATA );
288 iframe.contentWindow.xulG = xulG;
289 G.data_xul = iframe.contentWindow;
292 var deck = G.auth.controller.view.ws_deck;
293 JSAN.use('util.widgets'); util.widgets.remove_children('ws_deck');
294 var iframe = document.createElement('iframe'); deck.appendChild(iframe);
295 iframe.setAttribute( 'src', url + urls.XUL_WORKSTATION_INFO );
296 iframe.contentWindow.xulG = xulG;
297 deck.selectedIndex = deck.childNodes.length - 1;
301 G.auth.on_standalone = function() {
303 G.window.open(urls.XUL_STANDALONE,'Offline','chrome,resizable');
309 G.auth.on_standalone_export = function() {
311 JSAN.use('util.file'); var file = new util.file('pending_xacts');
312 if (file._file.exists()) {
313 var file2 = new util.file('');
314 var f = file2.pick_file( { 'mode' : 'save', 'title' : offlineStrings.getString('main.transaction_export.title') } );
317 var r = G.error.yns_alert(
318 offlineStrings.getFormattedString('main.transaction_export.prompt', [f.leafName]),
319 offlineStrings.getString('main.transaction_export.prompt.title'),
320 offlineStrings.getString('common.yes'),
321 offlineStrings.getString('common.no'),
323 offlineStrings.getString('common.confirm')
325 if (r != 0) { file.close(); return; }
327 var e_file = new util.file(''); e_file._file = f;
328 e_file.write_content( 'truncate', file.get_content() );
330 var r = G.error.yns_alert(
331 offlineStrings.getFormattedString('main.transaction_export.success.prompt', [f.leafName]),
332 offlineStrings.getString('main.transaction_export.success.title'),
333 offlineStrings.getString('common.yes'),
334 offlineStrings.getString('common.no'),
336 offlineStrings.getString('common.confirm')
340 var filename = 'pending_xacts_exported_' + new Date().getTime();
341 var t_file = new util.file(filename);
342 while (t_file._file.exists()) {
343 filename = 'pending_xacts_' + new Date().getTime() + '.exported';
344 t_file = new util.file(filename);
346 throw(offlineStrings.getString('main.transaction_export.filename.error'));
349 file.close(); file = new util.file('pending_xacts'); // prevents a bug with .moveTo below
350 file._file.moveTo(null,filename);
352 alert(offlineStrings.getString('main.transaction_export.duplicate.warning'));
355 alert(offlineStrings.getString('main.transaction_export.no_filename.error'));
358 alert(offlineStrings.getString('main.transaction_export.no_transactions.error'));
366 G.auth.on_standalone_import = function() {
368 JSAN.use('util.file'); var file = new util.file('pending_xacts');
369 if (file._file.exists()) {
370 alert(offlineStrings.getString('main.transaction_import.outstanding.error'));
372 var file2 = new util.file('');
373 var f = file2.pick_file( { 'mode' : 'open', 'title' : offlineStrings.getString('main.transaction_import.title')} );
374 if (f && f.exists()) {
375 var i_file = new util.file(''); i_file._file = f;
376 file.write_content( 'truncate', i_file.get_content() );
378 var r = G.error.yns_alert(
379 offlineStrings.getFormattedString('main.transaction_import.delete.prompt', [f.leafName]),
380 offlineStrings.getString('main.transaction_import.success'),
381 offlineStrings.getString('common.yes'),
382 offlineStrings.getString('common.no'),
384 offlineStrings.getString('common.confirm')
397 G.auth.on_debug = function(action) {
400 G.window.open(urls.XUL_DEBUG_CONSOLE,'testconsole','chrome,resizable');
404 alert(offlineStrings.getString('main.on_debug.clear_cache'));
407 alert(offlineStrings.getString('main.on_debug.debug'));
413 // XML_HTTP_SERVER will get reset to G.auth.controller.view.server_prompt.value
415 /////////////////////////////////////////////////////////////////////////////
417 var version = CLIENT_VERSION;
418 if (CLIENT_STAMP.length == 0) {
419 version = 'versionless debug build';
420 document.getElementById('debug_gb').hidden = false;
424 if (G.pref && G.pref.getBoolPref('open-ils.debug_options')) {
425 document.getElementById('debug_gb').hidden = false;
430 var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
431 .getService(Components.interfaces.nsIXULAppInfo);
433 if (appInfo.ID == "staff-client@open-ils.org")
436 if (G.pref && G.pref.getBoolPref('app.update.enabled')) {
437 document.getElementById('check_upgrade_sep').hidden = false;
438 var upgrademenu = document.getElementById('check_upgrade');
439 upgrademenu.hidden = false;
440 G.upgradeCheck = function () {
441 var um = Components.classes["@mozilla.org/updates/update-manager;1"]
442 .getService(Components.interfaces.nsIUpdateManager);
443 var prompter = Components.classes["@mozilla.org/updates/update-prompt;1"]
444 .createInstance(Components.interfaces.nsIUpdatePrompt);
446 if (um.activeUpdate && um.activeUpdate.state == "pending")
447 prompter.showUpdateDownloaded(um.activeUpdate);
449 prompter.checkForUpdates();
451 upgrademenu.addEventListener(
461 window.title = authStrings.getFormattedString('staff.auth.titlebar.label', version);
462 var x = document.getElementById('about_btn');
467 G.window.open('about.html','about','chrome,resizable,width=800,height=600');
468 } catch(E) { alert(E); }
473 var y = document.getElementById('new_window_btn');
477 if (G.data.session) {
478 new_tabs(Array('new'), null, null);
480 alert ( offlineStrings.getString('main.new_window_btn.login_first_warning') );
486 JSAN.use('util.mozilla');
487 var z = document.getElementById('locale_menupopup');
489 while (z.lastChild) z.removeChild(z.lastChild);
490 var locales = util.mozilla.chromeRegistry().getLocalesForPackage( String( location.href ).split(/\//)[2] );
491 var current_locale = util.mozilla.prefs().getCharPref('general.useragent.locale');
492 while (locales.hasMore()) {
493 var locale = locales.getNext();
494 var parts = locale.split(/-/);
497 label = locale + ' : ' + util.mozilla.languages().GetStringFromName(parts[0]);
498 if (parts.length > 1) {
500 label += ' (' + util.mozilla.regions().GetStringFromName(parts[1].toLowerCase()) + ')';
502 label += ' (' + parts[1] + ')';
508 var mi = document.createElement('menuitem');
509 mi.setAttribute('label',label);
510 mi.setAttribute('value',locale);
511 if (locale == current_locale) {
512 if (z.parentNode.tagName == 'menulist') {
513 mi.setAttribute('selected','true');
514 z.parentNode.setAttribute('label',label);
515 z.parentNode.setAttribute('value',locale);
521 var xx = document.getElementById('apply_locale_btn');
525 util.mozilla.change_locale(z.parentNode.value);
530 if ( found_ws_info_in_Achrome() && G.pref && G.pref.getBoolPref("open-ils.write_in_user_chrome_directory") ) {
531 //var hbox = x.parentNode; var b = document.createElement('button');
532 //b.setAttribute('label','Migrate legacy settings'); hbox.appendChild(b);
533 //b.addEventListener(
537 // handle_migration();
538 // } catch(E) { alert(E); }
542 if (window.confirm(offlineStrings.getString('main.settings.migrate'))) {
543 setTimeout( function() { handle_migration(); }, 0 );
547 window.addEventListener(
551 G.data.stash_retrieve();
552 if (typeof G.data.unsaved_data != 'undefined') {
553 if (G.data.unsaved_data > 0) {
554 var confirmation = window.confirm(offlineStrings.getString('menu.shutdown.unsaved_data_warning'));
561 G.data.unsaved_data = 0;
562 G.data.stash('unsaved_data');
572 var error = offlineStrings.getFormattedString('common.exception', [E, '']);
573 try { G.error.sdump('D_ERROR',error); } catch(E) { dump(error); }
576 dump('exiting main_init()\n');
579 function found_ws_info_in_Achrome() {
580 JSAN.use('util.file');
581 var f = new util.file();
582 var f_in_chrome = f.get('ws_info','chrome');
583 var path = f_in_chrome.exists() ? f_in_chrome.path : false;
588 function found_ws_info_in_Uchrome() {
589 JSAN.use('util.file');
590 var f = new util.file();
591 var f_in_uchrome = f.get('ws_info','uchrome');
592 var path = f_in_uchrome.exists() ? f_in_uchrome.path : false;
597 function handle_migration() {
598 if ( found_ws_info_in_Uchrome() ) {
599 alert(offlineStrings.getFormattedString('main.settings.migrate.failed', [found_ws_info_in_Uchrome(), found_ws_info_in_Achrome()])
602 var dirService = Components.classes["@mozilla.org/file/directory_service;1"].getService( Components.interfaces.nsIProperties );
603 var f_new = dirService.get( "UChrm", Components.interfaces.nsIFile );
604 var f_old = dirService.get( "AChrom", Components.interfaces.nsIFile );
605 f_old.append(myPackageDir); f_old.append("content"); f_old.append("conf");
606 if (window.confirm(offlineStrings.getFormattedString("main.settings.migrate.confirm", [f_old.path, f_new.path]))) {
607 var files = f_old.directoryEntries;
608 while (files.hasMoreElements()) {
609 var file = files.getNext();
610 var file2 = file.QueryInterface( Components.interfaces.nsILocalFile );
612 file2.moveTo( f_new, '' );
614 alert(offlineStrings.getFormattedString('main.settings.migrate.error', [file2.path, f_new.path]) + '\n');
617 location.href = location.href; // huh?
622 dump('exiting main/main.js\n');