/**交互式Pi搜索。* *作者:大卫G。安徒生*版权所有(C)2012、2013 David G。安徒生。*版权所有。**感谢彼得M。史蒂文在本地搜索中修复错误。*/“严格使用”;/*此应用程序的总体命名空间*/var-pisearch={};pisearch.SRC=“//www.angio.net/newpi/piquery";//pisearch.SRC=“///cgi.angio.net/piquery/piquery”;pisearch.DIGITS=“///static.angio.net/pi/DIGITS/10000.txt”;pisearch.startpos=0;pisearch.prevquery=0;$(文档).ready(函数(){$(“#pisearchform”).submit(pisearch.doPi);$(“#nextform”).submit(pisearch.dofindNext);$(“#qbox”).keyup(pisearch.doPi);$(“#results”).show();$(“#成功”).hide();$(“#失败”).hide();$.get(pisearch.DIGITS,pisearch.gotdights);});pisearch.gotdights=函数(数据){var pidigits=数据子串(2);pisearch.addToPiCache(pidigits,0);}pisearch.dofindNext=函数(事件){event.preventDefault();var qdat=$(document).find('input[name=“q”]').val();$('#查询').show()$.post(pisearch.SRC,{q:qdat,qs:pisearch.startpos},pisearch.gotPi,“json”);}pisearch.picache=“”;pisearch.\u psc_cachemax=1000;pisearch.incache=0;psc={};pisearch.keyarray=新建数组();pisearch.addToPiCache=函数(str,startpos){pisearch.picache=字符串;}pisearch.checkPiCache=功能(pos,diglimit){}pisearch.\u pscc_key=功能(str,startpos){return(str+“@”+startpos);}pisearch.\u pscFlushIfNeeded=函数(){if(pisearch.incache>=pisearch.\u psc_cachemax){var k=pisearch.keyarray.pop();删除pisearch.psc[k];皮瑟克;印加;}}pisearch.addToPiSearchCache=函数(str,startpos,found){pisearch._pscFlushIfNeeded();var key=pisearch.\u pscc_key(str,startpos);pisearch.psc[key]=找到;pisearch.keyarray.unshift(键);pisearch.incache++;返回true;}pisearch.checkPiSearchCache=函数(str,startpos){return pisearch.psc[pisearch.\u pscc_key(str,startpos)];}pisearch.localPiSearch=函数(str,startpos){//提取最大的连续组件,包括startpos//来自皮卡;//搜索它。:)var pos=pisearch.picache.substring(startpos).indexOf(str);if(pos==-1)返回-1;else pos+=startpos;if(pos>(pisearch.picache.length-20))返回-1;var p={};p、 p=位置+1;p、 k=str;//边界条件?p、 da=pisearch.picache.substring(pos+str.length,pos+str.length+20);var ndigs=数学最小值(20,位置);var digstart=位置ndigs;p、 db=pisearch.picache.substring(digstart,pos);p['qt']=0;返回p;}pisearch.doPi=函数(事件){event.preventDefault();var qdat=$(document).find('input[name=“q”]').val();if(qdat==pisearch.prevquery){返回false;}/*局部pi搜索计算在联系之前进行*服务器*/var startpos=0;var pir=pisearch.checkPiSearchCache(qdat,startpos);如果(pir){pisearch.reallyGotPi(皮尔);}其他{pir=pisearch.localPiSearch(qdat,startpos);如果(pir!=-(一){pisearch.reallyGotPi(皮尔);}其他{$('#查询').show()$.post(pisearch.SRC,{q:qdat},pisearch.gotPi,“json”);}}pisearch.prevquery=qdat;}pisearch.pistrtochars=功能(pistr){var a=“abcdefghijklmnopqrstuvwxyz”;var outstr=“”;对于(变量i=0;i<活塞长度;i+=2){变量d=活塞子串(i,i+2);var dmax=parseInt(d)%a.length;outstr+=a.子串(dmax,dmax+1);超出+=“”;}超额回报;}pisearch.piToChars=功能(前、中、后){var outstr=“”if(在%2之前){before=前.子串(1);突出部分=“”;outstr+=pisearch.pistrtochars(在.substring(1)之前);}其他{outstr=pisearch.pistrtochars(前面);}$('#piasharbefore').text(outstr);$('#piashar').text(pisearch.pistrtochars(during));$('#piasharafter').text(pisearch.pistrtochars(after));}pisearch.gotPi=函数(数据){var pir=数据['r'][0];pir['lookupTime']=数据['et'];如果(!pir[“错误”]){pisearch.addToPiSearchCache(pir['k'],pir['st',pir);}pisearch.reallyGotPi(皮尔);}pisearch.reallyGotPi=函数(pir){var qdat=$(document).find('input[name=“q”]').val();//AJAX回复可能会延迟更多的输入。如果我们没有,就不要更新//当前查询!如果(pir['k']!=qdat公司){返回;}$('#查询').hide();if(pir['Error']| | pir['status']==“未找到”){$(“#成功”).hide();$(“#失败”).show();}其他{$(“#成功”).show();$(“#失败”).hide();pisearch piToChars(pir['db',pir['k',pir['da']);}for(pir中的变量i){var c=pir[i];$(“#”+i).text(c);}$(“#searchKey1”).text(pir['k']);if(pir['lookupTime'){$(“#queryTime”).text(pir['lookupTime']/1000000000.0);}if(pir['c']){/计数$(“#queryCountBox”).show()$(“#queryCount”).text(pir['c'])}其他{“.y隐藏($y隐藏“)}pir['qt']=pir['lookupTime'];pisearch.startpos=1+pir['p'];//对于findNext}