dojo/_base/_loader/hostenv_ff_ext.js

  • Provides:

    • dojo
  • dojo._loadInit

    • type
      Function
    • parameters:
      • e: (typeof )
    • source: [view]
        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();
        }
    • summary
  • console.log

    • type
      Function
    • parameters:
      • m: (typeof )
    • source: [view]
        var s = Components.classes["@mozilla.org/consoleservice;1"].getService(
         Components.interfaces.nsIConsoleService
        );
        s.logStringMessage(m);
    • summary
  • console.debug

    • type
      Function
    • source: [view]
        console.log(dojo._toArray(arguments).join(" "));
    • summary
  • dojo.baseUrl

    • summary
  • dojo.isMozilla

    • summary
  • dojo.isFF

    • summary
  • dojo.isQuirks

    • summary
  • dojo.locale

    • summary
  • dojo._windowUnloaders

    • summary
  • dojo._defaultContext

    • summary
  • dojo._xhrObj

    • type
      Function
    • source: [view]
         return new XMLHttpRequest();
    • summary
  • dojo._loadUri

    • type
      Function
    • parameters:
      • uri: (typeof )
      • cb: (typeof )
    • source: [view]
         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);
         }
    • chains:
      • oldLoadUri: (call)
    • summary
  • dojo._isDocumentOk

    • type
      Function
    • parameters:
      • http: (typeof )
    • source: [view]
         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:") );
    • returns
      Boolean
    • summary
  • dojo._getText

    • type
      Function
    • parameters:
      • uri: (typeof URI)
        A relative or absolute uri. If absolute, it still must be in
        the same &quot;domain&quot; as we are.
      • fail_ok: (typeof Boolean)
        Default false. If fail_ok and loading fails, return null
        instead of throwing.
    • source: [view]
      // 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
         }
    • summary
      Read the contents of the specified uri and return those contents.
    • returns
      Boolean|null|String
  • dojo.windowUnloaded

    • type
      Function
    • source: [view]
         var mll = d._windowUnloaders;
         while(mll.length){
          (mll.pop())();
         }
    • 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.
  • dojo.addOnWindowUnload

    • type
      Function
    • parameters:
      • obj: (typeof Object)
    • source: [view]
         d._onto(d._windowUnloaders, obj, 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(){ /* ... */});
  • dojo.pushContext

    • type
      Function
    • parameters:
      • g: (typeof Object|String)
        The global context. If a string, the id of the frame to
        search for a context and document.
      • d: (typeof MDocumentElement)
        The document element to execute subsequent code with.
    • source: [view]
         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
    • 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.
    • returns
      Array
    • chains:
      • dojo.setContext: (call)
  • dojo.popContext

    • type
      Function
    • source: [view]
         var oc = current;
         if(!contexts.length){
          return oc;
         }
         dojo.setContext.apply(dojo, contexts.pop());
         return oc;
    • 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.
    • chains:
      • dojo.setContext: (call)
  • dojo._inContext

    • type
      Function
    • parameters:
      • g: (typeof )
      • d: (typeof )
      • f: (typeof )
    • source: [view]
         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;
    • summary
  • dojo.isBrowser

    • summary
  • dojo._name

    • summary
  • dojo._initFired

    • summary
  • dojo

    • type
      Object
    • summary