PageSourceSearch

https://kuplu-renault.ru/wp-content/themes/renault/inc/ox_forms/data/base/kladr/core.js

js kuplu-renault.ru collected 2026-10-06 00:12:11 UTC 5,158 bytes, 214 lines download raw bytes

1(function (hjq, window) {
2	hjq.kladr = {};
3
4	(function () {
5		var protocol = window.location.protocol == 'https:' ? 'https:' : 'http:';
6
7		/**
8		 * URL сервиса
9		 *
10		 * @type {string}
11		 */
12		hjq.kladr.url = protocol + '//kladr-api.ru/api.php';
13	})();
14
15	/**
16	 * Перечисление типов объектов
17	 *
18	 * @type {{region: string, district: string, city: string, street: string, building: string}}
19	 */
20	hjq.kladr.type = {
21		region:   'region',   // Область
22		district: 'district', // Район
23		city:     'city',     // Город
24		street:   'street',   // Улица
25		building: 'building'  // Строение
26	};
27
28	/**
29	 * Перечисление типов населённых пунктов
30	 *
31	 * @type {{city: number, settlement: number, village: number}}
32	 */
33	hjq.kladr.typeCode = {
34		city:       1, // Город
35		settlement: 2, // Посёлок
36		village:    4  // Деревня
37	};
38
39	/**
40	 * Проверяет корректность запроса
41	 *
42	 * @param {{}} query Запрос
43	 * @returns {boolean}
44	 */
45	hjq.kladr.validate = function (query) {
46		var type = hjq.kladr.type;
47
48		switch (query.type) {
49			case type.region:
50			case type.district:
51			case type.city:
52				if (query.parentType && !query.parentId) {
53					error('parentId undefined');
54					return false;
55				}
56				break;
57			case type.street:
58				
59				if (query.parentType != type.city && query.parentType != type.street) {
60					error('parentType must equal "city" or "street"');
61					return false;
62				}
63				if (!query.parentId) {
64					error('parentId undefined');
65					return false;
66				}
67				break;
68			case type.building:
69				if (!query.zip) {
70					if (!~hjq.inArray(query.parentType, [type.street, type.city])) {
71						error('parentType must equal "street" or "city"');
72						return false;
73					}
74					if (!query.parentId) {
75						error('parentId undefined');
76						return false;
77					}
78				}
79				break;
80			default:
81				if (!query.oneString) {
82					error('type incorrect');
83					return false;
84				}
85				break;
86		}
87
88		if (query.oneString && query.parentType && !query.parentId) {
89			error('parentId undefined');
90			return false;
91		}
92
93		if (query.typeCode && (query.type != type.city)) {
94			error('type must equal "city"');
95			return false;
96		}
97
98		if (query.limit < 1) {
99			error('limit must greater than 0');
100			return false;
101		}
102
103		return true;
104	};
105
106	/**
107	 * Отправляет запрос к сервису
108	 *
109	 * @param {{}} query Запрос
110	 * @param {Function} callback Функция, которой будет передан массив полученных объектов
111	 */
112	hjq.kladr.api = function (query, callback) {
113		if (!callback) {
114			error('Callback undefined');
115			return;
116		}
117
118		if (!hjq.kladr.validate(query)) {
119			callback([]);
120			return;
121		}
122
123		var timeout = setTimeout(function () {
124			callback([]);
125			timeout = null;
126		}, 3000);
127
128        hjq.ajax({
129            url: hjq.kladr.url + '?callback=?',
130            type: 'get',
131            data: toApiFormat(query),
132            dataType: 'jsonp'
133        }).done(function (data) {
134			data.result = data.result.filter(item => item.id != 'Free');
135
136            if (timeout) {
137                callback(data.result || []);
138                clearTimeout(timeout);
139            }
140        });
141	};
142
143	/**
144	 * Проверяет существование объекта, соответствующего запросу
145	 *
146	 * @param {{}} query Запрос
147	 * @param {Function} callback Функция, которой будет передан объект, если он существует, или
148	 * false если не существует.
149	 */
150	hjq.kladr.check = function (query, callback) {
151		if (!callback) {
152			error('Callback undefined');
153			return;
154		}
155
156		query.withParents = false;
157		query.limit = 1;
158
159		hjq.kladr.api(query, function (objs) {
160			objs && objs.length
161				? callback(objs[0])
162				: callback(false);
163		});
164	};
165
166	/**
167	 * Преобразует запрос из формата принятого в плагине в формат сервиса
168	 *
169	 * @param {{}} query Запрос в формате плагина
170	 * @returns {{}} Запрос в формате сервиса
171	 */
172	function toApiFormat(query) {
173		var params = {},
174			fields = {
175				type:        'contentType',
176				name:        'query',
177				withParents: 'withParent'
178			};
179
180		if (query.parentType && query.parentId) {
181			params[query.parentType + 'Id'] = query.parentId;
182		}
183
184		for (var key in query) {
185			if (hasOwn(query, key) && query[key]) {
186				params[hasOwn(fields, key) ? fields[key] : key] = query[key];
187			}
188		}
189
190		return params;
191	}
192
193	/**
194	 * Проверяет принадлежит ли объекту свойство
195	 *
196	 * @param {{}} obj Объект
197	 * @param {string} property Свойство
198	 * @returns {boolean}
199	 */
200	function hasOwn(obj, property) {
201		return obj.hasOwnProperty(property);
202	}
203
204	/**
205	 * Выводит ошибку на консоль
206	 *
207	 * @param {string} error Текст ошибки
208	 */
209	function error(error) {
210		var console = window.console;
211
212		console && console.error && console.error(error);
213	}
214})(hjq, window);

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.