blob: 51eb86d527394bf234f1cf2bb67af6b4e160c64f [file] [log] [blame]
/*
Copyright (c) 2004-2009, 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
*/
if(!dojo._hasResource["dojo.back"]){
dojo._hasResource["dojo.back"]=true;
dojo.provide("dojo.back");
(function(){
var _1=dojo.back;
function _2(){
var h=window.location.hash;
if(h.charAt(0)=="#"){
h=h.substring(1);
}
return dojo.isMozilla?h:decodeURIComponent(h);
};
function _4(h){
if(!h){
h="";
}
window.location.hash=encodeURIComponent(h);
_6=history.length;
};
if(dojo.exists("tests.back-hash")){
_1.getHash=_2;
_1.setHash=_4;
}
var _7=(typeof (window)!=="undefined")?window.location.href:"";
var _8=(typeof (window)!=="undefined")?_2():"";
var _9=null;
var _a=null;
var _b=null;
var _c=null;
var _d=[];
var _e=[];
var _f=false;
var _10=false;
var _6;
function _11(){
var _12=_e.pop();
if(!_12){
return;
}
var _13=_e[_e.length-1];
if(!_13&&_e.length==0){
_13=_9;
}
if(_13){
if(_13.kwArgs["back"]){
_13.kwArgs["back"]();
}else{
if(_13.kwArgs["backButton"]){
_13.kwArgs["backButton"]();
}else{
if(_13.kwArgs["handle"]){
_13.kwArgs.handle("back");
}
}
}
}
_d.push(_12);
};
_1.goBack=_11;
function _14(){
var _15=_d.pop();
if(!_15){
return;
}
if(_15.kwArgs["forward"]){
_15.kwArgs.forward();
}else{
if(_15.kwArgs["forwardButton"]){
_15.kwArgs.forwardButton();
}else{
if(_15.kwArgs["handle"]){
_15.kwArgs.handle("forward");
}
}
}
_e.push(_15);
};
_1.goForward=_14;
function _16(url,_18,_19){
return {"url":url,"kwArgs":_18,"urlHash":_19};
};
function _1a(url){
var _1c=url.split("?");
if(_1c.length<2){
return null;
}else{
return _1c[1];
}
};
function _1d(){
var url=(dojo.config["dojoIframeHistoryUrl"]||dojo.moduleUrl("dojo","resources/iframe_history.html"))+"?"+(new Date()).getTime();
_f=true;
if(_c){
dojo.isWebKit?_c.location=url:window.frames[_c.name].location=url;
}else{
}
return url;
};
function _1f(){
if(!_10){
var hsl=_e.length;
var _21=_2();
if((_21===_8||window.location.href==_7)&&(hsl==1)){
_11();
return;
}
if(_d.length>0){
if(_d[_d.length-1].urlHash===_21){
_14();
return;
}
}
if((hsl>=2)&&(_e[hsl-2])){
if(_e[hsl-2].urlHash===_21){
_11();
return;
}
}
if(dojo.isSafari&&dojo.isSafari<3){
var _22=history.length;
if(_22>_6){
_14();
}else{
if(_22<_6){
_11();
}
}
_6=_22;
}
}
};
_1.init=function(){
if(dojo.byId("dj_history")){
return;
}
var src=dojo.config["dojoIframeHistoryUrl"]||dojo.moduleUrl("dojo","resources/iframe_history.html");
document.write("<iframe style=\"border:0;width:1px;height:1px;position:absolute;visibility:hidden;bottom:0;right:0;\" name=\"dj_history\" id=\"dj_history\" src=\""+src+"\"></iframe>");
};
_1.setInitialState=function(_24){
_9=_16(_7,_24,_8);
};
_1.addToHistory=function(_25){
_d=[];
var _26=null;
var url=null;
if(!_c){
if(dojo.config["useXDomain"]&&!dojo.config["dojoIframeHistoryUrl"]){
console.warn("dojo.back: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
}
_c=window.frames["dj_history"];
}
if(!_b){
_b=dojo.create("a",{style:{display:"none"}},dojo.body());
}
if(_25["changeUrl"]){
_26=""+((_25["changeUrl"]!==true)?_25["changeUrl"]:(new Date()).getTime());
if(_e.length==0&&_9.urlHash==_26){
_9=_16(url,_25,_26);
return;
}else{
if(_e.length>0&&_e[_e.length-1].urlHash==_26){
_e[_e.length-1]=_16(url,_25,_26);
return;
}
}
_10=true;
setTimeout(function(){
_4(_26);
_10=false;
},1);
_b.href=_26;
if(dojo.isIE){
url=_1d();
var _28=_25["back"]||_25["backButton"]||_25["handle"];
var tcb=function(_2a){
if(_2()!=""){
setTimeout(function(){
_4(_26);
},1);
}
_28.apply(this,[_2a]);
};
if(_25["back"]){
_25.back=tcb;
}else{
if(_25["backButton"]){
_25.backButton=tcb;
}else{
if(_25["handle"]){
_25.handle=tcb;
}
}
}
var _2b=_25["forward"]||_25["forwardButton"]||_25["handle"];
var tfw=function(_2d){
if(_2()!=""){
_4(_26);
}
if(_2b){
_2b.apply(this,[_2d]);
}
};
if(_25["forward"]){
_25.forward=tfw;
}else{
if(_25["forwardButton"]){
_25.forwardButton=tfw;
}else{
if(_25["handle"]){
_25.handle=tfw;
}
}
}
}else{
if(!dojo.isIE){
if(!_a){
_a=setInterval(_1f,200);
}
}
}
}else{
url=_1d();
}
_e.push(_16(url,_25,_26));
};
_1._iframeLoaded=function(evt,_2f){
var _30=_1a(_2f.href);
if(_30==null){
if(_e.length==1){
_11();
}
return;
}
if(_f){
_f=false;
return;
}
if(_e.length>=2&&_30==_1a(_e[_e.length-2].url)){
_11();
}else{
if(_d.length>0&&_30==_1a(_d[_d.length-1].url)){
_14();
}
}
};
})();
}