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.