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();});