code: function(callback, context) {
  
  
              // if ready has already fired, then just schedule the callback
              // to fire asynchronously, but right away
              if (readyFired) {
                  setTimeout(function() {callback(context);}, 1);
                  return;
              } else {
                  // add the function and context to the list
                  readyList.push({ name: 'anonymous', fn: callback, ctx: context });
              }
  
              // if document already ready to go, schedule the ready function to run
              // IE only safe when readyState is "complete", others safe when readyState is "interactive"
              if (document.readyState === "complete" || (!document.attachEvent && document.readyState === "interactive")) {
                  setTimeout(ready, 1);
              } else if (!readyEventHandlersInstalled) {
                  // otherwise if we don't have event handlers installed, install them
                  if (document.addEventListener) {
                      // first choice is DOMContentLoaded event
                      document.addEventListener("DOMContentLoaded", ready, false);
                      // backup is window load event
                      window.addEventListener("load", ready, false);
                  } else {
                      // must be IE
                      document.attachEvent("onreadystatechange", readyStateChange);
                      window.attachEvent("onload", ready);
                  }
                  readyEventHandlersInstalled = true;
              }
  
          }
docs: ready
  This is the one public interface use to wrap `handlers`
  It is an equivalent of jQuery(document).ready(cb)
  
  No need to use it for `handlers`, it is automatically applied for each `handler`
  
  @callback {callback} callback
  @param {object} [context] - if present, it will be passed
   @js_externs ready