Project

General

Profile

Download (4.74 KB) Statistics
| Branch: | Revision:
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
}
(8-8/26)