PageSourceSearch

https://bayra.market/js/tygh/ajax.js?ver=1789459642

js bayra.market collected 2026-10-05 08:44:13 UTC 26,196 bytes, 712 lines download raw bytes

1(function (_, $) {
2  var loadedScripts = {};
3  var loadedScriptPromises = {};
4  var sessionData = {};
5  (function ($) {
6    var REQUEST_XML = 1;
7    var REQUEST_IFRAME = 2;
8    var REQUEST_COMET = 3;
9    var REQUEST_JSONP_POST = 5;
10    var QUERIES_LIMIT = 1;
11    var queryStack = [];
12    var activeQueries = 0;
13    var evalCache = {};
14    var responseCache = {};
15    var getScriptQueries = 0;
16    var oldjQuery = {};
17
18    /*
19     * Public methods
20     */
21    var methods = {
22      request: function (url, params) {
23        params = params || {};
24        params.method = params.method || 'get';
25        params.data = params.data || {};
26        params.message = params.message || _.tr('loading');
27        params.caching = params.caching || false;
28        params.hidden = params.hidden || false;
29        params.repeat_on_error = params.repeat_on_error || false;
30        params.force_exec = params.force_exec || false;
31        params.obj = params.obj || null;
32        params.append = params.append || null;
33        params.scroll = params.scroll || null;
34        params.overlay = params.overlay || null;
35        params.original_url = _.current_url || null;
36        params.get_promise = params.get_promise || null;
37        if (_.embedded) {
38          params.full_render = true;
39        }
40        if (params.full_render) {
41          params.data.full_render = params.full_render;
42        }
43        if (typeof params.data.security_hash == 'undefined' && typeof _.security_hash != 'undefined' && params.method.toLowerCase() == 'post') {
44          params.data.security_hash = _.security_hash;
45        }
46        if (params.result_ids) {
47          params.data.result_ids = params.result_ids;
48        }
49        if (params.skip_result_ids_check) {
50          params.data.skip_result_ids_check = params.skip_result_ids_check;
51        }
52        if (activeQueries >= QUERIES_LIMIT) {
53          // if we have queries in the queue, push request to it
54          var result = true;
55          if (params.get_promise) {
56            params.defered_object = methods.createDeferedObject();
57            result = methods.createPromise(params.defered_object);
58          }
59          queryStack.unshift(function () {
60            methods.request(url, params);
61          });
62          return result;
63        }
64        if (params.defered_object && params.defered_object.isAborted) {
65          params.defered_object.reject({}, 'abort', 'abort');
66          methods.executeNext();
67          return false;
68        }
69
70        // If query is not hidden, display loading box
71        if (params.hidden === false) {
72          $.toggleStatusBox('show', {
73            show_overlay: params.show_overlay,
74            overlay: params.overlay
75          });
76        }
77        var hash = '';
78        if (params.caching === true) {
79          hash = $.crc32(url + $.param(params.data));
80        }
81        if (!hash || !responseCache[hash]) {
82          // Check, if we need to save all the input fields values from the updated element
83          var saved_data = {};
84          var result_ids = params.data.result_ids ? params.data.result_ids.split(',') : [];
85          if (result_ids.length > 0) {
86            for (var j = 0; j < result_ids.length; j++) {
87              var container = $(document.getElementById(result_ids[j]));
88              var $save_fields_block = container.find('.cm-save-fields');
89              if (container.hasClass('cm-save-fields')) {
90                saved_data[result_ids[j]] = $(':input:visible', container).serializeArray();
91              } else if ($save_fields_block.length) {
92                saved_data[result_ids[j]] = $(':input:visible', $save_fields_block).serializeArray();
93              }
94            }
95            params.saved_data = saved_data;
96          }
97          if (url) {
98            url = fn_query_remove(url, 'result_ids');
99            if (url.indexOf('://') == -1) {
100              url = _.current_location + '/' + url;
101            }
102            if (params.obj && params.obj.hasClass('cm-comet')) {
103              params.url = url + '&result_ids=' + params.result_ids + '&is_ajax=' + REQUEST_COMET;
104              return transports.iframe(null, params, {
105                is_comet: true
106              });
107            } else {
108              activeQueries++;
109              var data_type = !$.support.cors && url.indexOf('://' + window.location.hostname) == -1 ? 'jsonp' : 'json';
110              if (!('is_ajax' in params.data) && data_type == 'json') {
111                params.data.is_ajax = REQUEST_XML;
112              }
113              if (sessionData.name && url.indexOf(sessionData.name) == -1) {
114                params.data[sessionData.name] = localStorage.getItem(sessionData.name);
115              }
116              var components = $.parseUrl(url);
117              if (components.anchor) {
118                params.data.anchor = components.anchor;
119              }
120              var jqXHR = $.ajax({
121                type: params.method,
122                url: url,
123                dataType: data_type,
124                cache: true,
125                data: params.data,
126                xhrFields: {
127                  withCredentials: true
128                },
129                success: function (data, textStatus) {
130                  if (hash) {
131                    // cache response
132                    responseCache[hash] = data;
133                  }
134                  _response(data, params);
135                },
136                error: function (XMLHttpRequest, textStatus, errorThrown) {
137                  if (textStatus === 'abort') {
138                    // Hide loading box
139                    $.toggleStatusBox('hide');
140                    return false;
141                  }
142
143                  // Repeat the query on the error response
144                  if (params.repeat_on_error) {
145                    params.repeat_on_error = false;
146                    methods.request(url, params);
147                    return false;
148                  }
149
150                  // Hide loading box
151                  $.toggleStatusBox('hide');
152
153                  // If query is not hidden, display error notice
154                  if (params.hidden === false && errorThrown) {
155                    var err_msg = _.tr('error_ajax').str_replace('[error]', errorThrown);
156                    $.ceNotification('show', {
157                      type: 'E',
158                      title: _.tr('error'),
159                      message: err_msg
160                    });
161                  }
162                  if (params.error_callback && typeof params.error_callback == 'function') {
163                    params.error_callback(XMLHttpRequest, textStatus, errorThrown);
164                  }
165                },
166                complete: function (XMLHttpRequest, textStatus) {
167                  methods.executeNext();
168                }
169              });
170              if (params.get_promise) {
171                if (params.defered_object) {
172                  var deferedObject = params.defered_object;
173                } else {
174                  var deferedObject = methods.createDeferedObject();
175                }
176                methods.bindXhrToDeferedObject(jqXHR, deferedObject);
177                return methods.createPromise(deferedObject);
178              } else {
179                return jqXHR;
180              }
181            }
182          }
183        } else if (hash && responseCache[hash]) {
184          var result = false;
185          _response(responseCache[hash], params);
186          if (params.get_promise) {
187            var deferedObject = methods.createDeferedObject();
188            var result = methods.createPromise(deferedObject);
189            deferedObject.resolve(responseCache[hash]);
190          }
191          methods.executeNext();
192          return result;
193        }
194        return false;
195      },
196      submitForm: function (form, clicked_elm) {
197        if (activeQueries >= QUERIES_LIMIT) {
198          // if we have queries in the queue, push request to it
199          queryStack.unshift(function () {
200            var submit_name = clicked_elm.attr('name'),
201              submit_value = clicked_elm.val(),
202              input;
203            if (submit_name) {
204              input = $('<input>', {
205                type: 'hidden',
206                value: submit_value,
207                name: submit_name
208              }).appendTo(form);
209            }
210            if (methods.submitForm(form, clicked_elm)) {
211              form.get(0).submit();
212            }
213            if (input) {
214              input.remove();
215            }
216          });
217          return false; // prevent default form submit
218        }
219        var params = {
220          form: form,
221          obj: clicked_elm,
222          scroll: clicked_elm.data('caScroll') || '',
223          overlay: clicked_elm.data('caOverlay') || '',
224          callback: 'ce.formajaxpost_' + form.prop('name')
225        };
226        $.ceNotification('closeAll');
227        $.toggleStatusBox('show', {
228          show_overlay: params.show_overlay,
229          overlay: params.overlay
230        });
231        var options = _getOptions(form, params);
232        if (options.force_exec) {
233          params['force_exec'] = true;
234        }
235        if (sessionData.name) {
236          form.append('<input type="hidden" name="' + sessionData.name + '" value="' + localStorage.getItem(sessionData.name) + '">');
237        }
238        if (options.full_render) {
239          form.append('<input type="hidden" name="full_render" value="Y">');
240        }
241        form.append('<input type="hidden" name="is_ajax" value="' + (options.transport == 'iframe' ? options.is_comet ? REQUEST_COMET : REQUEST_IFRAME : options.transport == 'jsonpPOST' ? REQUEST_JSONP_POST : REQUEST_XML) + '">');
242        return transports[options.transport](form, params, options);
243      },
244      inProgress: function () {
245        return activeQueries !== 0;
246      },
247      clearCache: function () {
248        responseCache = {};
249        return true;
250      },
251      response: function (response, params) {
252        return _response(response, params);
253      },
254      executeNext: function () {
255        activeQueries--;
256        if (queryStack.length) {
257          var f = queryStack.shift();
258          f();
259        }
260      },
261      createDeferedObject: function () {
262        var deferredObject = $.Deferred();
263        deferredObject.jqXHR = null;
264        deferredObject.isAborted = false;
265        deferredObject.abort = function () {
266          deferredObject.isAborted = true;
267          if (deferredObject.jqXHR) {
268            deferredObject.jqXHR.abort();
269          }
270        };
271        return deferredObject;
272      },
273      bindXhrToDeferedObject: function (jqXHR, deferredObject) {
274        jqXHR.done(deferredObject.resolve);
275        jqXHR.fail(deferredObject.reject);
276        deferredObject.jqXHR = jqXHR;
277      },
278      createPromise: function (deferredObject) {
279        var promise = deferredObject.promise();
280        promise.abort = function () {
281          deferredObject.abort();
282        };
283        return promise;
284      }
285    };
286
287    /*
288     * AJAX transports
289     */
290    var transports = {
291      /*
292       * Transport for file uploads or COMET requests
293       */
294      iframe: function (form, params, options) {
295        var iframe = $('<iframe name="upload_iframe" src="about:blank" class="hidden"></iframe>').appendTo(_.body);
296        activeQueries++;
297        if (options.is_comet && $('#comet_control:visible').length === 0) {
298          $('#comet_container_controller').ceProgress('init');
299        }
300        iframe.on('load', function () {
301          var response = {};
302          var self = $(this);
303          if (self.contents().text() !== null) {
304            eval('var response = ' + self.contents().find('textarea').val());
305          }
306          response = response || {};
307          _response(response, params);
308          if (options.is_comet && jQuery.isEmptyObject(response) == false) {
309            if (typeof response.comet_is_finished === 'undefined') {
310              response.comet_is_finished = true;
311            }
312            if (response.comet_is_finished) {
313              $('#comet_container_controller').ceProgress('finish');
314            }
315            $.ceEvent('trigger', 'ce.cometdone', [form, params, options, response]);
316          }
317          self.remove();
318          activeQueries--;
319          if (queryStack.length) {
320            var f = queryStack.shift();
321            f();
322          }
323        });
324
325        // We can send form, or open URL
326        if (form) {
327          form.prop('target', 'upload_iframe');
328        } else if (params.url) {
329          if (params.method == 'post') {
330            $('<form class="hidden" action="' + params.url + '" method="post" target="upload_iframe"><input type="hidden" name="security_hash" value="' + _.security_hash + '"></form>').appendTo(_.body).submit();
331          } else {
332            iframe.prop('src', params.url);
333          }
334        }
335        return true;
336      },
337      /*
338       * Transport for requests via XMLHttpRequest(2)
339       */
340      xml: function (form, params) {
341        if (form.hasClass('cm-outside-inputs')) {
342          var hash = form.serializeObject();
343        } else {
344          var hash = $(':input', form).serializeObject();
345        }
346
347        // Send name/value of clicked button
348        if (params.obj && params.obj.prop('name')) {
349          hash[params.obj.prop('name')] = params.obj.val();
350        }
351        params['method'] = form.prop('method');
352        params['data'] = hash;
353        params['result_ids'] = form.data('caTargetId');
354        methods.request(form.prop('action'), params);
355        return false; // prevent default form action
356      },
357      /*
358       * Transport for cross-domain form submit if XMLHttpRequest2 is not supported
359       */
360      jsonpPOST: function (form, params, options) {
361        $.receiveMessage(function (e) {
362          if (options.is_comet) {
363            $('#comet_container_controller').ceProgress('finish');
364          }
365          iframe.remove();
366          _response($.parseJSON(e.data), params);
367          activeQueries--;
368        });
369        var iframe = $('<iframe name="upload_iframe" src="about:blank" class="hidden"></iframe>').appendTo(_.body);
370        activeQueries++;
371        if (options.is_comet) {
372          $('#comet_container_controller').ceProgress('init');
373        }
374
375        // We can send form, or open URL
376        if (form) {
377          form.prop('target', 'upload_iframe');
378        } else if (params.url) {
379          iframe.prop('src', params.url);
380        }
381        return true;
382      }
383    };
384
385    /*
386     * Private methods
387     */
388    function _getOptions(obj, params) {
389      var is_comet = obj.hasClass('cm-comet') || params.obj && params.obj.hasClass('cm-comet');
390      var transport = 'xml';
391      var uploads = is_comet;
392      if (!is_comet && obj.prop('enctype') == 'multipart/form-data') {
393        obj.find('input[type=file]').each(function () {
394          if ($(this).val()) {
395            uploads = true;
396          }
397        });
398      }
399      if ((!$.support.cors || _.embedded && uploads) && obj.prop('action').indexOf('//') != -1 && obj.prop('action').indexOf('//' + window.location.hostname) == -1 && obj.prop('method') == 'post') {
400        transport = 'jsonpPOST';
401      } else if (uploads) {
402        transport = 'iframe';
403      }
404      return {
405        'full_render': obj.hasClass('cm-ajax-full-render'),
406        'is_comet': is_comet,
407        'force_exec': obj.hasClass('cm-ajax-force'),
408        'transport': transport
409      };
410    }
411    function _response(response, params) {
412      params = params || {};
413      params.force_exec = params.force_exec || false;
414      params.pre_processing = params.pre_processing || {};
415
416      // Use parameter 'data-no-execute="§"' to prevent the script from executing.
417      var regex_all = new RegExp('<script[^>§]*>([\u0001-\uFFFF]*?)</script>', 'img');
418      var matches = [];
419      var match = '';
420      var elm;
421      var data = response || {};
422      var inline_scripts = null;
423      var scripts_to_load = [];
424      var elms = [];
425      var content;
426
427      // If pre processing function passed, run it
428      if (params.pre_processing && typeof params.pre_processing == 'function') {
429        params.pre_processing(data, params);
430      }
431
432      // Ajax request forces browser to redirect
433      if (data.force_redirection) {
434        // Hide loading box
435        $.toggleStatusBox('hide');
436        $.redirect(data.force_redirection);
437        return true;
438      }
439
440      // add hashes of current scripts
441      if ($.isEmptyObject(evalCache)) {
442        $('script:not([src])').each(function () {
443          var self = $(this);
444          evalCache[$.crc32(self.html())] = true;
445        });
446      }
447      if (data.html) {
448        for (var k in data.html) {
449          elm = $(document.getElementById(k));
450          if (elm.length != 1 || data.html[k] === null) {
451            continue;
452          }
453
454          // If returned data contains forms and we're inside the form, move it to body
455          if (data.html[k].indexOf('<form') != -1 && elm.parents('form').length) {
456            $(_.body).append(elm);
457          }
458          matches = data.html[k].match(regex_all);
459          content = matches ? data.html[k].replace(regex_all, '') 
459: data.html[k];
460
461          // Clean up any editors initialized inside of the target DOM element
462          $('textarea.cm-wysiwyg', elm).each(function () {
463            $(this).ceEditor('destroy');
464          });
465          $.ceDialog('destroy_loaded', {
466            content: content
467          });
468          if (params.append) {
469            elm.append(content);
470          } else {
471            elm.html(content);
472          }
473          $.ceDialog('destroy_loaded_post');
474
475          // Restore saved data
476          if (typeof params.saved_data != 'undefined' && typeof params.saved_data[k] != 'undefined') {
477            var elements = [];
478            for (var i in params.saved_data[k]) {
479              elements[params.saved_data[k][i]['name']] = params.saved_data[k][i]['value'];
480            }
481            $(':input:visible', elm).each(function (id, local_elm) {
482              var jelm = $(local_elm);
483              if (typeof elements[jelm.prop('name')] != 'undefined' && !jelm.parents().hasClass('cm-skip-save-fields')) {
484                if (jelm.prop('type') == 'radio') {
485                  if (jelm.val() == elements[jelm.prop('name')]) {
486                    jelm.prop('checked', true);
487                  }
488                } else {
489                  jelm.val(elements[jelm.prop('name')]);
490                }
491                jelm.trigger('change');
492              }
493            });
494          }
495
496          // Display/hide hidden block wrappers
497          if (elm.html().trim()) {
498            elm.parents('.hidden.cm-hidden-wrapper').removeClass('hidden');
499          } else {
500            elm.parents('.cm-hidden-wrapper').addClass('hidden');
501          }
502
503          // If returned data contains scripts, execute them
504          var all_scripts = null,
505            ext_scripts = null;
506          if (matches) {
507            all_scripts = $(matches.join('\n'));
508            ext_scripts = all_scripts.filter('[src]');
509            inline_scripts = inline_scripts ? inline_scripts.add(all_scripts.filter(':not([src])')) : all_scripts.filter(':not([src])');
510            if (ext_scripts.length) {
511              for (var i = 0; i < ext_scripts.length; i++) {
512                var _src = ext_scripts.eq(i).prop('src');
513                if (loadedScripts[_src]) {
514                  if (ext_scripts.eq(i).hasClass('cm-ajax-force')) {
515                    loadedScripts[_src] = null;
516                  } else {
517                    continue;
518                  }
519                }
520                if (ext_scripts.eq(i).hasClass('cm-ajax-skip-load')) {
521                  continue;
522                }
523                scripts_to_load.push($.getScript(_src));
524              }
525            }
526          }
527          elms.push(elm);
528        }
529
530        // If content was updated inside in non-resizable dialog, reload it
531        if ($.ceDialog('inside_dialog', {
532          jelm: elm
533        })) {
534          $.ceDialog('reload_parent', {
535            jelm: elm
536          });
537        }
538        if (response.title) {
539          $(document).prop('title', response.title);
540        }
541      }
542      var done_event = function () {
543        $.ceEvent('trigger', 'ce.ajaxdone', [elms, inline_scripts, params, data, response.text || '']);
544      };
545      if (scripts_to_load.length) {
546        $.when.apply(null, scripts_to_load).then(done_event);
547      } else {
548        done_event();
549      }
550    }
551
552    // Override default ajax method to get count of loaded scripts
553    var ajax = $.ajax;
554    $.ajax = function (origSettings) {
555      if (origSettings.dataType && origSettings.dataType === 'script') {
556        var _src = origSettings.url,
557          promise;
558        if (loadedScripts[_src]) {
559          promise = _src in loadedScriptPromises ? loadedScriptPromises[_src] : $.Deferred().resolve().promise();
560          if ('success' in origSettings) {
561            promise.done(origSettings.success);
562          }
563        } else {
564          promise = ajax(origSettings);
565          loadedScripts[_src] = true;
566          loadedScriptPromises[_src] = promise;
567        }
568        return promise;
569      }
570      return ajax(origSettings);
571    };
572
573    // Override getScript to prepend relative paths with full URL
574    $.getScript = function (url, callback) {
575      url = url.indexOf('//') == -1 ? _.current_location + '/' + url : url;
576      if (_.otherjQ && getScriptQueries === 0) {
577        oldjQuery = jQuery;
578        jQuery = _.$;
579      }
580      getScriptQueries++;
581      return $.ajax({
582        type: "GET",
583        url: url,
584        success: function (data, textStatus, jqxhr) {
585          getScriptQueries--;
586          if (_.otherjQ && getScriptQueries === 0) {
587            _.$ = jQuery;
588            jQuery = oldjQuery;
589          }
590          if (callback) {
591            callback(data, textStatus, jqxhr);
592          }
593        },
594        dataType: "script",
595        cache: true
596      });
597    };
598
599    // This event executes after all scripts from ajax response are executed
600    $.ceEvent('on', 'ce.ajaxdone', function (elms, scripts, params, response_data, response_text) {
601      var i;
602
603      // For full page reload in embedded mode if language was changed
604      if (_.embedded && response_data.language_changed) {
605        _.embedded = false;
606        $.redirect(response_data.current_url, false);
607        window.location.reload(true);
608        return;
609      }
610
611      // If callback function passed, run it
612      if (params.on_ajax_done && typeof params.on_ajax_done == 'function') {
613        params.on_ajax_done(response_data, params, response_text);
614      }
615      if (scripts) {
616        for (i = 0; i < scripts.length; i++) {
617          var _hash = $.crc32(scripts.eq(i).html());
618          if (!evalCache[_hash] || params.force_exec || scripts.eq(i).hasClass('cm-ajax-force')) {
619            $.globalEval(scripts.eq(i).html());
620            evalCache[_hash] = true;
621          }
622        }
623      }
624      if (response_data.debug_info) {
625        console.log(response_data.debug_info);
626      }
627      var link_history = params.save_history && (!params.obj || params.obj && $.ceDialog('inside_dialog', {
628        jelm: params.obj
629      }) === false);
630      if (response_data.session_data) {
631        sessionData = response_data.session_data;
632        localStorage.setItem(sessionData.name, sessionData.id);
633      }
634      if (response_data.current_url) {
635        var current_url = decodeURIComponent(response_data.current_url);
636        if (!params.skip_history && (_.embedded || link_history)) {
637          var _params = params;
638          if (!link_history) {
639            _params.result_ids = _.container;
640          }
641          if (response_data.anchor) {
642            current_url += '#' + response_data.anchor;
643          }
644          $.ceHistory('load', current_url, _params, true);
645          _.current_url = current_url; // update current_url parameter in Tygh namespace
646        }
647        if (response_data.anchor) {
648          params.scroll = response_data.anchor;
649          _.anchor = '#' + response_data.anchor;
650        }
651      }
652      for (i = 0; i < elms.length; i++) {
653        $.commonInit(elms[i]);
654      }
655
656      // Enable disabled form fields back if we submitted form
657      if (params.form) {
658        $('input[name=is_ajax]', params.form).remove();
659        $('input[name=full_render]', params.form).remove();
660        if (params.form.hasClass('cm-disable-empty') || params.form.hasClass('cm-disable-empty-all') || params.form.hasClass('cm-disable-empty-files')) {
661          $('input.cm-disabled', params.form).prop('disabled', false).removeClass('cm-disabled');
662        }
663        if (params.form.data('caAjaxDoneEvent')) {
664          $.ceEvent('trigger', params.form.data('caAjaxDoneEvent'), [response_data, params, response_text]);
665        }
666      }
667
668      // If callback function passed, run it
669      if (params.callback && $.isFunction(params.callback)) {
670        params.callback(response_data, params, response_text);
671      } else if (params.callback) {
672        $.ceEvent('trigger', params.callback, [response_data, params, response_text]);
673      }
674
675      // Hide loading box
676      if (!params.keep_status_box) {
677        $.toggleStatusBox('hide');
678      }
679      if (params.scroll) {
680        if (!_.scrolling) {
681          $.scrollToElm(params.scroll);
682        }
683      }
684
685      // Display notification
686      if (response_data.notifications) {
687        $.ceNotification('showMany', response_data.notifications);
688      }
689    });
690    $.ceAjax = function (method) {
691      if (methods[method]) {
692        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
693      } else if (typeof method === 'object' || !method) {
694        return methods.init.apply(this, arguments);
695      } else {
696        $.error('ty.ajax: method ' + method + ' does not exist');
697      }
698    };
699  })($);
700  $(document).ready(function () {
701    $('script').each(function () {
702      var _src = $(this).prop('src');
703      if (_src) {
704        loadedScripts[_src] = true;
705      }
706    });
707    if (typeof ajax_callback_data != 'undefined' && ajax_callback_data) {
708      $.globalEval(ajax_callback_data);
709      ajax_callback_data = false;
710    }
711  });
712})(Tygh, Tygh.$);

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.