PageSourceSearch

https://a-markets.org/wp-content/plugins/amarkets-common/js/ampc/ampc-auto.js?ver=403.115

js a-markets.org collected 2026-10-07 16:39:11 UTC 4,455 bytes, 106 lines download raw bytes

1!function () {
2
3    const POLL_LIMIT = 25; // 25 × 200 мс = 5 сек.
4    const POLL_DELAY = 200;
5
6    const COOKIE_NAME = 'promo_code';
7    const COOKIE_LIFETIME_DAYS = 365;
8
9    // Ищем инпуты любых префиксов, а не только своего: форма рендерит собственный
10    // forms_user[promo_code], в котором может лежать вшитый промокод.
11    const PROMO_CODE_INPUTS_SELECTOR = 'input[name*="[promo_code]"]';
12
13    const promo_code_url = get_promo_code_from_url();
14
15    // Куку пишем сразу и на любой странице, не дожидаясь формы: партнёрская ссылка часто
16    // ведёт туда, где формы нет, а регистрация происходит позже на другой странице.
17    if (promo_code_url) {
18        save_promo_code_cookie(promo_code_url);
19    }
20
21    on_ready(() => wait_for_form(process_promo_code));
22
23    // Хэш проверяем первым, как и раньше: промокод в форме для существующих ссылок не меняется.
24    function get_promo_code_from_url() {
25        const from_hash = new URLSearchParams(window.location.hash.slice(1)).get('g');
26        const from_query = new URLSearchParams(window.location.search).get('g');
27
28        return clean_promo_code(from_hash) || clean_promo_code(from_query);
29    }
30
31    // Промокод состоит только из латиницы и цифр. Всё остальное — мусор, который прилипает
32    // к ссылке при копировании из мессенджеров: кавычки, бэктики, точки в конце.
33    function clean_promo_code(value) {
34        return (value || '').replace(/[^A-Za-z0-9]/g, '') || null;
35    }
36
37    function save_promo_code_cookie(promo_code) {
38        const expires = new Date(Date.now() + COOKIE_LIFETIME_DAYS * 24 * 60 * 60 * 1000);
39
40        document.cookie = `${COOKIE_NAME}=${promo_code}; expires=${expires.toUTCString()}; path=/`;
41    }
42
43    function on_ready(callback) {
44        if (document.readyState === 'loading') {
45            document.addEventListener('DOMContentLoaded', callback, { once: true });
46            return;
47        }
48
49        callback();
50    }
51
52    // Форму создаёт js партиала регистрации, в серверной разметке её нет, поэтому ждём.
53    function wait_for_form(callback, attempts = 0) {
54        if (get_forms().length > 0) {
55            callback();
56            return;
57        }
58
59        if (attempts < POLL_LIMIT) {
60            setTimeout(() => wait_for_form(callback, attempts + 1), POLL_DELAY);
61        }
62    }
63
64    function get_forms() {
65        return document.querySelectorAll('form.ama-form');
66    }
67
68    function process_promo_code() {
69        const forms = Array.from(get_forms()).filter(form => !has_embedded_promo_code(form));
70        if (forms.length === 0) {
71            return;
72        }
73
74        // 1. Промокод из URL. 2. Иначе из куки — она пережила переход с другой страницы.
75        const promo_code = promo_code_url || get_promo_code_cookie();
76        if (!promo_code) {
77            return;
78        }
79
80        forms.forEach(form => set_form_promo_code(form, promo_code));
81    }
82
83    // Промокод может быть вшит в форму настройками партиала — такие формы не трогаем.
84    function has_embedded_promo_code(form) {
85        return Array.from(form.querySelectorAll(PROMO_CODE_INPUTS_SELECTOR)).some(input => input.value !== '');
86    }
87
88    function get_promo_code_cookie() {
89        const matches = document.cookie.match(new RegExp(`(?:^|; )${COOKIE_NAME}=([^;]*)`));
90
91        // Чистим и при чтении: старые куки писались как есть и могут содержать мусор.
92        return matches ? clean_promo_code(matches[1]) : null;
93    }
94
95    function set_form_promo_code(form, promo_code) {
96        form.querySelectorAll(PROMO_CODE_INPUTS_SELECTOR).forEac
96h(input => input.remove());
97
98        const input = document.createElement('input');
99        input.type = 'hidden';
100        input.name = 'forms_user[promo_code]';
101        input.value = promo_code;
102
103        form.appendChild(input);
104    }
105
106}();

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.