scala-news-reader
rss/atom news reader in scala
git clone https://9o.is/git/scala-news-reader.git
liftAjax.js
(7381B)
1
2
3 (function() {
4
5 window.liftAjax = {
6 lift_ajaxQueue: [],
7 lift_ajaxInProcess: null,
8 lift_doCycleQueueCnt: 0,
9 lift_ajaxShowing: false,
10 lift_ajaxRetryCount: 3,
11
12 lift_ajaxHandler: function(theData, theSuccess, theFailure, responseType){
13 var toSend = {retryCnt: 0};
14 toSend.when = (new Date()).getTime();
15 toSend.theData = theData;
16 toSend.onSuccess = theSuccess;
17 toSend.onFailure = theFailure;
18 toSend.responseType = responseType;
19 toSend.version = liftAjax.lift_ajaxVersion++;
20
21 // Make sure we wrap when we hit JS max int.
22 var version = liftAjax.lift_ajaxVersion
23 if ((version - (version + 1) != -1) || (version - (version - 1) != 1))
24 liftAjax.lift_ajaxVersion = 0;
25
26 if (liftAjax.lift_uriSuffix) {
27 theData += '&' + liftAjax.lift_uriSuffix;
28 toSend.theData = theData;
29 liftAjax.lift_uriSuffix = undefined;
30 }
31
32 liftAjax.lift_ajaxQueue.push(toSend);
33 liftAjax.lift_ajaxQueueSort();
34 liftAjax.lift_doCycleQueueCnt++;
35 liftAjax.lift_doAjaxCycle();
36 return false; // buttons in forms don't trigger the form
37
38 },
39
40 lift_uriSuffix: undefined,
41
42 lift_logError: function(msg) {
43 liftAjax.lift_defaultLogError(msg);
44 },
45
46 lift_defaultLogError: function(msg) {
47 if (console && typeof console.error == 'function')
48 console.error(msg);
49 else
50 alert(msg);
51 },
52
53 lift_ajaxQueueSort: function() {
54 liftAjax.lift_ajaxQueue.sort(function (a, b) {return a.when - b.when;});
55 },
56
57 lift_defaultFailure: function() {
58 alert("The server cannot be contacted at this time");
59 },
60
61 lift_startAjax: function() {
62 liftAjax.lift_ajaxShowing = true;
63 jQuery('#'+"ajax-spinner").show();
64 },
65
66 lift_endAjax: function() {
67 liftAjax.lift_ajaxShowing = false;
68 jQuery('#'+"ajax-spinner").hide();
69 },
70
71 lift_testAndShowAjax: function() {
72 if (liftAjax.lift_ajaxShowing && liftAjax.lift_ajaxQueue.length == 0 && liftAjax.lift_ajaxInProcess == null) {
73 liftAjax.lift_endAjax();
74 } else if (!liftAjax.lift_ajaxShowing && (liftAjax.lift_ajaxQueue.length > 0 || liftAjax.lift_ajaxInProcess != null)) {
75 liftAjax.lift_startAjax();
76 }
77 },
78
79 lift_traverseAndCall: function(node, func) {
80 if (node.nodeType == 1) func(node);
81 var i = 0;
82 var cn = node.childNodes;
83
84 for (i = 0; i < cn.length; i++) {
85 liftAjax.lift_traverseAndCall(cn.item(i), func);
86 }
87 },
88
89 lift_successRegisterGC: function() {
90 setTimeout("liftAjax.lift_registerGC()", 75000);
91 },
92
93 lift_failRegisterGC: function() {
94 setTimeout("liftAjax.lift_registerGC()", 15000);
95 },
96
97 lift_registerGC: function() {
98 var data = "__lift__GC=_",
99 version = null;
100 jQuery.ajax({ url : liftAjax.addPageNameAndVersion("/ajax_request/", version), data : data, type : "POST", dataType : "script", timeout : 5000, cache : false, success : liftAjax.lift_successRegisterGC, error : liftAjax.lift_failRegisterGC });
101 },
102
103
104 lift_sessionLost: function() {
105 location.reload();
106 },
107
108 lift_doAjaxCycle: function() {
109 if (liftAjax.lift_doCycleQueueCnt > 0) liftAjax.lift_doCycleQueueCnt--;
110 var queue = liftAjax.lift_ajaxQueue;
111 if (queue.length > 0) {
112 var now = (new Date()).getTime();
113 if (liftAjax.lift_ajaxInProcess == null && queue[0].when <= now) {
114 var aboutToSend = queue.shift();
115
116 liftAjax.lift_ajaxInProcess = aboutToSend;
117
118 var successFunc = function(data) {
119 liftAjax.lift_ajaxInProcess = null;
120 if (aboutToSend.onSuccess) {
121 aboutToSend.onSuccess(data);
122 }
123 liftAjax.lift_doCycleQueueCnt++;
124 liftAjax.lift_doAjaxCycle();
125 };
126
127 var failureFunc = function() {
128 liftAjax.lift_ajaxInProcess = null;
129 var cnt = aboutToSend.retryCnt;
130 if (arguments.length == 3 && arguments[1] == 'parsererror') {
131 liftAjax.lift_logError('The server call succeeded, but the returned Javascript contains an error: '+arguments[2])
132 } else
133
134 if (cnt < liftAjax.lift_ajaxRetryCount) {
135 aboutToSend.retryCnt = cnt + 1;
136 var now = (new Date()).getTime();
137 aboutToSend.when = now + (1000 * Math.pow(2, cnt));
138 queue.push(aboutToSend);
139 liftAjax.lift_ajaxQueueSort();
140 } else {
141 if (aboutToSend.onFailure) {
142 aboutToSend.onFailure();
143 } else {
144 liftAjax.lift_defaultFailure();
145 }
146 }
147 liftAjax.lift_doCycleQueueCnt++;
148 liftAjax.lift_doAjaxCycle();
149 };
150
151 if (aboutToSend.responseType != undefined &&
152 aboutToSend.responseType != null &&
153 aboutToSend.responseType.toLowerCase() === "json") {
154 liftAjax.lift_actualJSONCall(aboutToSend.theData, successFunc, failureFunc);
155 } else {
156 var theData = aboutToSend.theData,
157 version = aboutToSend.version;
158
159 liftAjax.lift_actualAjaxCall(theData, version, successFunc, failureFunc);
160 }
161 }
162 }
163
164 liftAjax.lift_testAndShowAjax();
165 if (liftAjax.lift_doCycleQueueCnt <= 0) liftAjax.lift_doCycleIn200()
166 },
167
168 lift_doCycleIn200: function() {
169 liftAjax.lift_doCycleQueueCnt++;
170 setTimeout("liftAjax.lift_doAjaxCycle();", 200);
171 },
172
173 lift_ajaxVersion: 0,
174
175 addPageNameAndVersion: function(url, version) {
176
177 var replacement = 'ajax_request/'+lift_page;
178 if (version!=null)
179 replacement += ('-'+version.toString(36)) + (liftAjax.lift_ajaxQueue.length > 35 ? 35 : liftAjax.lift_ajaxQueue.length).toString(36);
180 return url.replace('ajax_request', replacement);
181 },
182
183 lift_actualAjaxCall: function(data, version, onSuccess, onFailure) {
184 jQuery.ajax({ url : liftAjax.addPageNameAndVersion("/ajax_request/", version), data : data, type : "POST", dataType : "script", timeout : 5000, cache : false, success : onSuccess, error : onFailure });
185 },
186
187 lift_actualJSONCall: function(data, onSuccess, onFailure) {
188 var version = null;
189 jQuery.ajax({ url : liftAjax.addPageNameAndVersion("/ajax_request/", version), data : data, type : "POST", dataType : "json", timeout : 5000, cache : false, success : onSuccess, error : onFailure });
190 }
191 };
192
193 window.liftUtils = {
194 lift_blurIfReturn: function(e) {
195 var code;
196 if (!e) var e = window.event;
197 if (e.keyCode) code = e.keyCode;
198 else if (e.which) code = e.which;
199
200 var targ;
201
202 if (e.target) targ = e.target;
203 else if (e.srcElement) targ = e.srcElement;
204 if (targ.nodeType == 3) // defeat Safari bug
205 targ = targ.parentNode;
206 if (code == 13) {targ.blur(); return false;} else {return true;};
207 }
208 };
209
210
211 })();
212 jQuery(document).ready(function() {liftAjax.lift_doCycleIn200();});