1/** 2 * jQuery TWzipcode plugin 3 * https://app.essoduke.org/twzipcode/ 4 * Copyright 2015 essoduke.org, Licensed MIT. 5 * 6 * Changelog 7 * ------------------------------- 8 * æ°å¢ get æ¹æ³ï¼å¯åå¾å ç´ DOMã 9 * åæ¶ onCountySelect, onDistrictSelect, onZipcodeKeyUp è¿åç忏ï¼this å³çºå ç´ æ¬èº«ã 10 * 11 * @author essoduke.org 12 * @version 1.7.3 13 * @license MIT License 14 */ 15;(function ($, window, document, undefined) { 16 17 'use strict'; 18 19 // Zipcode JSON data 20 var data = { 21 'åºéå¸': {'仿å': '200', '信義å': '201', '䏿£å': '202', 'ä¸å±±å': '203', '宿¨å': '204', 'ææå': '205', 'ä¸å µå': '206'}, 22 'å°åå¸': {'䏿£å': '100', '大åå': '103', 'ä¸å±±å': '104', 'æ¾å±±å': '105', '大å®å': '106', 'è¬è¯å': '108', '信義å': '110', '士æå': '111', 'åæå': '112', 'å §æ¹å': '114', '忏¯å': '115', 'æå±±å': '116'}, 23 'æ°åå¸': { 24 'è¬éå': '207', 'éå±±å': '208', 'æ¿æ©å': '220', 'æ±æ¢å': '221', 'æ·±åå': '222', 'ç³ç¢å': '223', 25 'çè³å': '224', '平溪å': '226', 'éæºªå': '227', '貢寮å': '228', 'æ°åºå': '231', 'åªæå': '232', 26 'çä¾å': '233', 'æ°¸åå': '234', 'ä¸åå': '235', 'ååå': '236', 'ä¸å³½å': '237', '樹æå': '238', 27 '鶯æå': '239', 'ä¸éå': '241', 'æ°èå': '242', 'æ³°å±±å': '243', 'æå£å': '244', 'èæ´²å': '247', 28 'äºè¡å': '248', 'å «éå': '249', 'æ·¡æ°´å': '251', 'ä¸èå': '252', 'ç³éå': '253' 29 }, 30 'å®è縣': { 31 'å®èå¸': '260', 'é åé®': '261', 'ç¤æºªé': '262', '壯åé': '263', 'å¡å±±é': '264', 'ç¾ æ±é®': '265', 32 '䏿é': '266', '大åé': '267', 'äºçµé': '268', 'å¬å±±é': '269', 'èæ¾³é®': '270', 'åæ¾³é': '272', 33 'é£éå°åå¶¼': '290' 34 }, 35 'æ°ç«¹å¸': {'æ±å': '300', 'åå': '300', 'é¦å±±å': '300'}, 36 'æ°ç«¹ç¸£': { 37 '竹åå¸': '302', 'æ¹å£é': '303', 'æ°è±é': '304', 'æ°åé®': '305', 'é西é®': '306', 'èæé': '307', 38 '寶山é': '308', '竹æ±é®': '310', 'äºå³°é': '311', 'æ©«å±±é': '312', 'å°ç³é': '313', 'ååé': '314', 39 '峨åµé': '315' 40 }, 41 'æ¡åå¸': { 42 'ä¸å£¢å': '320', 'å¹³é®å': '324', '龿½å': '325', 'æ¥æ¢ å': '326', 'æ°å±å': '327', 'è§é³å': '328', 43 'æ¡åå': '330', 'é¾å±±å': '333', 'å «å¾·å': '334', '大溪å': '335', '復èå': '336', '大åå': '337', 44 'è竹å': '338' 45 }, 46 'èæ ç¸£': { 47 '竹åé®': '350', 'é 份å¸': '351', 'ä¸ç£é': '352', 'ååºé': '353', 'ç æ½é': '354', 'å¾é¾é®': '356', 48 'ééé®': '357', 'è裡é®': '358', 'èæ å¸': '360', 'é æ©é': '361', 'é å±é': '362', 'å ¬é¤¨é': '363', 49 '大æ¹é': '364', 'æ³°å®é': '365', 'é é¼é': '366', 'ä¸ç¾©é': '367', '西æ¹é': '368', 'åèé®': '369' 50 }, 51 'å°ä¸å¸': { 52 'ä¸å': '400', 'æ±å': '401', 'åå': '402', '西å': '403', 'åå': '404', 'å屯å': '406', '西屯å': '407', 'å屯å': '408', 53 '太平å': '411', '大éå': '412', 'é§å³°å': '413', 'çæ¥å': '414', 'è±åå': '420', 'åéå': '421', 54 'ç³å²¡å': '422', 'æ±å¢å': '423', 'åå¹³å': '424', 'æ°ç¤¾å': '426', 'æ½åå': '427', '大é å': '428', 55 'ç¥å²¡å': '429', '大èå': '432', 'æ²é¹¿å': '433', 'é¾äºå': '434', '梧棲å': '435', 'æ¸ æ°´å': '436', 56 '大ç²å': '437', 'å¤åå': '438', '大å®å': '439' 57 }, 58 'å½°å縣': { 59 'å½°åå¸': '500', 'è¬åé': '502', 'è±å£é': '503', 'ç§æ°´é': '504', '鹿港é®': '505', 'ç¦èé': '506', 60 'ç·è¥¿é': '507', 'åç¾é®': '508', '伸港é': '509', '塿å¸': '510', '社é é': '511', 'æ°¸éé': '512', 61 'åå¿é': '513', '溪æ¹é®': '514', '大æé': '515', 'åé¹½é': '516', 'ç°ä¸é®': '520', 'åæé®': '521', 62 'ç°å°¾é': '522', 'å¤é é': '523', '溪å·é': '524', '竹å¡é': '525', 'äºæé®': '526', '大åé': '527', 63 'è³èé': '528', 'äºæ°´é': '530' 64 }, 65 'åæç¸£': { 66 'åæå¸': '540', 'ä¸å¯®é': '541', 'è屯é®': '542', 'åå§é': '544', 'åéé®': '545', '仿é': '546', 67 'åéé': '551', 'ééé®': '552', 'æ°´éé': '553', 'éæ± é': '555', '信義é': '556', '竹山é®': '557', 68 '鹿谷é': '558' 69 }, 70 'å義å¸': {'æ±å': '600', '西å': '600'}, 71 'å義縣': { 72 'çªè·¯é': '602', 'æ¢ å±±é': '603', '竹å´é': '604', 'é¿éå±±': '605', 'ä¸åé': '606', '大åé': '607', 73 'æ°´ä¸é': '608', '鹿èé': '611', '太ä¿å¸': '612', 'æ´åå¸': '613', 'æ±ç³é': '614', 'å è ³é': '615', 74 'æ°æ¸¯é': '616', 'æ°éé': '621', '大æé®': '622', '溪å£é': '623', '義竹é': '624', 'å¸è¢é®': '625' 75 }, 76 'é²æç¸£': { 77 'æåé®': '630', '大å¤é': '631', 'èå°¾é®': '632', 'å庫é®': '633', 'è¤å¿ é': '634', 'æ±å¢é': '635', 78 'èºè¥¿é': '636', 'å´èé': '637', '麥寮é': '638', 'æå å¸': '640', 'æå §é': '643', 'å¤åé': '646', 79 'è¿æ¡é': '647', '西èºé®': '648', 'äºå´é': '649', '忏¯é®': '651', 'æ°´æé': '652', '壿¹é': '653', 80 'åæ¹é': '654', 'å é·é': '655' 81 }, 82 'å°åå¸': { 83 'ä¸è¥¿å': '700', 'æ±å': '701', 'åå': '702', 'åå': '704', 'å®å¹
vendor: 19,543 bytes, lines 83-560
83³å': '708', 'å®åå': '709', 84 '永康å': '710', 'æ¸ä»å': '711', 'æ°åå': '712', 'å·¦é®å': '713', 'çäºå': '714', 'æ¥ è¥¿å': '715', 85 'ååå': '716', 'ä»å¾·å': '717', 'éå»å': '718', 'é¾å´å': '719', 'å®ç°å': '720', '麻è±å': '721', 86 'ä½³éå': '722', '西港å': '723', 'ä¸è¡å': '724', 'å°è»å': '725', 'å¸ç²å': '726', 'åéå': '727', 87 'æ°çå': '730', 'å¾å£å': '731', 'ç½æ²³å': '732', 'æ±å±±å': '733', 'å ç²å': '734', 'ä¸çå': '735', 88 'æ³çå': '736', '鹽水å': '737', 'ååå': '741', 'å¤§å §å': '742', 'å±±ä¸å': '743', 'æ°å¸å': '744', 89 'å®å®å': '745' 90 }, 91 'é«éå¸': { 92 'æ°èå': '800', 'åéå': '801', 'èé å': '802', 'é¹½åå': '803', 'é¼å±±å': '804', 'ææ´¥å': '805', 93 'åé®å': '806', '䏿°å': '807', 'æ¥ æ¢å': '811', 'å°æ¸¯å': '812', 'å·¦çå': '813', 94 '仿¦å': '814', '大社å': '815', '岡山å': '820', '路竹å': '821', 'é¿è®å': '822', 'ç°å¯®å': '823', 95 'çå·¢å': '824', 'æ©é å': '825', 'æ¢å®å': '826', 'å½éå': '827', 'æ°¸å®å': '828', 'æ¹å §å': '829', 96 '鳳山å': '830', '大寮å': '831', 'æåå': '832', 'é³¥æ¾å': '833', '大樹å': '840', 'æå±±å': '842', 97 'ç¾æ¿å': '843', 'å é¾å': '844', 'å §éå': '845', 'ææå': '846', 'ç²ä»å': '847', 'æ¡æºå': '848', 98 'é£çªå¤å': '849', 'èæå': '851', 'èè£å': '852' 99 }, 100 '屿±ç¸£': { 101 '屿±å¸': '900', 'ä¸å°é': '901', 'é§èºé': '902', 'çªå®¶é': '903', 'ä¹å¦é': '904', '鿏¯é': '905', 102 '髿¨¹é': '906', 'é¹½åé': '907', 'é·æ²»é': '908', 'éºæ´é': '909', '竹ç°é': '911', 'å §åé': '912', 103 'è¬ä¸¹é': '913', 'æ½®å·é®': '920', 'æ³°æ¦é': '921', 'ä¾ç¾©é': '922', 'è¬å·é': '923', 'å´é é': '924', 104 'æ°å¤é': '925', 'åå·é': '926', 'æéé': '927', 'æ±æ¸¯é®': '928', 'ççé': '929', 'ä½³å¬é': '931', 105 'æ°åé': '932', 'æå¯®é': '940', 'æå±±é': '941', 'æ¥æ¥é': '942', 'ç åé': '943', 'è»åé': '944', 106 'ç¡ä¸¹é': '945', 'ææ¥é®': '946', '滿å·é': '947' 107 }, 108 'å°æ±ç¸£': { 109 'èºæ±å¸': '950', 'ç¶ å³¶é': '951', 'èå¶¼é': '952', 'å»¶å¹³é': '953', 'ååé': '954', '鹿éé': '955', 110 'éå±±é®': '956', '海端é': '957', 'æ± ä¸é': '958', 'æ±æ²³é': '959', 'æåé®': '961', 'é·æ¿±é': '962', 111 '太麻éé': '963', 'éå³°é': '964', '大æ¦é': '965', 'éä»é': '966' 112 }, 113 'è±è®ç¸£': { 114 'è±è®å¸': '970', 'æ°åé': '971', 'ç§æé': '972', 'åå®é': '973', '壽è±é': '974', 'é³³æé®': '975', 115 'å 復é': '976', 'è±æ¿±é': '977', 'çç©é': '978', 'è¬æ¦®é': '979', 'çéé®': '981', 'åæºªé': '982', 116 'å¯éé': '983' 117 }, 118 'éé縣': {'éæ²é®': '890', 'éæ¹é®': '891', 'é寧é': '892', 'éåé®': '893', 'çå¶¼é': '894', 'çåµé': '896'}, 119 '飿±ç¸£': {'åç«¿é': '209', 'åç«¿é': '210', 'èå é': '211', 'æ±å¼é': '212'}, 120 'æ¾æ¹ç¸£': {'é¦¬å ¬å¸': '880', '西嶼é': '881', 'æå®é': '882', 'ä¸ç¾é': '883', 'ç½æ²é': '884', 'æ¹è¥¿é': '885'}, 121 'åæµ·è«¸å³¶': {'æ±æ²': '817', 'åæ²': '819'}, 122 'å ¶ä»': {} 123 124 }; 125 /** 126 * twzipcode Constructor 127 * @param {Object} container HTML element 128 * @param {(Object|string)} options User settings 129 * @constructor 130 */ 131 function TWzipcode (container, options) { 132 /** 133 * Default settings 134 * @type {Object} 135 */ 136 var defaults = { 137 'countyName': 'county', 138 'countySel': '', 139 'css': [], 140 'detect': false, // v1.6.7 141 'districtName': 'district', 142 'districtSel': '', 143 'onCountySelect': null, // v1.5 144 'onDistrictSelect': null, // v1.5 145 'onZipcodeKeyUp': null, // v1.5 146 'readonly': false, 147 'zipcodeName': 'zipcode', 148 'zipcodeSel': '', 149 'zipcodeIntoDistrict': false, // v1.6.6 150 'googleMapsKey': '' // v1.6.9 151 }; 152 /** 153 * DOM of selector 154 * @type {Object} 155 */ 156 this.container = $(container); 157 /** 158 * Merge the options 159 * @type {Object} 160 */ 161 this.options = $.extend({}, defaults, options); 162 // initialize 163 this.init(); 164 } 165 /** 166 * TWzipcode prototype 167 */ 168 TWzipcode.prototype = { 169 170 VERSION: '1.7.3', 171 172 /** 173 * Method: Get all post data 174 * @return {Object} 175 */ 176 data: function () { 177 var wrap = this.wrap; 178 return 'undefined' !== typeof data[wrap.county.val()] ? 179 data[wrap.county.val()] : 180 data; 181 }, 182 /** 183 * Method: Serialize the data 184 * @return {string} 185 */ 186 serialize: function () { 187 var result = [], 188 obj = {}, 189 ele = {}, 190 s = {}; 191 obj = this.container.find('select,input'); 192 if (obj.length) { 193 obj.each(function () { 194 ele = $(this); 195 result.push(ele.attr('name') + '=' + ele.val()); 196 }); 197 } else { 198 $(this).children().each(function () { 199 s = $(this); 200 result.push(s.attr('name') + '=' + s.val()); 201 }); 202 } 203 return result.join('&'); 204 }, 205 /** 206 * Method: Destroy the container. 207 * @this {TWzipcode} 208 */ 209 destroy: function () { 210 $.data(this.container.get(0), 'twzipcode', null); 211 if (this.container.length) { 212 return this.container.empty().off('change.twzipcode keyup.twzipcode blur.twzipcode'); 213 } 214 }, 215 /** 216 * Method: Get elements of instance 217 * @param {(string|Array)} opts Type name 218 * @param {Function} callback Function callback 219 */ 220 get: function (callback) { 221 if ('function' === typeof callback) { 222 callback.call(this, this.wrap); 223 } else { 224 return this.wrap; 225 } 226 }, 227 /** 228 * Method: Set value for elements. 229 * @param {(string|number|Object)} opts Input value 230 */ 231 set: function (opts) { 232 233 var self = this, 234 def = { 235 'county': '', 236 'district': '', 237 'zipcode': '' 238 }, 239 opt = $.extend({}, def, opts); 240 241 try { 242 if ('string' === typeof opts || 'number' === typeof opts) { 243 self.wrap.zipcode.val(opts).trigger('blur.twzipcode'); 244 } else { 245 if (opt.zipcode) { 246 self.wrap.zipcode.val(opt.zipcode).trigger('blur.twzipcode'); 247 } 248 if (opt.county) { 249 self.wrap.county.val(opt.county).trigger('change.twzipcode'); 250 } 251 if (opt.district) { 252 self.wrap.district.val(opt.district).trigger('change.twzipcode'); 253 } 254 } 255 } catch (ignore) { 256 console.warn(ignore.message); 257 } finally { 258 return self.container; 259 } 260 }, 261 /** 262 * Method: Reset the selected items to default. 263 * @this {TWzipcode} 264 */ 265 reset: function (container, obj) { 266 var self = this, 267 wrap = self.wrap, 268 county = '', 269 list = { 270 'county': '<option value="">縣å¸</option>', 271 'district': '<option value="">éé®å¸å</option>' 272 }, 273 tpl = []; 274 275 switch (obj) { 276 case 'district': 277 wrap.district.html(list.district); 278 break; 279 default: 280 wrap.county.html(list.county); 281 wrap.district.html(list.district); 282 for (county in data) { 283 if ('undefined' !== typeof data[county]) { 284 tpl.push('<option value="' + county + '">' + county + '</option>'); 285 } 286 } 287 $(tpl.join('')).appendTo(wrap.county); 288 break; 289 } 290 wrap.zipcode.val(''); 291 }, 292 /** 293 * Binding the event of the elements 294 * @this {TWzipcode} 295 */ 296 bindings: function () { 297 298 var self = this, 299 opts = self.options, 300 wrap = self.wrap, 301 dz = '', 302 dc = '', 303 dd = ''; 304 305 // county 306 wrap.county.on('change.twzipcode', function () { 307 var val = $(this).val(), 308 district = '', 309 tpl = []; 310 311 wrap.district.empty(); 312 313 if (val) { 314 if (true === opts.zipcodeIntoDistrict) { 315 for (district in data[val]) { 316 if ('undefined' !== typeof data[val][district]) { 317 tpl.push('<option value="' + district + '">'); 318 tpl.push(data[val][district] + ' ' + district); 319 tpl.push('</option>'); 320 } 321 } 322 } else { 323 for (district in data[val]) { 324 if ('undefined' !== typeof data[val][district]) { 325 tpl.push('<option value="' + district + '">'); 326 tpl.push(district); 327 tpl.push('</option>'); 328 } 329 } 330 } 331 wrap.district.append(tpl.join('')).trigger('change.twzipcode'); 332 } else { 333 wrap.county.find('option:first').prop('selected', true); 334 self.reset('district'); 335 } 336 // County callback binding 337 if ('function' === typeof opts.onCountySelect) { 338 opts.onCountySelect.call(this); 339 } 340 }); 341 // District 342 wrap.district.on('change.twzipcode', function () { 343 var val = $(this).val(); 344 if (wrap.county.val()) { 345 wrap.zipcode.val(data[wrap.county.val()][val]); 346 } 347 // District callback binding 348 if ('function' === typeof opts.onDistrictSelect) { 349 opts.onDistrictSelect.call(this); 350 } 351 }); 352 // Zipcode 353 wrap.zipcode.on('keyup.twzipcode blur.twzipcode', function () { 354 var obj = $(this), 355 val = '', 356 i = '', 357 j = ''; 358 obj.val(obj.val().replace(/[^0-9]/g, '')); 359 val = obj.val().toString(); 360 361 if (true !== opts.readonly) { 362 if (3 === val.length) { 363 for (i in data) { 364 if ('undefined' !== typeof data[i]) { 365 for (j in data[i]) { 366 if ('undefined' !== typeof data[i][j] && 367 val === data[i][j] 368 ) { 369 wrap.county.val(i).trigger('change.twzipcode'); 370 wrap.district.val(j).trigger('change.twzipcode'); 371 break; 372 } 373 } 374 } 375 } 376 } 377 } 378 // Zipcode callback binding 379 if ('function' === typeof opts.onZipcodeKeyUp) { 380 opts.onZipcodeKeyUp.call(this); 381 } 382 }); 383 384 dz = 'undefined' !== typeof opts.zipcodeSel ? 385 opts.zipcodeSel : 386 ( 387 'undefined' !== typeof self.role.zipcode.data('value') ? 388 self.role.zipcode.data('value') : 389 opts.zipcodeSel 390 ); 391 392 dc = 'undefined' !== typeof opts.countySel ? 393 opts.countySel : 394 ( 395 'undefined' !== typeof self.role.county.data('value') ? 396 self.role.county.data('value') : 397 opts.countySel 398 ); 399 400 dd = 'undefined' !== typeof opts.districtSel ? 401 opts.districtSel : 402 ( 403 'undefined' !== typeof self.role.district.data('value') ? 404 self.role.district.data('value') : 405 opts.districtSel 406 ); 407 408 // Default value 409 if (dc) { 410 self.wrap.county.val(dc).trigger('change.twzipcode'); 411 if ('undefined' !== typeof data[dc][dd]) { 412 self.wrap.district.val(dd).trigger('change.twzipcode'); 413 } 414 } 415 if (dz && 3 === dz.toString().length) { 416 self.wrap.zipcode.val(dz).trigger('blur.twzipcode'); 417 } 418 }, 419 /** 420 * Geolocation detect 421 * @this {TWzipcode} 422 */ 423 geoLocation: function () { 424 var self = this, 425 geolocation = navigator.geolocation, 426 options = { 427 'maximumAge': 600000, 428 'timeout': 3000, 429 'enableHighAccuracy': false 430 }, 431 opts = self.options; 432 433 if (!geolocation) { 434 return; 435 } 436 437 geolocation.getCurrentPosition( 438 function (loc) { 439 var latlng = {}; 440 if (('coords' in loc) && 441 ('latitude' in loc.coords) && 442 ('longitude' in loc.coords) 443 ) { 444 latlng = [loc.coords.latitude, loc.coords.longitude]; 445 $.getJSON( 446 'https://maps.googleapis.com/maps/api/geocode/json', 447 { 448 'key': opts.googleMapsKey, 449 'sensor': false, 450 'latlng': latlng.join(',') 451 }, 452 function (data) { 453 var postal = ''; 454 if (data && 455 'undefined' !== typeof data.results && 456 'undefined' !== typeof data.results[0].address_components && 457 'undefined' !== typeof data.results[0].address_components[0] 458 ) { 459 postal = data.results[0] 460 .address_components[data.results[0].address_components.length - 1] 461 .long_name; 462 if (postal) { 463 self.wrap.zipcode.val(postal.toString()).trigger('blur.twzipcode'); 464 } 465 } 466 }); 467 } 468 }, 469 function (error) { 470 console.error(error); 471 }, 472 options 473 ); 474 }, 475 /** 476 * twzipcode Initialize 477 * @this {TWzipcode} 478 */ 479 init: function () { 480 481 var self = this, 482 container = self.container, 483 opts = self.options, 484 role = { 485 county: container.find('[data-role=county]:first'), 486 district: container.find('[data-role=district]:first'), 487 zipcode: container.find('[data-role=zipcode]:first') 488 }, 489 countyName = role.county.data('name') || opts.countyName, 490 districtName = role.district.data('name') || opts.districtName, 491 zipcodeName = role.zipcode.data('name') || opts.zipcodeName, 492 readonly = role.zipcode.data('readonly') || opts.readonly; 493 494 // Elements create 495 $('<select/>') 496 .attr('name', countyName) 497 .addClass(role.county.data('style') || ('undefined' !== typeof opts.css[0] ? opts.css[0] : '')) 498 .appendTo(role.county.length ? role.county : container); 499 500 $('<select/>') 501 .attr('name', districtName) 502 .addClass(role.district.data('style') || ('undefined' !== typeof opts.css[1] ? opts.css[1] : '')) 503 .appendTo(role.district.length ? role.district : container); 504 505 $('<input/>') 506 .attr({'type': 'text', 'name': zipcodeName}) 507 .prop('readonly', readonly) 508 .addClass(role.zipcode.data('style') || ('undefined' !== typeof opts.css[2] ? opts.css[2] : '')) 509 .appendTo(role.zipcode.length ? role.zipcode : container); 510 511 self.wrap = { 512 'county': container.find('select[name="' + countyName + '"]:first'), 513 'district': container.find('select[name="' + districtName + '"]:first'), 514 'zipcode': container.find('input[type=text][name="' + zipcodeName + '"]:first') 515 }; 516 517 if (true === opts.zipcodeIntoDistrict) { 518 self.wrap.zipcode.hide(); 519 } 520 521 self.role = role; 522 // Reset the elements 523 self.reset(); 524 // Elements events binding 525 self.bindings(); 526 // Geolocation 527 if (true === opts.detect) { 528 self.geoLocation(); 529 } 530 } 531 }; 532 /** 533 * jQuery twzipcode instance 534 * @param {Object} options Plugin settings 535 * @public 536 */ 537 $.fn.twzipcode = function (options) { 538 var instance = {}, 539 result = [], 540 args = arguments, 541 id = 'twzipcode'; 542 if ('string' === typeof options) { 543 this.each(function () { 544 instance = $.data(this, id); 545 if (instance instanceof TWzipcode && 'function' === typeof instance[options]) { 546 result = instance[options].apply(instance, Array.prototype.slice.call(args, 1)); 547 } 548 }); 549 return 'undefined' !== typeof result ? result : this; 550 } else { 551 return this.each(function () { 552 if (!$.data(this, id)) { 553 $.data(this, id, new TWzipcode(this, options)); 554 } 555 }); 556 } 557 }; 558 559})(window.jQuery || {}, window, document); 560//#EOF
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.