dojo/back.js

  • Provides:

    • dojo.back
  • dojo.back

    • type
      Object
    • summary
      Browser history management resources
  • getHash

    • summary
  • setHash

    • summary
  • back.goBack

    • summary
  • back.goForward

    • summary
  • historyIframe.location

    • summary
  • back.init

    • summary
  • back.setInitialState

    • summary
  • back.addToHistory

    • summary
  • back._iframeLoaded

    • summary
  • dojo.__backArgs

    • type
      Function
    • parameters:
      • kwArgs: (typeof )
    • source: [view]
      define("dojo/back", ["dojo"], function(dojo) {
      dojo.getObject("back", true, dojo);




      dojo.back = {
       // summary: Browser history management resources
      }






      (function(){
       var back = dojo.back,


       // everyone deals with encoding the hash slightly differently


       getHash= back.getHash= function(){
        var h = window.location.hash;
        if(h.charAt(0) == "#"){ h = h.substring(1); }
        return dojo.isMozilla ? h : decodeURIComponent(h);
       },

       
       setHash= back.setHash= function(h){
        if(!h){ h = ""; }
        window.location.hash = encodeURIComponent(h);
        historyCounter = history.length;
       };


       var initialHref = (typeof(window) !== "undefined") ? window.location.href : "";
       var initialHash = (typeof(window) !== "undefined") ? getHash() : "";
       var initialState = null;


       var locationTimer = null;
       var bookmarkAnchor = null;
       var historyIframe = null;
       var forwardStack = [];
       var historyStack = [];
       var moveForward = false;
       var changingUrl = false;
       var historyCounter;


       function handleBackButton(){
        //summary: private method. Do not call this directly.


        //The "current" page is always at the top of the history stack.
        var current = historyStack.pop();
        if(!current){ return; }
        var last = historyStack[historyStack.length-1];
        if(!last && historyStack.length == 0){
         last = initialState;
        }
        if(last){
         if(last.kwArgs["back"]){
          last.kwArgs["back"]();
         }else if(last.kwArgs["backButton"]){
          last.kwArgs["backButton"]();
         }else if(last.kwArgs["handle"]){
          last.kwArgs.handle("back");
         }
        }
        forwardStack.push(current);
       }


       back.goBack = handleBackButton;


       function handleForwardButton(){
        //summary: private method. Do not call this directly.
        var last = forwardStack.pop();
        if(!last){ return; }
        if(last.kwArgs["forward"]){
         last.kwArgs.forward();
        }else if(last.kwArgs["forwardButton"]){
         last.kwArgs.forwardButton();
        }else if(last.kwArgs["handle"]){
         last.kwArgs.handle("forward");
        }
        historyStack.push(last);
       }


       back.goForward = handleForwardButton;


       function createState(url, args, hash){
        //summary: private method. Do not call this directly.
        return {"url": url, "kwArgs": args, "urlHash": hash}; //Object
       }


       function getUrlQuery(url){
        //summary: private method. Do not call this directly.
        var segments = url.split("?");
        if(segments.length < 2){
         return null; //null
        }
        else{
         return segments[1]; //String
        }
       }

       
       function loadIframeHistory(){
        //summary: private method. Do not call this directly.
        var url = (dojo.config["dojoIframeHistoryUrl"] || dojo.moduleUrl("dojo", "resources/iframe_history.html")) + "?" + (new Date()).getTime();
        moveForward = true;
      if(historyIframe){
         dojo.isWebKit ? historyIframe.location = url : window.frames[historyIframe.name].location = url;
      }else{
      //console.warn("dojo.back: Not initialised. You need to call dojo.back.init() from a