PageSourceSearch

https://767676.ru/bitrix/templates/aspro-premier/js/app.js?17641432015098

js 767676.ru collected 2026-10-07 19:36:07 UTC 5,098 bytes, 246 lines download raw bytes

1BX.namespace('Aspro');
2
3BX.Aspro.Utils = {
4	isFunction: (func) => {
5		return typeof func == 'function' || typeof window[func] === 'function';
6	},
7
8	readyDOM: (callback) => {
9		if (document.readyState !== 'loading') {
10			callback();
11		}
12		else {
13			document.addEventListener('DOMContentLoaded', callback)
14
15			// BX.ready(() => {
16			// 	callback()
17			// });
18		}
19	},
20};
21
22BX.namespace('Aspro.Loader');
23BX.namespace('Aspro.Observer');
24
25(() => {
26	/**
27	 * class JAsproLoader
28	 */
29
30	const addedCss = [];
31	const addedJs = [];
32	const addedExt = [];
33
34	class JAsproLoader {
35		constructor() {
36		}
37
38		addCss(...items) {
39			return new Promise((resolve, reject) => {
40				items = items.filter((css) => {
41					return BX.type.isString(css) && !~addedCss.indexOf(css);
42				});
43
44				if (items.length) {
45					BX.load(items, () => {
46						items.forEach((css) => {
47							addedCss.push(css);
48						});
49
50						resolve();
51					});
52				}
53				else {
54					resolve();
55				}
56			});
57		}
58
59		addJs(...items) {
60			return new Promise((resolve, reject) => {
61				items = items.filter((js) => {
62					return BX.type.isString(js) &&!~addedJs.indexOf(js);
63				});
64
65				if (items.length) {
66					BX.loadScript(items, () => {
67						items.forEach((js) => {
68							addedJs.push(js);
69						});
70
71						resolve();
72					});
73				}
74				else {
75					resolve();
76				}
77			});
78		}
79
80		addExt(...extensions) {
81			return new Promise((resolve, reject) => {
82				extensions = extensions.map((extension) => {
83					return `aspro_${extension}`;
84				});
85
86				extensions = extensions.filter((extension) => {
87					return BX.type.isString(extension) && !~addedExt.indexOf(extension);
88				});
89
90				if (extensions.length) {
91					BX.loadExt(extensions).then(() => {
92						extensions.forEach((extension) => {
93							addedExt.push(extension);
94						});
95
96						resolve();
97					});
98				}
99				else {
100					resolve();
101				}
102			});
103		}
104
105		added(item) {
106			if (BX.type.isString(item) && item) {
107				return !!~addedCss.indexOf(item) || !!~addedJs.indexOf(item) || !!~addedExt.indexOf(`aspro_${item}`);
108			}
109			else {
110				return {
111					ext: addedExt,
112					css: addedCss,
113					js: addedJs,
114				};
115			}
116		}
117
118		add(params) {
119			params = BX.type.isObject(params) ? params : {};
120			let extensions = params.ext ? (BX.type.isArray(params.ext) ? params.ext : [params.ext]) : [];
121			let cssItems = params.css ? (BX.type.isArray(params.css) ? params.css : [params.css]) : [];
122			let jsItems = params.js ? (BX.type.isArray(params.js) ? params.js : [params.js]) : [];
123
124			return new Promise((resolve, reject) => {
125				this.addExt(...extensions).then(() => {
126					this.addCss(...cssItems).then(() => {
127						this.addJs(...jsItems).then(() => {
128							resolve();
129						});
130					});
131				});
132			});
133		}
134
135		once(params) {
136			params = BX.type.isObject(params) ? params : {};
137
138			params.appear = BX.type.isString(params.appear) ? [params.appear] : (BX.type.isArray(params.appear) ? params.appear : null);
139			params.add = BX.type.isObject(params.add) ? params.add : null;
140
141			return new Promise((resolve, reject) => {
142				if (params.appear) {
143					BX.Aspro.Observer.appear(...params.appear).then(() => {
144						if (params.add) {
145							this.add(params.add).then(resolve);
146						}
147						else {
148							resolve();
149						}
150					});
151				}
152				else if (params.add) {
153					this.add(params.add).then(resolve);
154				}
155				else {
156					resolve();
157				}
158			});
159		}
160	}
161
162	BX.Aspro.Loader = new JAsproLoader();
163
164	/**
165	 * class JAsproObserver
166	 */
167
168	const intersectionConfig = {
169		root: null,
170		rootMargin: '0px',
171		threshold: 0,
172	};
173
174	class JAsproObserver {
175		constructor() {
176			this.mkIntersectionConfig();
177		}
178
179		mkIntersectionConfig(config) {
180			if (BX.type.isObject(config)) {
181				intersectionConfig.root = config.root;
182				intersectionConfig.rootMargin = config.rootMargin;
183				intersectionConfig.threshold = config.threshold;
184			}
185			else {
186				intersectionConfig.rootMargin = '0px';
187			}
188		}
189
190		appear(node, config) {
191			config = BX.type.isObject(config) && config ? config : intersectionConfig;
192
193			return new Promise((resolve, reject) => {
194				if (BX.type.isString(node)) {
195					let nodes = document.querySelectorAll(node);
196					if (nodes.length) {
197						let observer = new IntersectionObserver(
198							(entries, observer) => {
199								entries.forEach(entry => {
200									if (entry.isIntersecting) {
201										observer.unobserve(entry.target);
202
203										resolve();
204									}
205								});
206							},
207							config
208						);
209
210						nodes.forEach((node) => {
211							observer.observe(node);
212						});
213					}
214					else {
215						resolve();
216					}
217				}
218				else if (BX.type.isDomNode(node)) {
219					new IntersectionObserver(
220						(entries, observer) => {
221							entries.forEach(entry => {
222								if (entry.isIntersecting) {
223									observer.unobserve(entry.target);
224
225									resolve();
226								}
227							});
228						},
229						config
230					).observe(node);
231				}
232				else {
233					resolve();
234				}
235			});
236		}
237	}
238
239	BX.Aspro.Observer = new JAsproObserver();
240})();
241
242['click', 'keyup', 'change'].forEach((name) => {
243  document.addEventListener(name, (event) => {
244    BX.onCustomEvent(`app.document.${name}`, [event]);
245  });
246});

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.