PageSourceSearch

https://simat.ru/bitrix/templates/aspro-allcorp3/js/jquery.activity.js

js simat.ru collected 2026-10-08 03:13:24 UTC 5,927 bytes, 141 lines download raw bytes

1/**
2 * jQuery Activity Plugin — отладочная версия (it-agency "60 секунд")
3 * Логика идентична jquery.activity.min.js, добавлено логирование [activity].
4 * Для выключения логов: DEBUG = false
5 */
6(function (e) {
7    var c = 0,
8        d = {},
9        a = 0,
10        DEBUG = false,
11        windowCount = 0,
12        windowActivityLogged = false;
13
14    function log(msg) {
15        if (DEBUG) {
16            console.log('[activity] ' + msg);
17        }
18    }
19
20    var b = {
21        init: function (f) {
22            return this.each(function () {
23                var originalCallBack;
24
25                d = jQuery.extend({
26                    achieveTime: 60,
27                    loop: 0,
28                    eventList: "touchmove blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error",
29                    testPeriod: 10,
30                    useMultiMode: 1,
31                    callBack: function (g) {
32                        console.log("Achieved!");
33                    },
34                    watchEvery: 1,
35                    counter: { test: 0, achiev: 0 }
36                }, f);
37
38                d.watchEvery *= 1000;
39
40                log('init: achieveTime=' + d.achieveTime +
41                    ' testPeriod=' + d.testPeriod +
42                    ' watchEvery=' + d.watchEvery + 'ms' +
43                    ' useMultiMode=' + d.useMultiMode +
44                    ' loop=' + d.loop);
45
46                originalCallBack = d.callBack;
47                d.callBack = function (g) {
48                    log('callBack: вызов');
49                    try {
50                        originalCallBack.call(this, g);
51                        log('callBack: выполнен без ошибок');
52                    } catch (err) {
53                        log('callBack: ОШИБКА: ' + (err && err.message ? err.message : err));
54                    }
55                };
56
57                if (d.useMultiMode) {
58                    b.loadMultiData();
59                }
60
61                if (d.counter.achiev != -1) {
62                    e(this).bind(d.eventList, b.eventTrigger);
63                    log('init: трекинг ЗАПУЩЕН, события привязаны к <' + this.tagName.toLowerCase() + '>');
64                    b.process();
65                } else {
66                    log('BLOCKED: achiev=-1 (цель уже срабатывала), трекинг НЕ запущен');
67                    log('BLOCKED: для сброса выполните в консоли: document.cookie="activity=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; затем перезагрузите страницу');
68                }
69            });
70        },
71        process: function () {
72            d.counter.test += 1;
73
74            if (d.counter.test == d.testPeriod) {
75                windowCount += 1;
76                if (a) {
77                    a = 0;
78                    d.counter.achiev += d.testPeriod;
79                    log('окно #' + windowCount + ': АКТИВНО → achiev ' + (d.counter.achiev - d.testPeriod) + '→' + d.counter.achiev);
80                } else {
81                    log('окно #' + windowCount + ': неактивно → без прогресса (achiev=' + d.counter.achiev + ')');
82                }
83                windowActivityLogged = false;
84                d.counter.test = 0;
85            }
86
87            c = setTimeout(b.process, d.watchEvery);
88
89            if (d.counter.achiev >= d.achieveTime) {
90                if (!d.loop) {
91                    clearTimeout(c);
92                }
93                d.counter.achiev = d.loop ? 0 : -1;
94                log('GOAL ACHIEVED: achiev=' + d.achieveTime + ' → вызов callBack');
95                d.callBack.call(this, d);
96            }
97
98            if (d.useMultiMode) {
99                document.cookie = "activity=" + d.counter.test + "|" + d.counter.achiev + "; path=/;";
100                log('cookie сохранён: activity=' + d.counter.test + '|' + d.counter.achiev);
101            }
102
103            log('tick: test=' + d.counter.test + '/' + d.testPeriod + ', achiev=' + d.counter.achiev + '/' + d.achieveTime + ', активно=' + (a ? 'да' : 'нет'));
104        },
105        eventTrigger: function (ev) {
106            if (!windowActivityLogged) {
107                windowActivityLogged = true;
108                log('активность: ' + (ev && ev.type ? ev.type : '?') + ' (окно #' + (windowCount + 1) + ')');
109            }
110            a = 1;
111        },
112        loadMultiData: function () {
113            var h = " activity=";
114            var g = " " + document.cookie;
115            if (g.length > 0) {
116                if (g.indexOf(h) != -1) {
117                    var offset = g.indexOf(h) + h.length;
118                    var f = unescape(g.substring(offset, g.indexOf(";", offset) == -1 ? g.length : g.indexOf(";", offset))).split("|");
119                    d.counter.test = parseInt(f[0]);
120                    d.counter.achiev = parseInt(f[1]);
121                    log('cookie найден: activity=' + f[0] + '|' + f[1] + ' → test=' + d.counter.test + ', achiev=' + d.counter.achiev);
122                    return;
123                }
124            }
125            d.counter.test = d.counter.achiev = 0;
126            log('cookie не найден: старт с нуля (test=0, achiev=0)');
127        }
128    };
129
130    e.fn.activity = function (f) {
131        if (b[f]) {
132            return b[f].apply(this, Array.prototype.slice.call(arguments, 1));
133        } else {
134            if (typeof f === "object" || !f) {
135                return b.init.apply(this, arguments);
136            } else {
137                e.error("Method " + f + " does not exist on jQuery.activity");
138            }
139        }
140    };
141})(jQuery);

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.