if (typeof(JS_LIB_LOADED) == "undefined") { try { const JS_LIB_LOADED = true; const JS_LIBRARY = "jslib" const JS_LIB_FILE = "jslib.js" const JS_LIB_PATH = "chrome://jslib/content/" const JS_LIB_VERSION = "0.1.356" const JS_LIB_AUTHORS = "\tPete Collins \n" + "\tNeil Deakin \n" + "\tBrian King \n" + "\tEric Plaster \n" + "\tMartin.T.Kutschker \n" + "\tAlex Vincent \n"; const JS_LIB_BUILD = "mozilla 1.3+" const JS_LIB_ABOUT = "\tThis is an effort to provide a fully " + "functional js library\n" + "\tfor mozilla package authors to use " + "in their applications\n"; const JS_LIB_HOME = "http://jslib.mozdev.org/" const JS_LIB_ON = true const JS_LIB_OFF = false // DEPRICATED if (typeof(C) == "undefined") var C = Components; const jsC = Components const jslibRes = jsC.results const jslibI = jsC.interfaces const jslibCls = jsC.classes const JS_LIB_OK = jslibRes.NS_OK const JS_LIB_VOID = void(null) // DEPRICATED const jslib_results = jslibRes if (typeof(JS_LIB_DEBUG) != "boolean") var JS_LIB_DEBUG = JS_LIB_OFF; var JS_LIB_VERBOSE = JS_LIB_OFF; var JS_LIB_DEBUG_ALERT = JS_LIB_OFF; var JS_LIB_ERROR = JS_LIB_ON; var JS_LIB_ERROR_ALERT = JS_LIB_OFF; const JS_LIB_HELP = "\n\nWelcome to jslib version "+JS_LIB_VERSION+"\n\n" + "Global Constants:\n\n" + "JS_LIBRARY \n\t"+JS_LIBRARY +"\n" + "JS_LIB_FILE \n\t"+JS_LIB_FILE +"\n" + "JS_LIB_PATH \n\t"+JS_LIB_PATH +"\n" + "JS_LIB_VERSION \n\t"+JS_LIB_VERSION +"\n" + "JS_LIB_AUTHORS \n" +JS_LIB_AUTHORS + "JS_LIB_BUILD \n\t"+JS_LIB_BUILD +"\n" + "JS_LIB_ABOUT \n" +JS_LIB_ABOUT + "JS_LIB_HOME \n\t"+JS_LIB_HOME +"\n\n" + "Global Variables:\n\n" + " JS_LIB_DEBUG\n JS_LIB_ERROR\n\n"; function jslibGetService (aURL, aInterface) { var rv; try { // determine how 'aInterface' is passed and handle accordingly switch (typeof(aInterface)) { case "object": rv = jsC.classes[aURL].getService(aInterface); break; case "string": rv = jsC.classes[aURL].getService(jsC.interfaces[aInterface]); break; default: rv = jsC.classes[aURL].getService(); break; } } catch (e) { rv = jslibError(e); } return rv; } function jslibCreateInstance (aURL, aInterface) { var rv; try { rv = jsC.classes[aURL].createInstance(jsC.interfaces[aInterface]); } catch (e) { rv = jslibError(e); } return rv; } function jslibGetInterface (aInterface) { var rv; try { rv = jsC.interfaces[aInterface]; } catch (e) { rv = jslibError(e); } return rv; } function jslibQI (aObj, aInterface) { try { return aObj.QueryInterface(jslibI[aInterface]); } catch (e) { return jslibError(e); } } function jslibConstructor (aCID, aInterface, aFunc) { try { if (aFunc) return new jsC.Constructor(aCID, aInterface, aFunc); else return new jsC.Constructor(aCID, aInterface); } catch (e) { return jslibError(e); } } /** * void include(aScriptPath) * aScriptPath is an argument of string lib chrome path * returns NS_OK on success, 1 if file is already loaded and * - errorno or throws exception on failure * eg: * var path='chrome://jslib/content/io/file.js'; * include(path); * Or: * include(jslib_file); * * outputs: void(null) */ function include (aScriptPath) { if (!aScriptPath) { if (JS_LIB_DEBUG) dump("include: Missing file path argument\n"); throw - jslibRes.NS_ERROR_XPC_NOT_ENOUGH_ARGS; } if (aScriptPath == JS_LIB_PATH+JS_LIB_FILE) { if (JS_LIB_DEBUG) dump("include: "+aScriptPath+" is already loaded!\n"); throw - jslibRes.NS_ERROR_INVALID_ARG; } var start = aScriptPath.lastIndexOf('/') + 1; var end = aScriptPath.lastIndexOf('.'); var slice = aScriptPath.length - end; var loadID = aScriptPath.substring(start, (aScriptPath.length - slice)); if (typeof(this['JS_'+loadID.toUpperCase()+'_LOADED']) == "boolean") return JS_LIB_OK; var rv; try { if (jslibNeedsPrivs()) netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); if (!checkXPCShell()) jslibGetService("@mozilla.org/moz/jssubscript-loader;1", "mozIJSSubScriptLoader").loadSubScript(aScriptPath); else xpcShellLoad(aScriptPath); rv = jslibRes.NS_OK; if (JS_LIB_VERBOSE) dump("include: "+aScriptPath+"\n"); } catch (e) { const msg = aScriptPath+" is not a valid path or is already loaded\n"; if (JS_LIB_DEBUG) { dump(e+"\n"); dump("include: "+msg+"\n"); } rv = - jslibRes.NS_ERROR_INVALID_ARG; } return rv; } function jslibNeedsPrivs () { var rv; if (typeof(this.location) == "object") { var proto = this.location.protocol; rv = (proto == "file:") } return rv; } function checkXPCShell () { return (typeof(clear) == "function" && typeof(gc) == "function" && typeof(dumpXPC) == "function" && typeof(build) == "function" && typeof(clear) == "function" && typeof(load) == "function"); } // this is a work around for bug #209045 // https://bugzilla.mozilla.org/show_bug.cgi?id=209045 function xpcShellLoad (aURL) { var localFile = aURL.replace(/:\/|content\//g, ""); dump("xpcShell loading ... "+localFile+"\n"); load(localFile); } // include debug methods const jslib_debug = JS_LIB_PATH+"debug/debug.js" include(jslib_debug); function jslibUninstall (aPackage, aCallback) { if (!aPackage) { jslibErrorWarn("NS_ERROR_XPC_NOT_ENOUGH_ARGS"); throw - jslibRes.NS_ERROR_INVALID_ARG; } include (jslib_window); var win = new CommonWindow(null, 400, 400); win.position = JS_MIDDLE_CENTER; win.openUninstallWindow(aPackage, aCallback); } /** * Launch JSLIB Splash */ function jslibLaunchSplash () { include (jslib_window); var win = new CommonWindow("chrome://jslib/content/splash.xul", 400, 220); win.position = JS_MIDDLE_CENTER; win.openSplash(); } function jslibLaunchConsole () { include (jslib_window); var win = new CommonWindow("javascript:", 400, 220); win.position = JS_MIDDLE_CENTER; win.open(); } function jslibTurnDumpOn () { include (jslib_prefs); // turn on dump var pref = new Prefs; const prefStr = "browser.dom.window.dump.enabled" // turn dump on if not enabled if (!pref.getBool(prefStr)) { pref.setBool(prefStr, true); pref.save(); } return; } // DEPRICATED var jslib_turnDumpOn = jslibTurnDumpOn; function jslibTurnDumpOff () { include (jslib_prefs); // turn off dump var pref = new Prefs; const prefStr = "browser.dom.window.dump.enabled" // turn dump off if enabled if (pref.getBool(prefStr)) { pref.setBool(prefStr, false); pref.save(); } return; } // DEPRICATED var jslib_turnDumpOff = jslibTurnDumpOff; function jslibTurnStrictOn () { include (jslib_prefs); // turn on dump var pref = new Prefs; const prefStr = "javascript.options.strict"; // turn dump on if not enabled if (!pref.getBool(prefStr)) { pref.setBool(prefStr, true); pref.save(); } return; } function jslibTurnStrictOff () { include (jslib_prefs); // turn off dump var pref = new Prefs; const prefStr = "javascript.options.strict"; // turn dump off if enabled if (pref.getBool(prefStr)) { pref.setBool(prefStr, false); pref.save(); } return; } const jslib_modules = JS_LIB_PATH+"modules.js" include (jslib_modules); } catch (e) { dump(e + '\n'); } function jslibRestartApp () { try { var as = jslibGetService("@mozilla.org/toolkit/app-startup;1", "nsIAppStartup"); as.quit(jslibI.nsIAppStartup.eRestart | jslibI.nsIAppStartup.eAttemptQuit); } catch (e) { dump(e + '\n'); } } }