PageSourceSearch

https://securityrussia.com/bitrix/cache/js/ag_hc_s1/app/cfccb9bc5f570e4d6cff830e413ce1c7.js?17392780485512

js securityrussia.com collected 2026-10-02 17:43:40 UTC 3,910 bytes, 100 lines download raw bytes

1BX.namespace("Aspro");
2BX.Aspro.Utils = {
3isFunction: (func) => {
4return typeof func == "function" || typeof window[func] === "function";},readyDOM: (callback) => {
5if(document.readyState !== "loading"){callback();}else{document.addEventListener("DOMContentLoaded", callback);}
6},};BX.namespace("Aspro.Loader");
7BX.namespace("Aspro.Observer");
8(() => {
9/**
10* class JAsproLoader
11*/
12const addedCss = [];
13const addedJs = [];
14const addedExt = [];
15class JAsproLoader {
16constructor(){}
17addCss(...items){return new Promise((resolve, reject) => {
18items = items.filter((css) => {
19return BX.type.isString(css) && !~addedCss.indexOf(css);});
20if(items.length){BX.loadCSS(items, () => {
21items.forEach((css) => {
22addedCss.push(css);});
23resolve();});}else{resolve();}
24});}
25addJs(...items){return new Promise((resolve, reject) => {
26items = items.filter((js) => {
27return BX.type.isString(js) && !~addedJs.indexOf(js);});
28if(items.length){BX.loadScript(items, () => {
29items.forEach((js) => {
30addedJs.push(js);});
31resolve();});}else{resolve();}
32});}
33addExt(...extensions){return new Promise((resolve, reject) => {
34extensions = extensions.map((extension) => {
35return `aspro_${extension}`;});
36extensions = extensions.filter((extension) => {
37return BX.type.isString(extension) && !~addedExt.indexOf(extension);});
38if(extensions.length){BX.loadExt(extensions).then(() => {
39extensions.forEach((extension) => {
40addedExt.push(extension);});
41resolve();});}else{resolve();}
42});}
43added(item){if(BX.type.isString(item) && item) {
44return !!~addedCss.indexOf(item) || !!~addedJs.indexOf(item) || !!~addedExt.indexOf(`aspro_${item}`);}else{return {
45ext: addedExt,css: addedCss,
46js: addedJs,};}
47}
48add(params){params = BX.type.isObject(params) ? params : {};let extensions = params.ext ? (BX.type.isArray(params.ext) ? params.ext : [params.ext]) : [];
49let cssItems = params.css ? (BX.type.isArray(params.css) ? params.css : [params.css]) : [];
50let jsItems = params.js ? (BX.type.isArray(params.js) ? params.js : [params.js]) : [];
51return new Promise((resolve, reject) => {
52this.addExt(...extensions).then(() => {
53this.addCss(...cssItems).then(() => {
54this.addJs(...jsItems).then(() => {
55resolve();});
56});});
57});}
58once(params){params = BX.type.isObject(params) ? params : {};params.appear = BX.type.isString(params.appear)
59? [params.appear]
60: BX.type.isArray(params.appear)
61? params.appear
62: null;
63params.add = BX.type.isObject(params.add) ? params.add : null;
64return new Promise((resolve, reject) => {
65if(params.appear){BX.Aspro.Observer.appear(...params.appear).then(() => {
66if(params.add){this.add(params.add).then(resolve);}else{resolve();}
67});} else if(params.add){this.add(params.add).then(resolve);}else{resolve();}
68});}
69}
70BX.Aspro.Loader = new JAsproLoader();
71/**
72* class JAsproObserver
73*/
74const intersectionConfig = {
75root: null,rootMargin: "0px",
76threshold: 0,};class JAsproObserver {
77constructor(){this.mkIntersectionConfig();}
78mkIntersectionConfig(config){if(BX.type.isObject(config)) {
79intersectionConfig.root = config.root;
80intersectionConfig.rootMargin = config.rootMargin;
81intersectionConfig.threshold = config.threshold;}else{intersectionConfig.rootMargin = "0px";}
82}
83appear(node, config){config = BX.type.isObject(config) && config ? config : intersectionConfig;
84return new Promise((resolve, reject) => {
85if(BX.type.isString(node)){let nodes = document.querySelectorAll(node);
86if(nodes.length){let observer = new IntersectionObserver((entries, observer) => {
87entries.forEach((entry) => {
88if(entry.isIntersecting){observer.unobserve(entry.target);
89resolve();}
90});}, config);
91nodes.forEach((node) => {
92observer.observe(node);});}else{resolve();}
93} else if(BX.type.isDomNode(node)){new IntersectionObserver((entries, observer) => {
94entries.forEach((entry) => {
95if(entry.isIntersecting){observer.unobserve(entry.target);
96resolve();}
97});}, config).observe(node);}else{resolve();}
98});}
99}
100BX.Aspro.Observer = new JAsproObserver();})();

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.