summaryrefslogtreecommitdiff
path: root/lib/dojo/_base/_loader/hostenv_ff_ext.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dojo/_base/_loader/hostenv_ff_ext.js')
-rw-r--r--lib/dojo/_base/_loader/hostenv_ff_ext.js338
1 files changed, 0 insertions, 338 deletions
diff --git a/lib/dojo/_base/_loader/hostenv_ff_ext.js b/lib/dojo/_base/_loader/hostenv_ff_ext.js
deleted file mode 100644
index ca47a4c1c..000000000
--- a/lib/dojo/_base/_loader/hostenv_ff_ext.js
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
-*/
-
-
-// a host environment specifically built for Mozilla extensions, but derived
-// from the browser host environment
-if(typeof window != 'undefined'){
- dojo.isBrowser = true;
- dojo._name = "browser";
-
-
- // FIXME: PORTME
- // http://developer.mozilla.org/en/mozIJSSubScriptLoader
-
-
- // attempt to figure out the path to dojo if it isn't set in the config
- (function(){
- var d = dojo;
- // this is a scope protection closure. We set browser versions and grab
- // the URL we were loaded from here.
-
- // FIXME: need to probably use a different reference to "document" to get the hosting XUL environment
-
- d.baseUrl = d.config.baseUrl;
-
- // fill in the rendering support information in dojo.render.*
- var n = navigator;
- var dua = n.userAgent;
- var dav = n.appVersion;
- var tv = parseFloat(dav);
-
- d.isMozilla = d.isMoz = tv;
- if(d.isMoz){
- d.isFF = parseFloat(dua.split("Firefox/")[1]) || undefined;
- }
-
- // FIXME
- d.isQuirks = document.compatMode == "BackCompat";
-
- // FIXME
- // TODO: is the HTML LANG attribute relevant?
- d.locale = dojo.config.locale || n.language.toLowerCase();
-
- d._xhrObj = function(){
- return new XMLHttpRequest();
- }
-
- // monkey-patch _loadUri to handle file://, chrome://, and resource:// url's
- var oldLoadUri = d._loadUri;
- d._loadUri = function(uri, cb){
- var handleLocal = ["file:", "chrome:", "resource:"].some(function(prefix){
- return String(uri).indexOf(prefix) == 0;
- });
- if(handleLocal){
- // see:
- // http://developer.mozilla.org/en/mozIJSSubScriptLoader
- var l = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
- .getService(Components.interfaces.mozIJSSubScriptLoader);
- var value = l.loadSubScript(uri, d.global)
- if(cb){ cb(value); }
- return true;
- }else{
- // otherwise, call the pre-existing version
- return oldLoadUri.apply(d, arguments);
- }
- }
-
- // FIXME: PORTME
- d._isDocumentOk = function(http){
- var stat = http.status || 0;
- return (stat >= 200 && stat < 300) || // Boolean
- stat == 304 || // allow any 2XX response code
- stat == 1223 || // get it out of the cache
- (!stat && (location.protocol=="file:" || location.protocol=="chrome:") );
- }
-
- // FIXME: PORTME
- // var owloc = window.location+"";
- // var base = document.getElementsByTagName("base");
- // var hasBase = (base && base.length > 0);
- var hasBase = false;
-
- d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
- // summary: Read the contents of the specified uri and return those contents.
- // uri:
- // A relative or absolute uri. If absolute, it still must be in
- // the same "domain" as we are.
- // fail_ok:
- // Default false. If fail_ok and loading fails, return null
- // instead of throwing.
- // returns: The response text. null is returned when there is a
- // failure and failure is okay (an exception otherwise)
-
- // alert("_getText: " + uri);
-
- // NOTE: must be declared before scope switches ie. this._xhrObj()
- var http = d._xhrObj();
-
- if(!hasBase && dojo._Url){
- uri = (new dojo._Url(uri)).toString();
- }
- if(d.config.cacheBust){
- //Make sure we have a string before string methods are used on uri
- uri += "";
- uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,"");
- }
- var handleLocal = ["file:", "chrome:", "resource:"].some(function(prefix){
- return String(uri).indexOf(prefix) == 0;
- });
- if(handleLocal){
- // see:
- // http://forums.mozillazine.org/viewtopic.php?p=921150#921150
- var ioService = Components.classes["@mozilla.org/network/io-service;1"]
- .getService(Components.interfaces.nsIIOService);
- var scriptableStream=Components
- .classes["@mozilla.org/scriptableinputstream;1"]
- .getService(Components.interfaces.nsIScriptableInputStream);
-
- var channel = ioService.newChannel(uri, null, null);
- var input = channel.open();
- scriptableStream.init(input);
- var str = scriptableStream.read(input.available());
- scriptableStream.close();
- input.close();
- return str;
- }else{
- http.open('GET', uri, false);
- try{
- http.send(null);
- // alert(http);
- if(!d._isDocumentOk(http)){
- var err = Error("Unable to load "+uri+" status:"+ http.status);
- err.status = http.status;
- err.responseText = http.responseText;
- throw err;
- }
- }catch(e){
- if(fail_ok){ return null; } // null
- // rethrow the exception
- throw e;
- }
- return http.responseText; // String
- }
- }
-
- d._windowUnloaders = [];
-
- // FIXME: PORTME
- d.windowUnloaded = function(){
- // summary:
- // signal fired by impending window destruction. You may use
- // dojo.addOnWIndowUnload() or dojo.connect() to this method to perform
- // page/application cleanup methods. See dojo.addOnWindowUnload for more info.
- var mll = d._windowUnloaders;
- while(mll.length){
- (mll.pop())();
- }
- }
-
- // FIXME: PORTME
- d.addOnWindowUnload = function(/*Object?*/obj, /*String|Function?*/functionName){
- // summary:
- // registers a function to be triggered when window.onunload fires.
- // Be careful trying to modify the DOM or access JavaScript properties
- // during this phase of page unloading: they may not always be available.
- // Consider dojo.addOnUnload() if you need to modify the DOM or do heavy
- // JavaScript work.
- // example:
- // | dojo.addOnWindowUnload(functionPointer)
- // | dojo.addOnWindowUnload(object, "functionName")
- // | dojo.addOnWindowUnload(object, function(){ /* ... */});
-
- d._onto(d._windowUnloaders, obj, functionName);
- }
-
- // XUL specific APIs
- var contexts = [];
- var current = null;
- dojo._defaultContext = [ window, document ];
-
- dojo.pushContext = function(/*Object|String?*/g, /*MDocumentElement?*/d){
- // summary:
- // causes subsequent calls to Dojo methods to assume the
- // passed object and, optionally, document as the default
- // scopes to use. A 2-element array of the previous global and
- // document are returned.
- // description:
- // dojo.pushContext treats contexts as a stack. The
- // auto-detected contexts which are initially provided using
- // dojo.setContext() require authors to keep state in order to
- // "return" to a previous context, whereas the
- // dojo.pushContext and dojo.popContext methods provide a more
- // natural way to augment blocks of code to ensure that they
- // execute in a different window or frame without issue. If
- // called without any arguments, the default context (the
- // context when Dojo is first loaded) is instead pushed into
- // the stack. If only a single string is passed, a node in the
- // intitial context's document is looked up and its
- // contextWindow and contextDocument properties are used as
- // the context to push. This means that iframes can be given
- // an ID and code can be executed in the scope of the iframe's
- // document in subsequent calls easily.
- // g:
- // The global context. If a string, the id of the frame to
- // search for a context and document.
- // d:
- // The document element to execute subsequent code with.
- var old = [dojo.global, dojo.doc];
- contexts.push(old);
- var n;
- if(!g && !d){
- n = dojo._defaultContext;
- }else{
- n = [ g, d ];
- if(!d && dojo.isString(g)){
- var t = document.getElementById(g);
- if(t.contentDocument){
- n = [t.contentWindow, t.contentDocument];
- }
- }
- }
- current = n;
- dojo.setContext.apply(dojo, n);
- return old; // Array
- };
-
- dojo.popContext = function(){
- // summary:
- // If the context stack contains elements, ensure that
- // subsequent code executes in the *previous* context to the
- // current context. The current context set ([global,
- // document]) is returned.
- var oc = current;
- if(!contexts.length){
- return oc;
- }
- dojo.setContext.apply(dojo, contexts.pop());
- return oc;
- };
-
- // FIXME:
- // don't really like the current arguments and order to
- // _inContext, so don't make it public until it's right!
- dojo._inContext = function(g, d, f){
- var a = dojo._toArray(arguments);
- f = a.pop();
- if(a.length == 1){
- d = null;
- }
- dojo.pushContext(g, d);
- var r = f();
- dojo.popContext();
- return r;
- };
-
- })();
-
- dojo._initFired = false;
- // BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/)
- dojo._loadInit = function(e){
- dojo._initFired = true;
- // allow multiple calls, only first one will take effect
- // A bug in khtml calls events callbacks for document for event which isnt supported
- // for example a created contextmenu event calls DOMContentLoaded, workaround
- var type = (e && e.type) ? e.type.toLowerCase() : "load";
- if(arguments.callee.initialized || (type != "domcontentloaded" && type != "load")){ return; }
- arguments.callee.initialized = true;
- if(dojo._inFlightCount == 0){
- dojo._modulesLoaded();
- }
- }
-
- /*
- (function(){
- var _w = window;
- var _handleNodeEvent = function(evtName, fp){
- // summary:
- // non-destructively adds the specified function to the node's
- // evtName handler.
- // evtName: should be in the form "onclick" for "onclick" handlers.
- // Make sure you pass in the "on" part.
- var oldHandler = _w[evtName] || function(){};
- _w[evtName] = function(){
- fp.apply(_w, arguments);
- oldHandler.apply(_w, arguments);
- };
- };
- // FIXME: PORT
- // FIXME: dojo.unloaded requires dojo scope, so using anon function wrapper.
- _handleNodeEvent("onbeforeunload", function() { dojo.unloaded(); });
- _handleNodeEvent("onunload", function() { dojo.windowUnloaded(); });
- })();
- */
-
-
- // FIXME: PORTME
- // this event fires a lot, namely for all plugin XUL overlays and for
- // all iframes (in addition to window navigations). We only want
- // Dojo's to fire once..but we might care if pages navigate. We'll
- // probably need an extension-specific API
- if(!dojo.config.afterOnLoad){
- window.addEventListener("DOMContentLoaded",function(e){
- dojo._loadInit(e);
- // console.log("DOM content loaded", e);
- }, false);
- }
-
-} //if (typeof window != 'undefined')
-
-//Register any module paths set up in djConfig. Need to do this
-//in the hostenvs since hostenv_browser can read djConfig from a
-//script tag's attribute.
-(function(){
- var mp = dojo.config["modulePaths"];
- if(mp){
- for(var param in mp){
- dojo.registerModulePath(param, mp[param]);
- }
- }
-})();
-
-//Load debug code if necessary.
-if(dojo.config.isDebug){
- // logging stub for extension logging
- console.log = function(m){
- var s = Components.classes["@mozilla.org/consoleservice;1"].getService(
- Components.interfaces.nsIConsoleService
- );
- s.logStringMessage(m);
- }
- console.debug = function(){
- console.log(dojo._toArray(arguments).join(" "));
- }
- // FIXME: what about the rest of the console.* methods? And is there any way to reach into firebug and log into it directly?
-}