PageSourceSearch

https://www.vertikalplus.ru/include/JsHttpRequest.js

js vertikalplus.ru collected 2026-10-08 04:50:55 UTC 13,869 bytes, 574 lines download raw bytes

1/**
2 * JsHttpRequest: JavaScript "AJAX" data loader
3 * Minimized version: see debug directory for the complete one.
4 *
5 * @license LGPL
6 * @author Dmitry Koterov, http://en.dklab.ru/lib/JsHttpRequest/
7 * @version 5.x $Id$
8 */
9function JsHttpRequest(){
10var t=this;
11t.onreadystatechange=null;
12t.readyState=0;
13t.responseText=null;
14t.responseXML=null;
15t.status=200;
16t.statusText="OK";
17t.responseJS=null;
18t.caching=false;
19t.loader=null;
20t.session_name="PHPSESSID";
21t._ldObj=null;
22t._reqHeaders=[];
23t._openArgs=null;
24t._errors={inv_form_el:"Invalid FORM element detected: name=%, tag=%",must_be_single_el:"If used, <form> must be a single HTML element in the list.",js_invalid:"JavaScript code generated by backend is invalid!\n%",url_too_long:"Cannot use so long query with GET request (URL is larger than % bytes)",unk_loader:"Unknown loader: %",no_loaders:"No loaders registered at all, please check JsHttpRequest.LOADERS array",no_loader_matched:"Cannot find a loader which may process the request. Notices are:\n%",no_headers:"Method setRequestHeader() cannot work together with the % loader."};
25t.abort=function(){
26with(this){
27if(_ldObj&&_ldObj.abort){
28_ldObj.abort();
29}
30_cleanup();
31if(readyState==0){
32return;
33}
34if(readyState==1&&!_ldObj){
35readyState=0;
36return;
37}
38_changeReadyState(4,true);
39}
40};
41t.open=function(_2,_3,_4,_5,_6){
42with(this){
43try{
44if(document.location.search.match(new RegExp("[&?]"+session_name+"=([^&?]*)"))||document.cookie.match(new RegExp("(?:;|^)\\s*"+session_name+"=([^;]*)"))){
45_3+=(_3.indexOf("?")>=0?"&":"?")+session_name+"="+this.escape(RegExp.$1);
46}
47}
48catch(e){
49}
50_openArgs={method:(_2||"").toUpperCase(),url:_3,asyncFlag:_4,username:_5!=null?_5:"",password:_6!=null?_6:""};
51_ldObj=null;
52_changeReadyState(1,true);
53return true;
54}
55};
56t.send=function(_7){
57if(!this.readyState){
58return;
59}
60this._changeReadyState(1,true);
61this._ldObj=null;
62var _8=[];
63var _9=[];
64if(!this._hash2query(_7,null,_8,_9)){
65return;
66}
67var _a=null;
68if(this.caching&&!_9.length){
69_a=this._openArgs.username+":"+this._openArgs.password+"@"+this._openArgs.url+"|"+_8+"#"+this._openArgs.method;
70var _b=JsHttpRequest.CACHE[_a];
71if(_b){
72this._dataReady(_b[0],_b[1]);
73return false;
74}
75}
76var _c=(this.loader||"").toLowerCase();
77if(_c&&!JsHttpRequest.LOADERS[_c]){
78return this._error("unk_loader",_c);
79}
80var _d=[];
81var _e=JsHttpRequest.LOADERS;
82for(var _f in _e){
83var ldr=_e[_f].loader;
84if(!ldr){
85continue;
86}
87if(_c&&_f!=_c){
88continue;
89}
90var _11=new ldr(this);
91JsHttpRequest.extend(_11,this._openArgs);
92JsHttpRequest.extend(_11,{queryText:_8.join("&"),queryElem:_9,id:(new Date().getTime())+""+JsHttpRequest.COUNT++,hash:_a,span:null});
93var _12=_11.load();
94if(!_12){
95this._ldObj=_11;
96JsHttpRequest.PENDING[_11.id]=this;
97return true;
98}
99if(!_c){
100_d[_d.length]="- "+_f.toUpperCase()+": "+this._l(_12);
101}else{
102return this._error(_12);
103}
104}
105return _f?this._error("no_loader_matched",_d.join("\n")):this._error("no_loaders");
106};
107t.getAllResponseHeaders=function(){
108with(this){
109return _ldObj&&_ldObj.getAllResponseHeaders?_ldObj.getAllResponseHeaders():[];
110}
111};
112t.getResponseHeader=function(_13){
113with(this){
114return _ldObj&&_ldObj.getResponseHeader?_ldObj.getResponseHeader():[];
115}
116};
117t.setRequestHeader=function(_14,_15){
118with(this){
119_reqHeaders[_reqHeaders.length]=[_14,_15];
120}
121};
122t._dataReady=function(_16,js){
123with(this){
124if(caching&&_ldObj){
125JsHttpRequest.CACHE[_ldObj.hash]=[_16,js];
126}
127if(_16!==null||js!==null){
128status=4;
129responseText=responseXML=_16;
130responseJS=js;
131}else{
132status=500;
133responseText=responseXML=responseJS=null;
134}
135_changeReadyState(2);
136_changeReadyState(3);
137_changeReadyState(4);
138_cleanup();
139}
140};
141t._l=function(_18){
142var i=0,p=0,msg=this._errors[_18[0]];
143while((p=msg.indexOf("%",p))>=0){
144var a=_18[++i]+"";
145msg=msg.substring(0,p)+a+msg.substring(p+1,msg.length);
146p+=1+a.length;
147}
148return msg;
149};
150t._error=function(msg){
151msg=this._l(typeof (msg)=="string"?arguments:msg);
152msg="JsHttpRequest: "+msg;
153if(!window.Error){
154throw msg;
155}else{
156if((new Error(1,"test")).description=="test"){
157throw new Error(1,msg);
158}else{
159throw new Error(msg);
160}
161}
162};
163t._hash2query=function(_1e,_1f,_20,_21){
164if(_1f==null){
165_1f="";
166}
167if(_1e instanceof Object){
168var _22=false;
169for(var k in _1e){
170var v=_1e[k];
171if(v instanceof Function){
172continue;
173}
174var _25=_1f?_1f+"["+this.escape(k)+"]":this.escape(k);
175var _26=v&&v.parentNode&&v.parentNode.appendChild&&v.tagName;
176if(_26){
177var tn=v.tagName.toUpperCase();
178if(tn=="FORM"){
179_22=true;
180}else{
181if(tn=="INPUT"||tn=="TEXTAREA"||tn=="SELECT"){
182}else{
183return this._error("inv_form_el",(e.name||""),e.tagName);
184}
185}
186_21[_21.length]={name:_25,e:v};
187}else{
188if(v instanceof Object){
189this._hash2query(v,_25,_20,_21);
190}else{
191if(v===null){
192continue;
193}
194_20[_20.length]=_25+"="+this.escape(""+v);
195}
196}
197if(_22&&_21.length>1){
198return this._error("must_be_single_el");
199}
200}
201}else{
202_20[_20.length]=_1e;
203}
204return true;
205};
206t._cleanup=function(){
207var _28=this._ldObj;
208if(!_28){
209return;
210}
211JsHttpRequest.PENDING[_28.id]=false;
212var _29=_28.span;
213if(!_29){
214return;
215}
216_28.span=null;
217var _2a=function(){
218_29.parentNode.removeChild(_29);
219};
220JsHttpRequest.setTimeout(_2a,50);
221};
222t._changeReadyState=function(s,_2c){
223with(this){
224if(_2c){
225status=statusText=responseJS=null;
226responseText="";
227}
228readyState=s;
229if(onreadystatechange){
230onreadystatechange();
231}
232}
233};
234t.escape=function(s){
235return escape(s).replace(new RegExp("\\+","g"),"%2B");
236};
237}
238JsHttpRequest.COUNT=0;
239JsHttpRequest.MAX_URL_LEN=2000;
240JsHttpRequest.CACHE={};
241JsHttpRequest.PENDING={};
242JsHttpRequest.LOADERS={};
243JsHttpRequest._dummy=function(){
244};
245JsHttpRequest.TIMEOUTS={s:window.setTimeout,c:window.clearTimeout};
246JsHttpRequest.setTimeout=function(_2e,dt){
247window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.s;
248if(typeof (_2e)=="string"){
249id=window.JsHttpRequest_tmp(_2e,dt);
250}else{
251var id=null;
252var _31=function(){
253_2e();
254delete JsHttpRequest.TIMEOUTS[id];
255};
256id=window.JsHttpRequest_tmp(_31,dt);
257JsHttpRequest.TIMEOUTS[id]=_31;
258}
259window.JsHttpRequest_tmp=null;
260return id;
261};
262JsHttpRequest.clearTimeout=function(id){
263window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.c;
264delete JsHttpRequest.TIMEOUTS[id];
265var r=window.JsHttpRequest_tmp(id);
266window.JsHttpRequest_tmp=null;
267return r;
268};
269JsHttpRequest.query=function(url,_35,_36,_37){
270var req=new this();
271req.caching=!_37;
272req.onreadystatechange=function(){
273if(req.readyState==4){
274_36(req.responseJS,req.responseText);
275}
276};
277var _39=null;
278if(url.match(/^((\w+)\.)?(GET|POST)\s+(.*)/i)){
279req.loader=RegExp.$2?RegExp.$2:null;
280_39=RegExp.$3;
281url=RegExp.$4;
282}
283req.open(_39,url,true);
284req.send(_35);
285};
286JsHttpRequest.dataReady=function(d){
287var th=this.PENDING[d.id];
288delete this.PENDING[d.id];
289if(th){
290th._dataReady(d.text,d.js);
291}else{
292if(th!==false){
293throw "dataReady(): unknown pending id: "+d.id;
294}
295}
296};
297JsHttpRequest.extend=function(_3c,src){
298for(var k in src){
299_3c[k]=src[k];
300}
301};
302JsHttpRequest.LOADERS.xml={loader:function(req){
303JsHttpRequest.extend(req._errors,{xml_no:"Cannot use XMLHttpRequest or ActiveX loader: not supported",xml_no_diffdom:"Cannot use XMLHttpRequest to load data from different domain %",xml_no_headers:"Cannot use XMLHttpRequest loader or ActiveX loader, POST method: headers setting is not supported, needed to work with encodings correctly",xml_no_form_upl:"Cannot use XMLHttpRequest loader: direct form elements using and uploading are not implemented"});
304this.load=function(){
305if(this.queryElem.length){
306return ["xml_no_form_upl"];
307}
308if(this.url.match(new RegExp("^([a-z]+)://([^\\/]+)(.*)","i"))){
309if(RegExp.$2.toLowerCase()==document.location.hostname.toLowerCase()){
310this.url=RegExp.$3;
311}else{
312return ["xml_no_diffdom",RegExp.$2];
313}
314}
315var xr=null;
316if(window.XMLHttpRequest){
317try{
318xr=new XMLHttpRequest();
319}
320catch(e){
321}
322}else{
323if(window.ActiveXObject){
324try{
325xr=new ActiveXObject("Microsoft.XMLHTTP");
326}
327catch(e){
328}
329if(!xr){
330try{
331xr=new ActiveXObject("Msxml2.XMLHTTP");
332}
333catch(e){
334}
335}
336}
337}
338if(!xr){
339return ["xml_no"];
340}
341var _41=window.ActiveXObject||xr.setRequestHeader;
342if(!this.method){
343this.method=_41?"POST":"GET";
344}
345if(this.method=="GET"){
346if(this.queryText){
347this.url+=(this.url.indexOf("?")>=0?"&":"?")+this.queryText;
348}
349this.queryText="";
350if(this.url.length>JsHttpRequest.MAX_URL_LEN){
351return ["url_too_long",JsHttpRequest.MAX_URL_LEN];
352}
353}else{
354if(this.method=="POST"&&!_41){
355return ["xml_no_headers"];
356}
357}
358this.url+=(this.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+(req.caching?"0":this.id)+"-xml";
359var id=this.id;
360xr.onreadystatechange=function(){
361if(xr.readyState!=4){
362return;
363}
364xr.onreadystatechange=JsHttpRequest._dummy;
365req.status=null;
366try{
367req.status=xr.status;
368req.responseText=xr.responseText;
369}
370catch(e){
371}
372if(!req.status){
373return;
374}
375try{
376eval("JsHttpRequest._tmp = function(id) { var d = "+req.responseText+"; d.id = id; JsHttpRequest.dataReady(d); }");
377}
378catch(e){
379return req._error("js_invalid",req.responseText);
380}
381JsHttpRequest._tmp(id);
382JsHttpRequest._tmp=null;
383};
384xr.open(this.method,this.url,true,this.username,this.password);
385if(_41){
386for(var i=0;i<req._reqHeaders.length;i++){
387xr.setRequestHeader(req._reqHeaders[i][0],req._reqHeaders[i][1]);
388}
389xr.setRequestHeader("Content-Type","application/octet-stream");
390}
391xr.send(this.queryText);
392this.span=null;
393this.xr=xr;
394return null;
395};
396this.getAllResponseHeaders=function(){
397return this.xr.getAllResponseHeaders();
398};
399this.getResponseHeader=function(_44){
400return this.xr.getResponseHeader(_44);
401};
402this.abort=function(){
403this.xr.abort();
404this.xr=null;
405};
406}};
407JsHttpRequest.LOADERS.script={loader:function(req){
408JsHttpRequest.extend(req._errors,{script_only_get:"Cannot use SCRIPT loader: it supports only GET method",script_no_form:"Cannot use SCRIPT loader: direct form elements using and uploading are not implemented"});
409this.load=function(){
410if(this.queryText){
411this.url+=(this.url.indexOf("?")>=0?"&":"?")+this.queryText;
412}
413this.url+=(this.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+this.id+"-"+"script";
414this.queryText="";
415if(!this.method){
416this.method="GET";
417}
418if(this.method!=="GET"){
419return ["script_only_get"];
420}
421if(this.queryElem.length){
422return ["script_no_form"];
423}
424if(this.url.length>JsHttpRequest.MAX_URL_LEN){
425return ["url_too_long",JsHttpRequest.MAX_URL_LEN];
426}
427if(req._reqHeaders.length){
428return ["no_headers","SCRIPT"];
429}
430var th=this,d=document,s=null,b=d.body;
431if(!window.opera){
432this.span=s=d.createElement("SCRIPT");
433var _4a=function(){
434s.language="JavaScript";
435if(s.setAttribute){
436s.setAttribute("src",th.url);
437}else{
438s.src=th.url;
439}
440b.insertBefore(s,b.lastChild);
441};
442}else{
443this.span=s=d.createElement("SPAN");
444s.style.display="none";
445b.insertBefore(s,b.lastChild);
446s.innerHTML="Workaround for IE.<s"+"cript></"+"script>";
447var _4a=function(){
448s=s.getElementsByTagName("SCRIPT")[0];
449s.language="JavaScript";
450if(s.setAttribute){
451s.setAttribute("src",th.url);
452}else{
453s.src=th.url;
454}
455};
456}
457JsHttpRequest.setTimeout(_4a,10);
458return null;
459};
460}};
461JsHttpRequest.LOADERS.form={loader:function(req){
462JsHttpRequest.extend(req._errors,{form_el_not_belong:"Element \"%\" does not belong to any form!",form_el_belong_diff:"Element \"%\" belongs to a different form. All elements must belong to the same form!",form_el_inv_enctype:"Attribute \"enctype\" of the form must be \"%\" (for IE), \"%\" given."});
463this.load=function(){
464var th=this;
465if(!th.method){
466th.method="POST";
467}
468th.url+=(th.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+th.id+"-"+"form";
469if(req._reqHeaders.length){
470return ["no_headers","FORM"];
471}
472if(th.method=="GET"){
473if(th.queryText){
474th.url+=(th.url.indexOf("?")>=0?"&":"?")+th.queryText;
475}
476if(th.url.length>JsHttpRequest.MAX_URL_LEN){
477return ["url_too_long",JsHttpRequest.MAX_URL_LEN];
478}
479var p=th.url.split("?",2);
480th.url=p[0];
481th.queryText=p[1]||"";
482}
483var _4e=null;
484var _4f=false;
485if(th.queryElem.length){
486if(th.queryElem[0].e.tagName.toUpperCase()=="FORM"){
487_4e=th.queryElem[0].e;
488_4f=true;
489th.queryElem=[];
490}else{
491_4e=th.queryElem[0].e.form;
492for(var i=0;i<th.queryElem.length;i++){
493var e=th.queryElem[i].e;
494if(!e.form){
495return ["form_el_not_belong",e.name];
496}
497if(e.form!=_4e){
498return ["form_el_belong_diff",e.name];
499}
500}
501}
502if(th.method=="POST"){
503var _52="multipart/form-data";
504var _53=(_4e.attributes.encType&&_4e.attributes.encType.nodeValue)||(_4e.attributes.enctype&&_4e.attributes.enctype.value)||_4e.enctype;
505if(_53!=_52){
506return ["form_el_inv_enctype",_52,_53];
507}
508}
509}
510var d=_4e&&(_4e.ownerDocument||_4e.document)||document;
511var _55="jshr_i_"+th.id;
512var s=th.span=d.createElement("DIV");
513s.style.position="absolute";
514s.style.visibility="hidden";
515s.innerHTML=(_4e?"":"<form"+(th.method=="POST"?" enctype=\"multipart/form-data\" method=\"post\"":"")+"></form>")+"<iframe name=\""+_55+"\" id=\""+_55+"\" style=\"width:0px; height:0px; overflow:hidden; border:none\"></iframe>";
516if(!_4e){
517_4e=th.span.firstChild;
518}
519d.body.insertBefore(s,d.body.lastChild);
520var _57=function(e,_59){
521var sv=[];
522var _5b=e;
523if(e.mergeAttributes){
524var _5b=d.createElement("form");
525_5b.mergeAttributes(e,false);
526}
527for(var i=0;i<_59.length;i++){
528var k=_59[i][0],v=_59[i][1];
529sv[sv.length]=[k,_5b.getAttribute(k)];
530_5b.setAttribute(k,v);
531}
532if(e.mergeAttributes){
533e.mergeAttributes(_5b,false);
534}
535return sv;
536};
537var _5f=function(){
538top.JsHttpRequestGlobal=JsHttpRequest;
539var _60=[];
540if(!_4f){
541for(var i=0,n=_4e.elements.length;i<n;i++){
542_60[i]=_4e.elements[i].name;
543_4e.elements[i].name="";
544}
545}
546var qt=th.queryText.split("&");
547for(var i=qt.length-1;i>=0;i--){
548var _64=qt[i].split("=",2);
549var e=d.createElement("INPUT");
550e.type="hidden";
551e.name=unescape(_64[0]);
552e.value=_64[1]!=null?unescape(_64[1]):"";
553_4e.appendChild(e);
554}
555for(var i=0;i<th.queryElem.length;i++){
556th.queryElem[i].e.name=th.queryElem[i].name;
557}
558var sv=_57(_4e,[["action",th.url],["method",th.method],["onsubmit",null],["target",_55]]);
559_4e.submit();
560_57(_4e,sv);
561for(var i=0;i<qt.length;i++){
562_4e.lastChild.parentNode.removeChild(_4e.lastChild);
563}
564if(!_4f){
565for(var i=0,n=_4e.elements.length;i<n;i++){
566_4e.elements[i].name=_60[i];
567}
568}
569};
570JsHttpRequest.setTimeout(_5f,100);
571return null;
572};
573}};
574

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.