PageSourceSearch

https://serpstat.com/js/handlers.js?3493883178

js serpstat.com collected 2026-10-01 08:42:07 UTC 27,717 bytes, 962 lines download raw bytes

1$(document).ready(function () {
2  function ajaxLinkHandle(a) {
3    SerpstatMain.scoreEvent($(this).attr('data-event'));
4
5    if (a.ctrlKey) return true;
6
7    a.preventDefault();
8    var that = $(this),
9      url = that.is('a') ? that.attr('href') : that.data('href'),
10      block_id = SerpstatMain.getAttr(that, 'data-id', '#content'),
11      pages_block = that.closest('.pagination'),
12      loader = SerpstatMain.getAttr(that, 'data-loader', true);
13
14    if (pages_block) {
15      block_id = SerpstatMain.getAttr(pages_block, 'data-id', block_id);
16    }
17
18    var temp_href = window.location.href;
19    if (temp_href.indexOf('http://rank-tracker') !== -1) {
20      url = url.replace('https://serpstat.com', '');
21      window.location.href = 'https://serpstat.com' + url;
22      return false;
23    }
24
25    var pathArray = window.location.pathname.split('/');
26    var urlArray = url.split('/');
27    if (
28      (pathArray[1] == 'blog' || pathArray[2] == 'blog') &&
29      block_id == '#content'
30    ) {
31      if (
32        urlArray[1].indexOf('blog?') === -1 &&
33        urlArray[2].indexOf('blog?') === -1 &&
34        (urlArray[1] !== 'blog' && urlArray[2] !== 'category') &&
35        (urlArray[2] !== 'blog' && urlArray[3] !== 'category')
36      ) {
37        window.location.href = url;
38        return false;
39      }
40    }
41
42    SerpstatMain.getPage(url, block_id, true, 'GET', true, loader);
43    $('.super_nav_close').click();
44
45    return false;
46  }
47
48  $('body').on(
49    'click',
50    '.ajax_link, .pagination:not([data-id="#keywords_page"]) li a',
51    ajaxLinkHandle
52  );
53
54  $(
55    [
56      '#first_name_demo',
57      '#email_demo',
58      '#phone_demo',
59      '#first_name_demo_f',
60      '#email_demo_f',
61      '#phone_demo_f',
62      '#mb_first_name_demo',
63      '#mb_email_demo',
64      '#mb_phone_demo',
65      '#subscribe_email',
66      '#footer_subscribe_email',
67    ].join(', ')
68  )
69    .unbind('keyup')
70    .bind('keyup', function () {
71
72      if ($('#recaptcha_v2_script').length == 0) {
73        var dsq = document.createElement('script');
74        dsq.type = 'text/javascript';
75        dsq.async = true;
76        dsq.id = 'recaptcha_v2_script';
77        dsq.src = 'https://www.google.com/recaptcha/api.js?onload=recaptchaCallback&render=explicit';
78        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
79      }
80
81      if (
82        $('#first_name_demo_f').length &&
83        $('#first_name_demo_f').val().length >= 1 &&
84        $('#email_demo_f').val().length > 5 &&
85        $('#phone_demo_f').val().length > 12
86      ) {
87        $('#recaptcha_request_demo_f').removeAttr('style');
88      }
89      if ($('#mb_first_name_demo').length) {
90        if (
91          $('#mb_first_name_demo').val().length >= 1 &&
92          $('#mb_email_demo').val().length > 5 &&
93          $('#mb_phone_demo').val().length > 12
94        ) {
95          $('#mb_recaptcha_request_demo').removeAttr('style');
96        }
97      }
98
99      if ($('#subscribe_email').length && $('#subscribe_email').val().length > 5) {
100        $('#mb_recaptcha_subscribe').removeAttr('style');
101      }
102
103      if ($('#footer_subscribe_email').length && $('#footer_subscribe_email').val().length > 5) {
104        $('#footer_recaptcha_subscribe').removeAttr('style');
105      }
106      if ($('#first_name_demo').length) {
107        if (
108          $('#first_name_demo').val().length >= 1 &&
109          $('#email_demo').val().length > 5 &&
110          $('#phone_demo').val().length > 12
111        ) {
112          $('#recaptcha_request_demo')
113            .removeAttr('style')
114            .addClass('validate || validate_captcha');
115        }
116      }
117    });
118
119  $('body').on('submit', '.ajax_filter_submit', function () {
120    var form = $(this).closest('form'),
121      filter = SerpstatMain.getFilterParams(form);
122
123    SerpstatMain.getPage(
124      form.attr('action') + '?' + filter,
125      '#content',
126      true,
127      'GET',
128      false
129    );
130
131    return false;
132  });
133
134  $('body').on('click', '.not_available_alert', function () {
135    doAlert('info', $(this).attr('data-text'));
136    return false;
137  });
138
139  $('body').on('click', '.ajax_sort', function () {
140    var that = $(this);
141
142    /*if(that.closest('table').hasClass('table_sort')) {
143            return true;
144        }*/
145
146    var params = SerpstatMain.getUrlParams(window.location.search);
147
148    params['sort'] = that.attr('data-field');
149
150    if (that.hasClass('th_sort_asc')) params['order'] = 'desc';
151    else params['order'] = 'asc';
152
153    SerpstatMain.getPage(
154      window.location.pathname + '?' + SerpstatMain.buildUri(params)
155    );
156
157    return false;
158  });
159
160  $('body').on('submit', '.ajax_form_page', function () {
161    let form = $(this).closest('form'),
162      block_id = SerpstatMain.getAttr(form, 'data-block', '#content'),
163      url = SerpstatMain.formParamsToUrl(form);
164
165    // отключил ajax-сабмит для серч бара, для легкости пеерхода на реакт
166    if (form.hasClass('main_search_form')) {
167      window.location.href = url;
168    } else {
169      SerpstatMain.getPage(url, block_id);
170    }
171
172    return false;
173  });
174
175
176  $('body').on('change', '.ajax_change', function () {
177    var form = $(this).closest('form');
178    form.submit();
179    return false;
180  });
181
182  function dropdownSubmit() {
183    var form = $(this).closest('form'),
184      id = form.attr('data-block'),
185      join_sign,
186      parser = document.createElement('a'),
187      elements = SerpstatMain.getFormElements(form);
188    parser.href = form.attr('action');
189    join_sign = parser.search ? '&' : '?';
190    // удаляем пагинацию при переходе
191    SerpstatMain.getPage(
192      form.attr('action').replace(/page=[0-9]+&?/g, '') +
193      join_sign +
194      $.param(elements)
195    );
196    return false;
197  }
198
199  $('body')
200    .on('dropdown.afterSelect', '.ajax_dropdown_on_change', dropdownSubmit)
201    .on('click', '#tags_apply', dropdownSubmit);
202
203  $('body').on('submit', '.ajax_form', function (e) {
204    e.preventDefault();
205    var $this = $(this),
206      callback = $this.data('callback');
207    if (validate($this)) {
208      SerpstatMain.ajaxSubmit($(this)).then(function () {
209        if (callback) {
210          eval(callback);
211        }
212
213        if (!$this.closest('form').hasClass('ajax_errors_inline')) {
214          $('.dialog').myDialog('close');
215        }
216      });
217    }
218    return false;
219  });
220
221  $('body').on('click', '.ajax_delete', function () {
222    var that = $(this),
223      msg = SerpstatMain.getAttr(that, 'data-confirm', 'Are you sure?'),
224      row_tag = SerpstatMain.getAttr(that, 'data-row', 'tr'),
225      row = that.closest(row_tag);
226
227    dialogConfirm(msg, function () {
228      $.ajax({
229        url: that.attr('href'),
230        type: 'POST',
231        dataType: 'json',
232        beforeSend: function (req) { },
233        success: function (data) {
234          if (data.status_code == 200) {
235            row.remove();
236          } else {
237            doAlert('error', data.result);
238          }
239        }
240      });
241    });
242
243    return false;
244  });
245
246  $('#content').on('click', '.play_video', function () {
247    $(this).html($(this).attr('data-code'));
248  });
249
250  $('#content').on('click', '.select_se', function () {
251    $('.main_search_form')
252      .find('input[name=se]')
253      .attr('value', $(this).attr('data-val'));
254  });
255
256  $('body').on('click', '.set_lang_proposal', function () {
257    var lang = $(this).attr('data-lang'),
258      site_domain = location.hostname
259        .split('.')
260        .slice(-2)
261        .join('.');
262    $('.lp_wrapper').hide();
263
264    $.cookie('language_proposal_closed', lang, { path: '/', domain: '.' + site_domain });
265  });
266
267
268  $('body').on('click', '.set_page_size', function() {
269    var $this = $(this),
270      $wrapper = $this.closest('.dropdown_handler'),
271      block_id = SerpstatMain.getAttr($wrapper, 'data-block_id', '#content'),
272      load_url = $wrapper.data('url');
273
274    $.cookie('search_results', $(this).attr('data-val'), { path: '/' });
275    var params = SerpstatMain.getUrlParams(window.location.href);
276
277    // combine window.location parameters with load_url parameters
278    var el = document.createElement('a');
279    el.href = load_url;
280    var load_url_clean = el.origin + el.pathname;
281    var load_url_params = SerpstatMain.getUrlParams(load_url);
282
283    for (var param in load_url_params) {
284      if (
285        !(
286          params.hasOwnProperty(param) &&
287          params[param] == load_url_params[param]
288        )
289      ) {
290        params[param] = load_url_params[param];
291      }
292    }
293
294    if (params['page'] != undefined) {
295      delete params['page'];
296    }
297
298    var url = load_url_clean + '?' + SerpstatMain.buildUri(params);
299    SerpstatMain.getPage(url, block_id);
300  });
301
302  $('body').on('click', '.set_page_size_get_parameter', function () {
303    var $this = $(this),
304      $wrapper = $this.closest('.dropdown_handler'),
305      block_id = SerpstatMain.getAttr($wrapper, 'data-block_id', '#content'),
306      load_url = $wrapper.data('url');
307
308    var params = SerpstatMain.getUrlParams(window.location.href);
309
310    // combine window.location parameters with load_url parameters
311    var el = document.createElement('a');
312    el.href = load_url;
313    var load_url_clean = el.origin + el.pathname;
314    var load_url_params = SerpstatMain.getUrlParams(load_url);
315    for (var param in load_url_params) {
316      if (
317        !(
318          params.hasOwnProperty(param) &&
319          params[param] == load_url_params[param]
320        )
321      ) {
322        params[param] = load_url_params[param];
323      }
324    }
325
326    if (params['page'] != undefined) {
327      delete params['page'];
328    }
329
330    if (params['page_size'] != undefined) {
331      delete params['page_size'];
332    }
333
334    params['page_size'] = $(this).attr('data-val');
335
336    var url = load_url_clean + '?' + SerpstatMain.buildUri(params);
337    SerpstatMain.getPage(url, block_id);
338  });
339
340  $('body').on('click', '.ajax_request', function () {
341    $.ajax({
342      url: $(this).attr('href'),
343      type: 'GET',
344      dataType: 'json',
345      success: function (data) {
346        if (data.status_code == 200) {
347          doAlert('success', data.result);
348        } else {
349          doAlert('error', data.result);
350        }
351      }
352    });
353
354    return false;
355  });
356
357  $('body')
358    .on('click', '.download_as_image', function () {
359      var that = $(this),
360        block = document.getElementById(that.attr('data-id'));
361
362      onScreen('toggle');
363
364      SerpstatMain.getScript('/js/framework/html2canvas.js', function () {
365        that.hide();
366        $('#' + that.attr('data-id')).css('background-color', 'white');
367
368        html2canvas(block, {
369          onrendered: function (canvas) {
370            that.show();
371            $('#' + that.attr('data-id')).css(
372              'background-color',
373              'rgba(0, 0, 0, 0)'
374            );
375            var link = window.document.createElement('a');
376            link.download = 'chart.png';
377            link.href = canvas.toDataURL('image/png', 1.0);
378            link.click();
379          }
380        });
381      });
382
383      return false;
384    })
385    .on('click', '.ajax_get_block_link', function (e) {
386      e.preventDefault();
387      var el = $(this);
388      var link = $(this).attr('href'),
389        block = $('#content_main'),
390        url = $(this).attr('href').replace('tutorial', 'manual'),
391        callback = function () {
392          $('body,html').animate(
393            {
394              scrollTop: block.offset().top
395            },
396            'slow'
397          );
398          SerpstatMain.changeUrl(link);
399          $('.ajax_get_block_link').each(function (i, item) {
400            $(item).removeClass('hovered');
401          })
402          $(el).addClass('hovered');
403        };
404      SerpstatMain.getAjaxBlock(url, 'content_main', true, callback);
405    });
406
407  /**
408   * Поставил логаут сессии из Интеркома при логауте пользователя
409   */
410  $('body').on('click', '.logout_link', function (e) {
411    e.preventDefault();
412    setCookie('PHPSESSID', '', 1);
413    localStorage.clear();
414    window.location.assign($(this).attr('href'));
415  });
416
417  $('body').on(
418    'click',
419    '.select_export_fields, .select_export_fields_q',
420    function getHref() {
421      href = $(this).attr('href');
422      $('body').on('click', '#do_export, #do_export_q', function (e) {
423        e.preventDefault();
424        href = href ? href : '';
425        var dialog = $(this).parents('.dialog');
426        var export_fields = Serpstat.get_fields(dialog.attr('data-suf'));
427        var suf =
428          typeof dialog.attr('data-suf') == 'undefined'
429            ? ''
430            : dialog.attr('data-suf');
431        var logo = dialog.find('[name="logo' + suf + '"]:checked').val();
432        dialog.myDialog('close');
433        if (!logo) {
434          logo = 'serpstat';
435        }
436
437        href +=
438          '&pdf_export_fields=' +
439          export_fields.join(',') +
440          '&pdf_export_logo=' +
441          logo;
442
443        if ($('#keywords_block').data('period')) {
444          href +=
445            '&pdf_export_keywords_period=' +
446            $('#keywords_block').data('period');
447        }
448
449        if ($('#visible_block').data('period')) {
450          href +=
451            '&pdf_export_visibility_period=' +
452            $('#visible_block').data('period');
453        }
454
455        if ($('.select_export_fields').attr('data-export-type') == 'blank') {
456          window.open(href, '_blank');
457        } else {
458          SerpstatMain.exportRequest(href);
459        }
460        delete window.href;
461      });
462    }
463  );
464
465  $('body').on(
466    'click',
467    '.select_export_fields, .ajax_request_export',
468    function () {
469      var $dropdown = $(this).closest('.dropdown_handler');
470      // Закрываем дропдаун
471      $dropdown.dropdown('click');
472    }
473  );
474
475  $('body').on('click', '.ajax_request_export', function () {
476    SerpstatMain.exportRequest($(this).attr('href'));
477
478    return false;
479  });
480  $('body').on('submit', '.ajax_form_export', function () {
481    var url = SerpstatMain.formParamsToUrl($(this).closest('form'));
482
483    SerpstatMain.exportRequest(url);
484
485    return false;
486  });
487
488  $('body').on('vueTeEditStart', '.ss_event', function (event) {
489    SerpstatMain.scoreEvent($(this).attr('data-event'));
490  });
491
492  $('body')
493    .on('click', '[data-scoring_event]', addScoringEvent.bind(this))
494    .on('change', ':input[data-scoring_event]', addScoringEvent.bind(this))
495    .on(
496      'mouseover',
497      '[data-scoring_event][data-event_trigger="mouseover"]',
498      addScoringEvent.bind(this)
499    );
500
501  $('body').on('click', '.ss_event', function () {
502    SerpstatMain.scoreEvent($(this).attr('data-event'));
503  });
504
505  $('body').on('click', '.ss_sort_event .th_sort', function () {
506    SerpstatMain.scoreEvent(
507      $(this)
508        .closest('.ss_sort_event')
509        .attr('data-event')
510    );
511  });
512
513  $('body').on('keydown', '.ss_enter', function (e) {
514    if (e.keyCode == 13) {
515      SerpstatMain.scoreEvent($(this).attr('data-event'));
516    }
517  });
518
519  $('body').on('mouseover', '.ss_mouseover', function () {
520    SerpstatMain.scoreEvent($(this).attr('data-event'));
521    $(this).removeClass('ss_mouseover');
522  });
523
524  $('body')
525    .on('click', '.plan_table_radio tbody tr', function () {
526      var $this = $(this),
527        price = $this.attr('data-cost').trim(),
528        period = $this.attr('data-period'),
529        disc = $this.attr('data-cost-full').trim();
530
531      if ($('a').is('#submit_pay')) {
532        var submit_pay = $('#submit_pay');
533        submit_pay.attr('data-period', period);
534        submit_pay.attr('data-cost', price);
535        submit_pay.attr(
536          'href',
537          '/pay/create_bill?plan=' +
538          submit_pay.attr('data-plan-id') +
539          '&period=' +
540          submit_pay.attr('data-period') +
541          '&promo_key=' +
542          submit_pay.attr('data-promo-key')
543        );
544      }
545
546      $('input[name=period]').val(period);
547      $('.plan_price_total span').text(price);
548
549      if (price != disc) {
550        $('.plan_price_disc')
551          .css('display', 'inline-block')
552          .text(disc);
553      } else {
554        $('.plan_price_disc').hide();
555      }
556    })
557    .on('click', '#send_activation_mail', function (e) {
558      e.preventDefault();
559      $.ajax({
560        url: $(this).data('href'),
561        method: 'post',
562        dataType: 'JSON'
563      }).done(function (response) {
564        var type = response.status_code == 200 ? 'success' : 'error';
565        doAlert(type, response.result);
566      });
567    })
568    // сразу добавляет строку фильтра, при открытии блока фильтра
569    .on('click', '.filter_tool_trigger:not(.active)', function () {
570      if (!$.trim($('.filters').html()).length) {
571        $('.filter_add_and').click();
572      }
573    })
574    .on('click', '.ny_handler', function (e) {
575      window.location = '/pay/#.plan_personal';
576    })
577    .on('click', '.toggle_get_param', function () {
578      var href_parser = document.createElement('a'),
579        get_param = $(this).data('get_param');
580      href_parser.href = location.href;
581
582      if (href_parser.search.indexOf(get_param) !== -1) {
583        var regex = new RegExp('&?' + get_param + '[^&]*', 'g');
584        href_parser.search = href_parser.search.replace(regex, '');
585      } else {
586        href_parser.search = href_parser.search += '&' + get_param + '=true';
587      }
588
589      SerpstatMain.getPage(href_parser.href);
590    })
591    .on('click', '.open_project_invite', function (e) {
592      e.preventDefault();
593      var projectId = $(this).data('project_id');
594      $('#dialog_project_invite_value').val(projectId);
595      $('#dialog_project_invite_value_multiuser').val(projectId);
596      $('#dialog_project_invite').myDialog();
597    })
598    .on('dropdown.afterSelect load', '#main_search_type_dropdown', function (
599      e,
600      el
601    ) {
602      setProperMainSearchPlaceholder();
603    })
604    .on('click', '#dialog_profile_cry .profile_sorry_save', function (e) {
605      SerpstatMain.ajaxSubmit($('#email_notification_form'));
606    })
607    .on('click', '.blog_rss_share', function () {
608      var lang = $(this).attr('data-lang');
609      $.ajax({
610        url: '/blog/RssShare',
611        method: 'post',
612        data: {
613          lang: lang
614        }
615      });
616    });
617
618  $('#content').on('after_ajax_load', function () {
619    setProperMainSearchPlaceholder();
620  });
621
622  // init proper placeholder
623  setProperMainSearchPlaceholder();
624  function setProperMainSearchPlaceholder() {
625    var new_placeholder = $(
626      '#main_search_type_dropdown .select_option.active'
627    ).data('custom_placeholder');
628    $('#search_product_input').attr('placeholder', new_placeholder);
629  }
630
631  $('body').on('click', '#finish_grouping_project_creation', function () {
632    $(this)
633      .closest('.dialog_container')
634      .find('form')
635      .submit();
636  });
637
638  $('body').on('click', '.checkboxes_ajax_submit', function () {
639    var that = $(this),
640      url = that.attr('href'),
641      ids = [];
642
643    $('.table_checkboxes tbody input.checkbox:checked').each(function () {
644      ids.push($(this).val());
645    });
646
647    $.ajax({
648      url: url,
649      type: 'POST',
650      dataType: 'json',
651      data: { ids: ids },
652      success: function (data) {
653        if (data.status_code == 200) {
654          doAlert('success', data.result);
655        }
656      }
657    });
658
659    return false;
660  });
661
662  $('body').on('te.saved', '.te_handler', function (event, ui) {
663    var newVal = ui.val;
664    var $this = $(this);
665    var projectId = $this.closest('.project_handler').attr('data-project_id');
666
667    if (newVal) {
668      $.ajax({
669        method: 'POST',
670        url: '/projects/change_project_name/' + projectId,
671        data: {
672          name: newVal
673        },
674        dataType: 'json'
675      }).done(function (response) {
676        if (response && response.status_code == 400) {
677          doAlert('error', response.result);
678        }
679      });
680    }
681  });
682
683  $('body').on('click', '.dialog_grouping_limit_exceeded', function (e) {
684    groupingLimitExceededDialog();
685  });
686
687  $('body').on('click', '.wibinar_view', function (e) {
688    var webinarName = $(this).attr('data-webinar-name');
689    $.ajax({
690      url: '/site/webinarView',
691      type: 'POST',
692      data: {
693        webinarName: webinarName
694      }
695    }).done(function () {
696      console.log('ok');
697    });
698  });
699});
700
701function groupingLimitExceededDialog() {
702  $('#dialog_grouping_limit_exceeded').myDialog();
703}
704
705function setCookie(cookieName, cookieExpiresDate) {
706  var site_domain = location.host
707    .split('.')
708    .slice(-2)
709    .join('.');
710  site_domain = site_domain.replace(/:[0-9]*$/, '');
711
712  $.cookie(cookieName, 1, {
713    path: '/',
714    domain: '.' + site_domain,
715    expires: cookieExpiresDate
716  });
717}
718
719function addScoringEvent(event) {
720  var element = $(event.target);
721
722  SerpstatMain.scoreEvent(element.attr('data-scoring_event'));
723  element.removeAttr('data-scoring_event');
724  element.removeAttr('data-event_trigger');
725}
726
727(function () {
728  var $this = $('#dialog_project_invite');
729  // глобальная переменная multiuserData.userEmails находится в фале dashboard.php
730  var items = (window.multiuserData && window.multiuserData.userEmails) || {};
731  var isTeamOwner =
732    (window.multiuserData && window.multiuserData.isTeamOwner) || false;
733  var isEmptyItems = Object.keys(items).length <= 0;
734  var multiusers_select = $this.find('.multiusers_select');
735
736  // Добовление option
737  !isEmptyItems &&
738    Object.values(items).forEach(element => {
739      multiusers_select.append(
740        '<div class="select_option" data-val="' +
741        element +
742        '" data-placeholder="' +
743        element +
744        '">' +
745        element +
746        ' <span class="checkbox || checkbox_no_input"><svg class="icon"><use xlink:href="/img/svgdefs.svg#icon_check"></use></svg></span></div>'
747      );
748    });
749
750  $this.on('dialogOpen', function () {
751    if (!isTeamOwner) {
752      $this
753        .find('.tab_s_2')
754        .addClass('disabled')
755        .attr('disabled', true);
756
757      $this
758        .find('#tab_s_2')
759        .find('button[type=submit]')
760        .attr('disabled', true);
761    }
762  });
763  $this.on('dialogClose', function () {
764    $('#invite_edit_project_message').val('');
765    $this.find('.tab_s_2').removeClass('active');
766  });
767  $(document).on(
768    'click',
769    'a.next_button[data-id="#popular_news"], a.prev_button[data-id="#popular_news"]',
770    function (e) {
771      e.preventDefault();
772
773      var link = $(this).attr('href'),
774        data = $(this).data(),
775        link_params = {},
776        temp_var;
777
778      link
779        .substring(1)
780        .replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) {
781          link_params[key] = value;
782        });
783
784      for (var dataName in data) {
785        temp_var = dataName;
786
787        if (temp_var.indexOf('param_') !== -1) {
788          temp_var = temp_var.replace('param_', '');
789          link_params[temp_var] = data[dataName];
790        }
791      }
792
793      link = link.split('?')[0] + '?' + $.param(link_params);
794
795      SerpstatMain.getPage(link, '#popular_news', true, 'GET', true, true);
796
797      return false;
798    }
799  );
800})();
801
802function exportMultiDomainsHandler() {
803  $.ajaxPrefilter(function (options, originalOptions, jqXHR) {
804    var isExportUrlAnalytics =
805      options.url.indexOf('export-file/analytics') > -1;
806    if (isExportUrlAnalytics) {
807      var baseUrl = new URL(window.location);
808      var UrlClass = new URL(options.url, baseUrl);
809
810      var exportFields = UrlClass.searchParams.get('pdf_export_fields');
811      if (isMultiDomain(UrlClass.searchParams)) {
812        var domainsCount = getExportDomainCount(UrlClass.searchParams);
813
814        var exportFieldsParams = {};
815        var exportFieldsArray = exportFields.split(',');
816        exportFieldsArray.forEach(item => {
817          exportFieldsParams[item] = item;
818        });
819        var checkedFields = [
820          'domain',
821          'subdomain',
822          'url',
823          'position',
824          'dynamic'
825        ];
826        var selectedCheckedFields = [];
827        checkedFields.forEach(item => {
828          if (exportFieldsParams[item] !== undefined) {
829            selectedCheckedFields.push(item);
830          }
831        });
832
833        checkedFields.forEach(item => {
834          if (exportFieldsParams[item] === item) {
835            delete exportFieldsParams[item];
836          }
837        });
838
839        for (var i = 1; i <= domainsCount; i++) {
840          selectedCheckedFields.forEach(item => {
841            exportFieldsParams[item + '' + i] = item + i;
842          });
843        }
844
845        var data = [];
846        for (var j in exportFieldsParams) {
847          if (!exportFieldsParams[j]) {
848            continue;
849          }
850          data.push(j);
851        }
852
853        var newParams = data.join(',');
854        UrlClass.searchParams.set('pdf_export_fields', newParams);
855        options.url =
856          options.url.split('?')[0] + '?' + UrlClass.searchParams.toString();
857      }
858    }
859  });
860}
861
862function getExportDomainCount(searchParams) {
863  if (searchParams.has('domain2')) {
864    var domainsCount = 2;
865    if (searchParams.has('domain3')) {
866      domainsCount++;
867    }
868  } else {
869    var domains = searchParams.get('domains');
870    var domainList = domains.split(',');
871    var domainsCount = 0;
872    domainList.forEach(item => {
873      if (item !== '') {
874        domainsCount++;
875      }
876    });
877  }
878  return domainsCount;
879}
880
881function isMultiDomain(searchParams) {
882  return searchParams.has('domain2') || searchParams.get('domains') !== null;
883}
884
885function debounce(func, wait, immediate) {
886  var timeout;
887  return function () {
888    var context = this,
889      args = arguments;
890    var later = function () {
891      timeout = null;
892      if (!immediate) func.apply(context, args);
893    };
894    var callNow = immediate && !timeout;
895    clearTimeout(timeout);
896    timeout = setTimeout(later, wait);
897    if (callNow) func.apply(context, args);
898  };
899}
900
901$(document).ajaxSend(function (event, jqxhr, settings) {
902  if (settings.url == "/blog/subscribe/") {
903    var params = new URLSearchParams(settings.data),
904      tags = params.get('tags') || [],
905      email = params.get('email'),
906      accepted = params.get('accepted') || '',
907      gdprConfirm = params.get('gdprConfirm') || '';
908    if (tags.length) {
909      tags = tags.split(',');
910    }
911    var map = {
912      'Контент-маркетинг': 'Content_Marketing',
913      'Контент маркетинг': 'Content_Marketing',
914      'Content-Marketing': 'Content_Marketing',
915      'Content Marketing': 'Content_Marketing',
916      'Analytik': 'Analytics',
917      'Analytiks': 'Analytics',
918      'Аналитика': 'Analytics',
919      'Analytics': 'Analytics',
920      'Howto': 'How_to',
921      'How-to': 'How_to',
922      'How to': 'How_to',
923      'How_to': 'How_to',
924      'Howto-Artikel': 'How_to',
925      'News': 'News',
926      'Новости': 'News',
927      'Nachrichten': 'News',
928      'Маркетинг': 'Marketing',
929      'Marketing': 'Marketing',
930      'PPC': 'PPC',
931      'Кейсы': 'Cases',
932      'Cases': 'Cases'
933    };
934    tags = tags.map(function (x) {
935      x = x.trim();
936      x = map[x] || x;
937      x = x.split(' ').join('_');
938      return x;
939    });
940    tags = tags.filter(function (x) {
941      return x && x.length && x.length > 0;
942    });
943
944    if (tags) {
945      settings.data = 'email=' + email + '&tags=' + tags.join(',');
946    }
947    if (accepted != '' && gdprConfirm) {
948      settings.data = settings.data + '&accepted=' + accepted + '&gdprConfirm=' + gdprConfirm;
949    }
950  }
951});
952
953
954function transferInternalApiCookieToLocalStorage() {
955  const token = $.cookie('internal-api-user-token');
956  if (token) {
957    localStorage.setItem('internal-api-user-token', token);
958    document.cookie = 'internal-api-user-token=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Max-Age=0';
959  }
960}
961(transferInternalApiCookieToLocalStorage());
962

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.