1
|
/*
|
2
|
Copyright (c) 2004-2008, The Dojo Foundation All Rights Reserved.
|
3
|
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
4
|
see: http://dojotoolkit.org/license for details
|
5
|
*/
|
6
|
|
7
|
|
8
|
if(!dojo._hasResource["dojo.back"]){
|
9
|
dojo._hasResource["dojo.back"]=true;
|
10
|
dojo.provide("dojo.back");
|
11
|
(function(){
|
12
|
var _1=dojo.back;
|
13
|
function getHash(){
|
14
|
var h=window.location.hash;
|
15
|
if(h.charAt(0)=="#"){
|
16
|
h=h.substring(1);
|
17
|
}
|
18
|
return dojo.isMozilla?h:decodeURIComponent(h);
|
19
|
};
|
20
|
function setHash(h){
|
21
|
if(!h){
|
22
|
h="";
|
23
|
}
|
24
|
window.location.hash=encodeURIComponent(h);
|
25
|
_4=history.length;
|
26
|
};
|
27
|
if(dojo.exists("tests.back-hash")){
|
28
|
_1.getHash=getHash;
|
29
|
_1.setHash=setHash;
|
30
|
}
|
31
|
var _5=(typeof (window)!=="undefined")?window.location.href:"";
|
32
|
var _6=(typeof (window)!=="undefined")?getHash():"";
|
33
|
var _7=null;
|
34
|
var _8=null;
|
35
|
var _9=null;
|
36
|
var _a=null;
|
37
|
var _b=[];
|
38
|
var _c=[];
|
39
|
var _d=false;
|
40
|
var _e=false;
|
41
|
var _4;
|
42
|
function handleBackButton(){
|
43
|
var _f=_c.pop();
|
44
|
if(!_f){
|
45
|
return;
|
46
|
}
|
47
|
var _10=_c[_c.length-1];
|
48
|
if(!_10&&_c.length==0){
|
49
|
_10=_7;
|
50
|
}
|
51
|
if(_10){
|
52
|
if(_10.kwArgs["back"]){
|
53
|
_10.kwArgs["back"]();
|
54
|
}else{
|
55
|
if(_10.kwArgs["backButton"]){
|
56
|
_10.kwArgs["backButton"]();
|
57
|
}else{
|
58
|
if(_10.kwArgs["handle"]){
|
59
|
_10.kwArgs.handle("back");
|
60
|
}
|
61
|
}
|
62
|
}
|
63
|
}
|
64
|
_b.push(_f);
|
65
|
};
|
66
|
_1.goBack=handleBackButton;
|
67
|
function handleForwardButton(){
|
68
|
var _11=_b.pop();
|
69
|
if(!_11){
|
70
|
return;
|
71
|
}
|
72
|
if(_11.kwArgs["forward"]){
|
73
|
_11.kwArgs.forward();
|
74
|
}else{
|
75
|
if(_11.kwArgs["forwardButton"]){
|
76
|
_11.kwArgs.forwardButton();
|
77
|
}else{
|
78
|
if(_11.kwArgs["handle"]){
|
79
|
_11.kwArgs.handle("forward");
|
80
|
}
|
81
|
}
|
82
|
}
|
83
|
_c.push(_11);
|
84
|
};
|
85
|
_1.goForward=handleForwardButton;
|
86
|
function createState(url,_13,_14){
|
87
|
return {"url":url,"kwArgs":_13,"urlHash":_14};
|
88
|
};
|
89
|
function getUrlQuery(url){
|
90
|
var _16=url.split("?");
|
91
|
if(_16.length<2){
|
92
|
return null;
|
93
|
}else{
|
94
|
return _16[1];
|
95
|
}
|
96
|
};
|
97
|
function loadIframeHistory(){
|
98
|
var url=(dojo.config["dojoIframeHistoryUrl"]||dojo.moduleUrl("dojo","resources/iframe_history.html"))+"?"+(new Date()).getTime();
|
99
|
_d=true;
|
100
|
if(_a){
|
101
|
dojo.isSafari?_a.location=url:window.frames[_a.name].location=url;
|
102
|
}else{
|
103
|
}
|
104
|
return url;
|
105
|
};
|
106
|
function checkLocation(){
|
107
|
if(!_e){
|
108
|
var hsl=_c.length;
|
109
|
var _19=getHash();
|
110
|
if((_19===_6||window.location.href==_5)&&(hsl==1)){
|
111
|
handleBackButton();
|
112
|
return;
|
113
|
}
|
114
|
if(_b.length>0){
|
115
|
if(_b[_b.length-1].urlHash===_19){
|
116
|
handleForwardButton();
|
117
|
return;
|
118
|
}
|
119
|
}
|
120
|
if((hsl>=2)&&(_c[hsl-2])){
|
121
|
if(_c[hsl-2].urlHash===_19){
|
122
|
handleBackButton();
|
123
|
return;
|
124
|
}
|
125
|
}
|
126
|
if(dojo.isSafari&&dojo.isSafari<3){
|
127
|
var _1a=history.length;
|
128
|
if(_1a>_4){
|
129
|
handleForwardButton();
|
130
|
}else{
|
131
|
if(_1a<_4){
|
132
|
handleBackButton();
|
133
|
}
|
134
|
}
|
135
|
_4=_1a;
|
136
|
}
|
137
|
}
|
138
|
};
|
139
|
_1.init=function(){
|
140
|
if(dojo.byId("dj_history")){
|
141
|
return;
|
142
|
}
|
143
|
var src=dojo.config["dojoIframeHistoryUrl"]||dojo.moduleUrl("dojo","resources/iframe_history.html");
|
144
|
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>");
|
145
|
};
|
146
|
_1.setInitialState=function(_1c){
|
147
|
_7=createState(_5,_1c,_6);
|
148
|
};
|
149
|
_1.addToHistory=function(_1d){
|
150
|
_b=[];
|
151
|
var _1e=null;
|
152
|
var url=null;
|
153
|
if(!_a){
|
154
|
if(dojo.config["useXDomain"]&&!dojo.config["dojoIframeHistoryUrl"]){
|
155
|
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");
|
156
|
}
|
157
|
_a=window.frames["dj_history"];
|
158
|
}
|
159
|
if(!_9){
|
160
|
_9=document.createElement("a");
|
161
|
dojo.body().appendChild(_9);
|
162
|
_9.style.display="none";
|
163
|
}
|
164
|
if(_1d["changeUrl"]){
|
165
|
_1e=""+((_1d["changeUrl"]!==true)?_1d["changeUrl"]:(new Date()).getTime());
|
166
|
if(_c.length==0&&_7.urlHash==_1e){
|
167
|
_7=createState(url,_1d,_1e);
|
168
|
return;
|
169
|
}else{
|
170
|
if(_c.length>0&&_c[_c.length-1].urlHash==_1e){
|
171
|
_c[_c.length-1]=createState(url,_1d,_1e);
|
172
|
return;
|
173
|
}
|
174
|
}
|
175
|
_e=true;
|
176
|
setTimeout(function(){
|
177
|
setHash(_1e);
|
178
|
_e=false;
|
179
|
},1);
|
180
|
_9.href=_1e;
|
181
|
if(dojo.isIE){
|
182
|
url=loadIframeHistory();
|
183
|
var _20=_1d["back"]||_1d["backButton"]||_1d["handle"];
|
184
|
var tcb=function(_22){
|
185
|
if(getHash()!=""){
|
186
|
setTimeout(function(){
|
187
|
setHash(_1e);
|
188
|
},1);
|
189
|
}
|
190
|
_20.apply(this,[_22]);
|
191
|
};
|
192
|
if(_1d["back"]){
|
193
|
_1d.back=tcb;
|
194
|
}else{
|
195
|
if(_1d["backButton"]){
|
196
|
_1d.backButton=tcb;
|
197
|
}else{
|
198
|
if(_1d["handle"]){
|
199
|
_1d.handle=tcb;
|
200
|
}
|
201
|
}
|
202
|
}
|
203
|
var _23=_1d["forward"]||_1d["forwardButton"]||_1d["handle"];
|
204
|
var tfw=function(_25){
|
205
|
if(getHash()!=""){
|
206
|
setHash(_1e);
|
207
|
}
|
208
|
if(_23){
|
209
|
_23.apply(this,[_25]);
|
210
|
}
|
211
|
};
|
212
|
if(_1d["forward"]){
|
213
|
_1d.forward=tfw;
|
214
|
}else{
|
215
|
if(_1d["forwardButton"]){
|
216
|
_1d.forwardButton=tfw;
|
217
|
}else{
|
218
|
if(_1d["handle"]){
|
219
|
_1d.handle=tfw;
|
220
|
}
|
221
|
}
|
222
|
}
|
223
|
}else{
|
224
|
if(!dojo.isIE){
|
225
|
if(!_8){
|
226
|
_8=setInterval(checkLocation,200);
|
227
|
}
|
228
|
}
|
229
|
}
|
230
|
}else{
|
231
|
url=loadIframeHistory();
|
232
|
}
|
233
|
_c.push(createState(url,_1d,_1e));
|
234
|
};
|
235
|
_1._iframeLoaded=function(evt,_27){
|
236
|
var _28=getUrlQuery(_27.href);
|
237
|
if(_28==null){
|
238
|
if(_c.length==1){
|
239
|
handleBackButton();
|
240
|
}
|
241
|
return;
|
242
|
}
|
243
|
if(_d){
|
244
|
_d=false;
|
245
|
return;
|
246
|
}
|
247
|
if(_c.length>=2&&_28==getUrlQuery(_c[_c.length-2].url)){
|
248
|
handleBackButton();
|
249
|
}else{
|
250
|
if(_b.length>0&&_28==getUrlQuery(_b[_b.length-1].url)){
|
251
|
handleForwardButton();
|
252
|
}
|
253
|
}
|
254
|
};
|
255
|
})();
|
256
|
}
|