1/******/ (function() { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3
4/***/ "../FigureBaseResources/FigureBaseResources.js": 5/*!*****************************************************!*\ 6 !*** ../FigureBaseResources/FigureBaseResources.js ***! 7 \*****************************************************/ 8/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { 9 10// Load 3rd party scripts 11window.$ = window.jQuery = __webpack_require__(/*! jquery */ "../FigureBaseResources/node_modules/jquery/dist/jquery.js"); 12__webpack_require__(/*! bootstrap */ "../FigureBaseResources/node_modules/bootstrap/dist/js/bootstrap.js"); 13// Load Headroom globally then the jQuery plugin 14window.Headroom = __webpack_require__(/*! headroom.js */ "../FigureBaseResources/node_modules/headroom.js/dist/headroom.js"); 15__webpack_require__(/*! headroom.js/dist/jQuery.headroom.js */ "../FigureBaseResources/node_modules/headroom.js/dist/jQuery.headroom.js"); 16 17// Include our scripts 18__webpack_require__(/*! ./js/offset.config.js */ "../FigureBaseResources/js/offset.config.js"); 19__webpack_require__(/*! ./js/figure.js */ "../FigureBaseResources/js/figure.js"); 20window.crs = __webpack_require__(/*! ./js/crs.min.js */ "../FigureBaseResources/js/crs.min.js"); 21__webpack_require__(/*! ./js/viewport.js */ "../FigureBaseResources/js/viewport.js"); 22__webpack_require__(/*! ./js/cookies.js */ "../FigureBaseResources/js/cookies.js"); 23__webpack_require__(/*! ./js/jquery.stuck.js */ "../FigureBaseResources/js/jquery.stuck.js"); 24__webpack_require__(/*! ./js/autofillbyip.js */ "../FigureBaseResources/js/autofillbyip.js"); 25//require("moment"); 26//require("tempusdominus-bootstrap-4"); 27__webpack_require__(/*! ./js/site.js */ "../FigureBaseResources/js/site.js"); 28__webpack_require__(/*! offset-analytics */ "../FigureBaseResources/node_modules/offset-analytics/dist/offset-analytics.umd.cjs"); 29 30 31/***/ }), 32
33/***/ "../FigureBaseResources/js/autofillbyip.js": 34/*!*************************************************!*\ 35 !*** ../FigureBaseResources/js/autofillbyip.js ***! 36 \*************************************************/ 37/***/ (function() { 38 39(function() { 40 // Check if Page has a mailing address section before sending request 41 const checkIfValidPage = document.getElementById("ipstack_request"); 42 if (!checkIfValidPage) return; 43 44 if (checkIfValidPage) { 45 // Get IP 46 const getIp = new XMLHttpRequest(); 47 getIp.addEventListener("load", function() { 48 try { 49 const response = JSON.parse(getIp.response); 50 if (!response || !response.ip) return; 51 52 const ip = response.ip; 53 54 // After IP has been fetched 55 // Then call for location 56 const accessKey = "67ca1e1ad4f856a694c56d2109b303a6"; 57 const getLocation = new XMLHttpRequest(); 58 getLocation.addEventListener("load", function(e) { 59 try { 60 const response = JSON.parse(getLocation.response); 61 62 if (response.error || !response.city) return; 63 64 const country = document.getElementById("location_country") ? document.getElementById("location_country") : document.getElementById("signup_mailing_country"); 65 const city = document.getElementById("location_city") ? document.getElementById("location_city") : document.getElementById("signup_mailing_city"); 66 const state = document.getElementById("location_state") ? document.getElementById("location_state") : document.getElementById("signup_mailing_state"); 67 const zip = document.getElementById("location_zip") ? document.getElementById("location_zip") : document.getElementById("signup_mailing_zip"); 68 const isEU = document.getElementById("data[is_eu]"); 69 70 71 city.setAttribute("value", response.city); 72 zip.setAttribute("value", response.zip); 73 74 // Set and manually call onchange event 75 country.value = response.country_code; 76 country.dispatchEvent(new Event('change')); 77 78 79 if (state) { 80 $(state).val(response.region_code).change(); 81 } 82 if ( isEU ) { 83 isEU.value = 84 (response.location && response.location.is_eu ? "Yes" : "No") || 85 "Unknown"; 86 } 87 88 } catch (err) { 89 console.log(err) 90 } 91 }); 92 93 getLocation.open( 94 "GET", 95 "https://api.ipstack.com/" + ip + "?access_key=" + accessKey 96 ); 97 getLocation.send(); 98 } catch (err) {} 99 }); 100 getIp.open("GET", "https://api.ipify.org/?format=json"); 101 getIp.send(); 102 } 103})(); 104 105 106/***/ }), 107
108/***/ "../FigureBaseResources/js/cookies.js": 109/*!********************************************!*\ 110 !*** ../FigureBaseResources/js/cookies.js ***! 111 \********************************************/ 112/***/ (function(module, exports, __webpack_require__) { 113 114var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 115 * jQuery Cookie Plugin v1.4.1 116 * https://github.com/carhartl/jquery-cookie 117 * 118 * Copyright 2006, 2014 Klaus Hartl 119 * Released under the MIT license 120 */ 121(function (factory) { 122 if (true) { 123 // AMD (Register as an anonymous module) 124 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "../FigureBaseResources/node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 125 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 126 (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), 127 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 128 } else // removed by dead control flow 129{} 130}(function ($) { 131 132 var pluses = /\+/g; 133 134 function encode(s) { 135 return config.raw ? s : encodeURIComponent(s); 136 } 137 138 function decode(s) { 139 return config.raw ? s : decodeURIComponent(s); 140 } 141 142 function stringifyCookieValue(value) { 143 return encode(config.json ? JSON.stringify(value) : String(value)); 144 } 145 146 function parseCookieValue(s) { 147 if (s.indexOf('"') === 0) { 148 // This is a quoted cookie as according to RFC2068, unescape... 149 s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); 150 } 151 152 try { 153 // Replace server-side written pluses with spaces. 154 // If we can't decode the cookie, ignore it, it's unusable. 155 // If we can't parse the cookie, ignore it, it's unusable. 156 s = decodeURIComponent(s.replace(pluses, ' ')); 157 return config.json ? JSON.parse(s) : s; 158 } catch(e) {} 159 } 160 161 function read(s, converter) { 162 var value = config.raw ? s : parseCookieValue(s); 163 return $.isFunction(converter) ? converter(value) : value; 164 } 165 166 var config = $.cookie = function (key, value, options) { 167 168 // Write 169 170 if (arguments.length > 1 && !$.isFunction(value)) { 171 options = $.extend({}, config.defaults, options); 172 173 if (typeof options.expires === 'number') { 174 var days = options.expires, t = options.expires = new Date(); 175 t.setMilliseconds(t.getMilliseconds() + days * 864e+5); 176 } 177 178 return (document.cookie = [ 179 encode(key), '=', stringifyCookieValue(value), 180 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 181 options.path ? '; path=' + options.path : '', 182 options.domain ? '; domain=' + options.domain : '', 183 options.secure ? '; secure' : '' 184 ].join('')); 185 } 186 187 // Read 188 189 var result = key ? undefined : {}, 190 // To prevent the for loop in the first place assign an empty array 191 // in case there are no cookies at all. Also prevents odd result when 192 // calling $.cookie(). 193 cookies = document.cookie ? document.cookie.split('; ') : [], 194 i = 0, 195 l = cookies.length; 196 197 for (; i < l; i++) { 198 var parts = cookies[i].split('='), 199 name = decode(parts.shift()), 200 cookie = parts.join('='); 201 202 if (key === name) { 203 // If second argument (value) is a function it's a converter... 204 result = read(cookie, value); 205 break; 206 } 207 208 // Prevent storing a cookie that we couldn't decode. 209 if (!key && (cookie = read(cookie)) !== undefined) { 210 result[name] = cookie; 211 } 212 } 213 214 return result; 215 }; 216 217 config.defaults = {}; 218 219 $.removeCookie = function (key, options) { 220 // Must not alter options, thus extending a fresh object... 221 $.cookie(key, '', $.extend({}, options, { expires: -1 })); 222 return !$.cookie(key); 223 }; 224 225})); 226 227/***/ }), 228
229/***/ "../FigureBaseResources/js/crs.min.js": 230/*!********************************************!*\ 231 !*** ../FigureBaseResources/js/crs.min.js ***! 232 \********************************************/ 233/***/ (function(module, exports) { 234 235var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 236 * country-region-selector 237 * ------------------------ 238 * 0.5.0 239 * @author Ben Keen 240 * @repo https://github.com/benkeen/country-region-selector 241 * @licence MIT 242 */ 243!(function(a, n) { 244 if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (n), 245 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 246 (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), 247 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 248 else // removed by dead control flow 249{} 250})(this, function() { 251 "use strict"; 252 var m = !0, 253 h = !0, 254 M = [], 255 l = [ 256 [ 257 "Afghanistan", 258 "AF", 259 "Badakhshan~BDS|Badghis~BDG|Baghlan~BGL|Balkh~BAL|Bamyan~BAM|Daykundi~DAY|Farah~FRA|Faryab~FYB|Ghazni~GHA|Ghor~GHO|Helmand~HEL|Herat~HER|Jowzjan~JOW|Kabul~KAB|Kandahar~KAN|Kapisa~KAP|Khost~KHO|Kunar~KNR|Kunduz~KDZ|Laghman~LAG|Logar~LOW|Maidan Wardak~WAR|Nangarhar~NAN|Nimruz~NIM|Nuristan~NUR|Paktia~PIA|Paktika~PKA|Panjshir~PAN|Parwan~PAR|Samangan~SAM|Sar-e Pol~SAR|Takhar~TAK|Urozgan~ORU|Zabul~ZAB" 260 ], 261 [ 262 "à land Islands", 263 "AX", 264 "Brändö~BR|Eckerö~EC|Finström~FN|Föglö~FG|Geta~GT|Hammarland~HM|Jomala~JM|Kumlinge~KM|Kökar~KK|Lemland~LE|Lumparland~LU|Mariehamn~MH|Saltvik~SV|Sottunga~ST|Sund~SD|VÃ¥rdö~VR" 265 ], 266 [ 267 "Albania", 268 "AL", 269 "Berat~01|Dibër~09|Durrës~02|Elbasan~03|Fier~04|Gjirokastër~05|Korçë~06|Kukës~07|Lezhë~08|Shkodër~10|Tirana~11|Vlorë~12" 270 ], 271 [ 272 "Algeria", 273 "DZ", 274 "Adrar~01|Aïn Defla~44|Aïn Témouchent~46|Algiers~16|Annaba~23|Batna~05|Béchar~08|Béjaïa~06|Biskra~07|Blida~09|Bordj Bou Arréridj~34|Bouïra~10|Boumerdès~35|Chlef~02|Constantine~25|Djelfa~17|El Bayadh~32|El Oued~39|El Tarf~36|Ghardaïa~47|Guelma~24|Illizi~33|Jijel~18|Khenchela~40|Laghouat~03|Mascara~29|Médéa~26|Mila~43|Mostaganem~27|Msila~28|Naâma~45|Oran~31|Ouargla~30|Oum el Bouaghi~04|Relizane~48|Saïda~20|Sétif~19|Sidi Bel Abbès~22|Skikda~21|Souk Ahras~41|Tamanghasset~11|Tébessa~12|Tiaret~14|Tindouf~37|Tipaza~42|Tissemsilt~38|Tizi Ouzou~15|Tlemcen~13" 275 ], 276 [ 277 "American Samoa", 278 "AS", 279 "Tutuila~01|Aunu'u~02|Ta'Å«~03|OfuâOlosega~04|Rose Atoll~21|Swains Island~22" 280 ], 281 [ 282 "Andorra", 283 "AD", 284 "Andorra la Vella~07|Canillo~02|Encamp~03|Escaldes-Engordany~08|La Massana~04|Ordino~05|Sant Julià de Lòria~06" 285 ], 286 [ 287 "Angola", 288 "AO", 289 "Bengo~BGO|Benguela~BGU|Bié~BIE|Cabinda~CAB|Cuando Cubango~CCU|Cuanza Norte~CNO|Cuanza Sul~CUS|Cunene~CNN|Huambo~HUA|HuÃla~HUI|Luanda~LUA|Lunda Norte~LNO|Lunda Sul~LSU|Malanje~MAL|Moxico~MOX|Namibe~NAM|UÃge~UIG|Zaire~ZAI" 290 ], 291 [ 292 "Anguilla", 293 "AI", 294 "Anguilla~01|Anguillita Island~02|Blowing Rock~03|Cove Cay~04|Crocus Cay~05|Deadman's Cay~06|Dog Island~07|East Cay~08|Little Island~09|Little Scrub Island~10|Mid Cay~11|North Cay~12|Prickly Pear Cays~13|Rabbit Island~14|Sandy Island/Sand Island~15|Scilly Cay~16|Scrub Island~17|Seal Island~18|Sombrero/Hat Island~19|South Cay~20|South Wager Island~21|West Cay~22" 295 ], 296 ["Antarctica", "AQ", "Antarctica~AQ"], 297 [ 298 "Antigua and Barbuda", 299 "AG", 300 "Antigua Island~01|Barbuda Island~02|Bird Island~04|Bishop Island~05|Blake Island~06|Crump Island~09|Dulcina Island~10|Exchange Island~11|Five Islands~12|Great Bird Island~13|Green Island~14|Guiana Island~15|Hawes Island~17|Hells Gate Island~16|Henry Island~18|Johnson Island~19|Kid Island~20|Lobster Island~22|Maiden Island~24|Moor Island~25|Nanny Island~26|Pelican Island~27|Prickly Pear Island~28|Rabbit Island~29|Red Head Island~31|Redonda Island~03|Sandy Island~32|Smith Island~33|The Sisters~34|Vern
300on Island~35|Wicked Will Island~36|York Island~37" 301 ], 302 [ 303 "Argentina", 304 "AR", 305 "Buenos Aires~B|Capital Federal~C|Catamarca~K|Chaco~H|Chubut~U|Córdoba~X|Corrientes~W|Entre RÃos~E|Formosa~P|Jujuy~Y|La Pampa~L|La Rioja~F|Mendoza~M|Misiones~N|Neuquén~Q|RÃo Negro~R|Salta~A|San Juan~J|San Luis~D|Santa Cruz~Z|Santa Fe~S|Santiago del Estero~G|Tierra del Fuego~V|Tucumán~T" 306 ], 307 [ 308 "Armenia", 309 "AM", 310 "Aragatsotn~AG|Ararat~AR|Armavir~AV|Gegharkunik~GR|Kotayk~KT|Lori~LO|Shirak~SH|Syunik~SU|Tavush~TV|Vayots Dzor~VD|Yerevan~ER" 311 ], 312 ["Aruba", "AW", "Aruba~AW"], 313 [ 314 "Australia", 315 "AU", 316 "Australian Capital Territory~ACT|New South Wales~NSW|Northern Territory~NT|Queensland~QLD|South Australia~SA|Tasmania~TAS|Victoria~VIC|Western Australia~WA" 317 ], 318 [ 319 "Austria", 320 "AT", 321 "Burgenland~1|Kärnten~2|Niederösterreich~3|Oberösterreich~4|Salzburg~5|Steiermark~6|Tirol~7|Vorarlberg~8|Wien~9" 322 ], 323 [ 324 "Azerbaijan", 325 "AZ", 326 "AbÅeron~ABS|AÄcabÉdi~AGC|AÄdam~AGM|AÄdaÅ~AGS|AÄstafa~AGA|AÄsu~AGU|Astara~AST|BabÉk~BAB|BalakÉn~BAL|BÉrdÉ~BAR|BeylÉqan~BEY|BilÉsuvar~BIL|CÉbrayıl~CAB|CÉlilabad~CAL|Culfa~CUL|DaÅkÉsÉn~DAS|Füzuli~FUZ|GÉdÉbÉy~GAD|Goranboy~GOR|Göyçay~GOY|Göygöl~GYG|Hacıqabul~HAC|İmiÅli~IMI|İsmayıllı~ISM|KÉlbÉcÉr~KAL|KÇngÇrli~KAN|KürdÉmir~KUR|Laçın~LAC|LÉnkÉran~LAN|Lerik~LER|Masallı~MAS|Neftçala~NEF|OÄuz~OGU|Ordubad~ORD|QÉbÉlÉ~QAB|Qax~QAX|Qazax~QAZ|Qobustan~QOB|Quba~QBA|Qubadli~QBI|Qusar~QUS|Saatlı~SAT|Sabirabad~SAB|Åabran~SBN|SÉdÉrÉk~SAD|Åahbuz~SAH|ÅÉki~SAK|Salyan~SAL|Åamaxı~SMI|ÅÉmkir~SKR|Samux~SMX|ÅÉrur~SAR|SiyÉzÉn~SIY|ÅuÅa~SUS|TÉrtÉr~TAR|Tovuz~TOV|Ucar~UCA|Xaçmaz~XAC|Xızı~XIZ|Xocalı~XCI|XocavÉnd~XVD|Yardımlı~YAR|Yevlax~YEV|ZÉngilan~ZAN|Zaqatala~ZAQ|ZÉrdab~ZAR" 327 ], 328 [ 329 "Bahamas", 330 "BS", 331 "Acklins Island~01|Berry Islands~22|Bimini~02|Black Point~23|Cat Island~03|Central Abaco~24|Crooked Island and Long Cay~28|East Grand Bahama~29|Exuma~04|Freeport~05|Fresh Creek~06|Governor's Harbour~07|Green Turtle Cay~08|Harbour Island~09|High Rock~10|Inagua~11|Kemps Bay~12|Long Island~13|Marsh Harbour~14|Mayaguana~15|Mooreâs Island~40|New Providence~16|Nichollstown and Berry Islands~17|North Abaco~42|North Andros~41|North Eleuthera~33|Ragged Island~18|Rock Sound~19|San Salvador and Rum Cay~20|Sandy Point~21|South Abaco~35|South Andros~36|South Eleuthera~37|West Grand Bahama~39" 332 ], 333 [ 334 "Bahrain", 335 "BH", 336 "Al JanÅ«bÄ«yah~14|Al ManÄmah~13|Al Muḩarraq~15|Al Wusţá~16|Ash ShamÄlÄ«yah~17" 337 ], 338 [ 339 "Bangladesh", 340 "BD", 341 "Barisal~A|Chittagong~B|Dhaka~C|Khulna~D|Mymensingh~M|Rajshahi~E|Rangpur~F|Sylhet~G" 342 ], 343 [ 344 "Barbados", 345 "BB", 346 "Christ Church~01|Saint Andrew~02|Saint George~03|Saint James~04|Saint John~05|Saint Joseph~06|Saint Lucy~07|Saint Michael~08|Saint Peter~09|Saint Philip~10|Saint Thomas~11" 347 ], 348 [ 349 "Belarus", 350 "BY", 351 "Brest voblast~BR|Gorod Minsk~HO|Homiel voblast~HO|Hrodna voblast~HR|Mahilyow voblast~MA|Minsk voblast~MI|Vitsebsk voblast~VI" 352 ], 353 [ 354 "Belgium", 355 "BE", 356 "Bruxelles-Capitale~BRU|Région Flamande~VLG|Région Wallonië~WAL" 357 ], 358 [ 359 "Belize", 360 "BZ", 361 "Belize District~BZ|Cayo District~CY|Corozal District~CZL|Orange Walk District~OW|Stann Creek District~SC|Toledo District~TOL" 362 ], 363 [ 364 "Benin", 365 "BJ", 366 "Alibori~AL|Atakora~AK|Atlantique~AQ|Borgou~BO|Collines Department~CO|Donga~DO|Kouffo~KO|Littoral Department~LI|Mono Department~MO|Ouémé~OU|Plateau~PL|Zou~ZO" 367 ], 368 [ 369 "Bermuda", 370 "BM", 371 "City of Hamilton~03|Devonshire Parish~01|Hamilton Parish~02|Paget Parish~04|Pembroke Parish~05|Sandys Parish~08|Smith's Parish~09|Southampton Parish~10|St. George's Parish~07|Town of St. George~06|Warwick Parish~11" 372 ], 373 [ 374 "Bhutan", 375 "BT", 376 "Bumthang~33|Chhukha~12|Dagana~22|Gasa~GA|Haa~13|Lhuntse~44|Mongar~42|Paro~11|Pemagatshel~43|Punakha~23|Samdrup Jongkhar~45|Samtse~14|Sarpang~31|Thimphu~15|Trashigang~41|Trashiyangtse~TY|Trongsa~32|Tsirang~21|Wangdue Phodrang~24|Zhemgang~34" 377 ], 378 [ 379 "Bolivia", 380 "BO", 381 "Beni~B|Chuquisaca~H|Cochabamba~C|La Paz~L|Oruro~O|Pando~N|PotosÃ~P|Santa Cruz~S|Tarija~T" 382 ], 383 [ 384 "Bonaire, Sint Eustatius and Saba", 385 "BQ", 386 "Bonaire~BO|Saba Isand~SA|Sint Eustatius~SE" 387 ], 388 [ 389 "Bosnia and Herzegovina", 390 "BA", 391 "BrÄko Distrikt~BRC|Federacija Bosne i Hercegovine~BIH|Republika Srpska~SRP" 392 ], 393 [ 394 "Botswana", 395 "BW", 396 "Central~CE|Ghanzi~GH|Kgalagadi~KG|Kgatleng~KL|Kweneng~KW|North West~NW|North-East~NE|South East~SE|Southern~SO" 397 ], 398 ["Bouvet Island", "BV", "Bouvet Island~BV"], 399 [ 400 "Brazil", 401 "BR", 402 "Acre~AC|Alagoas~AL|Amapá~AP|Amazonas~AM|Bahia~BA|Ceará~CE|Distrito Federal~DF|EspÃrito Santo~ES|Goiás~GO|Maranhão~MA|Mato Grosso~MT|Mato Grosso do Sul~MS|Minas Gerais~MG|Pará~PA|ParaÃba~PB|Paraná~PR|Pernambuco~PE|PiauÃ~PI|Rio de Janeiro~RJ|Rio Grande do Norte~RN|Rio Grande do Sul~RS|Rondônia~RO|Roraima~RR|Santa Catarina~SC|São Paulo~SP|Sergipe~SE|Tocantins~TO" 403 ], 404 [ 405 "British Indian Ocean Territory", 406 "IO", 407 "British Indian Ocean Territory~IO" 408 ], 409 [ 410 "Brunei Darussalam", 411 "BN", 412 "Belait~BE|Brunei Muara~BM|Temburong~TE|Tutong~TU" 413 ], 414 [ 415 "Bulgaria", 416 "BG", 417 "Blagoevgrad~01|Burgas~02|Dobrich~08|Gabrovo~07|Jambol~28|Khaskovo~26|Kjustendil~10|Kurdzhali~09|Lovech~11|Montana~12|Pazardzhik~13|Pernik~14|Pleven~15|Plovdiv~16|Razgrad~17|Ruse~18|Shumen~27|Silistra~19|Sliven~20|Smoljan~21|Sofija~23|Sofija-Grad~22|Stara Zagora~24|Turgovishhe~25|Varna~03|Veliko Turnovo~04|Vidin~05|Vraca~06" 418 ], 419 [ 420 "Burkina Faso", 421 "BF", 422 "Balé~BAL|Bam/Lake Bam~BAM|Banwa Province~BAN|Bazèga~BAZ|Bougouriba~BGR|Boulgou Province~BLG|Boulkiemdé~BLK|Comoé/Komoe~COM|Ganzourgou Province~GAN|Gnagna~GNA|Gourma Province~GOU|Houet~HOU|Ioba~IOB|Kadiogo~KAD|Kénédougou~KEN|Komondjari~KMD|Kompienga~KMP|Kossi Province~KOS|Koulpélogo~KOP|Kouritenga~KOT|Kourwéogo~KOW|Léraba~LER|Loroum~LOR|Mouhoun~MOU|Namentenga~NAM|N
422aouri/Nahouri~NAO|Nayala~NAY|Noumbiel~NOU|Oubritenga~OUB|Oudalan~OUD|Passoré~PAS|Poni~PON|Sanguié~SNG|Sanmatenga~SMT|Séno~SEN|Sissili~SIS|Soum~SOM|Sourou~SOR|Tapoa~TAP|Tui/Tuy~TUI|Yagha~YAG|Yatenga~YAT|Ziro~ZIR|Zondoma~ZON|Zoundwéogo~ZOU" 423 ], 424 [ 425 "Burundi", 426 "BI", 427 "Bubanza~BB|Bujumbura Mairie~BM|Bujumbura Rural~BL|Bururi~BR|Cankuzo~CA|Cibitoke~CI|Gitega~GI|Karuzi~KR|Kayanza~KY|Kirundo~KI|Makamba~MA|Muramvya~MU|Muyinga~MY|Mwaro~MW|Ngozi~NG|Rutana~RT|Ruyigi~RY" 428 ], 429 [ 430 "Cambodia", 431 "KH", 432 "Baat Dambang~2|Banteay Mean Chey~1|Kampong Chaam~3|Kampong Chhnang~4|Kampong Spueu~5|Kampong Thum~6|Kampot~7|Kandaal~8|Kaoh Kong~9|Kracheh~10|Krong Kaeb~23|Krong Pailin~24|Krong Preah Sihanouk~18|Mondol Kiri~11|Otdar Mean Chey~22|Phnom Penh~12|Pousaat~15|Preah Vihear~13|Prey Veaeng~14|Rotanah Kiri~16|Siem Reab~17|Stueng Treng~19|Svaay Rieng~20|Taakaev~21|Tbong Khmum~25" 433 ], 434 [ 435 "Cameroon", 436 "CM", 437 "Adamaoua~AD|Centre~CE|Est~ES|Extrême-Nord~EN|Littoral~LT|Nord~NO|Nord-Ouest~NW|Ouest~OU|Sud~SU|Sud-Ouest~SW" 438 ], 439 [ 440 "Canada", 441 "CA", 442 "Alberta~AB|British Columbia~BC|Manitoba~MB|New Brunswick~NB|Newfoundland and Labrador~NL|Northwest Territories~NT|Nova Scotia~NS|Nunavut~NU|Ontario~ON|Prince Edward Island~PE|Quebec~QC|Saskatchewan~SK|Yukon~YT" 443 ], 444 [ 445 "Cape Verde", 446 "CV", 447 "Boa Vista~BV|Brava~BR|Calheta de São Miguel~CS|Maio~MA|Mosteiros~MO|Paúl~PA|Porto Novo~PN|Praia~PR|Ribeira Brava~RB|Ribeira Grande~RG|Sal~SL|Santa Catarina~CA|Santa Cruz~CR|São Domingos~SD|São Filipe~SF|São Nicolau~SN|São Vicente~SV|Tarrafal~TA|Tarrafal de São Nicolau~TS" 448 ], 449 [ 450 "Cayman Islands", 451 "KY", 452 "Creek|Eastern|Midland|South Town|Spot Bay|Stake Bay|West End|Western" 453 ], 454 [ 455 "Central African Republic", 456 "CF", 457 "Bamingui-Bangoran~BB|Bangui~BGF|Basse-Kotto~BK|Haute-Kotto~HK|Haut-Mbomou~HM|Kémo~KG|Lobaye~LB|Mambéré-Kadéï~HS|Mbomou~MB|Nana-Grebizi~10|Nana-Mambéré~NM|Ombella-M'Poko~MP|Ouaka~UK|Ouham~AC|Ouham Péndé~OP|Sangha-Mbaéré~SE|Vakaga~VK" 458 ], 459 [ 460 "Chad", 461 "TD", 462 "Bahr el Ghazal~BG|Batha~BA|Borkou~BO|Chari-Baguirmi~CB|Ennedi-Est~EE|Ennedi-Ouest~EO|Guéra~GR|Hadjer Lamis~HL|Kanem~KA|Lac~LC|Logone Occidental~LO|Logone Oriental~LR|Mondoul~MA|Mayo-Kébbi-Est~ME|Moyen-Chari~MC|Ouaddai~OD|Salamat~SA|Sila~SI|Tandjilé~TA|Tibesti~TI|Ville de Ndjamena~ND|Wadi Fira~WF" 463 ], 464 [ 465 "Chile", 466 "CL", 467 "Aisén del General Carlos Ibáñez del Campo~AI|Antofagasta~AN|AraucanÃa~AR|Arica y Parinacota~AP|Atacama~AT|BÃo-BÃo~BI|Coquimbo~CO|Libertador General Bernardo O'Higgins~LI|Los Lagos~LL|Los RÃos~LR|Magallanes y Antartica Chilena~MA|Marga-Marga~|Maule~ML|Región Metropolitana de Santiago~RM|Tarapacá~TA|ValparaÃso~VS" 468 ], 469 [ 470 "China", 471 "CN",
472 "Anhui~34|Beijing~11|Chongqing~50|Fujian~35|Gansu~62|Guangdong~44|Guangxi~45|Guizhou~52|Hainan~46|Hebei~13|Heilongjiang~23|Henan~41|Hong Kong~91|Hubei~42|Hunan~43|Inner Mongolia~15|Jiangsu~32|Jiangxi~36|Jilin~22|Liaoning~21|Macau~92|Ningxia~64|Qinghai~63|Shaanxi~61|Shandong~37|Shanghai~31|Shanxi~14|Sichuan~51|Tianjin~12|Tibet~54|Xinjiang~65|Yunnan~53|Zhejiang~33" 473 ], 474 ["Christmas Island", "CX", "Christmas Island~CX"], 475 [ 476 "Cocos (Keeling) Islands", 477 "CC", 478 "Direction Island~DI|Home Island~HM|Horsburgh Island~HR|North Keeling Island~NK|South Island~SI|West Island~WI" 479 ], 480 [ 481 "Colombia", 482 "CO", 483 "Amazonas~AMA|Antioquia~ANT|Arauca~ARA|Archipiélago de San Andrés~SAP|Atlántico~ATL|Bogotá D.C.~DC|BolÃvar~BOL|Boyacá~BOY|Caldas~CAL|Caquetá~CAQ|Casanare~CAS|Cauca~CAU|Cesar~CES|Chocó~CHO|Córdoba~COR|Cundinamarca~CUN|GuainÃa~GUA|Guaviare~GUV|Huila~HUI|La Guajira~LAG|Magdalena~MAG|Meta~MET|Nariño~NAR|Norte de Santander~NSA|Putumayo~PUT|QuindÃo~QUI|Risaralda~RIS|Santander~SAN|Sucre~SUC|Tolima~TOL|Valle del Cauca~VAC|Vaupés~VAU|Vichada~VID" 484 ], 485 ["Comoros", "KM", "Andjazîdja~G|Andjouân~A|Moûhîlî~M"], 486 [ 487 "Congo, Republic of the (Brazzaville)", 488 "CG", 489 "Bouenza~11|Brazzaville~BZV|Cuvette~8|Cuvette-Ouest~15|Kouilou~5|Lékoumou~2|Likouala~7|Niari~9|Plateaux~14|Pointe-Noire~16|Pool~12|Sangha~13" 490 ], 491 [ 492 "Congo, the Democratic Republic of the (Kinshasa)", 493 "CD", 494 "Bandundu~BN|Bas-Congo~BC|Ãquateur~EQ|Kasaï-Occidental~KE|Kasaï-Oriental~KW|Katanga~KA|Kinshasa~KN|Maniema~MA|Nord-Kivu~NK|Orientale~OR|Sud-Kivu~SK" 495 ], 496 [ 497 "Cook Islands", 498 "CK", 499 "Aitutaki|Atiu|Avarua|Mangaia|Manihiki|Ma'uke|Mitiaro|Nassau|Palmerston|Penrhyn|Pukapuka|Rakahanga" 500 ], 501 [ 502 "Costa Rica", 503 "CR", 504 "Alajuela~2|Cartago~3|Guanacaste~5|Heredia~4|Limón~7|Puntarenas~6|San José~1" 505 ], 506 [ 507 "Côte d'Ivoire, Republic of", 508 "CI", 509 "Agnéby~16|Bafing~17|Bas-Sassandra~09|Denguélé~10|Dix-Huit Montagnes~06|Fromager~18|Haut-Sassandra~02|Lacs~07|Lagunes~01|Marahoué~12|Moyen-Cavally~19|Moyen-Comoé~05|N'zi-Comoé~11|Savanes~03|Sud-Bandama~15|Sud-Comoé~13|Vallée du Bandama~04|Worodougou~14|Zanzan~08" 510 ], 511 [ 512 "Croatia", 513 "HR", 514 "Bjelovarsko-Bilogorska Županija~07|Brodsko-Posavska Županija~12|DubrovaÄko-Neretvanska Županija~19|Grad Zagreb~21|Istarska Županija~18|KarlovaÄka Županija~04|KoprivniÄko-KrizevaÄka Županija~06|Krapinsko-Zagorska Županija~02|LiÄko-Senjska Županija~09|MeÄimurska Županija~20|OsjeÄko-Baranjska Županija~14|PožeÅ¡ko-Slavonska Županija~11|Primorsko-Goranska Županija~08|SisaÄko-MoslavaÄka Županija~03|Splitsko-Dalmatinska Županija~17|Sibensko-Kninska Županija~15|Varaždinska Županija~05|VirovitiÄko-Podravska Županija~10|Vukovarsko-Srijemska Županija~16|Zadarska Županija~13|Zagrebacka Zupanija~01" 515 ], 516 [ 517 "Cuba", 518 "CU", 519 "Artemisa~15|Camagüey~09|Ciego de Ãvila~08|Cienfuegos~06|Granma~12|Guantánamo~14|HolguÃn~11|Isla de la Juventud~99|La Habana~03|Las Tunas~10|Matanzas~04|Mayabeque~16|Pinar del RÃo~01|Sancti SpÃritus~07|Santiago de Cuba~13|Villa Clara~05" 520 ], 521 ["Curaçao", "CW", "Curaçao~CW"], 522 [ 523 "Cyprus", 524 "CY", 525 "Ammochostos~04|Keryneia~05|Larnaka~03|Lefkosia~01|Lemesos~02|Pafos~05" 526 ], 527 [ 528 "Czech Republic", 529 "CZ", 530 "Hlavnà mÄsto Praha~PR|JihoÄeský kraj~JC|Jihomoravský kraj~JM|Karlovarský kraj~KA|Královéhradecký kraj~KR|Liberecký kraj~LI|Moravskoslezský kraj~MO|Olomoucký kraj~OL|Pardubický kraj~PA|PlzeÅský kraj~PL|StÅedoÄeský kraj~ST|Ãstecký kraj~US|VysoÄina~VY|ZlÃnský kraj~ZL" 531 ], 532 [ 533 "Denmark", 534 "DK", 535 "Hovedstaden~84|Kujalleq~GL-KU|Midtjylland~82|Norderøerne~FO-01|Nordjylland~81|Ãsterø~FO-06|Qaasuitsup~GL-QA|Qeqqata~GL-QE|Sandø~FO-02|Sermersooq~GL-SM|Sjælland~85|Strømø~FO-03|Suderø~FO-04|Syddanmark~83|VÃ¥gø~FO-05" 536 ], 537 [ 538 "Djibouti", 539 "DJ", 540 "Ali Sabieh~AS|Arta~AR|Dikhil~DI|Obock~OB|Tadjourah~TA" 541 ], 542 [ 543 "Dominica", 544 "DM", 545 "Saint Andrew Parish~02|Saint David Parish~03|Saint George Parish~04|Saint John Parish~05|Saint Joseph Parish~06|Saint Luke Parish~07|Saint Mark Parish~08|Saint Patrick Parish~09|Saint Paul Parish~10|Saint Peter Parish~11" 546 ], 547 [ 548 "Dominican Republic", 549 "DO", 550 "Cibao Central~02|Del Valle~37|Distrito Nacional~01|Enriquillo~38|Norcentral~04|Nordeste~34|Noroeste~34|Norte~35|Valdesia~42" 551 ], 552 [ 553 "Ecuador", 554 "EC", 555 "Azuay~A|BolÃvar~B|Cañar~F|Carchi~C|Chimborazo~H|Cotopaxi~X|El Oro~O|Esmeraldas~E|Galápagos~W|Guayas~G|Imbabura~I|Loja~L|Los RÃos~R|ManabÃ~M|Morona-Santiago~S|Napo~N|Orellana~D|Pastaza~Y|Pichincha~P|Santa Elena~SE|Santo Domingo de los Tsáchilas~SD|SucumbÃos~U|Tungurahua~T|Zamora-Chinchipe~Z" 556 ], 557 [ 558 "Egypt", 559 "EG", 560 "Alexandria~ALX|Aswan~ASN|Asyout~AST|Bani Sueif~BNS|Beheira~BH|Cairo~C|Daqahlia~DK|Dumiat~DT|El Bahr El Ahmar~BA|El Ismailia~IS|El Suez~SUZ|El Wadi El Gedeed~WAD|Fayoum~FYM|Gharbia~GH|Giza~SUZ|Helwan~HU|Kafr El Sheikh~KFS|Luxor~LX|Matrouh~MT|Menia~MN|Menofia~MNF|North Sinai~SIN|Port Said~PTS|Qalubia~KB|Qena~KN|Sharqia~SHR|Sixth of October~SU|Sohag~SHG|South Sinai~JS" 561 ], 562 [ 563 "El Salvador", 564 "SV", 565 "Ahuachapán~AH|Cabañas~CA|Cuscatlán~CU|Chalatenango~CH|La Libertad~LI|La Paz~PA|La Unión~UN|Morazán~MO|San Miguel~SM|San Salvador~SS|Santa Ana~SA|San Vicente~SV|Sonsonate~SO|Usulután~US" 566 ], 567 [ 568 "Equatorial Guinea", 569 "GQ", 570 "Annobón~AN|Bioko Norte~BN|Bioko Sur~BS|Centro Sur~CS|Kié-Ntem~KN|Litoral~LI|Wele-Nzas~WN" 571 ], 572 [ 573 "Eritrea", 574 "ER", 575 "Anseba~AN|Debub~DU|Debub-Keih-Bahri~DK|Gash-Barka~GB|Maekel~MA|Semien-Keih-Bahri~SK" 576 ], 577 [ 578 "Estonia", 579 "EE", 580 "Harjumaa (Tallinn)~37|Hiiumaa (Kardla)~39|Ida-Virumaa (Johvi)~44|Järvamaa (Paide)~41|Jõgevamaa (Jogeva)~49|Läänemaa~57|Lääne-Virumaa (Rakvere)~59|Pärnumaa (Parnu)~67|Põlvamaa (Polva)~65|Raplamaa (Rapla)~70|Saaremaa (Kuessaare)~74|Tartumaa (Tartu)~78|Valgamaa (Valga)~82|Viljandimaa (Viljandi)~84|Võrumaa (Voru)~86" 581 ], 582 [ 583 "Ethiopia", 584 "ET", 585 "Addis Ababa~AA|Afar~AF|Amhara~AM|Benshangul-Gumaz~BE|Dire Dawa~DD|Gambela~GA|Harari~HA|Oromia~OR|Somali~SO|Southern Nations Nationalities and People's Region~SN|Tigray~TI" 586 ], 587 [ 588 "Falkland Islands (Islas Malvinas)", 589 "FK", 590 "Falkland Islands (Islas Malvinas)" 591 ], 592 [ 593 "Faroe Islands", 594 "FO", 595 "Bordoy|Eysturoy|Mykines|Sandoy|Skuvoy|Streymoy|Suduroy|Tvoroyri|Vagar" 596 ], 597 [ 598 "Fiji", 599 "FJ", 600 "Ba~01|Bua~01|Cakaudrove~03|Kadavu~04|Lau~05|Lomaiviti~06|Macuata~07|Nadroga and Navosa~08|Naitasiri~09|Namosi~10|Ra~011|Rewa~12|Rotuma~R|Serua~12|Tailevu~14" 601 ], 602 [ 603 "Finland", 604 "FI", 605 "Ahvenanmaan lääni~AL|Etelä-Suomen lääni~ES|Itä-Suomen lääni~IS|Länsi-Suomen lääni~LS|Lapin lääni~LL|Oulun lääni~OL" 606 ], 607 [ 608 "France", 609 "FR", 610 "Auvergne-Rhône-Alpes~ARA|Bourgogne-Franche-Comté~BFC|Bretagne~BRE|Centre-Val de Loire~CVL|Corse~COR|Grand Est~GES|Hauts-de-France~HDF|Ãle-de
610-France~IDF|Normandie~NOR|Nouvelle-Aquitaine~NAQ|Occitanie~OCC|Pays de la Loire~PDL|Provence-Alpes-Cote d'Azur~PAC|Clipperton~CP|Guadeloupe~GP|Guyane~GF|Martinique~MQ|Mayotte~YT|Novelle-Calédonie~NC|Polynésie~PF|Saint-Pierre-et-Miquelon~PM|Saint Barthélemy~BL|Saint Martin~MF|Réunion~RE|Terres Australes Françaises~TF|Wallis-et-Futuna~WF" 611 ], 612 ["French Guiana", "GF", "French Guiana"], 613 [ 614 "French Polynesia", 615 "PF", 616 "Archipel des Marquises|Archipel des Tuamotu|Archipel des Tubuai|Iles du Vent|Iles Sous-le-Vent" 617 ], 618 [ 619 "French Southern and Antarctic Lands", 620 "TF", 621 "Adelie Land|Ile Crozet|Iles Kerguelen|Iles Saint-Paul et Amsterdam" 622 ], 623 [ 624 "Gabon", 625 "GA", 626 "Estuaire~1|Haut-Ogooué~2|Moyen-Ogooué~3|Ngounié~4|Nyanga~5|Ogooué-Ivindo~6|Ogooué-Lolo~7|Ogooué-Maritime~8|Woleu-Ntem~9" 627 ], 628 [ 629 "Gambia, The", 630 "GM", 631 "Banjul~B|Central River~M|Lower River~L|North Bank~N|Upper River~U|Western~W" 632 ], 633 [ 634 "Georgia", 635 "GE", 636 "Abkhazia (Sokhumi)~AB|Ajaria (Bat'umi)~AJ|Guria~GU|Imereti~IM|K'akheti~KA|Kvemo Kartli~KK|Mtshkheta-Mtianeti~MM|Rach'a-Lexhkumi-KvemoSvaneti~RL|Samegrelo-Zemo Svaneti~SZ|Samtskhe-Javakheti~SJ|Shida Kartli~SK|Tbilisi~TB" 637 ], 638 [ 639 "Germany", 640 "DE", 641 "Baden-Württemberg~BW|Bayern~BY|Berlin~BE|Brandenburg~BB|Bremen~HB|Hamburg~HH|Hessen~HE|Mecklenburg-Vorpommern~MV|Niedersachsen~NI|Nordrhein-Westfalen~NW|Rheinland-Pfalz~RP|Saarland~SL|Sachsen~SN|Sachsen-Anhalt~ST|Schleswig-Holstein~SH|Thüringen~TH" 642 ], 643 [ 644 "Ghana", 645 "GH", 646 "Ashanti~AH|Brong-Ahafo~BA|Central~CP|Eastern~EP|Greater Accra~AA|Northern~NP|Upper East~UE|Upper West~UW|Volta~TV|Western~WP" 647 ], 648 ["Gibraltar", "GI", "Gibraltar"], 649 [ 650 "Greece", 651 "GR", 652 "Anatolikà MakedonÃa kai Thráki~A|Attikḯ~I|Dytikà Elláda~G|Dytikà MakedonÃa~C|IonÃa NÃsia~F|Kentrikà MakedonÃa~B|KrÃtÃ~M|NotÃo AigaÃo~L|PeloponnÃsos~J|Stereá Elláda~H|ThessalÃa~E|VoreÃo AigaÃo~K|Ãpeiros~D|Ãgion Ãros~69" 653 ], 654 [ 655 "Greenland", 656 "GL", 657 "Kommune Kujalleq~KU|Kommuneqarfik Sermersooq~SM|Qaasuitsup Kommunia~QA|Qeqqata Kommunia~QE" 658 ], 659 [ 660 "Grenada", 661 "GD", 662 "Saint Andrew~01|Saint David~02|Saint George~03|Saint John~04|Saint Mark~05|Saint Patrick~06|Southern Grenadine Islands~10" 663 ], 664 ["Guadeloupe", "GP", "Guadeloupe"], 665 ["Guam", "GU", "Guam"], 666 [ 667 "Guatemala", 668 "GT", 669 "Alta Verapaz~AV|Baja Verapaz~BV|Chimaltenango~CM|Chiquimula~CQ|El Progreso~PR|Escuintla~ES|Guatemala~GU|Huehuetenango~HU|Izabal~IZ|Jalapa~JA|Jutiapa~JU|Petén~PE|Quetzaltenango~QZ|Quiché~QC|Retalhuleu~Re|Sacatepéquez~SA|San Marcos~SM|Santa Rosa~SR|Sololá~SO|Suchitepéquez~SU|Totonicapán~TO|Zacapa~ZA" 670 ], 671 [ 672 "Guernsey", 673 "GG", 674 "Castel|Forest|St. Andrew|St. Martin|St. Peter Port|St. Pierre du Bois|St. Sampson|St. Saviour|Torteval|Vale" 675 ], 676 [ 677 "Guinea", 678 "GN", 679 "Boké~B|Conakry~C|Faranah~F|Kankan~K|Kindia~D|Labé~L|Mamou~M|Nzérékoré~N" 680 ], 681 [ 682 "Guinea-Bissau", 683 "GW", 684 "Bafatá~BA|Biombo~BM|Bissau~BS|Bolama-Bijagos~BL|Cacheu~CA|Gabú~GA|Oio~OI|Quinara~QU|Tombali~TO" 685 ], 686 [ 687 "Guyana", 688 "GY", 689 "Barima-Waini~BA|Cuyuni-Mazaruni~CU|Demerara-Mahaica~DE|East Berbice-Corentyne~EB|Essequibo Islands-West Demerara~ES|Mahaica-Berbice~MA|Pomeroon-Supenaam~PM|Potaro-Siparuni~PT|Upper Demerara-Berbice~UD|Upper Takutu-Upper Essequibo~UT" 690 ], 691 [ 692 "Haiti", 693 "HT", 694 "Artibonite~AR|Centre~CE|Grand'Anse~GA|Nippes~NI|Nord~ND|Nord-Est~NE|Nord-Ouest~NO|Ouest~OU|Sud~SD|Sud-Est~SE" 695 ], 696 [ 697 "Heard Island and McDonald Islands", 698 "HM", 699 "Heard Island and McDonald Islands" 700 ], 701 ["Holy See (Vatican City)", "VA", "Holy See (Vatican City)~01"], 702 [ 703 "Honduras", 704 "HN", 705 "Atlántida~AT|Choluteca~CH|Colón~CL|Comayagua~CM|Copán~CP|Cortés~CR|El ParaÃso~EP|Francisco Morazan~FM|Gracias a Dios~GD|Intibucá~IN|Islas de la BahÃa~IB|La Paz~LP|Lempira~LE|Ocotepeque~OC|Olancho~OL|Santa Bárbara~SB|Valle~VA|Yoro~YO" 706 ], 707 ["Hong Kong", "HK", "Hong Kong"], 708 [ 709 "Hungary", 710 "HU", 711 "Bács-Kiskun~BK|Baranya~BA|Békés~BE|Békéscsaba~BC|Borsod-Abauj-Zemplen~BZ|Budapest~BU|Csongrád~CS|Debrecen~DE|Dunaújváros~DU|Eger~EG|Ãrd~ER|Fejér~FE|GyÅr~GY|GyÅr-Moson-Sopron~GS|Hajdú-Bihar~HB|Heves~HE|HódmezÅvásárhely~HV|Jász-Nagykun-Szolnok~N|Kaposvár~KV|Kecskemét~KM|Komárom-Esztergom~KE|Miskolc~MI|Nagykanizsa~NK|Nógrád~NO|NyÃregyháza~NY|Pécs~PS|Pest~PE|Salgótarján~ST|Somogy~SO|Sopron~SN|Szabolcs-á-Bereg~SZ|Szeged~SD|Székesfehérvár~SF|Szekszárd~SS|Szolnok~SK|Szombathely~SH|Tatabánya~TB|Tolna~TO|Vas~VA|Veszprém~VE|Veszprém (City)~VM|Zala~ZA|Zalaegerszeg~ZE" 712 ], 713 [ 714 "Iceland", 715 "IS", 716 "Austurland~7|Höfuðborgarsvæði utan ReykjavÃkur~1|Norðurland eystra~6|Norðurland vestra~5|Suðurland~8|Suðurnes~2|Vestfirðir~4|Vesturland~3" 717 ], 718 [ 719 "India", 720 "IN", 721 "Andaman and Nicobar Islands~AN|Andhra Pradesh~AP|Arunachal Pradesh~AR|Assam~AS|Bihar~BR|Chandigarh~CH|Chhattisgarh~CT|Dadra and Nagar Haveli~DN|Daman and Diu~DD|Delhi~DL|Goa~GA|Gujarat~GJ|Haryana~HR|Himachal Pradesh~HP|Jammu and Kashmir~JK|Jharkhand~JH|K
721arnataka~KA|Kerala~KL|Lakshadweep~LD|Madhya Pradesh~MP|Maharashtra~MH|Manipur~MN|Meghalaya~ML|Mizoram~MZ|Nagaland~NL|Odisha~OR|Puducherry~PY|Punjab~PB|Rajasthan~RJ|Sikkim~WK|Tamil Nadu~TN|Telangana~TG|Tripura~TR|Uttarakhand~UT|Uttar Pradesh~UP|West Bengal~WB" 722 ], 723 [ 724 "Indonesia", 725 "ID", 726 "Aceh~AC|Bali~BA|Bangka Belitung~BB|Banten~BT|Bengkulu~BE|Gorontalo~GO|Jakarta Raya~JK|Jambi~JA|Jawa Barat~JB|Jawa Tengah~JT|Jawa Timur~JI|Kalimantan Barat~KB|Kalimantan Selatan~KS|Kalimantan Tengah~KT|Kalimantan Timur~KI|Kalimantan Utara~KU|Kepulauan Riau~KR|Lampung~LA|Maluku~MA|Maluku Utara~MU|Nusa Tenggara Barat~NB|Nusa Tenggara Timur~NT|Papua~PA|Papua Barat~PB|Riau~RI|Sulawesi Selatan~SR|Sulawesi Tengah~ST|Sulawesi Tenggara~SG|Sulawesi Utara~SA|Sumatera Barat~SB|Sumatera Selatan~SS|Sumatera Utara~SU|Yogyakarta~YO" 727 ], 728 [ 729 "Iran, Islamic Republic of", 730 "IR", 731 "Alborz~32|ArdabÄ«l~03|ÄzÌarbÄyjÄn-e GharbÄ«~02|ÄzÌarbÄyjÄn-e SharqÄ«~01|BÅ«shehr~06|ChahÄr MaḩÄl va BakhtÄ«ÄrÄ«~08|EÅfahÄn~04|FÄrs~14|GÄ«lÄn~19|GolestÄn~27|HamadÄn~24|HormozgÄn~23|ĪlÄm~05|KermÄn~15|KermÄnshÄh~17|KhorÄsÄn-e JonÅ«bÄ«~29|KhorÄsÄn-e RaáºavÄ«~30|KhorÄsÄn-e ShomÄlÄ«~61|KhÅ«zestÄn~10|KohgÄ«lÅ«yeh va Bowyer Aḩmad~18|KordestÄn~16|LorestÄn~20|Markazi~22|MÄzandarÄn~21|QazvÄ«n~28|Qom~26|SemnÄn~12|SÄ«stÄn va BalÅ«chestÄn~13|TehrÄn~07|Yazd~25|ZanjÄn~11" 732 ], 733 [ 734 "Iraq", 735 "IQ", 736 "Al AnbÄr~AN|Al BaÅrah~BA|Al Muthanná~MU|Al QÄdisÄ«yah~QA|An Najaf~NA|ArbÄ«l~AR|As SulaymÄnÄ«yah~SU|BÄbil~BB|BaghdÄd~BG|Dohuk~DA|DhÄ« QÄr~DQ|DiyÄlá~DI|KarbalÄ'~KA|Kirkuk~KI|MaysÄn~MA|NÄ«nawá~NI|ÅalÄḩ ad DÄ«n~SD|WÄsiÅ£~WA" 737 ], 738 [ 739 "Ireland", 740 "IE", 741 "Carlow~CW|Cavan~CN|Clare~CE|Cork~CO|Donegal~DL|Dublin~D|Galway~G|Kerry~KY|Kildare~KE|Kilkenny~KK|Laois~LS|Leitrim~LM|Limerick~LK|Longford~LD|Louth~LH|Mayo~MO|Meath~MH|Monaghan~MN|Offaly~OY|Roscommon~RN|Sligo~SO|Tipperary~TA|Waterford~WD|Westmeath~WH|Wexford~WX|Wicklow~WW" 742 ], 743 ["Isle of Man", "IM", "Isle of Man"], 744 [ 745 "Israel", 746 "IL", 747 "HaDarom~D|HaMerkaz~M|HaTsafon~Z|H̱efa~HA|Tel-Aviv~TA|Yerushalayim~JM" 748 ], 749 [ 750 "Italy", 751 "IT", 752 "Abruzzo~65|Basilicata~77|Calabria~78|Campania~72|Emilia-Romagna~45|Friuli-Venezia Giulia~36|Lazio~62|Liguria~42|Lombardia~25|Marche~57|Molise~67|Piemonte~21|Puglia~75|Sardegna~88|Sicilia~82|Toscana~52|Trentino-Alto Adige~32|Umbria~55|Valle d'Aosta~23|Veneto~34" 753 ], 754 [ 755 "Jamaica", 756 "JM", 757 "Clarendon~13|Hanover~09|Kingston~01|Manchester~12|Portland~04|Saint Andrew~02|Saint Ann~06|Saint Catherine~14|Saint Elizabeth~11|Saint James~08|Saint Mary~05|Saint Thomas~03|Trelawny~07|Westmoreland~10" 758 ], 759 [ 760 "Japan", 761 "JP", 762 "Aichi~23|Akita~05|Aomori~02|Chiba~12|Ehime~38|Fukui~18|Fukuoka~40|Fukushima~07|Gifu~21|Gunma~10|Hiroshima~34|Hokkaido~01|Hyogo~28|Ibaraki~08|Ishikawa~17|Iwate~03|Kagawa~37|Kagoshima~46|Kanagawa~14|Kochi~39|Kumamoto~43|Kyoto~26|Mie~24|Miyagi~04|Miyazaki~45|Nagano~20|Nagasaki~42|Nara~29|Niigata~15|Oita~44|Okayama~33|Okinawa~47|Osaka~27|Saga~41|Saitama~11|Shiga~25|Shimane~32|Shizuoka~22|Tochigi~09|Tokushima~36|Tokyo~13|Tottori~31|Toyama~16|Wakayama~30|Yamagata~06|Yamaguchi~35|Yamanashi~19" 763 ], 764 ["Jersey", "JE", "Jersey"], 765 [ 766 "Jordan", 767 "JO", 768 "âAjlÅ«n~AJ|Al 'Aqabah~AQ|Al BalqÄâ~BA|Al Karak~KA|Al Mafraq~MA|Al âAÌ Åimah~AM|AÅ£ Å¢afÄ«lah~AT|Az ZarqÄâ~AZ|Irbid~IR|Jarash~JA|MaâÄn~MN|MÄdabÄ~MD" 769 ], 770 [ 771 "Kazakhstan", 772 "KZ", 773 "Almaty~ALA|Aqmola~AKM|Aqtobe~AKT|Astana~AST|Atyrau~ATY|Batys Qazaqstan~ZAP|Bayqongyr|Mangghystau~MAN|Ongtustik Qazaqstan~YUZ|Pavlodar~PAV|Qaraghandy~KAR|Qostanay~KUS|Qyzylorda~KZY|Shyghys Qazaqstan~VOS|Soltustik Qazaqstan~SEV|Zhambyl~ZHA" 774 ], 775 [ 776 "Kenya", 777 "KE", 778 "Baringo~01|Bomet~02|Bungoma~03|Busia~04|Eleyo/Marakwet~05|Embu~06|Garissa~07|Homa Bay~08|Isiolo~09|Kajiado~10|Kakamega~11|Kericho~12|Kiambu~13|Kil
778ifi~14|Kirinyaga~15|Kisii~16|Kisumu~17|Kitui~18|Kwale~19|Laikipia~20|Lamu~21|Machakos~22|Makueni~23|Mandera~24|Marsabit~25|Meru~26|Migori~27|Mombasa~28|Murang'a~29|Nairobi City~30|Nakuru~31|Nandi~32|Narok~33|Nyamira~34|Nyandarua~35|Nyeri~36|Samburu~37|Siaya~38|Taita/Taveta~39|Tana River~40|Tharaka-Nithi~41|Trans Nzoia~42|Turkana~43|Uasin Gishu~44|Vihiga~45|Wajir~46|West Pokot~47" 779 ], 780 [ 781 "Kiribati", 782 "KI", 783 "Abaiang|Abemama|Aranuka|Arorae|Banaba|Beru|Butaritari|Central Gilberts|Gilbert Islands~G|Kanton|Kiritimati|Kuria|Line Islands~L|Maiana|Makin|Marakei|Nikunau|Nonouti|Northern Gilberts|Onotoa|Phoenix Islands~P|Southern Gilberts|Tabiteuea|Tabuaeran|Tamana|Tarawa|Teraina" 784 ], 785 [ 786 "Korea, Democratic People's Republic of", 787 "KP", 788 "Chagang-do (Chagang Province)~04|Hamgyong-bukto (North Hamgyong Province)~09|Hamgyong-namdo (South Hamgyong Province)~08|Hwanghae-bukto (North Hwanghae Province)~06|Hwanghae-namdo (South Hwanghae Province)~05|Kangwon-do (Kangwon Province)~07|NasÅn (Najin-SÅnbong)~13|P'yongan-bukto (North P'yongan Province)~03|P'yongan-namdo (South P'yongan Province)~02|P'yongyang-si (P'yongyang City)~01|Yanggang-do (Yanggang Province)~10" 789 ], 790 [ 791 "Korea, Republic of", 792 "KR", 793 "Ch'ungch'ongbuk-do~43|Ch'ungch'ongnam-do~44|Cheju-do~49|Chollabuk-do~45|Chollanam-do~46|Inch'on-Kwangyokhi~28|Kang-won-do~42|Kwangju-Kwangyokshi~28|Kyonggi-do~41|Kyongsangbuk-do~47|Kyongsangnam-do~48|Pusan-Kwangyokshi~26|Seoul-T'ukpyolshi~11|Sejong~50|Taegu-Kwangyokshi~27|Taejon-Kwangyokshi~30|Ulsan-Kwangyokshi~31" 794 ], 795 [ 796 "Kuwait", 797 "KW", 798 "Al Aḩmadi~AH|Al FarwÄnÄ«yah~FA|Al JahrÄâ~JA|Al âÄÅimah~KU|ḨawallÄ«~HA|MubÄrak al Kabir~MU" 799 ], 800 [ 801 "Kyrgyzstan", 802 "KG", 803 "Batken Oblasty~B|Bishkek Shaary~GB|Chuy Oblasty (Bishkek)~C|Jalal-Abad Oblasty~J|Naryn Oblasty~N|Osh Oblasty~O|Talas Oblasty~T|Ysyk-Kol Oblasty (Karakol)~Y" 804 ], 805 [ 806 "Laos", 807 "LA", 808 "Attapu~AT|Bokèo~BK|Bolikhamxai~BL|Champasak~CH|Houaphan~HO|Khammouan~KH|Louang Namtha~LM|Louangphabang~LP|Oudômxai~OU|Phôngsali~PH|Salavan~SL|Savannakhét~SV|Vientiane~VI|Xaignabouli~XA|Xékong~XE|Xaisomboun~XS|Xiangkhouang~XI" 809 ], 810 [ 811 "Latvia", 812 "LV", 813 "Aglona~001|Aizkraukle~002|Aizpute~003|AknÄ«ste~004|Aloja~005|Alsunga~06|AlÅ«ksne~007|Amata~008|Ape~009|Auce~010|Ädaži~011|BabÄ«te~012|Baldone~013|Baltinava~014|Balvi~015|Bauska~016|BeverÄ«na~017|BrocÄni~018|Burtnieki~019|Carnikava~020|Cesvaine~021|CÄsis~022|Cibla~023|Dagda~024|Daugavpils~025|Daugavpils (City)~DGV|Dobele~026|Dundaga~027|Durbe~028|Engure~029|Ärgļi~030|Garkalne~031|GrobiÅa~032|Gulbene~033|Iecava~034|Ikšķile~035|IlÅ«kste~036|InÄukalns~037|Jaunjelgava~038|Jaunpiebalga~039|Jaunpils~040|Jelgava~041|Jelgava (City)~JEL|JÄkabpils~042|JÄkabpils (City)~JKB|JÅ«rmala (City)~JUR|Kandava~043|KÄrsava~044|KocÄni~045|Koknese~046|KrÄslava~047|Krimulda~048|Krustpils~049|KuldÄ«ga~050|Ķegums~051|Ķekava~052|LielvÄrde~053|LiepÄja~LPX|Limbaži~054|LÄ«gatne~055|LÄ«vÄni~056|LubÄna~057|Ludza~058|Madona~059|Mazsalaca~060|MÄlpils~061|MÄrupe~062|MÄrsrags~063|NaukÅ¡Äni~064|Nereta~065|NÄ«ca~066|Ogre~067|Olaine~068|Ozolnieki~069|PÄrgauja~070|PÄvilosta~071|PļaviÅas~072|Preiļi~073|Priekule~074|Priekuļi~075|Rauna~076|RÄzekne~077|RÄzekne (City)~REZ|RiebiÅi~078|RÄ«ga~RIX|Roja~079|Ropaži~080|Rucava~081|RugÄji~082|RundÄle~083|RÅ«jiena~084|Sala~085|SalacgrÄ«va~086|Salaspils~087|Saldus~088|Saulkrasti~089|SÄja~090|Sigulda~091|SkrÄ«veri~092|Skrunda~093|Smiltene~094|StopiÅi~095|StrenÄi~096|Talsi~097|TÄrvete~098|Tukums~099|VaiÅode~100|Valka~101|Valmiera~VMR|VarakļÄni~102|VÄrkava~103|Vecpiebalga~104|Vecumnieki~105|Ventspils~106|Ventspils (City)~VEN|ViesÄ«te~107|Viļaka~108|ViļÄni~109|Zilupe~110" 814 ], 815 [ 816 "Lebanon", 817 "LB", 818 "Aakkâr~AK|Baalbelk-Hermel~BH|Béqaa~BI|Beyrouth~BA|Liban-Nord~AS|Liban-Sud~JA|Mont-Liban~JL|Nabatîyé~NA" 819 ], 820 [ 821 "Lesotho", 822 "LS", 823 "Berea~D|Butha-Buthe~B|Leribe~C|Mafeteng~E|Maseru~A|Mohales Hoek~F|Mokhotlong~J|Qacha's Nek~H|Quthing~G|Thaba-Tseka~K" 824 ], 825 [ 826 "Liberia", 827 "LR", 828 "Bomi~BM|Bong~BG|Gbarpolu~GP|Grand Bassa~GB|Grand Cape Mount~CM|Grand Gedeh~GG|Grand Kru~GK|Lofa~LO|Margibi~MG|Maryland~MY|Montserrado~MO|Nimba~NI|River Cess~RI|River Geee~RG|Sinoe~SI" 829 ], 830 [ 831 "Libya", 832 "LY", 833 "Al BuÅ£nÄn~BU|Al Jabal al Akhá¸ar~JA|Al Jabal al GharbÄ«~JG|Al JafÄrah~JA|Al Jufrah~JU|Al Kufrah~FK|Al Marj~MJ|Al Marquab~MB|Al WÄḩÄt~WA|An NuqaÅ£ al Khams~NQ|Az ZÄwiyah~ZA|BanghÄzÄ«~BA|Darnah~DR|GhÄt~GH|MiÅrÄtah~MI|Murzuq~MQ|NÄlÅ«t~NL|SabhÄ~SB|Surt~SR|Å¢arÄbulus~TB|Yafran~WD|WÄdÄ« ash ShÄÅ£iʾ~WS" 834 ], 835 [ 836 "Liechtenstein", 837 "LI",
838 "Balzers~01|Eschen~02|Gamprin~03|Mauren~04|Planken~05|Ruggell~06|Schaan~07|Schellenberg~08|Triesen~09|Triesenberg~10|Vaduz~11" 839 ], 840 [ 841 "Lithuania", 842 "LT", 843 "Alytaus~AL|Kauno~KU|KlaipÄdos~KL|MarijampolÄs~MR|PanevÄžio~PN|Å iaulių~SA|TauragÄs~TA|TelÅ¡ių~TE|Utenos~UT|Vilniaus~VL" 844 ], 845 [ 846 "Luxembourg", 847 "LU", 848 "Capellen~CA|Clevaux~CL|Diekirch~DI|Echternach~EC|Esch-sur-Alzette~ES|Grevenmacher~GR|Luxembourg~LU|Mersch~ME|Redange~RD|Remich~RM|Vianden~VD|Wiltz~WI" 849 ], 850 ["Macao", "MO", "Macao"], 851 [ 852 "Macedonia, Republic of", 853 "MK", 854 "AraÄinovo~02|Berovo~03|Bitola~04|Bogdanci~05|Bogovinje~06|Bosilovo~07|Brvenica~08|Centar Župa~78|ÄaÅ¡ka~08|ÄeÅ¡inovo-ObleÅ¡evo~81|ÄuÄer Sandevo~82|Debar~21|Debarca~22|DelÄevo~23|Demir Hisar~25|Demir Kapija~24|Doran~26|Dolneni~27|Gevgelija~18|Gostivar~19|Gradsko~20|Ilinden~34|Jegunovce~35|Karbinci~37|Kavadarci~36|KiÄevo~40|KoÄani~42|KonÄe~41|Kratovo~43|Kriva Palanka~44|KrivogaÅ¡tani~45|KruÅ¡evo~46|Kumanovo~47|Lipkovo~48|Lozovo~49|Makedonska Kamenica~51|Makedonski Brod~52|Mavrovo i RostuÅ¡a~50|Mogila~53|Negotino~54|Novaci~55|Novo Selo~56|Ohrid~58|PehÄevo~60|Petrovec~59|Plasnica~61|Prilep~62|ProbiÅ¡tip~63|RadoviÅ¡~|Rankovce~65|Resen~66|Rosoman~67|Skopje~85|SopiÅ¡te~70|Staro NagoriÄane~71|Struga~72|Strumica~73|StudeniÄani~74|Sveti Nikole~69|Å tip~83|Tearce~75|Tetovo~76|Valandovo~10|Vasilevo~11|Veles~13|VevÄani~12|Vinica~14|VrapÄiÅ¡te~16|Zelenikovo~32|Zrnovci~33|Želino~30" 855 ], 856 [ 857 "Madagascar", 858 "MG", 859 "Antananarivo~T|Antsiranana~D|Fianarantsoa~F|Mahajanga~M|Toamasina~A|Toliara~U" 860 ], 861 [ 862 "Malawi", 863 "MW", 864 "Balaka~BA|Blantyre~BL|Chikwawa~CK|Chiradzulu~CR|Chitipa~CT|Dedza~DE|Dowa~DO|Karonga~KR|Kasungu~KS|Likoma~LK|Lilongwe~LI|Machinga~MH|Mangochi~MG|Mchinji~MC|Mulanje~MU|Mwanza~MW|Mzimba~MZ|Nkhata Bay~NE|Nkhotakota~NB|Nsanje~NS|Ntcheu~NU|Ntchisi~NI|Phalombe~PH|Rumphi~RU|Salima~SA|Thyolo~TH|Zomba~ZO" 865 ], 866 [ 867 "Malaysia", 868 "MY", 869 "Johor~01|Kedah~02|Kelantan~03|Melaka~04|Negeri Sembilan~05|Pahang~06|Perak~08|Perlis~09|Pulau Pinang~07|Sabah~12|Sarawak~13|Selangor~10|Terengganu~11|Wilayah Persekutuan (Kuala Lumpur)~14|Wilayah Persekutuan (Labuan)~15|Wilayah Persekutuan (Putrajaya)~16" 870 ], 871 [ 872 "Maldives", 873 "MV", 874 "Alifu Alifu~02|Alifu Dhaalu~00|Baa~20|Dhaalu~17|Faafu~14|Gaafu Alifu~27|Gaafu Dhaalu~28|Gnaviyani~29|Haa Alifu~07|Haa Dhaalu~23|Kaafu~29|Laamu~05|Lhaviyani~03|Malé~MLE|Meemu~12|Noonu~25|Raa~13|Seenu~01|Shaviyani~24|Thaa~08|Vaavu~04" 875 ], 876 [ 877 "Mali", 878 "ML", 879 "Bamako~BKO|Gao~7|Kayes~1|Kidal~8|Koulikoro~2|Mopti~5|Segou~4|Sikasso~3|Tombouctou~6" 880 ], 881 [ 882 "Malta", 883 "MT", 884 "Attard~01|Balzan~02|Birgu~03|Birkirkara~04|BirżebbuÄ¡a~05|Bormla~06|Dingli~07|Fgura~08|Floriana~09|Fontana~10|Guda~11|Gżira~12|Għajnsielem~13|Għarb~14|Għargħur~15|Għasri~16|Għaxaq~17|Ħamrun~18|Iklin~19|Isla~20|Kalkara~21|KerÄem~22|Kirkop~23|Lija~24|Luqa~25|Marsa~26|Marsaskala~27|Marsaxlokk~28|Mdina~29|Mellieħa~30|MÄ¡arr~31|Mosta~32|Mqabba~33|Msida~34|Mtarfa~35|Munxar~36|Nadur~37|Naxxar~38|Paola~39|Pembroke~40|Pietà ~41|Qala~42|Qormi~43|Qrendi~44|Rabat Għawdex~45|Rabat Malta~46|Safi~47|San Ä iljan~48|San Ä wann~49|San Lawrenz~50|San Pawl il-Baħar~51|Sannat~52|Santa LuÄija~53|Santa Venera~54|Siġġiewi~55|Sliema~56|Swieqi~57|Tai Xbiex~58|Tarzien~59|Valletta~60|Xagħra~61|Xewkija~62|Xgħajra~63|Å»abbar~64|Å»ebbuÄ¡ Għawde~65|Å»ebbuÄ¡ Malta~66|Å»ejtun~67|Å»urrieq~68" 885 ], 886 [ 887 "Marshall Islands", 888 "MH", 889 "Ailinglaplap~ALL|Ailuk~ALK|Arno~ARN|Aur~AUR|Bikini and Kili~KIL|Ebon~EBO|Jabat~JAB|Jaluit~JAL|Kwajalein~KWA|Lae~LAE|Lib~LIB|Likiep~LIK|Majuro~MAJ|Maloelap~MAL|Mejit~MEJ|Namdrik~NMK|Namu~NMU|Rongelap~RON|Ujae~UJA|Utrik~UTI|Wotho~WTH|Wotje~WTJ" 890 ], 891 ["Martinique", "MQ", "Martinique"], 892 [ 893 "Mauritania", 894 "MR", 895 "Adrar~07|Assaba~03|Brakna~05|Dakhlet Nouadhibou~08|Gorgol~04|Guidimaka~10|Hodh Ech Chargui~01|Hodh El Gharbi~02|Inchiri~12|Nouakchott Nord~14|Nouakchott Ouest~13|Nouakchott Sud~15|Tagant~09|Tiris Zemmour~11|Trarza~06" 896 ], 897 [ 898 "Mauritius", 899 "MU", 900 "Agalega Islands~AG|Beau Bassin-Rose Hill~BR|Black River~BL|Cargados Carajos Shoals~CC|Curepipe~CU|Flacq~FL|Grand Port~GP|Moka~MO|Pamplemousses~PA|Plaines Wilhems~PW|Port Louis (City)~PU|Port Louis~PL|Riviere du Rempart~RR|Rodrigues Island~RO|Savanne~SA|Vacoas-Phoenix~CP" 901 ], 902 [ 903 "Mayotte", 904 "YT", 905 "Dzaoudzi~01|Pamandzi~02|Mamoudzou~03|Dembeni~04|Bandrélé~05|
905Kani-Kéli~06|Bouéni~07|Chirongui~08|Sada~09|Ouangani~10|Chiconi~11|Tsingoni~12|M'Tsangamouji~13|Acoua~14|Mtsamboro~15|Bandraboua~16|Koungou~17" 906 ], 907 [ 908 "Mexico", 909 "MX", 910 "Aguascalientes~AGU|Baja California~BCN|Baja California Sur~BCS|Campeche~CAM|Ciudad de México~DIF|Chiapas~CHP|Chihuahua~CHH|Coahuila de Zaragoza~COA|Colima~COL|Durango~DUR|Estado de México~MEX|Guanajuato~GUA|Guerrero~GRO|Hidalgo~HID|Jalisco~JAL|Michoacán de Ocampo~MIC|Morelos~MOR|Nayarit~NAY|Nuevo León~NLE|Oaxaca~OAX|Puebla~PUE|Querétaro de Arteaga~QUE|Quintana Roo~ROO|San Luis PotosÃ~SLP|Sinaloa~SIN|Sonora~SON|Tabasco~TAB|Tamaulipas~TAM|Tlaxcala~TLA|Veracruz~VER|Yucatán~YUC|Zacatecas~ZAC" 911 ], 912 [ 913 "Micronesia, Federated States of", 914 "FM", 915 "Chuuk (Truk)~TRK|Kosrae~KSA|Pohnpei~PNI|Yap~YAP" 916 ], 917 [ 918 "Moldova", 919 "MD", 920 "Aenii Noi~AN|Basarabeasca~BS|BÄlÈi~BA|Bender~BD|Briceni~BR|Cahul~CA|Cantemir~CT|CÄlÄraÈi~CL|CÄuÈeni~CS|ChiÈinÄu~CU|CimiÈlia~CM|Criuleni~CR|DonduÈeni~DO|Drochia~DR|DubÄsari~DU|EdineÈ~ED|FÄleÈti~FA|FloreÈti~FL|GÄgÄuzia~GA|Glodeni~GL|HînceÈti~HI|Ialoveni~IA|Leova~LE|Nisporeni~NI|OcniÈa~OC|Orhei~OR|Rezina~RE|RîÈcani~RI|Sîngerei~SI|Soroca~SO|Stînga Nistrului~SN|StrÄÈeni~ST|ÈoldÄneÈti~SD|Ètefan VodÄ~SV|Taraclia~TA|TeleneÈti~TE|Ungheni~UN" 921 ], 922 [ 923 "Monaco", 924 "MC", 925 "Colle~CL|Condamine~CO|Fontvieille~FO|Gare~GA|Jardin Exotique~JE|Larvotto~LA|Malbousquet~MA|Monaco-Ville~MO|Moneghetti~MG|Monte-Carlo~MC|Moulins~MU|Port-Hercule~PH|Saint-Roman~SR|Sainte-Dévote~SD|Source~SO|Spélugues~SP|Vallon de la Rousse~VR" 926 ], 927 [ 928 "Mongolia", 929 "MN", 930 "Arhangay~073|Bayan-Olgiy~071|Bayanhongor~069|Bulgan~067|Darhan~037|Dornod~061|Dornogovi~063|Dundgovi~059|Dzavhan~065|Govi-Altay~065|Govi-Sumber~064|Hovd~043|Hovsgol~041|Omnogovi~053|Ovorhangay~055|Selenge~049|Suhbaatar~051|Tov~047|Ulaanbaatar~1|Uvs~046" 931 ], 932 [ 933 "Montenegro", 934 "ME", 935 "Andrijevica~01|Bar~02|Berane~03|Bijelo Polje~04|Budva~05|Cetinje~06|Danilovgrad~07|Gusinje~22|Herceg Novi~08|KolaÅ¡in~09|Kotor~10|Mojkovac~11|NikÅ¡iÄ~12|Petnica~23|Plav~13|Plužine~14|Pljevlja~15|Podgorica~16|Rožaje~17|Å avnik~18|Tivat~19|Ulcinj~20|Žabljak~21" 936 ], 937 ["Montserrat", "MS", "Saint Anthony|Saint Georges|Saint Peter's"], 938 [ 939 "Morocco", 940 "MA", 941 "Chaouia-Ouardigha~09|Doukhala-Abda~10|Fès-Boulemane~05|Gharb-Chrarda-Beni Hssen~02|Grand Casablanca~08|Guelmim-Es Semara~14|Laâyoune-Boujdour-Sakia el Hamra~15|Marrakech-Tensift-Al Haouz~11|Meknès-Tafilalet~06|Oriental~04|Oued ed Dahab-Lagouira~16|Souss-Massa-Drâa~13|Tadla-Azilal~12|Tanger-Tétouan~01|Taza-Al Hoceima-Taounate~03" 942 ], 943 [ 944 "Mozambique", 945 "MZ", 946 "Cabo Delgado~P|Gaza~G|Inhambane~I|Manica~B|Maputo~L|Maputo (City)~MPM|Nampula~N|Niassa~A|Sofala~S|Tete~T|Zambezia~Q" 947 ], 948 [ 949 "Myanmar", 950 "MM", 951 "Ayeyarwady~07|Bago~02|Chin~14|Kachin~11|Kayah~12|Kayin~13|Magway~03|Mandalay~04|Mon~15|Nay Pyi Taw~18|Rakhine~16|Sagaing~01|Shan~17|Tanintharyi~05|Yangon~06" 952 ], 953 [ 954 "Namibia", 955 "NA", 956 "Erongo~ER|Hardap~HA|Kavango East~KE|Kavango West~KW|Karas~KA|Khomas~KH|Kunene~KU|Ohangwena~OW|Omaheke~OH|Omusati~OS|Oshana~ON|Oshikoto~OT|Otjozondjupa~OD|Zambezi~CA" 957 ], 958 [ 959 "Nauru", 960 "NR", 961 "Aiwo~01|Anabar~02|Anetan~03|Anibare~04|Baiti~05|Boe~06|Buada~07|Denigomodu~08|Ewa~09|Ijuw~10|Meneng~11|Nibok~12|Uaboe~13|Yaren~14" 962 ], 963 [ 964 "Nepal", 965 "NP", 966 "Bagmati~BA|Bheri~BH|Dhawalagiri~DH|Gandaki~GA|Janakpur~JA|Karnali~KA|Kosi~KO|Lumbini~LU|Mahakali~MA|Mechi~ME|Narayani~NA|Rapti~RA|Sagarmatha~SA|Seti~SE" 967 ], 968 [ 969 "Netherlands", 970 "NL", 971 "Drenthe~DR|Flevoland~FL|Friesland~FR|Gelderland~GE|Groningen~GR|Limburg~LI|Noord-Brabant~NB|Noord-Holland~NH|Overijssel~OV|Utrecht~UT|Zeeland~ZE|Zuid-Holland~ZH" 972 ], 973 ["New Caledonia", "NC", "Iles Loyaute|Nord|Sud"], 974 [ 975 "New Zealand", 976 "NZ", 977 "Auckland~AUK|Bay of Plenty~BOP|Canterbury~CAN|Gisborne~GIS|Hawke's Bay~HKB|Marlborough~MBH|Manawatu-Wanganui~MWT|Northland~NTL|Nelson~NSN|Otago~OTA|Southland~STL|Taranaki~TKI|Tasman~TAS|Waikato~WKO|Wellington~WGN|West Coast~WTC|Chatham Islands Territory~CIT" 978 ], 979 [ 980 "Nicaragua", 981 "NI", 982 "Boaco~BO|Carazo~CA|Chinandega~CI|Chontales~CO|EstelÃ~ES|Granada~GR|Jinotega~JI|León~LE|Madriz~MD|Managua~MN|Masaya~MS|Matagalpa~MT|Nueva Segovia~NS|RÃo San Juan~SJ|Rivas~RI|Atlántico Norte~AN|Atlántico
982Sur~AS" 983 ], 984 [ 985 "Niger", 986 "NE", 987 "Agadez~1|Diffa~2|Dosso~3|Maradi~4|Niamey~8|Tahoua~5|Tillabéri~6|Zinder~7" 988 ], 989 [ 990 "Nigeria", 991 "NG", 992 "Abia~AB|Abuja Federal Capital Territory~FC|Adamawa~AD|Akwa Ibom~AK|Anambra~AN|Bauchi~BA|Bayelsa~BY|Benue~BE|Borno~BO|Cross River~CR|Delta~DE|Ebonyi~EB|Edo~ED|Ekiti~EK|Enugu~EN|Gombe~GO|Imo~IM|Jigawa~JI|Kaduna~KD|Kano~KN|Katsina~KT|Kebbi~KE|Kogi~KO|Kwara~KW|Lagos~LA|Nassarawa~NA|Niger~NI|Ogun~OG|Ondo~ON|Osun~OS|Oyo~OY|Plateau~PL|Rivers~RI|Sokoto~SO|Taraba~TA|Yobe~YO|Zamfara~ZA" 993 ], 994 ["Niue", "NU", "Niue"], 995 ["Norfolk Island", "NF", "Norfolk Island"], 996 ["Northern Mariana Islands", "MP", "Northern Islands|Rota|Saipan|Tinian"], 997 [ 998 "Norway", 999 "NO", 1000 "Akershus~02|Aust-Agder~09|Buskerud~06|Finnmark~20|Hedmark~04|Hordaland~12|Møre og Romsdal~15|Nordland~18|Nord-Trøndelag~17|Oppland~05|Oslo~03|Rogaland~11|Sogn og Fjordane~14|Sør-Trøndelag~16|Telemark~08|Troms~19|Vest-Agder~10|Vestfold~07|Ãstfold~01|Jan Mayen~22|Svalbard~21" 1001 ], 1002 [ 1003 "Oman", 1004 "OM", 1005 "Ad Dakhiliyah~DA|Al Buraymi~BU|Al Wusta~WU|Az Zahirah~ZA|Janub al Batinah~BS|Janub ash Sharqiyah~SS|Masqat~MA|Musandam~MU|Shamal al Batinah~BJ|Shamal ash Sharqiyah~SJ|Zufar~ZU" 1006 ], 1007 [ 1008 "Pakistan", 1009 "PK", 1010 "ÄzÄd KashmÄ«r~JK|BalÅchistÄn~BA|Gilgit-BaltistÄn~GB|IslÄmÄbÄd~IS|KhaÄ«bar PakhtÅ«nkhwÄs~KP|PunjÄb~PB|Sindh~SD|Federally Administered Tribal Areas~TA" 1011 ], 1012 [ 1013 "Palau", 1014 "PW", 1015 "Aimeliik~002|Airai~004|Angaur~010|Hatobohei~050|Kayangel~100|Koror~150|Melekeok~212|Ngaraard~214|Ngarchelong~218|Ngardmau~222|Ngatpang~224|Ngchesar~226|Ngeremlengui~227|Ngiwal~228|Peleliu~350|Sonsoral~350" 1016 ], 1017 [ 1018 "Palestine, State of", 1019 "PS", 1020 "Ak KhalÄ«l~HBN|Al Quds~JEM|ArÄ«á¸©Ä wal AghwÄr~JRH|Bayt Laḩm~BTH|Dayr al Balaḩ~DEB|Ghazzah~GZA|JanÄ«n~JEN|KhÄn YÅ«nis~KYS|NÄblus~NBS|QalqÄ«yah~QQA|Rafaḩ~RFH|RÄm AllÄh wal BÄ«rah~RBH|SalfÄ«t~SLT|ShamÄl Ghazzah~NGZ|ŢūbÄs~TBS|Ţūlkarm~TKM" 1021 ], 1022 [ 1023 "Panama", 1024 "PA", 1025 "Bocas del Toro~1|ChiriquÃ~4|Coclé~2|Colón~3|Darién~5|Emberá~EM|Herrera~6|Kuna Yala~KY|Los Santos~7|Ngäbe-Buglé~NB|Panamá~8|Panamá Oeste~10|Veraguas~9" 1026 ], 1027 [ 1028 "Papua New Guinea", 1029 "PG", 1030 "Bougainville~NSB|Central~CPM|Chimbu~CPK|East New Britain~EBR|East Sepik~ESW|Eastern Highlands~EHG|Enga~EPW|Gulf~GPK|Hela~HLA|Jiwaka~JWK|Madang~MOM|Manus~MRL|Milne Bay~MBA|Morobe~MPL|Port Moresby~NCD|New Ireland~NIK|Northern~NPP|Southern Highlands~SHM|West New Britain~WBK|West Sepik~SAN|Western~WPD|Western Highlands~WHM" 1031 ], 1032 [ 1033 "Paraguay", 1034 "PY", 1035 "Alto Paraguay~16|Alto Parana~10|Amambay~13|Asuncion~ASU|Caaguazu~5|Caazapa~6|Canindeyu~14|Central~11|Concepcion~1|Cordillera~3|Guaira~4|Itapua~7|Misiones~8|Neembucu~12|Paraguari~9|Presidente Hayes~15|San Pedro~2" 1036 ], 1037 [ 1038 "Peru", 1039 "PE", 1040 "Amazonas~AMA|Ancash~ANC|Apurimac~APU|Arequipa~ARE|Ayacucho~AYA|Cajamarca~CAJ|Callao~CAL|Cusco~CUS|Huancavelica~HUV|Huanuco~HUC|Ica~ICA|Junin~JUN|La Libertad~LAL|Lambayeque~LAM|Lima~LIM|Loreto~LOR|Madre de Dios~MDD|Moquegua~MOQ|Municipalidad Metropolitana de Lima~LMA|Pasco~PAS|Piura~PIU|Puno~PUN|San Martin~SAM|Tacna~TAC|Tumbes~TUM|Ucayali~UCA" 1041 ], 1042 [ 1043 "Philippines", 1044 "PH", 1045 "Abra~ABR|Agusan del Norte~AGN|Agusan del Sur~AGS|Aklan~AKL|Albay~ALB|Antique~ANT|Apayao~APA|Aurora~AUR|Basilan~BAS|Bataan~BAN|Batanes~BTN|Batangas~BTG|Benguet~BEN|Biliran~BIL|Bohol~BOH|Bukidnon~BUK|Bulacan~BUL|Cagayan~CAG|Camarines Norte~CAN|Camarines Sur~CAS|Camiguin~CAM|Capiz~CAP|Catanduanes~CAT|Cavite~CAV|Cebu~CEB|Compostela~COM|Cotabato~NCO|Davao del Norte~DAV|Davao del Sur~DAS|Davao Occidental~DVO|Davao Oriental~DAO|Dinagat Islands~DIN|Eastern Samar~EAS|Guimaras~GUI|Ifugao~IFU|Ilocos Norte~ILN|Ilocos Sur~ILS|Iloilo~ILI|Isabela~ISA|Kalinga~KAL|La Union~LUN|Laguna~LAG|Lanao del Norte~LAN|Lanao del Sur~LAS|Leyte~LEY|Maguindanao~MAG|Masbate~MAS|Metro Manila~00|Mindoro Occidental~MDC|Mindoro Oriental~MDR|Misamis Occidental~MSC|Misamis Oriental~MSR|Mountain Province~MOU|Negros Occidental~NEC|Negros Oriental~NER|Northern Samar~NSA|Nueva Ecija~NUE|Nueva Vizcaya~NUV|Palawan~PLW|Pampanga~PAM|Pangasinan~PAN|Quezon~QUE|Quirino~QUI|Rizal~RIZ|Romblon~ROM|Samar~WSA|Sarangani~SAR|Siquijor~SIG|Sorsogon~SOR|Southern Leyte~SLE|Sultan Kudarat~AUK|Sulu~SLU|Surigao del Norte~SUN|Surigao del Sur~SUR|Tarlac~TAR|Tawi-Tawi~TAW|Zambales~ZMB|Zamboanga del Norte~ZAN|Zamboanga del Sur~ZAS|Zamboanga Sibugay~ZSI" 1046 ],
1047 ["Pitcairn", "PN", "Pitcairn Islands"], 1048 [ 1049 "Poland", 1050 "PL", 1051 "DolnoÅlÄ skie~DS|Kujawsko-pomorskie~KP|Åódzkie~LD|Lubelskie~LU|Lubuskie~LB|Malopolskie~MA|Mazowieckie~MZ|Opolskie~OP|Podkarpackie~PK|Podlaskie~PD|Pomorskie~PM|ÅlÄ skie~SL|ÅwiÄtokrzyskie~SK|WarmiÅsko-mazurskie~WN|Wielkopolskie~WP|Zachodniopomorskie~ZP" 1052 ], 1053 [ 1054 "Portugal", 1055 "PT", 1056 "Acores~20|Aveiro~01|Beja~02|Braga~03|Braganca~04|Castelo Branco~05|Coimbra~06|Evora~07|Faro~08|Guarda~09|Leiria~10|Lisboa~11|Madeira~30|Portalegre~12|Porto~13|Santarem~14|Setubal~15|Viana do Castelo~16|Vila Real~17|Viseu~18" 1057 ], 1058 [ 1059 "Puerto Rico", 1060 "PR", 1061 "Adjuntas|Aguada|Aguadilla|Aguas Buenas|Aibonito|Anasco|Arecibo|Arroyo|Barceloneta|Barranquitas|Bayamon|Cabo Rojo|Caguas|Camuy|Canovanas|Carolina|Cat|Ceiba|Ciales|Cidra|Coamo|Comerio|Corozal|Culebra|Dorado|Fajardo|Florida|Guanica|Guayama|Guayanilla|Guaynabo|Gurabo|Hatillo|Hormigueros|Humacao|Isabe|Juana Diaz|Juncos|Lajas|Lares|Las Marias|Las oiza|Luquillo|Manati|Maricao|Maunabo|Mayaguez|Moca|Morovis|Naguabo|Naranjito|Orocovis|Patillas|Penuelas|Ponce|Quebradillas|Rincon|Rio Grande|Sabana linas|San German|San Juan|San Lorenzo|San Sebastian|Santa Isabel|Toa Alta|Toa Baja|Trujillo Alto|Utuado|Vega Alta|Vega ues|Villalba|Yabucoa|Yauco" 1062 ], 1063 [ 1064 "Qatar", 1065 "QA", 1066 "Ad Dawḩah~DA|Al Khawr wa adh DhakhÄ«rah~KH|Al Wakrah~WA|Ar RayyÄn~RA|Ash ShamÄl~MS|Az̧ Za̧`Äyin~ZA|Umm ÅalÄl~US" 1067 ], 1068 ["Réunion", "RE", "Réunion"], 1069 [ 1070 "Romania", 1071 "RO", 1072 "Alba~AB|Arad~AR|Arges~AG|Bacau~BC|Bihor~BH|Bistrita-Nasaud~BN|Botosani~BT|Braila~BR|Brasov~BV|Bucuresti~B|Buzau~BZ|Calarasi~CL|Caras-Severin~CS|Cluj~CJ|Constanta~CT|Covasna~CV|Dambovita~DB|Dolj~DJ|Galati~GL|Giurgiu~GR|Gorj~GJ|Harghita~HR|Hunedoara~HD|Ialomita~IL|Iasi~IS|Maramures~MM|Mehedinti~MH|Mures~MS|Neamt~NT|Olt~OT|Prahova~PH|Salaj~SJ|Satu Mare~SM|Sibiu~SB|Suceava~SV|Teleorman~TR|Timis~TM|Tulcea~TL|Valcea~VL|Vaslui~VS|Vrancea~VN" 1073 ], 1074 [ 1075 "Russian Federation", 1076 "RU", 1077 "Republic of Adygea~AD|Republic of Altai (Gorno-Altaysk)~AL|Altai Krai~ALT|Amur Oblast~AMU|Arkhangelsk Oblast~ARK|Astrakhan Oblast~AST|Republic of Bashkortostan~BA|Belgorod Oblast~BEL|Bryansk Oblast~BRY|Republic of Buryatia~BU|Chechen Republic~CE|Chelyabinsk Oblast~CHE|Chukotka Autonomous Okrug~CHU|Chuvash Republic~CU|Republic of Dagestan~DA|Republic of Ingushetia~IN|Irkutsk Oblast~IRK|Ivanovo Oblast~IVA|Jewish Autonomous Oblast~JEW|Kabardino-Balkar Republic~KB|Kaliningrad Oblast~KLN|Republic of Kalmykia~KL|Kaluga Oblast~KLU|Kamchatka Krai~KAM|Karachay-Cherkess Republic~KC|Republic of Karelia~KR|Khabarovsk Krai~KHA|Republic of Khakassia~KK|Khanty-Mansi Autonomous Okrug - Yugra~KHM|Kemerovo Oblast~KEM|Kirov Oblast~KIR|Komi Republic~KO|Kostroma Oblast~KOS|Krasnodar Krai~KDA|Krasnoyarsk Krai~KYA|Kurgan Oblast~KGN|Kursk Oblast~KRS|Leningrad Oblast~LEN|Lipetsk Oblast~LIP|Magadan Oblast~MAG|Mari El Republic~ME|Republic of Mordovia~MO|Moscow Oblast~MOS|Moscow~MOW|Murmansk Oblast~MU|Nenets Autonomous Okrug~NEN|Nizhny Novgorod Oblast~NIZ|Novgorod Oblast~NGR|Novosibirsk Oblast~NVS|Omsk Oblast~OMS|Orenburg Oblast~ORE|Oryol Oblast~ORL|Penza Oblast~PNZ|Perm Krai~PER|Primorsky Krai~PRI|Pskov Oblast~PSK|Rostov Oblast~ROS|Ryazan Oblast~RYA|Saint Petersburg~SPE|Sakha (Yakutia) Republic~SA|Sakhalin Oblast~SAK|Samara Oblast~SAM|Saratov Oblast~SAR|Republic of North Ossetia-Alania~NOA|Smolensk Oblast~SMO|Stavropol Krai~STA|Sverdlovsk Oblast~SVE|Tambov Oblast~TAM|Republic of Tatarstan~TA|Tomsk Oblast~TOM|Tuva Republic~TU|Tula Oblast~TUL|Tver Oblast~TVE|Tyumen Oblast~TYU|Udmurt Republic~UD|Ulyanovsk Oblast~ULY|Vladimir Oblast~VLA|Volgograd Oblast~VGG|Vologda Oblast~VLG|Voronezh Oblast~VOR|Yamalo-Nenets Autonomous Okrug~YAN|Yaroslavl Oblast~YAR|Zabaykalsky Krai~ZAB" 1078 ], 1079 [ 1080 "Rwanda", 1081 "RW", 1082 "Kigali~01|Eastern~02|Northern~03|Western~04|Southern~05" 1083 ], 1084 ["Saint Barthélemy", "BL", "Au Vent~02|Sous le Vent~01"], 1085 [ 1086 "Saint Helena, Ascension and Tristan da Cunha", 1087 "SH", 1088 "Ascension~AC|Saint Helena~HL|Tristan da Cunha~TA" 1089 ], 1090 ["Saint Kitts and Nevis", "KN", "Saint Kitts~K|Nevis~N"], 1091 [ 1092 "Saint Lucia", 1093 "LC", 1094 "Anse-la-Raye~01|Canaries~12|Castries~02|Choiseul~03|Dennery~05|Gros Islet~06|Laborie~07|Micoud~08|Soufriere~10|Vieux Fort~11" 1095 ], 1096 ["Saint Martin", "MF", "Saint Martin"], 1097 ["Saint Pierre and Miquelon", "PM", "Miquelon|Saint Pierre"], 1098 [ 1099 "Saint Vincent and the Grenadines", 1100 "VC", 1101 "Charlotte~01|Grenadines~06|Saint Andrew~02|Saint David~03|Saint George~04|Saint Patrick~05" 1102 ], 1103 [ 1104 "Samoa", 1105 "WS", 1106 "A'ana~AA|Aiga-i-le-Tai~AL|Atua~AT|Fa'asaleleaga~FA|Gaga'emauga~GE|Gagaifomauga~GI|Palauli~PA|Satupa'itea~SA|Tuamasaga~TU|Va'a-o-Fonoti~VF|Vaisigano~VS" 1107 ], 1108 [ 1109 "San Marino", 1110 "SM", 1111 "Acquaviva~01|Borgo Maggiore~06|Chiesanuova~02|Domagnano~03|Faetano~04|Fiorentino~05|Montegiardino~08|San Marino~07|Serravalle~09" 1112 ], 1113 ["Sao Tome and Principe", "ST", "Principe~P|Sao Tome~S"], 1114 [ 1115 "Saudi Arabia", 1116 "SA", 1117 "'Asir~14|Al Bahah~11|Al Hudud ash Shamaliyah~08|Al Jawf~12|Al Madinah al Munawwarah~03|Al Qasim~05|Ar Riyad~01|Ash Sharqiyah~04|Ha'il~06|Jazan~09|Makkah al Mukarramah~02|Najran~10|Tabuk~07" 1118 ], 1119 [ 1120 "Senegal", 1121 "SN", 1122 "Dakar~DK|Diourbel~DB|Fatick~FK|Kaffrine~KA|Kaolack~KL|Kedougou~KE|Kolda~KD|Louga~LG|Matam~MT|Saint-Louis~SL|Sedhiou~SE|Tambacounda~TC|Thies~TH|Ziguinchor~ZG" 1123 ], 1124 [ 1125 "Serbia", 1126 "RS", 1127 "Beograd (Belgrade)~00|Borski~14|BraniÄevski~11|JablaniÄki~23|JužnobaÄki~06|Južnobanatski~04|Kolubarski~09|Kosovski~25|Kosovsko-MitrovaÄki~28|Kosovsko-Pomoravski~29|MaÄvanski~08|MoraviÄki~17|NiÅ¡avski~20|PÄinjski~24|PeÄki~26|Pirotski~22|Podunavski~10|Pomoravski~13|Prizrenski~27|Rasinski~19|RaÅ¡ki~18|SevernobaÄki~01|Sever
1127nobanatski~03|Srednjebanatski~02|Sremski~07|Å umadijski~12|TopliÄki~21|ZajeÄarski~15|ZapadnobaÄki~05|Zlatiborski~16" 1128 ], 1129 [ 1130 "Seychelles", 1131 "SC", 1132 "Anse aux Pins~01|Anse Boileau~02|Anse Etoile~03|Anse Royale~05|Anu Cap~04|Baie Lazare~06|Baie Sainte Anne~07|Beau Vallon~08|Bel Air~09|Bel Ombre~10|Cascade~11|Glacis~12|Grand'Anse Mahe~13|Grand'Anse Praslin~14|La Digue~15|La Riviere Anglaise~16|Les Mamelles~24|Mont Buxton~17|Mont Fleuri~18|Plaisance~19|Pointe La Rue~20|Port Glaud~21|Roche Caiman~25|Saint Louis~22|Takamaka~23" 1133 ], 1134 ["Sierra Leone", "SL", "Eastern~E|Northern~N|Southern~S|Western~W"], 1135 [ 1136 "Singapore", 1137 "SG", 1138 "Central Singapore~01|North East~02|North West~03|South East~04|South West~05" 1139 ], 1140 ["Sint Maarten (Dutch part)", "SX", "Sint Maarten"], 1141 [ 1142 "Slovakia", 1143 "SK", 1144 "Banskobystricky~BC|Bratislavsky~BL|Kosicky~KI|Nitriansky~NI|Presovsky~PV|Trenciansky~TC|Trnavsky~TA|Zilinsky~ZI" 1145 ], 1146 [ 1147 "Slovenia", 1148 "SI", 1149 "Ajdovscina~001|Apace~195|Beltinci~002|Benedikt~148|Bistrica ob Sotli~149|Bled~003|Bloke~150|Bohinj~004|Borovnica~005|Bovec~006|Braslovce~151|Brda~007|Brezice~009|Brezovica~008|Cankova~152|Celje~011|Cerklje na Gorenjskem~012|Cerknica~013|Cerkno~014|Cerkvenjak~153|Cirkulane~196|Crensovci~015|Crna na Koroskem~016|Crnomelj~017|Destrnik~018|Divaca~019|Dobje~154|Dobrepolje~020|Dobrna~155|Dobrova-Polhov Gradec~021|Dobrovnik~156|Dol pri Ljubljani~022|Dolenjske Toplice~157|Domzale~023|Dornava~024|Dravograd~025|Duplek~026|Gorenja Vas-Poljane~027|Gorisnica~028|Gorje~207|Gornja Radgona~029|Gornji Grad~030|Gornji Petrovci~031|Grad~158|Grosuplje~032|Hajdina~159|Hoce-Slivnica~160|Hodos~161|Horjul~162|Hrastnik~034|Hrpelje-Kozina~035|Idrija~036|Ig~037|Ilirska Bistrica~038|Ivancna Gorica~039|Izola~040s|Jesenice~041|Jursinci~042|Kamnik~043|Kanal~044|Kidricevo~045|Kobarid~046|Kobilje~047|Kocevje~048|Komen~049|Komenda~164|Koper~050|Kodanjevica na Krki~197|Kostel~165|Kozje~051|Kranj~052|Kranjska Gora~053|Krizevci~166|Krsko~054|Kungota~055|Kuzma~056|Lasko~057|Lenart~058|Lendava~059|Litija~068|Ljubljana~061|Ljubno~062|Ljutomer~063|Log-Dragomer~208|Logatec~064|Loska Dolina~065|Loski Potok~066|Lovrenc na Pohorju~167|Lukovica~068|Luce~067|Majsperk~069|Makole~198|Maribor~070|Markovci~168|Medvode~071|Menges~072|Metlika~073|Mezica~074|Miklavz na Dravskem Polju~169|Miren-Kostanjevica~075|Mirna~212|Mirna Pec~170|Mislinja~076|Mokronog-Trebelno~199|Moravce~077|Moravske Toplice~078|Mozirje~079|Murska Sobota~080|Naklo~082|Nazarje~083|Nova Gorica~084|Novo Mesto~085|Odranci~086|Ormoz~087|Osilnica~088|Pesnica~089|Piran~090|Pivka~091|Podcetrtek~092|Podlehnik~172|Podvelka~093|Poljcane~200|Postojna~094|Prebold~174|Preddvor~095|Prevalje~175|Ptuj~096|Race-Fram~098|Radece~099|Radenci~100|Radlje ob Dravi~101|Radovljica~102|Ravne na Koroskem~103|Razkrizje~176|Recica ob Savinji~209|Rence-Vogrsko~201|Ribnica~104|Ribnica na Poboriu~177|Rogaska Slatina~106|Rogasovci~105|Rogatec~107|Ruse~108|Salovci~033|Selnica ob Dravi~178|Semic~109|Sempeter-Vrtojba~183|Sencur~117|Sentilj~118|Sentjernej~119|Sentjur~120|Sentrupert~211|Sevnica~110|Sezana~111|Skocjan~121|Skofja Loka~122|Skofljica~123|Slovenj Gradec~112|Slovenska Bistrica~113|Slovenske Konjice~114|Smarje pri elsah~124|Smarjeske Toplice~206|Smartno ob Paki~125|Smartno pri Litiji~194|Sodrazica~179|Solcava~180|Sostanj~126|Sredisce ob Dravi~202|Starse~115|Store~127|Straza~203|Sveta Ana~181|Sveta Trojica v Slovenskih Goricah~204|Sveta Andraz v Slovenskih Goricah~182|Sveti Jurij~116|Sveti Jurij v Slovenskih Goricah~210|Sveti Tomaz~205|Tabor~184|Tisina~128|Tolmin~128|Trbovlje~129|Trebnje~130|Trnovska Vas~185|Trzin~186|Trzic~131|Turnisce~132|Velenje~133|Velika Polana~187|Velike Lasce~134|Verzej~188|Videm~135|Vipava~136|Vitanje~137|Vodice~138|Vojnik~139|Vransko~189|Vrhnika~140|Vuzenica~141|Zagorje ob Savi~142|Zavrc~143|Zrece~144|Zalec~190|Zelezniki~146|Zetale~191|Ziri~147|Zirovnica~192|Zuzemberk~193" 1150 ], 1151 [ 1152 "Solomon Islands", 1153 "SB", 1154 "Central~CE|Choiseul~CH|Guadalcanal~GU|Honiara~CT|Isabel~IS|Makira-Ulawa~MK|Malaita~ML|Rennell and Bellona~RB|Temotu~TE|Western~WE" 1155 ], 1156 [ 1157 "Somalia", 1158 "SO", 1159 "Awdal~AW|Bakool~BK|Banaadir~BN|Bari~BR|Bay~BY|Galguduud~GA|Gedo~GE|Hiiraan~HI|Jubbada Dhexe~JD|Jubbada Hoose~JH|Mudug~MU|Nugaal~NU|Sanaag~SA|Shabeellaha Dhexe~SD|Shabeellaha Hoose~SH|Sool~SO|Togdheer~TO|Woqooyi Galbeed~WO" 1160 ], 1161 [ 1162 "South Africa", 1163 "ZA", 1164 "Eastern Cape~EC|Free State~FS|Gauteng~GT|KwaZulu-Natal~NL|Limpopo~LP|Mpumalanga~MP|Northern Cape~NC|North West~NW|Western Cape~WC" 1165 ], 1166 [ 1167 "South Georgia and South Sandwich Islands", 1168 "GS", 1169 "Bird Island|Bristol Island|Clerke Rocks|Montagu Island|Saunders Island|South Georgia|Southern Thule|Traversay Islands" 1170 ], 1171 [ 1172 "South Sudan", 1173 "SS", 1174 "Central Equatoria~CE|Eastern Equatoria~EE|Jonglei~JG|Lakes~LK|Northern Bahr el Ghazal~BN|Unity~UY|Upper Nile~NU|Warrap~WR|Western Bahr el Ghazal~BW|Western Equatoria~EW" 1175 ], 1176 [ 1177 "Spain", 1178 "ES", 1179 "Albacete~CM|Alicante~VC|AlmerÃa~AN|Araba/Ãlava~VI|Asturias~O|Ãvila~AV|Badajoz~BA|Barcelona~B|Bizkaia~BI|Burgos~BU|Cáceres~CC|Cádiz~CA|Cantabria~S|Castellón~CS|Cueta~CU|Ciudad Real~CR|Córdoba~CO|A Coruña~C|Cuenca~CU|Gipuzkoa~SS|Girona~GI|Granada~GR|Guadalajara~GU|Huelva~H|Huesca~HU|Illes Balears~PM|Jaén~J|León~LE|Lleida~L|Lugo~LU|Madrid~M|Málaga~MA|Melilla~ML|Murcia~MU|Navarre~NA|Ourense~OR|Palencia~P|Las Palmas~GC|Pontevedra~PO|La Rioja~LO|Salamanca~SA|Santa Cruz de Tenerife~TF|Segovia~SG|Sevilla~SE|Soria~SO|Tarragona~T|Teruel~TE|Toledo~TO|Valencia~V|Valladolid~VA|Zamora~ZA|Zaragoza~Z" 1180 ], 1181 [ 1182 "Sri Lanka", 1183 "LK", 1184 "Basnahira~1|Dakunu~3|Madhyama~2|Naegenahira~5|Sabaragamuwa~9|Uturu~4|Uturumaeda~7|Vayamba~6|Uva~8" 1185 ], 1186 [ 1187 "Sudan", 1188 "SD", 1189 "Al Bahr al Ahmar~RS|Al Jazirah~GZ|Al Khartum~KH|Al Qadarif~GD|An Nil al Abyad~NW|An Nil al Azraq~NB|Ash Shamaliyah~NO|Gharb Darfur~DW|Gharb Kurdufan~GK|Janub Darfur~DS|Janub Kurdufan~KS|Kassala~KA|Nahr an Nil~NR|Shamal Darfur~DN|Sharq Darfur~DE|Shiamal Kurdufan~KN|Sinnar~SI|Wasat Darfur Zalinjay~DC" 1190 ], 1191 [ 1192 "Suriname", 1193 "SR", 1194 "Brokopondo~BR|Commewijne~CM|Coronie~CR|Marowijne~MA|Nickerie~NI|Para~PR|Paramaribo~PM|Saramacca~SA|Sipaliwini~SI|Wanica~WA" 1195 ], 1196 ["Swaziland", "SZ", "Hhohho~HH|Lubombo~LU|Manzini~MA|Shiselweni~SH"], 1197 [ 1198 "Sweden", 1199 "SE", 1200 "Blekinge~K|Dalarnas~W|Gotlands~X|Gavleborgs~I|Hallands~N|Jamtlands~Z|Jonkopings~F|Kalmar~H|Kronobergs~G|Norrbottens~BD|Orebro~T|Ostergotlands~E|Skane~M|Sodermanlands~D|Stockholm~AB|Varmlands~S|Vasterbottens~AC|Vasternorrlands~Y|Vastmanlands~U|Vastra Gotalands~O" 1201 ], 1202 [ 1203 "Switzerland", 1204 "CH", 1205 "Aargau~AG|Appenzell Ausserrhoden~AR|Appenzell Innerhoden~AI|Basel-Landschaft~BL|Basel-Stadt~BS|Bern~BE|Fribourg~FR|Genève~G
1205E|Glarus~GL|Graubünden~GR|Jura~JU|Luzern~LU|Neuchâtel~NE|Nidwalden~NW|Obwalden~OW|Sankt Gallen~SG|Schaffhausen~SH|Schwyz~SZ|Solothurn~SO|Thurgau~TG|Ticino~TI|Uri~UR|Valais~VS|Vaud~VD|Zug~ZG|Zürich~ZH" 1206 ], 1207 [ 1208 "Syrian Arab Republic", 1209 "SY", 1210 "Al Hasakah~HA|Al Ladhiqiyah~LA|Al Qunaytirah~QU|Ar Raqqah~RA|As Suwayda'~SU|Dar'a~DR|Dayr az Zawr~DY|Dimashq~DI|Halab~HL|Hamah~HM|Hims~HI|Idlib~ID|Rif Dimashq~RD|Tartus~TA" 1211 ], 1212 [ 1213 "Taiwan", 1214 "TW", 1215 "Chang-hua~CHA|Chia-i~CYQ|Hsin-chu~HSQ|Hua-lien~HUA|Kao-hsiung~KHH|Keelung~KEE|Kinmen~KIN|Lienchiang~LIE|Miao-li~MIA|Nan-t'ou~NAN|P'eng-hu~PEN|New Taipei~NWT|P'ing-chung~PIF|T'ai-chung~TXG|T'ai-nan~TNN|T'ai-pei~TPE|T'ai-tung~TTT|T'ao-yuan~TAO|Yi-lan~ILA|Yun-lin~YUN" 1216 ], 1217 [ 1218 "Tajikistan", 1219 "TJ", 1220 "Dushanbe~DU|KÅhistoni Badakhshon~GB|Khatlon~KT|Sughd~SU" 1221 ], 1222 [ 1223 "Tanzania, United Republic of", 1224 "TZ", 1225 "Arusha~01|Coast~19|Dar es Salaam~02|Dodoma~03|Iringa~04|Kagera~05|Kigoma~08|Kilimanjaro~09|Lindi~12|Manyara~26|Mara~13|Mbeya~14|Morogoro~16|Mtwara~17|Mwanza~18|Pemba North~06|Pemba South~10|Rukwa~20|Ruvuma~21|Shinyanga~22|Singida~23|Tabora~24|Tanga~25|Zanzibar North~07|Zanzibar Central/South~11|Zanzibar Urban/West~15" 1226 ], 1227 [ 1228 "Thailand", 1229 "TH", 1230 "Amnat Charoen~37|Ang Thong~15|Bueng Kan~38|Buri Ram~31|Chachoengsao~24|Chai Nat~18|Chaiyaphum~36|Chanthaburi~22|Chiang Mai~50|Chiang Rai~57|Chon Buri~20|Chumphon~86|Kalasin~46|Kamphaeng Phet~62|Kanchanaburi~71|Khon Kaen~40|Krabi~81|Krung Thep Mahanakhon (Bangkok)~10|Lampang~52|Lamphun~51|Loei~42|Lop Buri~16|Mae Hong Son~58|Maha Sarakham~44|Mukdahan~49|Nakhon Nayok~26|Nakhon Phathom~73|Nakhon Phanom~48|Nakhon Ratchasima~30|Nakhon Sawan~60|Nakhon Si Thammarat~80|Nan~55|Narathiwat~96|Nong Bua Lam Phu~39|Nong Khai~43|Nonthaburi~12|Pathum Thani~13|Pattani~94|Phangnga~82|Phatthalung~93|Phayao~56|Phetchabun~76|Phetchaburi~76|Phichit~66|Phitsanulok~65|Phra Nakhon Si Ayutthaya~14|Phrae~54|Phuket~83|Prachin Buri~25|Prachuap Khiri Khan~77|Ranong~85|Ratchaburi~70|Rayong~21|Roi Et~45|Sa Kaeo~27|Sakon Nakhon~47|Samut Prakan~11|Samut Sakhon~74|Samut Songkhram~75|Saraburi~19|Satun~91|Sing Buri~17|Si Sa ket~33|Songkhla~90|Sukhothai~64|Suphan Buri~72|Surat Thani~84|Surin~32|Tak~63|Trang~92|Trat~23|Ubon Ratchathani~34|Udon Thani~41|Uthai Thani~61|Uttaradit~53|Yala~95|Yasothon~35" 1231 ], 1232 [ 1233 "Timor-Leste", 1234 "TL", 1235 "Aileu~AL|Ainaro~AN|Baucau~BA|Bobonaro~BO|Cova Lima~CO|Dili~DI|Ermera~ER|Lautem~LA|Liquica~LI|Manatuto~MT|Manufahi~MF|Oecussi~OE|Viqueque~VI" 1236 ], 1237 ["Togo", "TG", "Centre~C|Kara~K|Maritime~M|Plateaux~P|Savannes~S"], 1238 ["Tokelau", "TK", "Atafu|Fakaofo|Nukunonu"], 1239 ["Tonga", "TO", "'Eua~01|Ha'apai~02|Niuas~03|Tongatapu~04|Vava'u~05"], 1240 [ 1241 "Trinidad and Tobago", 1242 "TT", 1243 "Arima~ARI|Chaguanas~CHA|Couva-Tabaquite-Talparo~CTT|Diefo Martin~DMN|Mayaro-Rio Claro~MRC|Penal-Debe~PED|Point Fortin~PTF|Port-of-Spain~POS|Princes Town~PRT|San Fernando~SFO|San Juan-Laventille~SJL|Sangre Grande~SGE|Siparia~SIP|Tobago~TOB|Tunapuna-Piarco~TUP" 1244 ], 1245 [ 1246 "Tunisia", 1247 "TN", 1248 "Ariana~12|Beja~31|Ben Arous~13|Bizerte~23|Gabes~81|Gafsa~71|Jendouba~32|Kairouan~41|Kasserine~42|Kebili~73|Kef~33|Mahdia~53|Medenine~82|Monastir~52|Nabeul~21|Sfax~61|Sidi Bouzid~43|Siliana~34|Sousse~51|Tataouine~83|Tozeur~72|Tunis~11|Zaghouan~22" 1249 ], 1250 [ 1251 "Turkey", 1252 "TR", 1253 "Adana~01|Adiyaman~02|Afyonkarahisar~03|Agri~04|Aksaray~68|Amasya~05|Ankara~06|Antalya~07|Ardahan~75|Artvin~08|Aydin~09|Balikesir~10|Bartin~74|Batman~72|Bayburt~69|Bilecik~11|Bingol~12|Bitlis~13|Bolu~14|Burdur~15|Bursa~16|Canakkale~17|Cankiri~18|Corum~19|Denizli~20|Diyarbakir~21|Duzce~81|Edirne~22|Elazig~23|Erzincan~24|Erzurum~25|Eskisehir~26|Gaziantep~27|Giresun~28|Gumushane~29|Hakkari~30|Hatay~31|Igdir~76|Isparta~32|Istanbul~34|Izmir~35|Kahramanmaras~46|Karabuk~78|Karaman~70|Kars~36|Kastamonu~37|Kayseri~38|Kilis~79|Kirikkale~71|Kirklareli~39|Kirsehir~40|Kocaeli~41|Konya~42|Kutahya~43|Malatya~44|Manisa~45|Mardin~47|Mersin~33|Mugla~48|Mus~49|Nevsehir~50|Nigde~51|Ordu~52|Osmaniye~80|Rize~53|Sakarya~54|Samsun~55|Sanliurfa~63|Siirt~56|Sinop~57|Sirnak~73|Sivas~58|Tekirdag~59|Tokat~60|Trabzon~61|Tunceli~62|Usak~64|Van~65|Yalova~77|Yozgat~66|Zonguldak~67" 1254 ], 1255 [ 1256 "Turkmenistan", 1257 "TM", 1258 "Ahal~A|Asgabat~S|Balkan~B|Dashoguz~D|Lebap~L|Mary~M" 1259 ], 1260 ["Turks and Caicos Islands", "TC", "Turks and Caicos Islands"], 1261 [ 1262 "Tuvalu", 1263 "TV", 1264 "Funafuti~FUN|Nanumanga~NMG|Nanumea~NMA|Niutao~NIT|Nui~NUI|Nukufetau~NKF|Nukulaelae~NKL|Vaitupu~VAU" 1265 ], 1266 [ 1267 "Uganda", 1268 "UG", 1269 "Abim~317|Adjumani~301|Amolatar~314|Amuria~216|Amuru~319|Apac~302|Arua~303|Budaka~217|Bududa~223|Bugiri~201|Bukedea~224|Bukwa~218|Buliisa~419|Bundibugyo~401|Bushenyi~402|Busia~202|Butaleja~219|Dokolo~318|Gulu~304|Hoima~403|Ibanda~416|Iganga~203|Isingiro~417|Jinja~204|Kaabong~315|Kabale~404|Kabarole~405|Kaberamaido~213|Kalangala~101|Kaliro~220|Kampala~102|Kamuli~205|Kamwenge~413|Kanungu~414|Kapchorwa~206|Kasese~406|Katakwi~207|Kayunga~112|Kibaale~407|Kiboga~103|Kiruhura~418|Kisoro~408|Kitgum~305|Koboko~316|Kotido~306|Kumi~208|Kyenjojo~415|Lira~307|Luwero~104|Lyantonde~116|Manafwa~221|Maracha~320|Masaka~105|Masindi~409|Mayuge~214|Mbale~209|Mbarara~410|Mityana~114|Moroto~308|Moyo~309|Mpigi~106|Mubende~107|Mukono~108|Nakapiripirit~311|Nakaseke~115|Nakasongola~109|Namutumba~222|Nebbi~310|Ntungamo~411|Oyam~321|Pader~312|Pallisa~210|Rakai~110|Rukungiri~412|Sembabule~111|Sironko~215|Soroti~211|Tororo~212|Wakiso~113|Yumbe~313" 1270 ], 1271 [ 1272 "Ukraine", 1273 "UA", 1274 "Cherkasy~71|Chernihiv~74|Chernivtsi~77|Dnipropetrovsk~12|Donetsk~14|Ivano-Frankivsk~26|Kharkiv~63|Kherson~65|Khmelnytskyi~68|Kiev~32|Kirovohrad~35|Luhansk~09|Lviv~46|Mykolaiv~48|Odessa~51|Poltava~53|Rivne~56|Sumy~59|Ternopil~61|Vinnytsia~05|Volyn~07|Zakarpatti
1274a~21|Zaporizhia~23|Zhytomyr~18|Avtonomna Respublika Krym~43|Kyïv~30|Sevastopol~40" 1275 ], 1276 [ 1277 "United Arab Emirates", 1278 "AE", 1279 "Abu Dhabi~AZ|Ajman~AJ|Dubai~DU|Fujairah~FU|Ras al Khaimah~RK|Sharjah~SH|Umm Al Quwain~UQ" 1280 ], 1281 [ 1282 "United Kingdom", 1283 "GB", 1284 "Avon~AVN|Bedfordshire~BDF|Berkshire~BRK|Bristol, City of~COB|Buckinghamshire~BKM|Cambridgeshire~CAM|Cheshire~CHS|Cleveland~CLV|Cornwall~CON|Cumbria~CMA|Derbyshire~DBY|Devon~DEV|Dorset~DOR|Durham~DUR|East Sussex~SXE|Essex~ESS|Gloucestershire~GLS|Greater London~LND|Greater Manchester~GTM|Hampshire (County of Southampton)~HAM|Hereford and Worcester~HWR|Herefordshire~HEF|Hertfordshire~HRT|Isle of Wight~IOW|Kent~KEN|Lancashire~LAN|Leicestershire~LEI|Lincolnshire~LIN|London~LDN|Merseyside~MSY|Middlesex~MDX|Norfolk~NFK|Northamptonshire~NTH|Northumberland~NBL|North Humberside~NHM|North Yorkshire~NYK|Nottinghamshire~NTT|Oxfordshire~OXF|Rutland~RUT|Shropshire~SAL|Somerset~SOM|South Humberside~SHM|South Yorkshire~SYK|Staffordshire~STS|Suffolk~SFK|Surrey~SRY|Tyne and Wear~TWR|Warwickshire~WAR|West Midlands~WMD|West Sussex~SXW|West Yorkshire~WYK|Wiltshire~WIL|Worcestershire~WOR|Antrim~ANT|Armagh~ARM|Belfast, City of~BLF|Down~DOW|Fermanagh~FER|Londonderry~LDY|Derry, City of~DRY|Tyrone~TYR|Aberdeen, City of~AN|Aberdeenshire~ABD|Angus (Forfarshire)~ANS|Argyll~AGB|Ayrshire~ARG|Banffshire~BAN|Berwickshire~BEW|Bute~BUT|Caithness~CAI|Clackmannanshire~CLK|Cromartyshire~COC|Dumfriesshire~DFS|Dunbartonshire (Dumbarton)~DNB|Dundee, City of~DD|East Lothian (Haddingtonshire)~ELN|Edinburgh, City of~EB|Fife~FIF|Glasgow, City of~GLA|Inverness-shire~INV|Kincardineshire~KCD|Kinross-shire~KRS|Kirkcudbrightshire~KKD|Lanarkshire~LKS|Midlothian (County of Edinburgh)~MLN|Moray (Elginshire)~MOR|Nairnshire~NAI|Orkney~OKI|Peeblesshire~PEE|Perthshire~PER|Renfrewshire~RFW|Ross and Cromarty~ROC|Ross-shire~ROS|Roxburghshire~ROX|Selkirkshire~SEL|Shetland (Zetland)~SHI|Stirlingshire~STI|Sutherland~SUT|West Lothian (Linlithgowshire)~WLN|Wigtownshire~WIG|Clwyd~CWD|Dyfed~DFD|Gwent~GNT|Gwynedd~GWN|Mid Glamorgan~MGM|Powys~POW|South Glamorgan~SGM|West Glamorgan~WGM" 1285 ], 1286 [ 1287 "United States", 1288 "US", 1289 "Alabama~AL|Alaska~AK|American Samoa~AS|Arizona~AZ|Arkansas~AR|California~CA|Colorado~CO|Connecticut~CT|Delaware~DE|District of Columbia~DC|Micronesia~FM|Florida~FL|Georgia~GA|Guam~GU|Hawaii~HI|Idaho~ID|Illinois~IL|Indiana~IN|Iowa~IA|Kansas~KS|Kentucky~KY|Louisiana~LA|Maine~ME|Marshall Islands~MH|Maryland~MD|Massachusetts~MA|Michigan~MI|Minnesota~MN|Mississippi~MS|Missouri~MO|Montana~MT|Nebraska~NE|Nevada~NV|New Hampshire~NH|New Jersey~NJ|New Mexico~NM|New York~NY|North Carolina~NC|North Dakota~ND|Northern Mariana Islands~MP|Ohio~OH|Oklahoma~OK|Oregon~OR|Palau~PW|Pennsylvania~PA|Puerto Rico~PR|Rhode Island~RI|South Carolina~SC|South Dakota~SD|Tennessee~TN|Texas~TX|Utah~UT|Vermont~VT|Virgin Islands~VI|Virginia~VA|Washington~WA|West Virginia~WV|Wisconsin~WI|Wyoming~WY|Armed Forces Americas~AA|Armed Forces Europe, Canada, Africa and Middle East~AE|Armed Forces Pacific~AP" 1290 ], 1291 [ 1292 "United States Minor Outlying Islands", 1293 "UM", 1294 "Baker Island~81|Howland Island~84|Jarvis Island~86|Johnston Atoll~67|Kingman Reef~89|Midway Islands~71|Navassa Island~76|Palmyra Atoll~95|Wake Island~79|Bajo Nuevo Bank~BN|Serranilla Bank~SB" 1295 ], 1296 [ 1297 "Uruguay", 1298 "UY", 1299 "Artigas~AR|Canelones~CA|Cerro Largo~CL|Colonia~CO|Durazno~DU|Flores~FS|Florida~FD|Lavalleja~LA|Maldonado~MA|Montevideo~MO|Paysandú~PA|RÃo Negro~RN|Rivera~RV|Rocha~RO|Salto~SA|San José~SJ|Soriano~SO|Tacuarembó~TA|Treinta y Tres~TT" 1300 ], 1301 [ 1302 "Uzbekistan", 1303 "UZ", 1304 "Toshkent shahri~TK|Andijon~AN|Buxoro~BU|Fargâona~FA|Jizzax~JI|Namangan~NG|Navoiy~NW|Qashqadaryo (Qarshi)~QA|Samarqand~SA|Sirdaryo (Guliston)~SI|Surxondaryo (Termiz)~SU|Toshkent wiloyati~TO|Xorazm (Urganch)~XO|Qoraqalpogâiston Respublikasi (Nukus)~QR" 1305 ], 1306 [ 1307 "Vanuatu", 1308 "VU", 1309 "Malampa~MAP|Pénama~PAM|Sanma~SAM|Shéfa~SEE|Taféa~TAE|Torba~TOB" 1310 ], 1311 [ 1312 "Venezuela, Bolivarian Republic of", 1313 "VE", 1314 "Dependencias Federales~W|Distrito Federal~A|Amazonas~Z|Anzoátegui~B|Apure~C|Aragua~D|Barinas~E|BolÃvar~F|Carabobo~G|Cojedes~H|Delta Amacuro~Y|Falcón~I|Guárico~J|Lara~K|Mérida~L|Miranda~M|Monagas~N|Nueva Esparta~O|Portuguesa~P|Sucre~R|Táchira~S|Trujillo~T|Vargas~X|Yaracuy~U|Zulia~V" 1315 ], 1316 [ 1317 "Vietnam", 1318 "VN", 1319 "Äá»ng Nai~39|Äá»ng Tháp~45|Gia Lai~30|Hà Giang~03|Hà Nam~63|Hà Tây~15|Hà TÄ©nh~23|Hải Dương~61|Háºu Giang~73|Hòa Bình~14|Hưng Yên~66|Khánh Hòa~34|Kiên Giang~47|Kon Tum~28|Lai Châu~01|Lâm Äá»ng~35|Lạng SÆ¡n~09|Là o Cai~02|Long An~41|Nam Äá»nh~67|Nghá» An~22|Ninh Bình~18|Ninh Thuáºn~36|Phú Thá»~68|Phú Yên~32|Quảng Bình~24|Quảng Nam~27|Quảng Ngãi~29|Quảng Ninh~13|Quảng Trá»~25|Sóc TrÄng~52|SÆ¡n La~05|Tây Ninh~37|Thái Bình~20|Thái Nguyên~69|Thanh Hóa~21|Thừa ThiênâHuế~26|Tiá»n Giang~46|Trà Vinh~51|Tuyên Quang~07|VÄ©nh Long~49|VÄ©nh Phúc~70|Yên Bái~06|Cần ThÆ¡~CT|Äà Nẵng~DN|Hà Ná»i~HN|Hải Phòng~HP|Há» Chà Minh (Sà i Gòn)~SG" 1320 ], 1321 [ 1322 "Virgin Islands, British", 1323 "VG",
1324 "Anegada~ANG|Jost Van Dyke~JVD|Tortola~TTA|Virgin Gorda~VGD" 1325 ], 1326 [ 1327 "Virgin Islands, U.S.", 1328 "VI", 1329 "St. Thomas~STH|St. John~SJO|St. Croix~SCR" 1330 ], 1331 ["Wallis and Futuna", "WF", "Alo~ALO|Sigave~SIG|Wallis~WAL"], 1332 [ 1333 "Western Sahara", 1334 "EH", 1335 "Es Smara~ESM|Boujdour~BOD|Laâyoune~LAA|Aousserd~AOU|Oued ed Dahab~OUD" 1336 ], 1337 [ 1338 "Yemen", 1339 "YE", 1340 "AbyÄn~AB|'Adan~AD|AḠá¸Äli'~DA|Al Bayá¸Ä'~BA|Al Ḩudaydah~HU|Al Jawf~JA|Al Mahrah~MR|Al MaḩwÄ«t~MW|'AmrÄn~AM|DhamÄr~DH|Ḩaá¸ramawt~HD|Ḩajjah~HJ|Ibb~IB|Laḩij~LA|Ma'rib~MA|Raymah~RA|ÅÄâdah~SD|ÅanâÄ'~SN|Shabwah~SH|TÄâizz~TA" 1341 ], 1342 [ 1343 "Zambia", 1344 "ZM", 1345 "Central~02|Copperbelt~08|Eastern~03|Luapula~04|Lusaka~09|Northern~05|North-Western~06|Southern~07|Western~01" 1346 ], 1347 [ 1348 "Zimbabwe", 1349 "ZW", 1350 "Bulawayo~BU|Harare~HA|Manicaland~MA|Mashonaland Central~MC|Mashonaland East~ME|Mashonaland West~MW|Masvingo~MV|Matabeleland North~MN|Matabeleland South~MS|Midlands~MI" 1351 ] 1352 ], 1353 a = function() { 1354 $(".crs-country").each(n); 1355 }, 1356 n = function() { 1357 var a = this; 1358 if ("true" !== a.getAttribute("data-crs-loaded")) { 1359 a.length = 0; 1360 var n = $(a).attr("data-default-option"), 1361 i = n || "Select country", 1362 e = a.getAttribute("data-show-default-option"); 1363 m = null === e || "true" === e; 1364 var r = $(a).attr("data-default-value"), 1365 o = $(a).attr("data-value"), 1366 l = 0; 1367 m && (this.options[0] = new Option(i, "")), 1368 k({ 1369 whitelist: a.getAttribute("data-whitelist"), 1370 blacklist: a.getAttribute("data-blacklist"), 1371 preferred: a.getAttribute("data-preferred"), 1372 preferredDelim: a.getAttribute("data-preferred-delim") 1373 }); 1374 for (var t = 0; t < M.length; t++) { 1375 var s = "shortcode" == o || "2-char" === o ? M[t][1] : M[t][0]; 1376 M[t][4] && (s = ""), 1377 (a.options[a.length] = new Option(M[t][0], s)), 1378 null != r && r === s && ((l = t), m && l++); 1379 } 1380 this.selectedIndex = l; 1381 var u = $(a).attr("data-region-id"); 1382 if (u) { 1383 var d = $("#" + u)[0]; 1384 if (d) 1385 if ( 1386 (B(d), 1387 $(this).on("change", function() { 1388 b(a, d); 1389 }), 1390 r && 0 < a.selectedIndex) 1391 ) { 1392 b(a, d); 1393 var h = $(d).attr("data-default-value"), 1394 S = "shortcode" === d.getAttribute("data-value"); 1395 if (null !== h) { 1396 var A = m ? a.selectedIndex - 1 : a.selectedIndex, 1397 g = M[A][3]; 1398 c(d, g, h, S); 1399 } 1400 } else !1 === m && b(a, d); 1401 else 1402 console.error( 1403 "Region dropdown DOM node with ID " + u + " not found." 1404 ); 1405 a.setAttribute("data-crs-loaded", "true"); 1406 } else 1407 console.error( 1408 "Missing data-region-id on country-region-selector country field." 1409 ); 1410 } 1411 }, 1412 B = function(a) { 1413 var n = $(a).attr("data-blank-option"), 1414 i = n || "-", 1415 e = a.getAttribute("data-show-default-option"); 1416 (h = null === e || "true" === e), 1417 (a.length = 0), 1418 h && ((a.options[0] = new Option(i, "")), (a.selectedIndex = 0)); 1419 }, 1420 k = function(a) { 1421 var n = l, 1422 i = [], 1423 e = 0; 1424 if (a.whitelist) { 1425 var r = a.whitelist.split(","); 1426 for (e = 0; e < l.length; e++) 1427 -1 !== r.indexOf(l[e][1]) && i.push(l[e]); 1428 n = i; 1429 } else if (a.blacklist) { 1430 var o = a.blacklist.split(","); 1431 for (e = 0; e < l.length; e++) 1432 -1 === o.indexOf(l[e][1]) && i.push(l[e]); 1433 n = i; 1434 } 1435 a.preferred && (n = s(n, a.preferred, a.preferredDelim)), (M = n), t(); 1436 }, 1437 t = function() { 1438 for (var a = 0; a < M.length; a++) { 1439 for ( 1440 var n = { hasShortcodes: /~/.test(M[a][2]), regions: [] }, 1441 i = M[a][2].split("|"), 1442 e = 0; 1443 e < i.length; 1444 e++ 1445 ) { 1446 var r = i[e].split("~"); 1447 n.regions.push([r[0], r[1]]); 1448 } 1449 M[a][3] = n; 1450 } 1451 }, 1452 c = function(a, n, i, e) { 1453 for (var r = 0; r < n.regions.length; r++) { 1454 if ( 1455 (e && n.hasShortcodes && n.regions[r][1] 1456 ? n.regions[r][1] 1457 : n.regions[r][0]) === i 1458 ) { 1459 a.selectedIndex = h ? r + 1 : r; 1460 break; 1461 } 1462 } 1463 }, 1464 b = function(a, n) { 1465 var i = m ? a.selectedIndex - 1 : a.selectedIndex, 1466 e = $(n).attr("data-default-option"), 1467 r = n.getAttribute("data-value"), 1468 o = e || "Select region"; 1469 if ("" === a.value) B(n); 1470 else { 1471 (n.length = 0), h && (n.options[0] = new Option(o, "")); 1472 var l = M[i][3], 1473 t = "shortcode" === r && l.hasShortcodes, 1474 s = t ? 1 : 0;
1475 l.regions.sort(function(a, n) { 1476 var i = a[s].toLowerCase(), 1477 e = n[s].toLowerCase(); 1478 return i < e ? -1 : e < i ? 1 : 0; 1479 }); 1480 for (var u = 0; u < l.regions.length; u++) { 1481 var d = t ? l.regions[u][1] : l.regions[u][0]; 1482 n.options[n.length] = new Option(l.regions[u][0], d); 1483 } 1484 n.selectedIndex = 0; 1485 } 1486 }, 1487 s = function(a, n, i) { 1488 var e = n.split(",").reverse(), 1489 r = {}, 1490 o = !1, 1491 l = a.filter(function(a) { 1492 return -1 === e.indexOf(a[1]) || ((r[a[1]] = a), !(o = !0)); 1493 }); 1494 o && i && l.unshift([i, "", "", {}, !0]); 1495 for (var t = 0; t < e.length; t++) { 1496 var s = e[t]; 1497 l.unshift(r[s]); 1498 } 1499 return l; 1500 }; 1501 return $(a), { init: a }; 1502}); 1503 1504 1505/***/ }), 1506
1507/***/ "../FigureBaseResources/js/figure.js": 1508/*!*******************************************!*\ 1509 !*** ../FigureBaseResources/js/figure.js ***! 1510 \*******************************************/ 1511/***/ (function() { 1512 1513/** 1514 * Copyright 2009-2018, Figure (http://www.commercebyfigure.com) 1515 * 1516 * Licensed under The BSD License 1517 * Redistributions of files must retain the above copyright notice. 1518 * 1519 * @copyright Copyright 2009-2018, Figure (http://www.commercebyfigure.com) 1520 * @package Figure - Cart 1521 * @author Ian Tucker <ian at commercebyfigure.com> 1522 * @license BSD License (http://www.opensource.org/licenses/bsd-license.php) 1523 */ 1524 1525const page = window.location.pathname.split("/")[1]; 1526 1527$(document).ready(function () { 1528 $("a.add-cart-modal").bind("click", addCart); 1529 $(".product-order").bind("click", addCart); 1530 $(".btn-add-cart").bind("click", addCart); 1531 1532 $(".btn-add-on-cart").bind("click", addOnCart); 1533 1534 $(".btn-add-club").on("click", addClub); 1535 1536 $("#shipping_insurance").bind("change", toggleInsurance); 1537 1538 //NOTE: tokenizeCard comes from the payment-form(|-no-zip|-se).st.js file that 1539 // FigureBaseCart's _snippets/javascript-payment includes (with the latter's just being an empty function) 1540 $("#credit-card-form").bind("submit", tokenizeCard); 1541//$("#shipping_methods").on('change', 'input:radio.shipping_method', updateShipping); 1542 1543 // Auto-save Requested Ship Date 1544 $("input[type=radio][name='data[requested_ship_date]']").bind("change", updateRequestedShipDate); 1545 selectFirstRadioOption("data[requested_ship_date]"); 1546 1547 //legacy; remove once all client overrides are updated to use name="data[requested_ship_date]" 1548 $("input[type=radio][name=requested_ship_date]").bind("change", updateRequestedShipDate); 1549 selectFirstRadioOption("requested_ship_date"); 1550 1551 // Auto-save order comments (instructions & gift message) 1552 $("#js-instructions, #js-gift_message").on("blur", updateComments); 1553 1554 $("#credit-card-form #state").bind("change", internationalShippingSelect); 1555 1556 // Purchase Quantity Selector 1557 $(".qty").on("change", function () { 1558 const $this = $(this); 1559 const parts = $this.attr("id").split("qty-"); 1560 const id = parts[1]; 1561 const val = $this.val(); 1562 1563 updateQuantity(id, val); 1564 checkWishRequests(id, val); 1565 }); 1566 1567 // Wish Quantity Selector 1568 $(".wish-qty").bind("change", function () { 1569 const $this = $(this); 1570 const parts = $this.attr("id").split("qty-"); 1571 const id = parts[1]; 1572 const val = $this.val(); 1573 1574 updateWishQuantity(id, val); 1575 }); 1576 1577 $("a.launch-modal").bind("click", launchModal); 1578 $("input:radio.launch-modal").bind("change", launchModalSelect); 1579 $("select.launch-modal").bind("change", launchModalSelect); 1580 1581 /** 1582 * Click Handler for /offering/checkout 1583 * Appends Spinner to body and disabled button 1584 * to prevent duplicate order 1585 * 1586 * Last Edit: 9/01/2020 1587 * 1588 * @author Victor Ragojos 1589 */ 1590 $("#button-place-order").on("mousedown", function (e) { 1591 e.stopPropagation(); 1592 1593 $(this).attr("disabled", true); 1594 const modal = $('<div id="checkoutSpinnerModal"></div>'); 1595 modal.addClass("fade"); 1596 modal.addClass("modal"); 1597 modal.attr("keyboard", false); 1598 modal.attr("data-backdrop", "static"); 1599 const dialog = $('<div class="modal-dialog modal-dialog-centered"></div>'); 1600 1601 const content = $('<div class="modal-content d-flex"></div>'); 1602 content.addClass("align-items-center"); 1603 const body = $('<div class="modal-body d-flex"></div>');
1604 const spinner = $('<div class="spinner-border text-primary"></div>'); 1605 1606 body.append(spinner); 1607 1608 content.append(body); 1609 dialog.append(content); 1610 modal.append(dialog); 1611 1612 content.css({ 1613 border: "none", 1614 backgroundColor: "transparent", 1615 }); 1616 1617 spinner.css({ 1618 zIndex: 9999, 1619 }); 1620 1621 $("body").append(modal); 1622 modal.modal("show"); 1623 1624 $("#cartForm").submit(); 1625 }); 1626 1627 // prevent rage-click multi-submission of form 1628 $("form").bind("submit", function (e) { 1629 const $form = $(this); 1630 if ($form.data("submitted") === true) { 1631 // Previously submitted - don't submit again 1632 e.preventDefault(); 1633 } else { 1634 // Mark it so that the next submit can be ignored 1635 $form.data("submitted", true); 1636 } 1637 }); 1638}); 1639 1640function addCart(event) { 1641 const $this = $(this); 1642 if ( 1643 $this.hasClass("add-to-added") 1644 && $this.text().includes('Add') 1645 && !$this.text().includes('Added') 1646 ) { 1647 $this.text('Added'); 1648 } 1649 1650 // Everything after /add/ 1651 let $parts = $this.attr("href").split("/add/"); 1652 1653 // Break up by forward slash (/) 1654 $parts = $parts[1].split("/"); 1655 1656 // First Argument is SKU 1657 const $sku = $parts[0]; 1658 const $quant = $this.closest("form").find("select").val() || 1; 1659 1660 //const modalSize = 'small-modal'; 1661 //$('.site-mask').fadeIn(); 1662 //$('.site-modal').attr('class', 'site-modal '+modalSize); 1663 //$('body').addClass('modal-open').addClass('modal-on-page'); 1664 //$('.site-modal').removeAttr('aria-hidden').attr('tab-index','1'); 1665 const $cartModal = $("#cartModal"); 1666 $cartModal.modal(); 1667 $cartModal.find(".modal-load-area").html("").removeClass("loaded"); 1668 $.getJSON(`/cart/add_modal/${$sku}/${$quant}.json`, function (data) { 1669 const { product } = data; 1670 $cartModal.find(".modal-load-area").html(data.html).addClass("loaded"); 1671 const $face = $(".face"); 1672 const $cartcount = $("#cartcount"); 1673 if (data.quantity > 0) { 1674 // NOTE: For analytics since `preventDefault` prevents other `click` event listeners from being triggered 1675 try { 1676 fbq("track", "AddToCart", { 1677 "currency": "USD", 1678 "value": data.total.subtotal, 1679 "contents": [{ id: product.sku, name: product.name, quantity: data.quantity }] 1680 }); 1681 1682 const formatter = new Intl.NumberFormat('en-US', { 1683 currency: "USD", 1684 style: "currency", 1685 }); 1686 1687 window.dataLayer = window.dataLayer || []; 1688 window.dataLayer.push({ ecommerce: null }); 1689 window.dataLayer.push({ 1690 event: "add_to_cart", 1691 ecommerce: { 1692 "currency": "USD", 1693 "value": data.total.subtotal, 1694 "items": [{ 1695 item_id: product.sku, 1696 item_name: product.name, 1697 item_brand: product.producer, 1698 item_category: product.country, 1699 item_category2: product.region, 1700 item_category3: product.producer, 1701 item_variant: product.blends, 1702 price: formatter.format(product.price), 1703 quantity: data.quantity, 1704 }], 1705 }, 1706 }); 1707 } catch(e) {} 1708 1709 $cartcount.html(` <span class='badge badge-pill badge-primary'>${data.quantity}</span>`); 1710 $(".cart-link").removeClass("hide-cart"); 1711 $face.addClass("happy"); 1712 1713 // Check if klaviyo instance is available 1714 // in global window object 1715 if (!!window._learnq) { 1716 klaviyoAddCart(data); 1717 } 1718 } 1719 else { 1720 $cartcount.html(""); 1721 $face.removeClass("happy"); 1722 } 1723 $face.addClass("show"); 1724 }); 1725 event.preventDefault(); 1726 return false; 1727} 1728 1729function addClub() { 1730 const data = $(this).data(); 1731 console.log(data); 1732 klaviyoAddClub(data); 1733} 1734 1735// Add a Thousand Separator to a numeric string 1736function addCommas(x) { 1737 return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 1738} 1739 1740function addOnCart(event) { 1741 const $this = $(this); 1742 1743 // Everything after /add/ 1744 let $parts = $this.attr("href").split("/add/"); 1745 1746 // Break up by forward slash (/) 1747 $parts = $parts[1].split("/"); 1748 1749 // First Argument is SKU 1750 const $sku = $parts[0]; 1751 const $quant = $this.closest("form").find("select").val() || 1; 1752 1753 //const modalSize = 'small-modal'; 1754 //$('.site-mask').fadeIn(); 1755 //$('.site-modal').attr('class', 'site-modal '+modalSize); 1756 //$('body').addClass('modal-open').addClass('modal-on-page'); 1757 //$('.site-modal').removeAttr('aria-hidden').attr('tab-index','1'); 1758 const $cartModal = $("#cartModal"); 1759 $cartModal.modal();
1760 $cartModal.find(".modal-load-area").html("").removeClass("loaded"); 1761 $.getJSON(`/purchase/add_modal/${$sku}/${$quant}.json`, function (data) { 1762 $cartModal.find(".modal-load-area").html(data.html).addClass("loaded"); 1763 const $face = $(".face"); 1764 const $cartcount = $("#cartcount"); 1765 if (data.quantity > 0) { 1766 $cartcount.html(` <span class='badge badge-pill badge-primary'>${data.quantity}</span>`); 1767 $(".cart-link").removeClass("hide-cart"); 1768 $face.addClass("happy"); 1769 1770 // Check if klaviyo instance is available 1771 // in global window object 1772 if (!!window._learnq) { 1773 klaviyoAddCart(data); 1774 } 1775 } 1776 else { 1777 $cartcount.html(""); 1778 $face.removeClass("happy"); 1779 } 1780 $face.addClass("show"); 1781 }); 1782 event.preventDefault(); 1783 return false; 1784} 1785 1786function checkWishRequests(id, quant) { 1787 const max = parseInt($(`#qty-${id} option:last-child`).val()); 1788 quant = parseInt(quant); 1789 const $wishwrapper = $(`.wishwrapper-${id}`); 1790 const $wishqty = $(`#wishqty-${id}`); 1791 if (quant === max) { 1792 $wishwrapper.show(); 1793 } 1794 else if (quant < max) { 1795 $wishwrapper.hide(); 1796 $wishqty.val($wishqty.find("option:first").val()); 1797 updateWishQuantity(id, 0); 1798 } 1799} 1800 1801function formatProductName(product) { 1802 return `${product.name} ${product.subtitle}`; 1803} 1804 1805function internationalShippingSelect() { 1806 if ($(this).val() === "Int") { 1807 $("#state_select_field").html( 1808 `<input type="text" size="10" name="data[state]" value="" placeholder="International..." />` 1809 ); 1810 } 1811} 1812 1813function klaviyoAddCart(payload) { 1814 const { url, cart, total, product, quantity } = payload; 1815 if ( 1816 !Array.isArray(cart) 1817 || typeof url !== "string" 1818 || typeof total !== "object" 1819 || typeof product !== "object" 1820 ) { 1821 return; 1822 } 1823 1824 const { subtotal } = total; 1825 1826 const cats = []; 1827 if (typeof product.categories === "object") { 1828 Object.keys(product.categories).forEach((k) => { 1829 const c = product.categories[k]; 1830 cats.push(c.name); 1831 }); 1832 } 1833 1834 const prodURL = `${url}/product/detail/${product.sku}/`; 1835 const coURL = `${url}/cart/`; 1836 window._learnq.push([ 1837 "track", 1838 "Added to Cart", 1839 { 1840 $value: subtotal, 1841 AddedItemProductName: formatProductName(product), 1842 AddedItemProductID: product.id, 1843 AddedItemSKU: product.sku, 1844 AddedItemCategories: cats, 1845 AddedItemImageURL: product.image, 1846 AddedItemURL: prodURL, 1847 AddedItemPrice: product.price, 1848 AddedItemQuantity: quantity, 1849 ItemNames: cart.map((p) => formatProductName(p)), 1850 CheckoutURL: coURL, 1851 Items: cart.map((p) => ({ 1852 ProductID: p.id, 1853 SKU: p.sku, 1854 ProductName: formatProductName(p), 1855 Quantity: quantity, 1856 ItemPrice: p.price, 1857 RowTotal: p.price * quantity, 1858 ProductURL: prodURL, 1859 ImageURL: p.image || "", 1860 ProductCategories: ( 1861 typeof p.categories === "object" 1862 && Object.keys(p.categories).map((k) => { 1863 return p.categories[k].name; 1864 }) 1865 ) || [], 1866 })), 1867 }, 1868 ]); 1869} 1870 1871function klaviyoAddClub(data) { 1872 const { id = "", sku = "", url = "", name = "", image = "" } = data; 1873 window._learnq.push([ 1874 "track", 1875 "Added to Cart (Club)", 1876 { 1877 $value: 1.0, 1878 AddedItemProductName: name, 1879 AddedItemProductID: id, 1880 AddedItemSKU: id, 1881 AddedItemCategories: ["Club"], 1882 AddedItemImageURL: url, 1883 AddedItemURL: url, 1884 AddedItemPrice: 1.0, 1885 AddedItemQuantity: 1, 1886 ItemNames: [name], 1887 CheckoutURL: url, 1888 Items: [ 1889 { 1890 ProductID: id, 1891 SKU: id, 1892 ProductName: name, 1893 Quantity: 1, 1894 ItemPrice: 1.0, 1895 RowTotal: 1.0, 1896 ProductURL: `${url}${sku}`, 1897 ImageURL: image, 1898 ProductCategories: ["Club"], 1899 }, 1900 ], 1901 }, 1902 ]); 1903} 1904 1905// Launch modal from Link 1906function launchModal($event) { 1907 const $href = $(this).attr("href").split("#"); 1908 const $url = $href[0]; 1909 const $id = $href[1]; 1910 1911 $event.preventDefault(); 1912 1913 const $idTarget = $("#" + $id); 1914 if ($url.length > 0) { 1915 $.get($url, function ($data) { 1916 $idTarget.html($data); 1917 $idTarget.modal({ backdrop: "static" }); 1918 }); 1919 } 1920 else { 1921 $idTarget.modal({ backdrop: "static" }); 1922 } 1923} 1924 1925// Launch modal from Select 1926function launchModalSelect($event) { 1927 const href = $(this).val().split("#"); 1928 const url = href[0]; 1929 const id = href[1]; 1930 const $id = $("#" + id); 1931 1932 $event.preventDefault(); 1933 1934 if (url.length === 0) { 1935 $id.modal({ backdrop: "static" }); 1936 } 1937 else if (id === undefined || id.length === 0) { 1938 window.location = url; 1939 } 1940 else { 1941 $.get(url, function ($data) { 1942 $id.html($data); 1943 $id.modal({ backdrop: "static" }); 1944 }); 1945 } 1946} 1947 1948// If no radio option is selected, select the first one 1949function selectFirstRadioOption(name) { 1950 const $radio = $(`input[type=radio][name='${name}']`); 1951 if ($radio.length > 0) { 1952 if (!$radio.filter(":checked").length) { 1953 $radio[0].checked = true; 1954 } 1955 } 1956} 1957 1958// Toggle Insurance 1959function toggleInsurance() { 1960 const insurance = $("#shipping_insurance").is(":checked") ? 1 : 0; 1961 1962 $.getJSON( 1963 `/${page}/update_insurance/${insurance}/`, 1964 function (data) { 1965 const { 1966 shipping, 1967 shipping_insurance, 1968 tax, 1969 total, 1970 } = data; 1971 1972 updateDisplay( 1973 ".js-shipping_display, #shipping_display, #shipping_display_alt", 1974 parseFloat(shipping).toFixed(2) 1975 ); 1976 1977 updateDisplay( 1978 ".js-shipping_insurance_display, #shipping_insurance_display", 1979 shipping_insurance.toFixed(2), 1980 true 1981 ); 1982 1983 updateDisplay(".js-tax_display, #tax_display", parseFloat(tax).toFixed(2)); 1984 1985 updateDisplay( 1986 ".js-total_display, #total_display, #total_display_alt, #total_display_top", 1987 parseFloat(total).toFixed(2) 1988 ); 1989 } 1990 ); 1991} 1992 1993function updateComments() { 1994 const instructions = $("#js-instructions").val() || ""; 1995 const giftMessage = $("#js-gift_message").val() || ""; 1996 1997 $.getJSON( 1998 `/${page}/update_comments/`, 1999 { 2000 instructions: instructions,
2001 gift_message: giftMessage, 2002 }, 2003 function (data) {} 2004 ); 2005} 2006 2007/** 2008 * Makes an ajax call to cart/get_items and updates #Price_(sku) & #Vol_(sku) for each item in the cart. 2009 * 2010 * Called by updateQuantity if $product['enable_product_volume_discounts'] == 'TRUE' on cart/index, 2011 * and therefore it added an input#enable_product_volume_discounts with value = 'TRUE' to the page. 2012 */ 2013function updateDiscountPrice() { 2014 $.getJSON("/cart/get_items", function (data) { 2015 $.each(data, function (i, item) { 2016 const { price, has_volume_discount, sku } = item; 2017 2018 $(`#Price_${sku}`).html(price); 2019 2020 const $theVolID = $(`#Vol_${sku}`); 2021 if (Number(has_volume_discount) === 1) { 2022 $theVolID.fadeIn(); 2023 } else { 2024 $theVolID.fadeOut(); 2025 } 2026 }); 2027 }); 2028} 2029 2030/** 2031 * Update Display 2032 * 2033 * @param selector string id's & classes to update with the provided value 2034 * @param value string numeric string of the value in question 2035 * @param hideRowIfZero bool if true, hide the (monetary) field row if zero, otherwise show it 2036 */ 2037function updateDisplay(selector, value, hideRowIfZero = false) { 2038 const $displayField = $(selector); 2039 2040 if ($displayField.length) { 2041 if (value > 0) { 2042 value = addCommas(value); 2043 $displayField.html(value); 2044 if (hideRowIfZero) { 2045 $displayField.closest("tr").show(); 2046 } 2047 } 2048 else { 2049 $displayField.html(value === "0.00" ? "0.00" : "0"); 2050 if (hideRowIfZero) { 2051 $displayField.closest("tr").hide(); 2052 } 2053 } 2054 } 2055} 2056 2057// Updates quantity in cart 2058function updateQuantity(id, value) { 2059 if (value <= 0) { 2060 value = "0"; 2061 } 2062 2063 $.getJSON( 2064 `/${page}/update_quantity/${id}/${value}/`, 2065 function (data) { 2066 const { 2067 quantity, 2068 subtotal, 2069 shipping, 2070 discount, 2071 tax, 2072 total, 2073 crv, 2074 ca_redemption_value, 2075 co_retail_delivery_fee, 2076 me_bottle_deposit, 2077 credits, 2078 adjusted_subtotal, 2079 shipping_insurance, 2080 tip, 2081 allocation_remaining, 2082 expires, 2083 } = data; 2084 2085 updateDisplay(".js-item_count_display, #item_count_display", quantity); 2086 2087 updateDisplay( 2088 ".js-subtotal_display, #subtotal_display, #subtotal_display_2", 2089 subtotal.toFixed(2) 2090 ); 2091 2092 updateDisplay( 2093 ".js-shipping_display, #shipping_display, #shipping_display_alt", 2094 shipping.toFixed(2) 2095 ); 2096 2097 // CA redemption value (CRV) 2098 const crvAmount = ca_redemption_value || crv; 2099 updateDisplay( 2100 ".js-ca_redemption_value_display, #ca_redemption_value_display, #crv_display", 2101 crvAmount.toFixed(2), 2102 true 2103 ); 2104 2105 updateDisplay( 2106 ".js-co_retail_delivery_fee_display, #co_retail_delivery_fee_display", 2107 co_retail_delivery_fee.toFixed(2), 2108 true 2109 ); 2110 2111 updateDisplay( 2112 ".js-me_bottle_deposit_display, #me_bottle_deposit_display", 2113 me_bottle_deposit.toFixed(2), 2114 true 2115 ); 2116 2117 updateDisplay(".js-discount_display, #discount_display", discount.toFixed(2)); 2118 2119 updateDisplay(".js-credits_display, #credits_display", credits.toFixed(2), true); 2120 2121 // Adjusted subtotal - only show if different from subtotal 2122 const $adjustedSubtotalDisplay = $(".js-adjusted_subtotal_display, #adjusted_subtotal_display"); 2123 if (adjusted_subtotal !== undefined && adjusted_subtotal !== subtotal) { 2124 updateDisplay($adjustedSubtotalDisplay, adjusted_subtotal.toFixed(2)); 2125 $adjustedSubtotalDisplay.closest("tr").show(); 2126 } 2127 else { 2128 $adjustedSubtotalDisplay.closest("tr").hide(); 2129 } 2130 2131 updateDisplay(".js-tax_display, #tax_display", tax.toFixed(2)); 2132 2133 updateDisplay( 2134 ".js-shipping_insurance_display, #shipping_insurance_display", 2135 shipping_insurance.toFixed(2), 2136 true 2137 ); 2138 2139 updateDisplay(".js-tip_display, #tip_display", tip.toFixed(2), true); 2140 2141 updateDisplay( 2142 ".js-total_display, #total_display, #total_display_alt, #total_display_top", 2143 total.toFixed(2) 2144 ); 2145 2146 const $addYourFullAllocation = $(".add-your-full-allocation"); 2147 if ($addYourFullAllocation.length) { 2148 console.log(allocation_remaining); 2149 if (allocation_remaining === true) { 2150 console.log("you have more to add"); 2151 $addYourFullAllocation.show(); 2152 } 2153 else { 2154 console.log("you have NO more to add"); 2155 $addYourFullAllocation.hide(); 2156 } 2157 } 2158 2159 const $cartcount = $("#cartcount"); 2160 const $cartcountnav = $("#cartcountnav"); 2161 const $cartLink = $(".cart-link"); 2162 if (quantity > 0) { 2163 $cartcount.html(`<span class='badge badge-pill badge-primary'>${quantity}</span>`); 2164 $cartcountnav.html(`<span class='badge badge-pill badge-primary'>${quantity}</span>`); 2165 $cartLink.removeClass("hide-cart"); 2166 } 2167 else { 2168 $cartcount.html(""); 2169 $cartcountnav.html(""); 2170 $cartLink.addClass("hide-cart"); 2171 } 2172 2173 if (expires > 0) { 2174 const totalSecs = expires; 2175 const secondz = totalSecs * 1000; 2176 console.log(totalSecs); 2177 if (secondz > 0) { 2178 window.setTimeout(function () { 2179 location.href = "/offering/expired/"; 2180 }, secondz); 2181 } 2182 } 2183 2184 const $shippingOfferMin = $("#shipping-offer-min"); 2185 if ($shippingOfferMin.length) { 2186 //TODO: this function doesn't appear to exist!!! 2187 swapAddBottleText(parseInt($shippingOfferMin.val()), parseInt(quantity)); 2188 } 2189 2190 const $cartShippingMessage = $(".cart-shipping-message"); 2191 const $moreBottles = $(".more-bottles"); 2192 const $qualified = $(".qualified"); 2193 if (quantity < 6) { 2194 $cartShippingMessage.removeClass("blank"); 2195 $moreBottles.removeClass("no-more"); 2196 $("#moar").html(6 - quantity); 2197 $qualified.removeClass("success"); 2198 2199 //plural must be in relation to #moar above, so 6 - 5 = 1... 2200 if (parseInt(quantity) === 5) { 2201 $("#plural").hide(); 2202 } 2203 else { 2204 $("#plural").show(); 2205 } 2206 } 2207 else { 2208 $cartShippingMessage.removeClass("blank"); 2209 $moreBottles.addClass("no-more"); 2210 $qualified.addClass("success"); 2211 } 2212 2213 $("#secure-checkout-update-cart").hide(); 2214 } 2215 ).done(function () { 2216 const isDiscounted = $("#enable_product_volume_discounts").val(); 2217 if (isDiscounted === "TRUE") { 2218 updateDiscountPrice(); 2219 } 2220 }); 2221} 2222 2223function updateRequestedShipDate() { 2224 $.getJSON(`/${page}/select-requested-ship-date/${$(this).val()}/`, function (data) {}); 2225} 2226 2227// Update Shipping Method -- event handler is currently commented out 2228// function updateShipping() { 2229// const fields = [ 2230// "first_name", 2231// "last_name", 2232// "company", 2233// "address", 2234// "address_2", 2235// "city", 2236// "state", 2237// "zip",
2238// "phone", 2239// ]; 2240// const ship_method = $("input:radio.shipping_method:checked"); 2241// 2242// // Not Pickup 2243// if (!ship_method.hasClass("pickup")) { 2244// $.each(fields, function (key, value) { 2245// const $value = $(`#${value}`); 2246// $value.val(""); 2247// $value.removeAttr("disabled"); 2248// }); 2249// $("#address-form-container").removeClass("hidden"); 2250// $("#shipping-method-description").addClass("hidden"); 2251// $("#shipping-address-form").attr("action", "/cart/add-address.html"); 2252// $.getJSON(`/${page}/update_shipping_method/${ship_method.val()}.json`, function (data) {}); 2253// return; 2254// } 2255// 2256// // Pickup Address 2257// $.getJSON(`/${page}/update_shipping_method/${ship_method.val()}.json`, function (data) { 2258// data = data.shipment.address; 2259// $.each(fields, function (key, value) { 2260// const $value = $(`#${value}`); 2261// $value.attr("disabled", "disabled"); 2262// $value.val(data[value]); 2263// }); 2264// const $shippingMethodDescription = $("#shipping-method-description"); 2265// const description = $(`#shipping-method-message-${ship_method.val()}`).html(); 2266// if (description) { 2267// $shippingMethodDescription.html(description); 2268// $shippingMethodDescription.removeClass("hidden"); 2269// } 2270// else { 2271// $shippingMethodDescription.addClass("hidden"); 2272// } 2273// $("#address-form-container").addClass("hidden"); 2274// $("#shipping-address-form").attr("action", "/cart/checkout.html"); 2275// }); 2276// } 2277 2278// Updates quantity in wishlist 2279function updateWishQuantity(id, value) { 2280 if (value < 0) { 2281 value = 0; 2282 } 2283 $.getJSON(`/offering/update_wishlist/${id}/${value}/`, function (data) {}); 2284} 2285 2286 2287/***/ }), 2288
2289/***/ "../FigureBaseResources/js/jquery.stuck.js": 2290/*!*************************************************!*\ 2291 !*** ../FigureBaseResources/js/jquery.stuck.js ***! 2292 \*************************************************/ 2293/***/ (function() { 2294 2295// Generated by CoffeeScript 1.7.1 2296(function() { 2297 (function($) { 2298 return $.fn.stuck = function(opts) { 2299 var Stuck; 2300 Stuck = (function() { 2301 Stuck.prototype.elements = []; 2302 2303 Stuck.prototype.resizing = false; 2304 2305 function Stuck(w, opts) { 2306 this.window = w; 2307 this.body = $("body"); 2308 this.loadElements(); 2309 this.calculateTopOffset(); 2310 if (this.isIOS()) { 2311 this.body.on({ 2312 touchmove: (function(_this) { 2313 return function() { 2314 return _this.update(); 2315 }; 2316 })(this) 2317 }); 2318 } 2319 this.window.scroll(((function(_this) { 2320 return function() { 2321 return _this.update(); 2322 }; 2323 })(this))); 2324 this.window.resize(((function(_this) { 2325 return function() { 2326 return _this.resize(); 2327 }; 2328 })(this))); 2329 this.update(); 2330 this; 2331 } 2332 2333 Stuck.prototype.isIOS = function() { 2334 return this._isIOS || (this._isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent)); 2335 }; 2336 2337 Stuck.prototype.resize = function() { 2338 this.resizing = true; 2339 this.calculateTopOffset(); 2340 this.update(); 2341 }; 2342 2343 Stuck.prototype.loadElements = function() { 2344 var classes, container, divs, i, name, node, release, spacer, top, x, y; 2345 divs = $(".stuck"); 2346 i = divs.length; 2347 y = 0; 2348 while (i--) { 2349 node = divs.eq(y); 2350 y++; 2351 release = false; 2352 container = ''; 2353 classes = node.attr("class").split(/\s+/); 2354 spacer = $("<div/>"); 2355 x = classes.length; 2356 while (x--) { 2357 name = classes[x]; 2358 if (name === "release") { 2359 release = true; 2360 container = node.closest(".release-container"); 2361 } 2362 if (!(name === "stuck" || name === "release")) { 2363 spacer.addClass(name); 2364 } 2365 } 2366 spacer.height(node.outerHeight()).hide().css("background-color", "transparent").insertBefore(node); 2367 top = node.offset().top - parseInt(node.css('margin-top')); 2368 this.elements.push({ 2369 node: node, 2370 spacer: spacer, 2371 top: top, 2372 top_offset: 0, 2373 fixed: false, 2374 release: release, 2375 container: container, 2376 contained: false 2377 }); 2378 } 2379 }; 2380 2381 Stuck.prototype.calculateTopOffset = function() { 2382 var collide_flag, collide_y, collision, el, elements, i, matrix, max_height, row_element, value, x, y, z; 2383 matrix = []; 2384 i = this.elements.length; 2385 x = 0; 2386 while (i--) { 2387 el = this.elements[x]; 2388 x++; 2389 y = matrix.length; 2390 if (y === 0) { 2391 if (!el.release) { 2392 matrix.push([el]); 2393 } 2394 } else { 2395 collide_flag = false; 2396 while (y-- && !collide_flag) { 2397 max_height = 0; 2398 elements = matrix[y]; 2399 z = elements.length; 2400 while (z--) { 2401 row_element = elements[z]; 2402 collision = this.collide(row_element.node, el.node); 2403 if (collision) { 2404 value = row_element.top_offset + row_element.node.outerHeight(true); 2405 if (value > max_height) { 2406 max_height = value; 2407 } 2408 collide_flag = true; 2409 if (matrix[y + 1] != null) { 2410 collide_y = y + 1; 2411 } else { 2412 collide_y = -1; 2413 } 2414 } else { 2415 if (y === 0) { 2416 collide_y = 0; 2417 } 2418 } 2419 } 2420 } 2421 if (collide_flag) { 2422 el.top_offset = max_height; 2423 if (!el.release) { 2424 if (collide_y >= 0) { 2425 matrix[collide_y].push(el); 2426 } else { 2427 matrix.push([el]); 2428 } 2429 } 2430 } else { 2431 el.top_offset = 0; 2432 if (!el.release) { 2433 matrix[0].push(el); 2434 } 2435 } 2436 } 2437 } 2438 }; 2439 2440 Stuck.prototype.collide = function(node1, node2) { 2441 var n1l, n2l; 2442 n1l = node1.offset().left; 2443 n2l = node2.offset().left; 2444 if (n1l === n2l) { 2445 return true; 2446 } else if (n1l < n2l) { 2447 if (Math.floor(n1l) + node1.width() > Math.ceil(n2l)) { 2448 return true; 2449 } else { 2450 return false;
2451 } 2452 } else { 2453 if (Math.floor(n2l) + node2.width() > Math.ceil(n1l)) { 2454 return true; 2455 } else { 2456 return false; 2457 } 2458 } 2459 }; 2460 2461 Stuck.prototype.update = function() { 2462 var el, i, window_top; 2463 window_top = this.window.scrollTop(); 2464 i = this.elements.length; 2465 while (i--) { 2466 el = this.elements[i]; 2467 if (this.resizing) { 2468 if (el.fixed) { 2469 el.top = el.spacer.offset().top - parseInt(el.spacer.css('margin-top')); 2470 } else { 2471 el.top = el.node.offset().top - parseInt(el.node.css('margin-top')); 2472 } 2473 if (el.fixed) { 2474 el.node.css({ 2475 top: el.top_offset, 2476 left: el.spacer.offset().left, 2477 width: el.spacer.outerWidth() 2478 }); 2479 } 2480 if (el.contained && window_top > (el.container.offset().top + el.container.height() - el.node.height() - el.top_offset)) { 2481 el.node.css({ 2482 position: "absolute", 2483 top: el.container.height() - el.node.height(), 2484 left: '', 2485 width: '', 2486 "z-index": '' 2487 }); 2488 } 2489 } 2490 if (el.fixed && el.release && !el.contained && window_top > (el.container.offset().top + el.container.height() - el.node.height() - el.top_offset)) { 2491 el.contained = true; 2492 el.container.css("position", "relative"); 2493 el.node.css({ 2494 position: "absolute", 2495 top: el.container.height() - el.node.height(), 2496 left: '', 2497 width: '', 2498 "z-index": '' 2499 }); 2500 } 2501 if (el.contained && window_top < (el.container.offset().top + el.container.height() - el.node.height() - el.top_offset)) { 2502 el.contained = false; 2503 el.container.css("position", ''); 2504 el.node.css({ 2505 position: "fixed", 2506 top: el.top_offset, 2507 left: el.spacer.offset().left, 2508 width: el.spacer.outerWidth(), 2509 "z-index": 99 2510 }); 2511 } 2512 if (!el.fixed && window_top > el.top - el.top_offset) { 2513 el.fixed = true; 2514 el.spacer.show(); 2515 el.node.css({ 2516 position: "fixed", 2517 top: el.top_offset, 2518 left: el.spacer.offset().left, 2519 width: el.spacer.outerWidth(), 2520 "z-index": 99 2521 }); 2522 } 2523 if (el.fixed && window_top < el.top - el.top_offset) { 2524 el.fixed = false; 2525 el.spacer.hide(); 2526 el.node.css({ 2527 position: "relative", 2528 top: '', 2529 left: '', 2530 width: '', 2531 "z-index": '' 2532 }); 2533 } 2534 } 2535 this.resizing = false; 2536 }; 2537 2538 Stuck.prototype.destroy = function() { 2539 var i; 2540 i = this.elements.length; 2541 while (i--) { 2542 this.elements[i].spacer.remove(); 2543 } 2544 this.window.unbind('scroll'); 2545 this.window.unbind('resize'); 2546 this.window = this.elements = null; 2547 }; 2548 2549 return Stuck; 2550 2551 })(); 2552 return new Stuck(this, opts); 2553 }; 2554 })(jQuery); 2555 2556}).call(this); 2557 2558 2559/***/ }), 2560
2561/***/ "../FigureBaseResources/js/offset.config.js": 2562/*!**************************************************!*\ 2563 !*** ../FigureBaseResources/js/offset.config.js ***! 2564 \**************************************************/ 2565/***/ (function() { 2566 2567/** 2568 * This config should be required before: 2569 * require("offset-cantina") or require("offset-analytics") 2570 */ 2571window.OFFSET = window.OFFSET || {}; 2572window.OFFSET['offsetLocalCantina'] = { 2573 // Only config works with local cantina atm 2574 "config": "/cantina/config", 2575}; 2576 2577 2578/***/ }), 2579
2580/***/ "../FigureBaseResources/js/site.js": 2581/*!*****************************************!*\ 2582 !*** ../FigureBaseResources/js/site.js ***! 2583 \*****************************************/ 2584/***/ (function() { 2585 2586const FIGURE = {}; 2587 2588FIGURE.init = (function() { 2589 const $body = $("body"); 2590 //Mobile Detection 2591 const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); 2592 if (isMobile) { 2593 $body.addClass("mobile-device"); 2594 } 2595 //Headroom 2596 $body.headroom({ offset: 100 }); 2597 2598 //Footer measurer 2599 // const scaleFooter = function() { 2600 // const theFooterHeight = $(".site-footer").outerHeight(); 2601 // const $bottomBorder = $(".bottom-border"); 2602 // let bottomBorderHeight; 2603 // if ($bottomBorder.length) { 2604 // bottomBorderHeight = $bottomBorder.height(); 2605 // } 2606 // else { 2607 // bottomBorderHeight = 20; 2608 // } 2609 // $body.css("padding-bottom", theFooterHeight + bottomBorderHeight); 2610 // //$(".site-footer").addClass("loaded"); 2611 // $(".site-modal").css("margin-bottom", "0"); 2612 // }; 2613 // $(window).resize(function() { 2614 // scaleFooter(); 2615 // }); 2616 // $(window).on('load', function () { 2617 // scaleFooter(); 2618 // }); 2619 2620 $(".system-messages").slideDown(); 2621 //Tooltips 2622 $('[data-toggle="tooltip"]').tooltip(); 2623 $('[data-toggle="popover"]') 2624 .popover() 2625 .addClass("pointer"); 2626 $(document).find("#figureMessageModal").on("shown.bs.modal", function (e) { 2627 console.log("2", e); 2628 }); 2629 2630 return true; 2631})(); 2632 2633FIGURE.loginReminder = (function() { 2634 const cookieValueSuper = $.cookie("loginReminder"); 2635 if (cookieValueSuper === "reminded") { 2636 // already reminded 2637 } 2638 else { 2639 setTimeout(function() { 2640 $(".login-reminder").fadeIn(); 2641 }, 3000); 2642 setTimeout(function() { 2643 $(".login-reminder").addClass("loaded"); 2644 }, 3500); 2645 setTimeout(function() { 2646 $(".login-reminder").fadeOut(); 2647 }, 11000); 2648 $.cookie("loginReminder", "reminded", { expires: 1, path: "/" }); 2649 } 2650 2651 return true; 2652})(); 2653 2654FIGURE.adaCollapse = (function() { 2655 $(".btn[data-toggle=\"collapse\"]").keyup(function() { 2656 const toExpand = $(this).attr("href"); 2657 $(toExpand).addClass("show"); 2658 }); 2659 2660 return true; 2661})(); 2662 2663FIGURE.modaler = (function() { 2664 $(document).on("show.bs.modal", ".ajaxmodal", function(e) { 2665 const $button = $(e.relatedTarget);
2666 const modalContent = $button.attr("href"); 2667 const target = $button.attr("data-target"); 2668 $(`${target} .modal-load-area`).load(`${modalContent}?pagetype=modal`, function() { 2669 if ($(this).find(".needs-validation").length) { 2670 FIGURE.validateForm(`${target} .modal-load-area`); 2671 } 2672 }); 2673 }); 2674 2675 $(document).on("shown.bs.modal", ".ajaxmodal", function(e) { 2676 const theRedirect = $(e.relatedTarget).attr("data-redirect"); 2677 if (theRedirect !== "") { 2678 $("#redirectField").val(theRedirect); 2679 } 2680 }); 2681 2682 $(document).on("hide.bs.modal", ".ajaxmodal", function() { 2683 $(".modal-load-area").html(""); 2684 }); 2685 2686 return true; 2687})(); 2688 2689FIGURE.openModal = (function() { 2690 $(document).on("click", ".modal-trigger", function() { 2691 const $this = $(this); 2692 const theContent = $this.attr("href"); 2693 const modalSize = $this.attr("data-modal-size"); 2694 const $siteModal = $(".site-modal"); 2695 const $siteModalContent = $(".site-modal-content"); 2696 2697 $siteModal.attr("class", `site-modal ${modalSize}`); 2698 $siteModal.focus(); 2699 $siteModal 2700 .removeAttr("aria-hidden") 2701 .removeAttr("tabindex"); 2702 if ($this.hasClass("inline-modal")) { 2703 const inlineContent = $(theContent).html(); 2704 $siteModalContent.html(""); 2705 $siteModalContent.html(inlineContent); 2706 setTimeout(function() { 2707 $siteModal.scrollTop(0); 2708 }, 20); 2709 } 2710 else { 2711 $siteModalContent.load(`${theContent}?pagetype=modal`); 2712 } 2713 $("body") 2714 .addClass("modal-open") 2715 .addClass("modal-on-page"); 2716 $(".site-mask").fadeIn(); 2717 2718 return false; 2719 }); 2720 2721 $(document).on( 2722 "click", 2723 ".modal-close, .modal-close-generic, .page-mask, .modal-mask", 2724 function() { 2725 const $siteModal = $(".site-modal"); 2726 const $siteModalContent = $(".site-modal-content"); 2727 2728 $("body").removeClass("modal-open"); 2729 $(".site-mask").fadeOut(); 2730 $siteModal 2731 .attr("aria-hidden", "true") 2732 .attr("tabindex", "-1"); 2733 setTimeout(function() { 2734 $("body").removeClass("modal-on-page"); 2735 $siteModal.attr("class", "site-modal"); 2736 $siteModalContent.html(""); 2737 }, 500); 2738 2739 return false; 2740 } 2741 ); 2742 2743 return true; 2744})(); 2745 2746FIGURE.noDoubleClick = (function() { 2747 $(".btn-no-double").click(function() { 2748 setTimeout(function() { 2749 $(".btn-no-double") 2750 .attr("disabled", "disabled") 2751 .val("processing") 2752 .text("processing"); 2753 }, 100); 2754 }); 2755 2756 return true; 2757})(); 2758 2759FIGURE.openNav = (function() { 2760 const $body = $("body"); 2761 const $navMask = $(".nav-mask"); 2762 const $siteNav = $(".site-nav"); 2763 const $openNav = $(".open-nav"); 2764 const mainContentSelector = "#maincontent a, #maincontent button, .site-footer a, .site-footer button, .site-logo, .account-links a, .skip-link"; 2765 2766 $(document).on("click", ".open-nav", function() { 2767 if (!$(this).hasClass("disabled")) { 2768 if ($body.hasClass("nav-open")) { 2769 $body.removeClass("nav-open"); 2770 $navMask.fadeOut(); 2771 setTimeout(function() { 2772 $body.removeClass("nav-on-page"); 2773 }, 500); 2774 $siteNav 2775 .attr("aria-hidden", "true") 2776 .attr("tabindex", "-1"); 2777 $(mainContentSelector) 2778 .removeAttr("aria-hidden") 2779 .removeAttr("tabindex"); 2780 $openNav.attr("aria-expanded", "false"); 2781 } 2782 else { 2783 $body.addClass("nav-on-page"); 2784 setTimeout(function() { 2785 $body.addClass("nav-open"); 2786 }, 50); 2787 $navMask.fadeIn(); 2788 $siteNav 2789 .removeAttr("aria-hidden") 2790 .removeAttr("tabindex"); 2791 $(mainContentSelector) 2792 .attr("aria-hidden", "true") 2793 .attr("tabindex", "-1"); 2794 $openNav.attr("aria-expanded", "true"); 2795 } 2796 2797 return false; 2798 } 2799 }); 2800 2801 $(document).on("click", ".nav-mask", function() { 2802 $body.removeClass("nav-open"); 2803 $navMask.fadeOut(); 2804 setTimeout(function() { 2805 $body.removeClass("nav-on-page"); 2806 }, 500); 2807 $siteNav 2808 .attr("aria-hidden", "true") 2809 .attr("tabindex", "-1"); 2810 $(mainContentSelector) 2811 .removeAttr("aria-hidden") 2812 .removeAttr("tabindex"); 2813 $openNav.attr("aria-expanded", "false"); 2814 }); 2815 2816 return true; 2817})(); 2818 2819FIGURE.singlepageBehavior = (function() { 2820 $(document).on("click", ".single-page .site-nav a", function() { 2821 const $body = $("body"); 2822 $body.removeClass("nav-open"); 2823 $(".nav-mask").fadeOut(); 2824 setTimeout(function() { 2825 $body.removeClass("nav-on-page"); 2826 }, 500); 2827 if ( 2828 location.pathname.replace(/^\//, "") === this.pathname.replace(/^\//, "") 2829 && location.hostname === this.hostname 2830 ) { 2831 let target = $(this.hash); 2832 target = target.length ? target : $(`[name=${this.hash.slice(1)}]`); 2833 if (target.length) { 2834 $("html,body").animate( 2835 { 2836 scrollTop: target.offset().top //-200 2837 }, 2838 1000 2839 ); 2840 } 2841 } 2842 }); 2843 2844 return true; 2845})(); 2846 2847FIGURE.openNavID = (function() { 2848 const $body = $("body"); 2849 2850 $(document).on("click", "#opennav", function() { 2851 if (!$(this).hasClass("disabled")) { 2852 if ($body.hasClass("nav-open")) { 2853 $body.removeClass("nav-open"); 2854 setTimeout(function() { 2855 $body.removeClass("nav-on-page"); 2856 }, 500); 2857 } 2858 else { 2859 $body 2860 .addClass("nav-open") 2861 .addClass("nav-on-page"); 2862 } 2863 return false;
2864 } 2865 }); 2866 $(document).on("click", ".nav-open #opennav", function() { 2867 $body.removeClass("nav-open"); 2868 setTimeout(function() { 2869 $body.removeClass("nav-on-page"); 2870 }, 500); 2871 }); 2872 2873 return true; 2874})(); 2875 2876FIGURE.closeEverything = (function() { 2877 $(document).keyup(function(e) { 2878 if (e.keyCode === 27) { 2879 const $body = $("body"); 2880 const $siteModal = $(".site-modal"); 2881 const $siteModalContent = $(".site-modal-content"); 2882 const $siteNav = $(".site-nav"); 2883 const mainContentSelector = "#maincontent a, #maincontent button, .site-footer a, .site-footer button, .site-logo, .account-links a, .skip-link"; 2884 2885 $body.removeClass("nav-open"); 2886 $(".site-mask").fadeOut(); 2887 $(".nevermiss-modal").fadeOut(); 2888 $(".nav-mask").fadeOut(); 2889 $siteNav 2890 .attr("aria-hidden", "true") 2891 .attr("tabindex", "-1"); 2892 $siteModal 2893 .attr("aria-hidden", "true") 2894 .attr("tabindex", "-1"); 2895 $(mainContentSelector) 2896 .removeAttr("aria-hidden") 2897 .removeAttr("tabindex"); 2898 $(".open-nav").attr("aria-expanded", "false"); 2899 setTimeout(function() { 2900 $body.removeClass("nav-on-page"); 2901 }, 500); 2902 $body.removeClass("modal-open"); 2903 setTimeout(function() { 2904 $body.removeClass("modal-on-page"); 2905 $siteModal.attr("class", "site-modal"); 2906 $siteModalContent.html(""); 2907 }, 500); 2908 } 2909 }); 2910 2911 return true; 2912})(); 2913 2914FIGURE.banners = (function() { 2915 $(document).on("click", ".show-top-promo", function() { 2916 $("body").toggleClass("promo-open"); 2917 return false; 2918 }); 2919 2920 return true; 2921})(); 2922 2923FIGURE.textSwap = (function() { 2924 $(document).on("click", ".btn-swap-text", function() { 2925 const $this = $(this); 2926 const newText = $this.attr("data-new-text"); 2927 const originalText = $this.attr("data-original-text"); 2928 if ($this.hasClass("activated")) { 2929 $this.text(originalText); 2930 $this 2931 .removeClass("activated") 2932 .addClass("killscroll"); 2933 } 2934 else { 2935 $this.text(newText); 2936 $this 2937 .addClass("activated") 2938 .removeClass("killscroll"); 2939 } 2940 }); 2941 2942 return true; 2943})(); 2944 2945FIGURE.validateForm = (function() { 2946 "use strict"; 2947 2948 function validateForm(selector) { 2949 const root = selector 2950 ? document.querySelector(selector) 2951 : document; 2952 2953 if (!root) { 2954 return; 2955 } 2956 2957 // Fetch all the forms we want to apply custom Bootstrap validation styles to 2958 const forms = root.getElementsByClassName("needs-validation"); 2959 // Loop over them and prevent submission 2960 Array.prototype.filter.call(forms, function(form) { 2961 if (form.dataset.validationEventAdded === "true") { 2962 return; 2963 } 2964 2965 form.dataset.validationEventAdded = "true"; 2966 form.addEventListener( 2967 "submit", 2968 function(event) { 2969 event.preventDefault(); 2970 event.stopPropagation(); 2971 if (form.checkValidity() === false) { 2972 $(".needs-validation").addClass("not-yet-sparky"); 2973 } 2974 else { 2975 $(".needs-validation").removeClass("not-yet-sparky"); 2976 form.submit(); 2977 } 2978 2979 form.classList.add("was-validated"); 2980 }, 2981 false 2982 ); 2983 }); 2984 } 2985 2986 window.addEventListener( 2987 "load", 2988 function() { 2989 validateForm(); 2990 }, 2991 false 2992 ); 2993 2994 return validateForm; 2995})(); 2996 2997// .trim-text for text inputs 2998/** 2999* Adding by Zachary Stovall on 04-10-2024 3000* This is to remove any white space from the beginning and end of the input field 3001* Designed for Quilceda Creek home page but can be used anywhere by adding the trim-text tag 3002* 3003* */ 3004FIGURE.trimText = (function() { 3005 $(document).on("blur", ".trim-text", function() { 3006 const $this = $(this); 3007 const trimText = $this.val().trim(); 3008 $this.val(trimText); 3009 }); 3010 3011 return true; 3012})(); 3013 3014FIGURE.validateEmail = (function() { 3015 $(document).on("blur", ".validate-email", function() { 3016 const $this = $(this); 3017 const sEmail = $this.val(); 3018 const $formGroup = $this.parents(".form-group"); 3019 const $form = $this.parents("form"); 3020 3021 if (validateEmail(sEmail)) { 3022 $formGroup.removeClass("form-error"); 3023 $form 3024 .find("button[type=submit]") 3025 .removeAttr("disabled"); 3026 if (!$("#validEmail").length) { 3027 $formGroup.append( 3028 '<div class="positive-feedback" id="validEmail">Email is valid</div>' 3029 ); 3030 } 3031 } 3032 else { 3033 $formGroup.addClass("form-error"); 3034 $form 3035 .find("button[type=submit]") 3036 .attr("disabled", "disabled"); 3037 $formGroup 3038 .find("#validEmail") 3039 .remove(); 3040 } 3041 }); 3042 function validateEmail(sEmail) { 3043 const filter = /^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; 3044 return filter.test(sEmail); 3045 } 3046 3047 return true; 3048})(); 3049 3050/*FIGURE.euroCookie = (function() { 3051 const defaultButtonTxt = $("#cookie_accept").text(); 3052 $("#cookie_enable").change(function() { 3053 if (this.checked) { 3054 $("#cookie_accept") 3055 .addClass("die-cookie") 3056 .removeClass("disabled") 3057 .removeClass("btn-outline-primary") 3058 .addClass("btn-primary") 3059 .text("Accept & Close"); 3060 } 3061 else { 3062 $("#cookie_accept") 3063 .removeClass("die-cookie") 3064 .addClass("disabled") 3065 .addClass("btn-outline-primary") 3066 .removeClass("btn-primary") 3067 .text(defaultButtonTxt); 3068 } 3069 }); 3070 3071 $(document).on("click", ".die-cookie", function() {
3072 $.cookie("euroWarning", "nomnomnom", { expires: 1825, path: "/" }); 3073 $("#euroCookie").fadeOut(); 3074 $('body').removeClass('no-cookie'); 3075 return false; 3076 }); 3077 const cookieValue = $.cookie("euroWarning"); 3078 if (cookieValue === "nomnomnom") { 3079 return; 3080 } 3081 else { 3082 $("#euroCookie").fadeIn(); 3083 $('body').addClass('no-cookie'); 3084 } 3085})();*/ 3086 3087FIGURE.stuck = (function() { 3088 $(window).stuck(); 3089 $(document).ready(function() { 3090 //stuck 3091 $(window).stuck(); 3092 $(window).scroll(function() { 3093 $(".super-stuck").each(function() { 3094 const $this = $(this); 3095 if ($this.css("position") === "fixed") { 3096 $this.addClass("show-more"); 3097 } 3098 else { 3099 $this.removeClass("show-more"); 3100 } 3101 }); 3102 }); 3103 }); 3104 3105 return true; 3106})(); 3107 3108FIGURE.cartCount = (function() { 3109 // cart count 3110 const doCartCount = function() { 3111 $.getJSON("/cart/item-count.json", function(data) { 3112 console.log(data); 3113 const $cartLink = $(".cart-link"); 3114 const $face = $(".face"); 3115 3116 if (data > 0) { 3117 $("#cartcount").html( 3118 ` <span class="badge badge-pill badge-primary">${data}</span>` 3119 ); 3120 $("#cartcountnav").html( 3121 ` <span class="badge badge-pill badge-primary">${data}</span>` 3122 ); 3123 $cartLink.removeClass("hide-cart"); 3124 $face.addClass("happy"); 3125 $(".cart-link.check-cart").attr("href", "/cart/"); 3126 } 3127 else { 3128 $("#cartcount").html(""); 3129 $("#cartcountnav").html(""); 3130 $cartLink.addClass("hide-cart"); 3131 $face.removeClass("happy"); 3132 } 3133 $face.addClass("show"); 3134 }); 3135 }; 3136 if ($(".cart-link").hasClass("check-cart")) { 3137 doCartCount(); 3138 } 3139 3140 return true; 3141})(); 3142 3143FIGURE.refer = (function() { 3144 $(".refer-radio").change(function() { 3145 const $this = $(this); 3146 const textInput = $this.attr("data-the-text"); 3147 if ($this.is(":checked")) { 3148 $(".referrer-text") 3149 .removeClass("current") 3150 .addClass("d-none") 3151 .val("") 3152 .attr("disabled", "disabled"); 3153 $(textInput) 3154 .addClass("current") 3155 .removeClass("d-none") 3156 .focus() 3157 .removeAttr("disabled"); 3158 } 3159 }); 3160 3161 return true; 3162})(); 3163 3164FIGURE.scrollTo = (function() { 3165 $(document).on("click", ".scrollto", function() { 3166 const $this = $(this); 3167 if (!$this.hasClass("killscroll")) { 3168 let target = ''; 3169 let theScroll = ''; 3170 const scrollOffset = $this.attr("data-offset"); 3171 if ( 3172 location.hostname === this.hostname 3173 && this.pathname 3174 && location.pathname.replace(/^\//, "") === this.pathname.replace(/^\//, "") 3175 ) { 3176 target = $(this.hash); 3177 target = target.length 3178 ? target 3179 : $(`[name=${this.hash.slice(1)}]`); 3180 } 3181 else if ($($this.data().target).length) { 3182 target = $($this.data().target); 3183 } 3184 if (target) { 3185 const fadeIn = $(target).hasClass("tab-pane") || $(target).hasClass("fade"); 3186 const scrollDelay = !!$this.attr("data-delay") ? parseFloat($this.attr("data-delay")) : 200; 3187 setTimeout(() => { 3188 if (scrollOffset > 0) { 3189 theScroll = $(document).find(target[0]).offset().top - scrollOffset; 3190 } 3191 else { 3192 theScroll = $(document).find(target[0]).offset().top; 3193 } 3194 if (target.length) { 3195 $("html,body").animate({ 3196 scrollTop: theScroll 3197 }, 1000); 3198 } 3199 }, fadeIn ? scrollDelay : 0); 3200 } 3201 } 3202 return false; 3203 }); 3204 3205 return true; 3206})(); 3207 3208FIGURE.scrollToTrade = (function() { 3209 $(document).on("click", ".scrolltotrade", function() { 3210 if ( 3211 location.pathname.replace(/^\//, "") === this.pathname.replace(/^\//, "") 3212 && location.hostname === this.hostname 3213 ) { 3214 let target = $(this.hash); 3215 const scrollOffset = $(this).attr("data-offset"); 3216 target = target.length 3217 ? target 3218 : $(`[name=${this.hash.slice(1)}]`); 3219 let theScroll; 3220 if (scrollOffset > 0) { 3221 theScroll = target.offset().top - scrollOffset; 3222 } 3223 else { 3224 theScroll = target.offset().top; 3225 } 3226 if (target.length) { 3227 $("html,body").animate( 3228 { 3229 scrollTop: theScroll 3230 }, 3231 1000 3232 ); 3233 } 3234 } 3235 }); 3236 $(window).scroll(function() { 3237 $(".trade-section").each(function() { 3238 const $this = $(this); 3239 if ($this.is(":in-viewport(500)")) { 3240 const theNav = $this.attr("data-nav"); 3241 $(".trade-nav a").removeClass("active"); 3242 $(theNav).addClass("active"); 3243 } 3244 }); 3245 }); 3246 3247 return true; 3248})(); 3249 3250FIGURE.formMonkey = (function() { 3251 // Object of Countries that don't have Postal Code 3252 const noPostalCode = { 3253 AO: true, AG: true, AW: true, AC: true, BS: true, BZ: true, BJ: true, 3254 BO: true, BQ: true, BW: true, BF: true, BI: true, CM: true, CF: true, 3255 KM: true, CG: true, CD: true, CK: true, CI: true, CW: true, DJ: true, 3256 DM: true, TL: true, GQ: true, ER: true, FJ: true, TF: true, GA: true, 3257 GM: true, GH: true, GD: true, GY: true, HM: true, HK: true, KI: true, 3258 LY: true, MO: true, MW: true, ML: true, MR: true, NR: true, AN: true, 3259 NU: true, KP: true, QA: true, RW: true, KN: true, ST: true, SC: true, 3260 SL: true, SB: true, SR: true, SY: true, TG: true, TK: true, TO: true, 3261 TV: true, UG: true, AE: true, VU: true, YE: true, ZW: true 3262 }; 3263 3264 // Template function for Address Form 3265 function handleCountrySelect(countryCode) { 3266 const $stateText = $(".state-text");
3267 const $stateSelect = $(".state-select"); 3268 const $zipCol = $(".zip-col"); 3269 const $zip = $("#zip"); 3270 3271 //Removes state dropdown if not MURCA! 3272 if (countryCode === "US") { 3273 $(".murca").show(); 3274 $(".not-murca").hide(); 3275 $stateText 3276 .hide() 3277 .removeAttr("required") 3278 .attr("id", "nothing") 3279 .attr("name", "nothing"); 3280 $stateSelect 3281 .show() 3282 .attr("required", "true") 3283 .attr("id", "state") 3284 .attr("name", "data[state]"); 3285 } 3286 else { 3287 $(".murca").hide(); 3288 $(".not-murca").show(); 3289 $stateSelect 3290 .hide() 3291 .removeAttr("required") 3292 .attr("id", "nothing") 3293 .attr("name", "nothing"); 3294 $stateText 3295 .show() 3296 .attr("required", "true") 3297 .attr("id", "state") 3298 .attr("name", "data[state]"); 3299 } 3300 //Removes zip code field from countries without a postal code 3301 if (noPostalCode[countryCode]) { 3302 $zipCol.hide(); 3303 $zip.removeAttr("required"); 3304 } 3305 else { 3306 $zipCol.show(); 3307 $zip.attr("required", "true"); 3308 } 3309 } 3310 3311 // Checks for any input that contains id of country 3312 $(document).on("change", '[id*="country"]', function() { 3313 const thisVal = $(this).val(); 3314 3315 try { 3316 handleCountrySelect(thisVal); 3317 // Reset input fields 3318 $('[id*="company"]').val(""); 3319 $('[id*="address"]').val(""); 3320 $('[id*="city"]').val(""); 3321 $('[id*="state"]').val(""); 3322 $('[id*="zip"]').val(""); 3323 } catch (e) {} 3324 }); 3325 3326 // On New Address 3327 $("a[href=\"#newaddress\"]").on("click", function() { 3328 const countryVal = $("#newaddress") 3329 .find("[id^=\"country\"]") 3330 .val(); 3331 handleCountrySelect(countryVal); 3332 }); 3333 3334 $(document).ready(function() { 3335 // On page load, if a country field exists, and a non-US country is selected, hide the state dropdown 3336 const countryVal = $('[id*="country"]').val(); 3337 if (countryVal && countryVal !== "US") { 3338 handleCountrySelect(countryVal); 3339 } 3340 3341 // On Modal open check for default values 3342 $('[id*="figureModal"]').on("shown.bs.modal", function(e) { 3343 $(document).ajaxComplete(function() { 3344 try { 3345 const countryVal = $(`#${e.target.id}`) 3346 .find('[id^="country"]') 3347 .val(); 3348 if (!countryVal) return; 3349 handleCountrySelect(countryVal); 3350 } catch (e) {} 3351 }); 3352 }); 3353 }); 3354 3355 return true; 3356})(); 3357 3358FIGURE.modularForm = (function() { 3359 $(".modular-form-fields .interest-radio").change(function() { 3360 const $requireMe = $(".require-me"); 3361 const $extendedForm = $(".modular-form-fields .extended-form"); 3362 const $defaultForm = $(".modular-form-fields .default-form"); 3363 3364 if ($(".modular-form-fields .interest-radio.show-everything").is(":checked")) { 3365 $(".swap-text .alt-text").hide(); 3366 $(".swap-text .default-text").show(); 3367 $requireMe.removeAttr("required"); 3368 $extendedForm 3369 .hide() 3370 .show(); 3371 $defaultForm 3372 .hide() 3373 .show(); 3374 $requireMe.attr("required", "required"); 3375 } 3376 if ($(".modular-form-fields .interest-radio.show-default").is(":checked")) { 3377 $(".swap-text .default-text").hide(); 3378 $(".swap-text .alt-text").show(); 3379 $requireMe.removeAttr("required"); 3380 $extendedForm.hide(); 3381 $defaultForm 3382 .hide() 3383 .show(); 3384 $(".default-form .require-me").attr("required", "required"); 3385 $(".first-name-copy").val(""); 3386 $(".last-name-copy").val(""); 3387 $(".email-copy").val(""); 3388 $("#copyinfo").prop("checked", false); 3389 } 3390 }); 3391 $("#copyinfo").change(function() { 3392 if ($(this).is(":checked")) { 3393 const firstname = $(".first-name-base").val(); 3394 $(".first-name-copy").val(firstname); 3395 const lastname = $(".last-name-base").val(); 3396 $(".last-name-copy").val(lastname); 3397 const email = $(".email-base").val(); 3398 $(".email-copy").val(email); 3399 } 3400 else { 3401 $(".first-name-copy").val(""); 3402 $(".last-name-copy").val(""); 3403 $(".email-copy").val(""); 3404 } 3405 }); 3406 3407 return true; 3408})(); 3409 3410FIGURE.refer = (function() { 3411 if (window.location.hash) { 3412 const hash = window.location.hash.substr(1); 3413 $("#referral_note").val(hash); 3414 } 3415 3416 return true; 3417})(); 3418 3419FIGURE.owlHack = (function() { 3420 setTimeout(function() { 3421 $(".owl-dot").each(function() { 3422 const $this = $(this); 3423 $this.attr("aria-label", "advance to next pane"); 3424 }); 3425 }, 3000); 3426 3427 return true; 3428})(); 3429 3430FIGURE.styleGuideColor = function() { 3431 $(".style-color").each((i, el) => { 3432 const color = $(el).css("background-color"); 3433 const hexer = { 3434 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 3435 10: "A", 11: "B", 12: "C", 13: "D", 14: "E", 15: "F" 3436 }; 3437 const colorArr1 = color.split("(")[1]; 3438 const colorArr2 = colorArr1.split(")")[0]; 3439 const colorArr = colorArr2.split(",").map(color => color.trim()); 3440 let hexColor = "#"; 3441 for (let i = 0; i < 3; i++) { 3442 const colorHex = parseFloat(colorArr[i]) / 16; 3443 const colorHex1 = Math.floor(colorHex); 3444 let colorHex2 = 0; 3445 if (colorHex !== colorHex1) { 3446 colorHex2 = parseFloat(`.${(colorHex + "").split(".")[1]}`) * 16; 3447 } 3448 hexColor += hexer[colorHex1]; 3449 hexColor += hexer[colorHex2]; 3450 } 3451 $(el).siblings(".style-color-hex").text(hexColor); 3452 }); 3453 3454 return true; 3455}(); 3456 3457FIGURE.specialMessageModal = function () { 3458 const $figureMessageModal = $("#figureMessageModal"); 3459 if ($figureMessageModal.length) { 3460 const specialMessageModal = $.cookie("specialmessage"); 3461 if (specialMessageModal === "read") { 3462 return; 3463 } 3464 else { 3465 setTimeout(function () { 3466 $figureMessageModal.modal(); 3467 }, 2000); 3468 } 3469 $(document).on("hide.bs.modal", "#figureMessageModal", function () { 3470 $.cookie("specialmessage", "read", { expires: 30, path: "/" }); 3471 }); 3472 $(document).on("click", "#figureMessageModal a", function () { 3473 $.cookie("specialmessage", "read", { expires: 30, path: "/" }); 3474 }); 3475 $(document).on("click", "#figureMessageModal button", function () { 3476 $.cookie("specialmessage", "read", { expires: 30, path: "/" }); 3477 }); 3478 } 3479 return true; 3480}; 3481 3482FIGURE.ageGateModal = function () { 3483 $(window).on("load", function () { 3484 const $offsetAgeGate = $("#offsetAgeGate"); 3485 if ($offsetAgeGate.length) { 3486 const currentYear = new Date().getFullYear(); 3487 const leapYears = []; 3488 for (let year = currentYear; year >= currentYear - 150; year--) { 3489 if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) { 3490 leapYears.push(year); 3491 } 3492 } 3493 const $verifyMonth = $("#verify-month"); 3494 const $verifyDay = $("#verify-day"); 3495 const $verifyYear = $("#verify-year"); 3496 const age = { 3497 month: $verifyMonth.val(), 3498 day: $verifyDay.val(), 3499 year: $verifyYear.val() 3500 }; 3501 3502 if ($.cookie("ageGateCookie") !== "oldEnough") { 3503 if ($(".page-pages-styleguide").length === 0) { 3504 $offsetAgeGate.modal("show"); 3505 } 3506 initAge(); 3507 } 3508 else { 3509 FIGURE.specialMessageModal(); 3510 } 3511 3512 // starts the age verification process 3513 function initAge() { 3514 $verifyMonth.on("change", function (e) {
3515 const month = $(e.target); 3516 if (["4", "6", "9", "11"].includes(month.val())) { 3517 $verifyDay.find("option[value=\"31\"]").remove(); 3518 } 3519 else if (month.val() === "2") { 3520 if (!leapYears.includes(parseFloat($verifyYear.val()))) { 3521 $verifyDay.find("option[value=\"29\"]").remove(); 3522 } 3523 $verifyDay.find("option[value=\"30\"]").remove(); 3524 $verifyDay.find("option[value=\"31\"]").remove(); 3525 } 3526 else { 3527 if (!$verifyDay.find("option[value=\"29\"]").length) { 3528 $verifyDay.append("<option value=\"29\">29</option>"); 3529 } 3530 if (!$verifyDay.find("option[value=\"30\"]").length) { 3531 $verifyDay.append("<option value=\"30\">30</option>"); 3532 } 3533 if (!$verifyDay.find("option[value=\"31\"]").length) { 3534 $verifyDay.append("<option value=\"31\">31</option>"); 3535 } 3536 } 3537 age.month = month.val(); 3538 }); 3539 $verifyYear.on("change", function (e) { 3540 const year = $(e.target); 3541 if ( 3542 leapYears.includes(parseFloat(year.val())) 3543 && $verifyMonth.val() === "2" 3544 ) { 3545 if (!$verifyDay.find("option[value=\"29\"]").length) { 3546 $verifyDay.append("<option value=\"29\">29</option>"); 3547 } 3548 } 3549 age.year = year.val(); 3550 }); 3551 $verifyDay.on("change", function (e) { 3552 age.day = $(e.target).val(); 3553 }); 3554 $("#js-age-submit").on("click", function () { 3555 age.month = $verifyMonth.val(); 3556 age.day = $verifyDay.val(); 3557 age.year = $verifyYear.val(); 3558 checkDate(); 3559 }); 3560 } 3561 3562 // Check to see if user entered a valid date... 3563 function checkDate() { 3564 if (age.month === "none" || age.day === "none" || age.year === "none") { 3565 // Fade in the error... 3566 $("#modal-error").css("visibility", "visible").hide().fadeIn("slow"); 3567 3568 // changes the background color of the select if invalid 3569 if (age.month === "none") { 3570 $verifyMonth.css("background", "rgba(223,32,44,0.5)"); 3571 // Look for change of value and change background color when valid 3572 $verifyMonth.on("change", function () { 3573 if ($verifyMonth.val() === "none") { 3574 $verifyMonth.css("background", "rgba(223,32,44,0.5)"); 3575 } 3576 else { 3577 $verifyMonth.css("background", "white"); 3578 } 3579 }); 3580 } 3581 3582 // changes the background color of the select if invalid 3583 if (age.day === "none") { 3584 $verifyDay.css("background", "rgba(223,32,44,0.5)"); 3585 // Look for change of value and change background color when valid 3586 $verifyDay.on("change", function () { 3587 if ($verifyDay.val() === "none") { 3588 $verifyDay.css("background", "rgba(223,32,44,0.5)"); 3589 } 3590 else { 3591 $verifyDay.css("background", "white"); 3592 } 3593 }); 3594 } 3595 3596 // changes the background color of the select if invalid 3597 if (age.year === "none") { 3598 $verifyYear.css("background", "rgba(223,32,44,0.5)"); 3599 // Look for change of value and change background color when valid 3600 $verifyYear.on("change", function () { 3601 if ($verifyYear.val() === "none") { 3602 $verifyYear.css("background", "rgba(223,32,44,0.5)"); 3603 } 3604 else { 3605 $verifyYear.css("background", "white"); 3606 } 3607 }); 3608 } 3609 } 3610 else { 3611 oldEnough(); 3612 } 3613 } 3614 3615 // Compares age entered with today's date 21 years ago... 3616 function oldEnough() { 3617 const birthDate = new Date(`${age.year}-${age.month}-${age.day}`); 3618 const currentDate = new Date(); 3619 const timeDiff = currentDate.getTime() - birthDate.getTime(); 3620 const timeByYearsDiff = timeDiff / (1000 * 60 * 60 * 24 * 365.25); 3621 if (parseFloat(timeByYearsDiff) >= 21) { 3622 $("#age-error-message").addClass("d-none"); 3623 $.cookie("ageGateCookie", "oldEnough", { expires: 365, path: "/" }); 3624 // saving age info for implementation in signup forms 3625 $.cookie("offsetBirthDay", parseInt(age.day), { expires: 14, path: "/" }); 3626 $.cookie("offsetBirthMonth", age.month, { expires: 14, path: "/" }); 3627 $.cookie("offsetBirthYear", age.year, { expires: 14, path: "/" }); 3628 $offsetAgeGate.modal("hide"); 3629 FIGURE.signUpAgeCookieFill(); 3630 FIGURE.specialMessageModal(); 3631 } 3632 else { 3633 $("#age-error-message").removeClass("d-none"); 3634 } 3635 } 3636 } 3637 else { 3638 FIGURE.specialMessageModal(); 3639 } 3640 }); 3641 3642 return true; 3643}(); 3644 3645FIGURE.signUpAgeCookieFill = function () { 3646 if ($("#signUp").length) { 3647 if ($.cookie("offsetBirthDay") && $.cookie("offsetBirthMonth") && $.cookie("offsetBirthYear")) {
3648 const month = $.cookie("offsetBirthMonth").toString(); 3649 const monthInput = $("select[id=\"data\\[birth_month\\]\"]"); 3650 const dayInput = $("select[id=\"data\\[birth_day\\]\"]"); 3651 const yearInput = $("select[id=\"data\\[birth_year\\]\"]"); 3652 monthInput.val(month); 3653 dayInput.val(parseInt($.cookie("offsetBirthDay"))); 3654 yearInput.val($.cookie("offsetBirthYear")); 3655 } 3656 } 3657}; 3658FIGURE.signUpAgeCookieFill(); 3659 3660FIGURE.SignUpPopulate = function() { 3661 if ($(".page-signup-dynamic").length || $(".page-signup-index").length) { 3662 const params = {}; 3663 const queryString = window.location.search.substring(1); // Get the part after "?" 3664 const paramPairs = queryString.split("&"); // Split into key-value pairs 3665 3666 paramPairs.forEach(pair => { 3667 const [key, value] = pair.split("="); 3668 if (key) params[decodeURIComponent(key)] = decodeURIComponent(value || ""); 3669 }); 3670 3671 // Loop through each parameter and populate the form field if it exists 3672 $.each(params, function (key, value) { 3673 let set = { [key]: value }; 3674 if (["name", "fullname", "full_name"].includes(key)) { 3675 // Split the name into first and last 3676 const firstLast = value.split(/ (.+)/); 3677 set = { 3678 first_name: firstLast[0], 3679 last_name: firstLast[1] || "" 3680 }; 3681 } 3682 else if (["email", "email_address", "emailaddress"].includes(key)) { 3683 set = { username: value }; 3684 } 3685 Object.keys(set).forEach(setKey => { 3686 const field = $(`[name="data[${setKey}]"]`); 3687 if (field.length) { 3688 field.val(set[setKey]); 3689 } 3690 }); 3691 }); 3692 } 3693 3694 return true; 3695}(); 3696 3697/** 3698* Controls for the mobile horizontal warning modal 3699*/ 3700FIGURE.mobileHorizontalWarningModal = function () { 3701 let warningModal = $(document).find("#mobileHorizontalWarning"); 3702 $(window).on("load resize", function () { 3703 warningModal = $(document).find("#mobileHorizontalWarning"); 3704 const isNarrowScreen = (window.innerWidth <= 767 && window.innerHeight <= 1200) 3705 || (window.innerHeight <= 767 && window.innerWidth <= 1200); 3706 const isLandscape = window.innerWidth > window.innerHeight; 3707 const isTouchDevice = "ontouchstart" in window || navigator.maxTouchPoints > 0; 3708 const isMobileUA = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 3709 if (warningModal.length) { 3710 if (isNarrowScreen && isLandscape && isTouchDevice && isMobileUA) { 3711 if ($.cookie("mobileHorizontalWarning") !== "read") { 3712 warningModal.modal("show"); 3713 $.cookie("mobileHorizontalWarning", "read", { expires: 1, path: "/" }); 3714 setTimeout(() => { 3715 warningModal.modal("hide"); 3716 }, 10000); 3717 } 3718 } 3719 else { 3720 warningModal.modal("hide"); 3721 } 3722 } 3723 }); 3724 3725 return true; 3726}(); 3727 3728/** 3729* This is a function to show a second input after an option is selected on a sign up page 3730*/ 3731FIGURE.referralSelect = function() { 3732 const $referralSourceSelect = $("#referralSourceSelect"); 3733 const $referralText = $("#referraltext"); 3734 if ($referralSourceSelect.length && $referralText.length) { 3735 $referralSourceSelect.change(function() { 3736 const theText = $(this).find(":selected").attr("data-message"); 3737 if (!theText) { 3738 $referralText.addClass("d-none").attr("placeholder", "").attr("disabled", "disabled"); 3739 } 3740 else { 3741 $referralText.removeClass("d-none").attr("placeholder", theText).removeAttr("disabled"); 3742 } 3743 }); 3744 } 3745 3746 return true; 3747}(); 3748 3749/** Giftcard **/ 3750 3751FIGURE.giftCardValue = function(amount) { 3752 const dollars = amount; 3753 $(".gift-card-value-input").val(dollars); 3754 $(".gift-card-value").text(dollars); 3755}; 3756 3757FIGURE.formatNumber = function(n) { 3758 // format number 1000000 to 1,234,567 3759 return n.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","); 3760}; 3761 3762FIGURE.formatCurrency = function(input) { 3763 let input_val = input.val(); 3764 if (input_val === "") { 3765 return; 3766 } 3767 // original length 3768 const original_len = input_val.length; 3769 // initial caret position 3770 let caret_pos = input.prop("selectionStart"); 3771 // check for decimal 3772 let cleanNum = input_val.replace(".", ""); 3773 cleanNum = cleanNum.replace(/[^0-9]/g, ""); 3774 cleanNum = cleanNum.replace(/^0+/, ""); 3775 input_val = FIGURE.formatNumber(cleanNum); 3776 // send updated string to input 3777 input.val(input_val); 3778 FIGURE.giftCardValue(input_val); 3779 // put caret back in the right position 3780 const updated_len = input_val.length; 3781 caret_pos = updated_len - original_len + caret_pos; 3782 input[0].setSelectionRange(caret_pos, caret_pos); 3783}; 3784 3785FIGURE.giftCards = function () { 3786 if ($(".page-giftcard-index").length) { 3787 const defaultVal = $(".gift-card-value-input").val(); 3788 const $giftCardValueOptions = $(".gift-card-value-options"); 3789 const option1 = $giftCardValueOptions.data("option-1"); 3790 const option2 = $giftCardValueOptions.data("option-2");
3791 const option3 = $giftCardValueOptions.data("option-3"); 3792 const options = [option1, option2, option3]; 3793 const stripNumbers = (num) => { 3794 return parseFloat(num.replace("$", "").replace(",", "")); 3795 }; 3796 const $giftCardValueBtnSelect = $(".gift-card-value-btn-select"); 3797 $giftCardValueBtnSelect.removeClass("active"); 3798 if (option1 && option2 && option3) { 3799 let isDefault = false; 3800 options.forEach((option) => { 3801 if (stripNumbers(defaultVal) === stripNumbers(option)) { 3802 $giftCardValueBtnSelect.each((_index, sel) => { 3803 const $giftCardValueBtnSelect = $(sel); 3804 if (stripNumbers($giftCardValueBtnSelect.val()) === stripNumbers(option)) { 3805 $giftCardValueBtnSelect.addClass("active"); 3806 $(".gift-card-value-btn-custom").removeClass("active"); 3807 isDefault = true; 3808 } 3809 }); 3810 } 3811 else { 3812 $giftCardValueBtnSelect.each((_index, sel) => { 3813 const $giftCardValueBtnSelect = $(sel); 3814 if (stripNumbers($giftCardValueBtnSelect.val()) === stripNumbers(option)) { 3815 $giftCardValueBtnSelect.removeClass("active"); 3816 } 3817 }); 3818 } 3819 }); 3820 if (!isDefault) { 3821 $giftCardValueBtnSelect.removeClass("active"); 3822 const $giftCardValueBtnCustom = $(".gift-card-value-btn-custom"); 3823 $giftCardValueBtnCustom.addClass("active"); 3824 $giftCardValueBtnCustom.text(defaultVal); 3825 } 3826 $(document).on("click", ".gift-card-value-btn-select", function () { 3827 $(".gift-card-value-custom-input").removeClass("active"); 3828 $(".gift-card-value-btn-custom").removeClass("active"); 3829 $giftCardValueBtnSelect.removeClass("active"); 3830 $(this).addClass("active"); 3831 const thisValue = $(this).val(); 3832 FIGURE.giftCardValue(thisValue); 3833 $("#collapseCustom").collapse("hide"); 3834 }); 3835 3836 $(document).on("click", ".gift-card-value-btn-custom", function () { 3837 $giftCardValueBtnSelect.removeClass("active"); 3838 const $giftCardValueBtnCustom = $(".gift-card-value-btn-custom"); 3839 $giftCardValueBtnCustom.addClass("active"); 3840 const $customAmount = $("#custom_amount"); 3841 const value = $customAmount.val(); 3842 const rawValue = parseFloat(value.replace("$", "").replace(",", "")); 3843 if (rawValue > 0) { 3844 FIGURE.giftCardValue(`$${value}`); 3845 } 3846 $customAmount.focus(); 3847 }); 3848 } 3849 $("input[data-type=\"currency\"]").on({ 3850 keydown: function (e) { 3851 if (e.key === "Enter") { 3852 e.preventDefault(); 3853 } 3854 }, 3855 keyup: function (e) { 3856 FIGURE.formatCurrency($(this)); 3857 if (e.key === "Enter") { 3858 $(this).trigger("blur"); 3859 } 3860 }, 3861 blur: function () { 3862 const $this = $(this); 3863 if ($this.hasClass("gift-card-value-custom-input")) { 3864 const val = parseFloat($this.val().replace("$", "").replace(",", "").replace(/^0+/, "")); 3865 FIGURE.formatCurrency($this); 3866 if (val === 0 || isNaN(val)) { 3867 const $giftCardValueBtnCustom = $(".gift-card-value-btn-custom"); 3868 $giftCardValueBtnCustom.removeClass("active"); 3869 $giftCardValueBtnCustom.text("Custom"); 3870 $($giftCardValueBtnSelect[0]).trigger("click"); 3871 } 3872 else if ($this.val()) { 3873 $giftCardValueBtnSelect.removeClass("active"); 3874 $(".gift-card-value-custom-input").addClass("active"); 3875 if (val > 2500) { 3876 $this.val("$2,500"); 3877 FIGURE.giftCardValue("$2,500"); 3878 } 3879 else if (val < 25) { 3880 $this.val("$25"); 3881 FIGURE.giftCardValue("$25"); 3882 } 3883 else { 3884 FIGURE.giftCardValue(`$${$this.val()}`); 3885 } 3886 const dollars = `$${$this.val()}`; 3887 const $giftCardValueBtnCustom = $(".gift-card-value-btn-custom"); 3888 $giftCardValueBtnCustom.text(dollars); 3889 $giftCardValueBtnCustom.addClass("active"); 3890 } 3891 $("#collapseCustom").collapse("hide"); 3892 } 3893 } 3894 }); 3895 const manualFormSubmit = async function() { 3896 const form = $("#giftCardSetUp"); 3897 const action = form.attr("action"); 3898 const formData = new FormData(form[0]); 3899 try { 3900 const res = await fetch(action, { 3901 method: "POST", 3902 body: formData, 3903 }); 3904 if (res.status === 200) { 3905 window.location.href = res.url; 3906 } 3907 else { 3908 console.error("Something went wrong"); 3909 } 3910 } catch (e) { 3911 console.error(e); 3912 } 3913 };
3914 $(document).on("submit", "#giftCardSetUp", function (e) { 3915 e.preventDefault(); 3916 }); 3917 $(document).on("click", "#submitGiftCard", function (e) { 3918 const value = parseFloat($(".gift-card-value-input").val().replace("$", "").replace(",", "")); 3919 if (value < 25 || value > 2500) { 3920 e.preventDefault(); 3921 $(".less-than-five").show(); 3922 } 3923 else { 3924 $(".less-than-five").hide(); 3925 if (!$("#giftCardSetUp").hasClass("not-yet-sparky")) { 3926 $(document).find("#submitGiftCard").html("<div class=\"spinner-border\" style=\"width: 1.5rem; height: 1.5rem;\" role=\"status\"><span class=\"sr-only\">Loading...</span></div>"); 3927 manualFormSubmit(); 3928 } 3929 } 3930 }); 3931 3932 $(window).on("load resize", function () { 3933 const customButtonHeight = $(".gift-card-value-btn-custom").outerHeight(); 3934 $(".gift-card-value-custom-input").css({ height: customButtonHeight }); 3935 }); 3936 3937 $("#giftCardBalanceModal").on("hide.bs.modal", function () { 3938 $("#giftCardCode").val(""); 3939 grecaptcha.reset(); 3940 $("#giftCardBalance").text(""); 3941 }); 3942 } 3943 3944 return true; 3945}(); 3946 3947FIGURE.giftCardsBalance = function () { 3948 const runBalanceCheck = async function(code) { 3949 try { 3950 const action = `/giftcard/balance/${code}/`; 3951 const res = await fetch(action); 3952 const data = await res.json(); 3953 if (data) { 3954 let amount = data.value; 3955 let cardActive = true; 3956 if ([null, false, 0].includes(amount)) { 3957 cardActive = false; 3958 } 3959 let balance = ""; 3960 if (cardActive) { 3961 const splitAmount = amount.split("."); 3962 const formattedAmount = `${FIGURE.formatNumber(splitAmount[0])}.${splitAmount[1]}`; 3963 balance = `$${formattedAmount}`; 3964 } 3965 if (!cardActive) { 3966 balance = "Card Number Not Valid"; 3967 } 3968 $(document).find("#giftCardBalance").html(balance); 3969 } 3970 } catch (error) { 3971 console.error(error); 3972 } 3973 }; 3974 3975 $(document).on("click", ".js-gift-card-check-balance", function() { 3976 const code = $(document).find("#giftCardCode").val(); 3977 if (code) { 3978 $("#giftCardBalanceTitle").removeClass("d-none"); 3979 $(document).find("#giftCardBalance").html("<div class=\"loading\"><div class=\"spinner-grow\" role=\"status\"><span class=\"sr-only\">Loading...</span></div></div>"); 3980 setTimeout(() => { 3981 $(document).find("#giftCardBalance .loading").append("<div class=\"spinner-grow\" role=\"status\"><span class=\"sr-only\">Loading...</span></div>"); 3982 }, 100); 3983 setTimeout(() => { 3984 $(document).find("#giftCardBalance .loading").append("<div class=\"spinner-grow\" role=\"status\"><span class=\"sr-only\">Loading...</span></div>"); 3985 }, 200); 3986 if (code === "123-test") { 3987 return; 3988 } 3989 runBalanceCheck(code); 3990 } 3991 }); 3992 3993 return true; 3994}(); 3995 3996FIGURE.applyCode = function() { 3997 $(document).on("click", "#jsApplyCodeAjax", function () { 3998 const $jsApplyCodeAjax = $(this); 3999 const theCode = $(".ajax-promo-code").val(); 4000 const urlBase = (!!$jsApplyCodeAjax.data("url-base") && $jsApplyCodeAjax.data("url-base").trim().length) 4001 ? $jsApplyCodeAjax.data("url-base").trim() 4002 : "cart"; 4003 4004 $.getJSON(`/${urlBase}/use-coupon-json/${theCode}/`, function(data) { 4005 if (data.success === true) { 4006 location.reload(); 4007 } 4008 else if (data.gift_card_balance <= 0) { 4009 $(".promo-code-not-found").addClass("d-none"); 4010 $(".promo-code-no-value").removeClass("d-none"); 4011 } 4012 else { 4013 $(".promo-code-no-value").addClass("d-none"); 4014 const $promoCodeNotFound = $(".promo-code-not-found"); 4015 $promoCodeNotFound.removeClass("d-none"); 4016 $promoCodeNotFound.find(".bad-promo-code").text(`${theCode} `); 4017 } 4018 }); 4019 return false; 4020 }); 4021 4022 return true; 4023}(); 4024 4025 4026/***/ }), 4027
4028/***/ "../FigureBaseResources/js/viewport.js": 4029/*!*********************************************!*\ 4030 !*** ../FigureBaseResources/js/viewport.js ***! 4031 \*********************************************/ 4032/***/ (function() { 4033 4034/** 4035 * @author Mudit Ameta 4036 * @license https://github.com/zeusdeux/isInViewport/blob/master/license.md MIT 4037 */ 4038(function($, window) { 4039 4040 // polyfilling trim for ie < 9. sigh ;-; 4041 if (!String.prototype.hasOwnProperty('trim')) { 4042 String.prototype.trim = function() { 4043 return this.replace(/^\s*(.*?)\s*$/, '$1'); 4044 }; 4045 } 4046 4047 4048 // lets you chain any arbitrary function or an array of functions and returns a jquery object 4049 var run = function(args) { 4050 if (arguments.length === 1 && typeof args === 'function') 4051 args = [args]; 4052 4053 if (!(args instanceof Array)) 4054 throw new SyntaxError('isInViewport: Argument(s) passed to .do/.run should be a function or an array of functions'); 4055 4056 for (var i = 0; i < args.length; i++) { 4057 if (typeof args[i] !== 'function') { 4058 console.warn('isInViewport: Argument(s) passed to .do/.run should be a function or an array of functions'); 4059 console.warn('isInViewport: Ignoring non-function values in array and moving on'); 4060 continue; 4061 } 4062 for (var j = 0; j < this.length; j++) 4063 args[i].call($(this[j])); 4064 } 4065 return this; 4066 }; 4067 4068 4069 // do is a reserved word and hence using it as a property throws on some browsers 4070 // it is now aliased as $.fn.run 4071 // deprecate $.fn.do (2.3.0) 4072 $.fn['do'] = function(args) { 4073 console.warn('isInViewport: .do is deprecated as it causes issues in IE and some browsers since it\'s a reserved word. Use $.fn.run instead i.e., $(el).run(fn).'); 4074 return run(args); 4075 }; 4076 $.fn.run = run; 4077 4078 4079 // gets the width of the scrollbar 4080 function getScrollbarWidth(viewport) { 4081 var scrollBarWidth; 4082 4083 // append a div that has 100% width to get true width of viewport 4084 var el = $('<div></div>').css({ 4085 'width': '100%' 4086 }); 4087 viewport.append(el); 4088 4089 // subtract true width from the viewport width which is inclusive 4090 // of scrollbar by default 4091 scrollBarWidth = viewport.width() - el.width(); 4092 4093 // remove our element from DOM 4094 el.remove(); 4095 return scrollBarWidth; 4096 } 4097 4098 4099 // Returns true if DOM element `element` is in viewport 4100 function isInViewport(element, options) { 4101 var boundingRect = element.getBoundingClientRect(); 4102 var top = boundingRect.top; 4103 var bottom = boundingRect.bottom; 4104 var left = boundingRect.left; 4105 var right = boundingRect.right; 4106 var settings = $.extend({ 4107 'tolerance': 0, 4108 'viewport': window 4109 }, options); 4110 var isVisibleFlag = false; 4111 var $viewport = settings.viewport.jquery ? settings.viewport : $(settings.viewport); 4112 4113 if (!$viewport.length) { 4114 console.warn('isInViewport: The viewport selector you have provided matches no element on page.'); 4115 console.warn('isInViewport: Defaulting to viewport as window'); 4116 $viewport = $(window); 4117 } 4118 4119 var $viewportHeight = $viewport.height(); 4120 var $viewportWidth = $viewport.width(); 4121 var typeofViewport = $viewport[0].toString(); 4122 4123 // if the viewport is other than window recalculate the top, 4124 // bottom,left and right wrt the new viewport 4125 // the [object DOMWindow] check is for window object type in PhantomJS 4126 if ($viewport[0] !== window && typeofViewport !== '[object Window]' && typeofViewport !== '[object DOMWindow]') { 4127 // Use getBoundingClientRect() instead of $.Offset() 4128 // since the original top/bottom positions are calculated relative to browser viewport and not document 4129 var viewportRect = $viewport[0].getBoundingClientRect(); 4130 4131 // recalculate these relative to viewport 4132 top = top - viewportRect.top; 4133 bottom = bottom - viewportRect.top; 4134 left = left - viewportRect.left; 4135 right = right - viewportRect.left; 4136 4137 // get the scrollbar width from cache or calculate it 4138 isInViewport.scrollBarWidth = isInViewport.scrollBarWidth || getScrollbarWidth($viewport); 4139 4140 // remove the width of the scrollbar from the viewport width 4141 $viewportWidth -= isInViewport.scrollBarWidth; 4142 } 4143 4144 // handle falsy, non-number and non-integer tolerance value 4145 // same as checking using isNaN and then setting to 0 4146 // bitwise operators deserve some love too you know 4147 settings.tolerance = ~~Math.round(parseFloat(settings.tolerance)); 4148 4149 if (settings.tolerance < 0)
4150 settings.tolerance = $viewportHeight + settings.tolerance; // viewport height - tol 4151 4152 // the element is NOT in viewport iff it is completely out of 4153 // viewport laterally or if it is completely out of the tolerance 4154 // region. Therefore, if it is partially in view then it is considered 4155 // to be in the viewport and hence true is returned. Because we have adjusted 4156 // the left/right positions relative to the viewport, we should check the 4157 // element's right against the viewport's 0 (left side), and the element's 4158 // left against the viewport's width to see if it is outside of the viewport. 4159 4160 if (right <= 0 || left >= $viewportWidth) 4161 return isVisibleFlag; 4162 4163 // if the element is bound to some tolerance 4164 isVisibleFlag = settings.tolerance ? !!(top <= settings.tolerance && bottom >= settings.tolerance) : !!(bottom > 0 && top <= $viewportHeight); 4165 4166 return isVisibleFlag; 4167 } 4168 4169 4170 // get the selector args from the args string proved by Sizzle 4171 var getSelectorArgs = function(argsString) { 4172 if (argsString) { 4173 var args = argsString.split(','); 4174 4175 // when user only gives viewport and no tolerance 4176 if (args.length === 1 && isNaN(args[0])) { 4177 args[1] = args[0]; 4178 args[0] = void 0; 4179 } 4180 4181 return { 4182 tolerance: args[0] ? args[0].trim() : void 0, 4183 viewport: args[1] ? $(args[1].trim()) : void 0 4184 }; 4185 } 4186 return {}; 4187 }; 4188 4189 4190 // expose isInViewport as a custom pseudo-selector 4191 $.extend($.expr[':'], { 4192 // if $.expr.createPseudo is available, use it 4193 'in-viewport': $.expr.createPseudo ? 4194 $.expr.createPseudo(function(argsString) { 4195 return function(currElement) { 4196 return isInViewport(currElement, getSelectorArgs(argsString)); 4197 }; 4198 }) : 4199 function(currObj, index, meta) { 4200 return isInViewport(currObj, getSelectorArgs(meta[3])); 4201 } 4202 }); 4203 4204 4205 // expose isInViewport as a function too 4206 // this lets folks pass around actual objects as options (like custom viewport) 4207 // and doesn't tie 'em down to strings. It also prevents isInViewport from 4208 // having to look up and wrap the dom element corresponding to the viewport selector 4209 $.fn.isInViewport = function(options) { 4210 return this.filter(function(i, el) { 4211 return isInViewport(el, options); 4212 }); 4213 }; 4214 4215})(jQuery, window); 4216 4217/***/ }), 4218
vendor: 137,986 bytes, lines 4219-8583
4219/***/ "../FigureBaseResources/node_modules/bootstrap/dist/js/bootstrap.js": 4220/*!**************************************************************************!*\ 4221 !*** ../FigureBaseResources/node_modules/bootstrap/dist/js/bootstrap.js ***! 4222 \**************************************************************************/ 4223/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 4224 4225/*! 4226 * Bootstrap v4.6.2 (https://getbootstrap.com/) 4227 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 4228 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4229 */ 4230(function (global, factory) { 4231 true ? factory(exports, __webpack_require__(/*! jquery */ "../FigureBaseResources/node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! popper.js */ "../FigureBaseResources/node_modules/popper.js/dist/esm/popper.js")) : 4232 0; 4233})(this, (function (exports, $, Popper) { 'use strict'; 4234 4235 function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } 4236 4237 var $__default = /*#__PURE__*/_interopDefaultLegacy($); 4238 var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper); 4239 4240 function _defineProperties(target, props) { 4241 for (var i = 0; i < props.length; i++) { 4242 var descriptor = props[i]; 4243 descriptor.enumerable = descriptor.enumerable || false; 4244 descriptor.configurable = true; 4245 if ("value" in descriptor) descriptor.writable = true; 4246 Object.defineProperty(target, descriptor.key, descriptor); 4247 } 4248 } 4249 4250 function _createClass(Constructor, protoProps, staticProps) { 4251 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 4252 if (staticProps) _defineProperties(Constructor, staticProps); 4253 Object.defineProperty(Constructor, "prototype", { 4254 writable: false 4255 }); 4256 return Constructor; 4257 } 4258 4259 function _extends() { 4260 _extends = Object.assign ? Object.assign.bind() : function (target) { 4261 for (var i = 1; i < arguments.length; i++) { 4262 var source = arguments[i]; 4263 4264 for (var key in source) { 4265 if (Object.prototype.hasOwnProperty.call(source, key)) { 4266 target[key] = source[key]; 4267 } 4268 } 4269 } 4270 4271 return target; 4272 }; 4273 return _extends.apply(this, arguments); 4274 } 4275 4276 function _inheritsLoose(subClass, superClass) { 4277 subClass.prototype = Object.create(superClass.prototype); 4278 subClass.prototype.constructor = subClass; 4279 4280 _setPrototypeOf(subClass, superClass); 4281 } 4282 4283 function _setPrototypeOf(o, p) { 4284 _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { 4285 o.__proto__ = p; 4286 return o; 4287 }; 4288 return _setPrototypeOf(o, p); 4289 } 4290 4291 /** 4292 * -------------------------------------------------------------------------- 4293 * Bootstrap (v4.6.2): util.js 4294 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4295 * -------------------------------------------------------------------------- 4296 */ 4297 /** 4298 * Private TransitionEnd Helpers 4299 */ 4300 4301 var TRANSITION_END = 'transitionend'; 4302 var MAX_UID = 1000000; 4303 var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 4304 4305 function toType(obj) { 4306 if (obj === null || typeof obj === 'undefined') { 4307 return "" + obj; 4308 } 4309 4310 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 4311 } 4312 4313 function getSpecialTransitionEndEvent() { 4314 return { 4315 bindType: TRANSITION_END, 4316 delegateType: TRANSITION_END, 4317 handle: function handle(event) { 4318 if ($__default["default"](event.target).is(this)) { 4319 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 4320 } 4321 4322 return undefined; 4323 } 4324 }; 4325 } 4326 4327 function transitionEndEmulator(duration) { 4328 var _this = this; 4329 4330 var called = false; 4331 $__default["default"](this).one(Util.TRANSITION_END, function () { 4332 called = true; 4333 }); 4334 setTimeout(function () { 4335 if (!called) { 4336 Util.triggerTransitionEnd(_this); 4337 } 4338 }, duration); 4339 return this; 4340 } 4341 4342 function setTransitionEndSupport() { 4343 $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator; 4344 $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 4345 } 4346 /** 4347 * Public Util API 4348 */ 4349 4350 4351 var Util = { 4352 TRANSITION_END: 'bsTransitionEnd', 4353 getUID: function getUID(prefix) { 4354 do { 4355 // eslint-disable-next-line no-bitwise 4356 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 4357 } while (document.getElementById(prefix)); 4358 4359 return prefix; 4360 }, 4361 getSelectorFromElement: function getSelectorFromElement(element) { 4362 var selector = element.getAttribute('data-target'); 4363 4364 if (!selector || selector === '#') { 4365 var hrefAttr = element.getAttribute('href'); 4366 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; 4367 } 4368 4369 try { 4370 return document.querySelector(selector) ? selector : null; 4371 } catch (_) { 4372 return null; 4373 } 4374 }, 4375 getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { 4376 if (!element) { 4377 return 0; 4378 } // Get transition-duration of the element 4379 4380 4381 var transitionDuration = $__default["default"](element).css('transition-duration'); 4382 var transitionDelay = $__default["default"](element).css('transition-delay'); 4383 var floatTransitionDuration = parseFloat(transitionDuration); 4384 var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 4385 4386 if (!floatTransitionDuration && !floatTransitionDelay) { 4387 return 0; 4388 } // If multiple durations are defined, take the first 4389 4390 4391 transitionDuration = transitionDuration.split(',')[0]; 4392 transitionDelay = transitionDelay.split(',')[0]; 4393 return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 4394 }, 4395 reflow: function reflow(element) { 4396 return element.offsetHeight; 4397 }, 4398 triggerTransitionEnd: function triggerTransitionEnd(element) { 4399 $__default["default"](element).trigger(TRANSITION_END); 4400 }, 4401 supportsTransitionEnd: function supportsTransitionEnd() { 4402 return Boolean(TRANSITION_END); 4403 }, 4404 isElement: function isElement(obj) { 4405 return (obj[0] || obj).nodeType; 4406 }, 4407 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 4408 for (var property in configTypes) { 4409 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 4410 var expectedTypes = configTypes[property]; 4411 var value = config[property]; 4412 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 4413 4414 if (!new RegExp(expectedTypes).test(valueType)) { 4415 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 4416 } 4417 } 4418 } 4419 }, 4420 findShadowRoot: function findShadowRoot(element) { 4421 if (!document.documentElement.attachShadow) { 4422 return null; 4423 } // Can find the shadow root otherwise it'll return the document 4424 4425 4426 if (typeof element.getRootNode === 'function') { 4427 var root = element.getRootNode(); 4428 return root instanceof ShadowRoot ? root : null; 4429 } 4430 4431 if (element instanceof ShadowRoot) { 4432 return element; 4433 } // when we don't find a shadow root 4434 4435 4436 if (!element.parentNode) { 4437 return null; 4438 } 4439 4440 return Util.findShadowRoot(element.parentNode); 4441 }, 4442 jQueryDetection: function jQueryDetection() { 4443 if (typeof $__default["default"] === 'undefined') { 4444 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 4445 } 4446 4447 var version = $__default["default"].fn.jquery.split(' ')[0].split('.'); 4448 var minMajor = 1; 4449 var ltMajor = 2; 4450 var minMinor = 9; 4451 var minPatch = 1; 4452 var maxMajor = 4; 4453 4454 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 4455 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 4456 } 4457 } 4458 }; 4459 Util.jQueryDetection(); 4460 setTransitionEndSupport(); 4461 4462 /** 4463 * Constants 4464 */ 4465 4466 var NAME$a = 'alert'; 4467 var VERSION$a = '4.6.2'; 4468 var DATA_KEY$a = 'bs.alert'; 4469 var EVENT_KEY$a = "." + DATA_KEY$a; 4470 var DATA_API_KEY$7 = '.data-api'; 4471 var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a]; 4472 var CLASS_NAME_ALERT = 'alert'; 4473 var CLASS_NAME_FADE$5 = 'fade'; 4474 var CLASS_NAME_SHOW$7 = 'show'; 4475 var EVENT_CLOSE = "close" + EVENT_KEY$a; 4476 var EVENT_CLOSED = "closed" + EVENT_KEY$a; 4477 var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7; 4478 var SELECTOR_DISMISS = '[data-dismiss="alert"]'; 4479 /** 4480 * Class definition 4481 */ 4482 4483 var Alert = /*#__PURE__*/function () { 4484 function Alert(element) { 4485 this._element = element; 4486 } // Getters 4487 4488 4489 var _proto = Alert.prototype; 4490 4491 // Public 4492 _proto.close = function close(element) { 4493 var rootElement = this._element; 4494 4495 if (element) { 4496 rootElement = this._getRootElement(element); 4497 } 4498 4499 var customEvent = this._triggerCloseEvent(rootElement); 4500 4501 if (customEvent.isDefaultPrevented()) { 4502 return; 4503 } 4504 4505 this._removeElement(rootElement); 4506 }; 4507 4508 _proto.dispose = function dispose() { 4509 $__default["default"].removeData(this._element, DATA_KEY$a); 4510 this._element = null; 4511 } // Private 4512 ; 4513 4514 _proto._getRootElement = function _getRootElement(element) { 4515 var selector = Util.getSelectorFromElement(element); 4516 var parent = false; 4517 4518 if (selector) { 4519 parent = document.querySelector(selector); 4520 } 4521 4522 if (!parent) { 4523 parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0]; 4524 } 4525 4526 return parent; 4527 }; 4528 4529 _proto._triggerCloseEvent = function _triggerCloseEvent(element) { 4530 var closeEvent = $__default["default"].Event(EVENT_CLOSE); 4531 $__default["default"](element).trigger(closeEvent); 4532 return closeEvent; 4533 }; 4534 4535 _proto._removeElement = function _removeElement(element) { 4536 var _this = this; 4537 4538 $__default["default"](element).removeClass(CLASS_NAME_SHOW$7); 4539 4540 if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) { 4541 this._destroyElement(element); 4542 4543 return; 4544 } 4545 4546 var transitionDuration = Util.getTransitionDurationFromElement(element); 4547 $__default["default"](element).one(Util.TRANSITION_END, function (event) { 4548 return _this._destroyElement(element, event); 4549 }).emulateTransitionEnd(transitionDuration); 4550 }; 4551 4552 _proto._destroyElement = function _destroyElement(element) { 4553 $__default["default"](element).detach().trigger(EVENT_CLOSED).remove(); 4554 } // Static 4555 ; 4556 4557 Alert._jQueryInterface = function _jQueryInterface(config) { 4558 return this.each(function () { 4559 var $element = $__default["default"](this); 4560 var data = $element.data(DATA_KEY$a); 4561 4562 if (!data) { 4563 data = new Alert(this); 4564 $element.data(DATA_KEY$a, data); 4565 } 4566 4567 if (config === 'close') { 4568 data[config](this); 4569 } 4570 }); 4571 }; 4572 4573 Alert._handleDismiss = function _handleDismiss(alertInstance) { 4574 return function (event) { 4575 if (event) { 4576 event.preventDefault(); 4577 } 4578 4579 alertInstance.close(this); 4580 }; 4581 }; 4582 4583 _createClass(Alert, null, [{ 4584 key: "VERSION", 4585 get: function get() { 4586 return VERSION$a; 4587 } 4588 }]); 4589 4590 return Alert; 4591 }(); 4592 /** 4593 * Data API implementation 4594 */ 4595 4596 4597 $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert())); 4598 /** 4599 * jQuery 4600 */ 4601 4602 $__default["default"].fn[NAME$a] = Alert._jQueryInterface; 4603 $__default["default"].fn[NAME$a].Constructor = Alert; 4604 4605 $__default["default"].fn[NAME$a].noConflict = function () { 4606 $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a; 4607 return Alert._jQueryInterface; 4608 }; 4609 4610 /** 4611 * Constants 4612 */ 4613 4614 var NAME$9 = 'button'; 4615 var VERSION$9 = '4.6.2'; 4616 var DATA_KEY$9 = 'bs.button'; 4617 var EVENT_KEY$9 = "." + DATA_KEY$9; 4618 var DATA_API_KEY$6 = '.data-api'; 4619 var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9]; 4620 var CLASS_NAME_ACTIVE$3 = 'active'; 4621 var CLASS_NAME_BUTTON = 'btn'; 4622 var CLASS_NAME_FOCUS = 'focus'; 4623 var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6; 4624 var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6); 4625 var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6; 4626 var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]'; 4627 var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]'; 4628 var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]'; 4629 var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn'; 4630 var SELECTOR_INPUT = 'input:not([type="hidden"])'; 4631 var SELECTOR_ACTIVE$2 = '.active'; 4632 var SELECTOR_BUTTON = '.btn'; 4633 /** 4634 * Class definition 4635 */ 4636 4637 var Button = /*#__PURE__*/function () { 4638 function Button(element) { 4639 this._element = element; 4640 this.shouldAvoidTriggerChange = false; 4641 } // Getters 4642 4643 4644 var _proto = Button.prototype; 4645 4646 // Public 4647 _proto.toggle = function toggle() { 4648 var triggerChangeEvent = true; 4649 var addAriaPressed = true; 4650 var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0]; 4651 4652 if (rootElement) { 4653 var input = this._element.querySelector(SELECTOR_INPUT); 4654 4655 if (input) { 4656 if (input.type === 'radio') { 4657 if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) { 4658 triggerChangeEvent = false; 4659 } else { 4660 var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2); 4661 4662 if (activeElement) { 4663 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3); 4664 } 4665 } 4666 } 4667 4668 if (triggerChangeEvent) { 4669 // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input 4670 if (input.type === 'checkbox' || input.type === 'radio') { 4671 input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3); 4672 } 4673 4674 if (!this.shouldAvoidTriggerChange) { 4675 $__default["default"](input).trigger('change'); 4676 } 4677 } 4678 4679 input.focus(); 4680 addAriaPressed = false; 4681 } 4682 } 4683 4684 if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { 4685 if (addAriaPressed) { 4686 this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3)); 4687 } 4688 4689 if (triggerChangeEvent) { 4690 $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3); 4691 } 4692 } 4693 }; 4694 4695 _proto.dispose = function dispose() { 4696 $__default["default"].removeData(this._element, DATA_KEY$9); 4697 this._element = null; 4698 } // Static 4699 ; 4700 4701 Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) { 4702 return this.each(function () { 4703 var $element = $__default["default"](this); 4704 var data = $element.data(DATA_KEY$9); 4705 4706 if (!data) { 4707 data = new Button(this); 4708 $element.data(DATA_KEY$9, data); 4709 } 4710 4711 data.shouldAvoidTriggerChange = avoidTriggerChange; 4712 4713 if (config === 'toggle') { 4714 data[config](); 4715 } 4716 }); 4717 }; 4718 4719 _createClass(Button, null, [{ 4720 key: "VERSION", 4721 get: function get() { 4722 return VERSION$9; 4723 } 4724 }]); 4725 4726 return Button; 4727 }(); 4728 /** 4729 * Data API implementation 4730 */ 4731 4732 4733 $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) { 4734 var button = event.target; 4735 var initialButton = button; 4736 4737 if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) { 4738 button = $__default["default"](button).closest(SELECTOR_BUTTON)[0]; 4739 } 4740 4741 if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) { 4742 event.preventDefault(); // work around Firefox bug #1540995 4743 } else { 4744 var inputBtn = button.querySelector(SELECTOR_INPUT); 4745 4746 if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) { 4747 event.preventDefault(); // work around Firefox bug #1540995 4748 4749 return; 4750 } 4751 4752 if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') { 4753 Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT'); 4754 } 4755 } 4756 }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) { 4757 var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0]; 4758 $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type)); 4759 }); 4760 $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () { 4761 // ensure correct active class is set to match the controls' actual values/states 4762 // find all checkboxes/readio buttons inside data-toggle groups 4763 var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS)); 4764 4765 for (var i = 0, len = buttons.length; i < len; i++) { 4766 var button = buttons[i]; 4767 var input = button.querySelector(SELECTOR_INPUT); 4768 4769 if (input.checked || input.hasAttribute('checked')) { 4770 button.classList.add(CLASS_NAME_ACTIVE$3); 4771 } else { 4772 button.classList.remove(CLASS_NAME_ACTIVE$3); 4773 } 4774 } // find all button toggles 4775 4776 4777 buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4)); 4778 4779 for (var _i = 0, _len = buttons.length; _i < _len; _i++) { 4780 var _button = buttons[_i]; 4781 4782 if (_button.getAttribute('aria-pressed') === 'true') { 4783 _button.classList.add(CLASS_NAME_ACTIVE$3); 4784 } else { 4785 _button.classList.remove(CLASS_NAME_ACTIVE$3); 4786 } 4787 } 4788 }); 4789 /** 4790 * jQuery 4791 */ 4792 4793 $__default["default"].fn[NAME$9] = Button._jQueryInterface; 4794 $__default["default"].fn[NAME$9].Constructor = Button; 4795 4796 $__default["default"].fn[NAME$9].noConflict = function () { 4797 $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9; 4798 return Button._jQueryInterface; 4799 }; 4800 4801 /** 4802 * Constants 4803 */ 4804 4805 var NAME$8 = 'carousel'; 4806 var VERSION$8 = '4.6.2'; 4807 var DATA_KEY$8 = 'bs.carousel'; 4808 var EVENT_KEY$8 = "." + DATA_KEY$8; 4809 var DATA_API_KEY$5 = '.data-api'; 4810 var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8]; 4811 var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key 4812 4813 var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key 4814 4815 var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 4816 4817 var SWIPE_THRESHOLD = 40; 4818 var CLASS_NAME_CAROUSEL = 'carousel'; 4819 var CLASS_NAME_ACTIVE$2 = 'active'; 4820 var CLASS_NAME_SLIDE = 'slide'; 4821 var CLASS_NAME_RIGHT = 'carousel-item-right'; 4822 var CLASS_NAME_LEFT = 'carousel-item-left'; 4823 var CLASS_NAME_NEXT = 'carousel-item-next'; 4824 var CLASS_NAME_PREV = 'carousel-item-prev'; 4825 var CLASS_NAME_POINTER_EVENT = 'pointer-event'; 4826 var DIRECTION_NEXT = 'next'; 4827 var DIRECTION_PREV = 'prev'; 4828 var DIRECTION_LEFT = 'left'; 4829 var DIRECTION_RIGHT = 'right'; 4830 var EVENT_SLIDE = "slide" + EVENT_KEY$8; 4831 var EVENT_SLID = "slid" + EVENT_KEY$8; 4832 var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8; 4833 var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8; 4834 var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8; 4835 var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8; 4836 var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8; 4837 var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8; 4838 var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8; 4839 var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8; 4840 var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8; 4841 var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5; 4842 var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5; 4843 var SELECTOR_ACTIVE$1 = '.active'; 4844 var SELECTOR_ACTIVE_ITEM = '.active.carousel-item'; 4845 var SELECTOR_ITEM = '.carousel-item'; 4846 var SELECTOR_ITEM_IMG = '.carousel-item img'; 4847 var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'; 4848 var SELECTOR_INDICATORS = '.carousel-indicators'; 4849 var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'; 4850 var SELECTOR_DATA_RIDE = '[data-ride="carousel"]'; 4851 var Default$7 = { 4852 interval: 5000, 4853 keyboard: true, 4854 slide: false, 4855 pause: 'hover', 4856 wrap: true, 4857 touch: true 4858 }; 4859 var DefaultType$7 = { 4860 interval: '(number|boolean)', 4861 keyboard: 'boolean', 4862 slide: '(boolean|string)', 4863 pause: '(string|boolean)', 4864 wrap: 'boolean', 4865 touch: 'boolean' 4866 }; 4867 var PointerType = { 4868 TOUCH: 'touch', 4869 PEN: 'pen' 4870 }; 4871 /** 4872 * Class definition 4873 */ 4874 4875 var Carousel = /*#__PURE__*/function () { 4876 function Carousel(element, config) { 4877 this._items = null; 4878 this._interval = null; 4879 this._activeElement = null; 4880 this._isPaused = false; 4881 this._isSliding = false; 4882 this.touchTimeout = null; 4883 this.touchStartX = 0; 4884 this.touchDeltaX = 0; 4885 this._config = this._getConfig(config); 4886 this._element = element; 4887 this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS); 4888 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 4889 this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); 4890 4891 this._addEventListeners(); 4892 } // Getters 4893 4894 4895 var _proto = Carousel.prototype; 4896 4897 // Public 4898 _proto.next = function next() { 4899 if (!this._isSliding) { 4900 this._slide(DIRECTION_NEXT); 4901 } 4902 }; 4903 4904 _proto.nextWhenVisible = function nextWhenVisible() { 4905 var $element = $__default["default"](this._element); // Don't call next when the page isn't visible 4906 // or the carousel or its parent isn't visible 4907 4908 if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') { 4909 this.next(); 4910 } 4911 }; 4912 4913 _proto.prev = function prev() { 4914 if (!this._isSliding) { 4915 this._slide(DIRECTION_PREV); 4916 } 4917 }; 4918 4919 _proto.pause = function pause(event) { 4920 if (!event) { 4921 this._isPaused = true; 4922 } 4923 4924 if (this._element.querySelector(SELECTOR_NEXT_PREV)) { 4925 Util.triggerTransitionEnd(this._element); 4926 this.cycle(true); 4927 } 4928 4929 clearInterval(this._interval); 4930 this._interval = null; 4931 }; 4932 4933 _proto.cycle = function cycle(event) { 4934 if (!event) { 4935 this._isPaused = false; 4936 } 4937 4938 if (this._interval) { 4939 clearInterval(this._interval); 4940 this._interval = null; 4941 } 4942 4943 if (this._config.interval && !this._isPaused) { 4944 this._updateInterval(); 4945 4946 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 4947 } 4948 }; 4949 4950 _proto.to = function to(index) { 4951 var _this = this; 4952 4953 this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); 4954 4955 var activeIndex = this._getItemIndex(this._activeElement); 4956 4957 if (index > this._items.length - 1 || index < 0) { 4958 return; 4959 } 4960 4961 if (this._isSliding) { 4962 $__default["default"](this._element).one(EVENT_SLID, function () { 4963 return _this.to(index); 4964 }); 4965 return; 4966 } 4967 4968 if (activeIndex === index) { 4969 this.pause(); 4970 this.cycle(); 4971 return; 4972 } 4973 4974 var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV; 4975 4976 this._slide(direction, this._items[index]); 4977 }; 4978 4979 _proto.dispose = function dispose() { 4980 $__default["default"](this._element).off(EVENT_KEY$8); 4981 $__default["default"].removeData(this._element, DATA_KEY$8); 4982 this._items = null; 4983 this._config = null; 4984 this._element = null; 4985 this._interval = null; 4986 this._isPaused = null; 4987 this._isSliding = null; 4988 this._activeElement = null; 4989 this._indicatorsElement = null; 4990 } // Private 4991 ; 4992 4993 _proto._getConfig = function _getConfig(config) { 4994 config = _extends({}, Default$7, config); 4995 Util.typeCheckConfig(NAME$8, config, DefaultType$7); 4996 return config; 4997 }; 4998 4999 _proto._handleSwipe = function _handleSwipe() { 5000 var absDeltax = Math.abs(this.touchDeltaX); 5001 5002 if (absDeltax <= SWIPE_THRESHOLD) { 5003 return; 5004 } 5005 5006 var direction = absDeltax / this.touchDeltaX; 5007 this.touchDeltaX = 0; // swipe left 5008 5009 if (direction > 0) { 5010 this.prev(); 5011 } // swipe right 5012 5013 5014 if (direction < 0) { 5015 this.next(); 5016 } 5017 }; 5018 5019 _proto._addEventListeners = function _addEventListeners() { 5020 var _this2 = this; 5021 5022 if (this._config.keyboard) { 5023 $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) { 5024 return _this2._keydown(event); 5025 }); 5026 } 5027 5028 if (this._config.pause === 'hover') { 5029 $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) { 5030 return _this2.pause(event); 5031 }).on(EVENT_MOUSELEAVE, function (event) { 5032 return _this2.cycle(event); 5033 }); 5034 } 5035 5036 if (this._config.touch) { 5037 this._addTouchEventListeners(); 5038 } 5039 }; 5040 5041 _proto._addTouchEventListeners = function _addTouchEventListeners() { 5042 var _this3 = this; 5043 5044 if (!this._touchSupported) { 5045 return; 5046 } 5047 5048 var start = function start(event) { 5049 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 5050 _this3.touchStartX = event.originalEvent.clientX; 5051 } else if (!_this3._pointerEvent) { 5052 _this3.touchStartX = event.originalEvent.touches[0].clientX; 5053 } 5054 }; 5055 5056 var move = function move(event) { 5057 // ensure swiping with one touch and not pinching 5058 _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX; 5059 }; 5060 5061 var end = function end(event) { 5062 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 5063 _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; 5064 } 5065 5066 _this3._handleSwipe(); 5067 5068 if (_this3._config.pause === 'hover') { 5069 // If it's a touch-enabled device, mouseenter/leave are fired as 5070 // part of the mouse compatibility events on first tap - the carousel 5071 // would stop cycling until user tapped out of it; 5072 // here, we listen for touchend, explicitly pause the carousel 5073 // (as if it's the second time we tap on it, mouseenter compat event 5074 // is NOT fired) and after a timeout (to allow for mouse compatibility 5075 // events to fire) we explicitly restart cycling 5076 _this3.pause(); 5077 5078 if (_this3.touchTimeout) { 5079 clearTimeout(_this3.touchTimeout); 5080 } 5081 5082 _this3.touchTimeout = setTimeout(function (event) { 5083 return _this3.cycle(event); 5084 }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); 5085 } 5086 }; 5087 5088 $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) { 5089 return e.preventDefault(); 5090 }); 5091 5092 if (this._pointerEvent) { 5093 $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) { 5094 return start(event); 5095 }); 5096 $__default["default"](this._element).on(EVENT_POINTERUP, function (event) { 5097 return end(event); 5098 }); 5099 5100 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 5101 } else { 5102 $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) { 5103 return start(event); 5104 }); 5105 $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) { 5106 return move(event); 5107 }); 5108 $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) { 5109 return end(event); 5110 }); 5111 } 5112 }; 5113 5114 _proto._keydown = function _keydown(event) { 5115 if (/input|textarea/i.test(event.target.tagName)) { 5116 return; 5117 } 5118 5119 switch (event.which) { 5120 case ARROW_LEFT_KEYCODE: 5121 event.preventDefault(); 5122 this.prev(); 5123 break; 5124 5125 case ARROW_RIGHT_KEYCODE: 5126 event.preventDefault(); 5127 this.next(); 5128 break; 5129 } 5130 }; 5131 5132 _proto._getItemIndex = function _getItemIndex(element) { 5133 this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : []; 5134 return this._items.indexOf(element); 5135 }; 5136 5137 _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { 5138 var isNextDirection = direction === DIRECTION_NEXT; 5139 var isPrevDirection = direction === DIRECTION_PREV; 5140 5141 var activeIndex = this._getItemIndex(activeElement); 5142 5143 var lastItemIndex = this._items.length - 1; 5144 var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; 5145 5146 if (isGoingToWrap && !this._config.wrap) { 5147 return activeElement; 5148 } 5149 5150 var delta = direction === DIRECTION_PREV ? -1 : 1; 5151 var itemIndex = (activeIndex + delta) % this._items.length; 5152 return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; 5153 }; 5154 5155 _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { 5156 var targetIndex = this._getItemIndex(relatedTarget); 5157 5158 var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM)); 5159 5160 var slideEvent = $__default["default"].Event(EVENT_SLIDE, { 5161 relatedTarget: relatedTarget, 5162 direction: eventDirectionName, 5163 from: fromIndex, 5164 to: targetIndex 5165 }); 5166 $__default["default"](this._element).trigger(slideEvent); 5167 return slideEvent; 5168 }; 5169 5170 _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { 5171 if (this._indicatorsElement) { 5172 var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1)); 5173 $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2); 5174 5175 var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; 5176 5177 if (nextIndicator) { 5178 $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2); 5179 } 5180 } 5181 }; 5182 5183 _proto._updateInterval = function _updateInterval() { 5184 var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM); 5185 5186 if (!element) { 5187 return; 5188 } 5189 5190 var elementInterval = parseInt(element.getAttribute('data-interval'), 10); 5191 5192 if (elementInterval) { 5193 this._config.defaultInterval = this._config.defaultInterval || this._config.interval; 5194 this._config.interval = elementInterval; 5195 } else { 5196 this._config.interval = this._config.defaultInterval || this._config.interval; 5197 } 5198 }; 5199 5200 _proto._slide = function _slide(direction, element) { 5201 var _this4 = this; 5202 5203 var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); 5204 5205 var activeElementIndex = this._getItemIndex(activeElement); 5206 5207 var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); 5208 5209 var nextElementIndex = this._getItemIndex(nextElement); 5210 5211 var isCycling = Boolean(this._interval); 5212 var directionalClassName; 5213 var orderClassName; 5214 var eventDirectionName; 5215 5216 if (direction === DIRECTION_NEXT) { 5217 directionalClassName = CLASS_NAME_LEFT; 5218 orderClassName = CLASS_NAME_NEXT; 5219 eventDirectionName = DIRECTION_LEFT; 5220 } else { 5221 directionalClassName = CLASS_NAME_RIGHT; 5222 orderClassName = CLASS_NAME_PREV; 5223 eventDirectionName = DIRECTION_RIGHT; 5224 } 5225 5226 if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) { 5227 this._isSliding = false; 5228 return; 5229 } 5230 5231 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 5232 5233 if (slideEvent.isDefaultPrevented()) { 5234 return; 5235 } 5236 5237 if (!activeElement || !nextElement) { 5238 // Some weirdness is happening, so we bail 5239 return; 5240 } 5241 5242 this._isSliding = true; 5243 5244 if (isCycling) { 5245 this.pause(); 5246 } 5247 5248 this._setActiveIndicatorElement(nextElement); 5249 5250 this._activeElement = nextElement; 5251 var slidEvent = $__default["default"].Event(EVENT_SLID, { 5252 relatedTarget: nextElement, 5253 direction: eventDirectionName, 5254 from: activeElementIndex, 5255 to: nextElementIndex 5256 }); 5257 5258 if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) { 5259 $__default["default"](nextElement).addClass(orderClassName); 5260 Util.reflow(nextElement); 5261 $__default["default"](activeElement).addClass(directionalClassName); 5262 $__default["default"](nextElement).addClass(directionalClassName); 5263 var transitionDuration = Util.getTransitionDurationFromElement(activeElement); 5264 $__default["default"](activeElement).one(Util.TRANSITION_END, function () { 5265 $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2); 5266 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName); 5267 _this4._isSliding = false; 5268 setTimeout(function () { 5269 return $__default["default"](_this4._element).trigger(slidEvent); 5270 }, 0); 5271 }).emulateTransitionEnd(transitionDuration); 5272 } else { 5273 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2); 5274 $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2); 5275 this._isSliding = false; 5276 $__default["default"](this._element).trigger(slidEvent); 5277 } 5278 5279 if (isCycling) { 5280 this.cycle(); 5281 } 5282 } // Static 5283 ; 5284 5285 Carousel._jQueryInterface = function _jQueryInterface(config) { 5286 return this.each(function () { 5287 var data = $__default["default"](this).data(DATA_KEY$8); 5288 5289 var _config = _extends({}, Default$7, $__default["default"](this).data()); 5290 5291 if (typeof config === 'object') { 5292 _config = _extends({}, _config, config); 5293 } 5294 5295 var action = typeof config === 'string' ? config : _config.slide; 5296 5297 if (!data) { 5298 data = new Carousel(this, _config); 5299 $__default["default"](this).data(DATA_KEY$8, data); 5300 } 5301 5302 if (typeof config === 'number') { 5303 data.to(config); 5304 } else if (typeof action === 'string') { 5305 if (typeof data[action] === 'undefined') { 5306 throw new TypeError("No method named \"" + action + "\""); 5307 } 5308 5309 data[action](); 5310 } else if (_config.interval && _config.ride) { 5311 data.pause(); 5312 data.cycle(); 5313 } 5314 }); 5315 }; 5316 5317 Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { 5318 var selector = Util.getSelectorFromElement(this); 5319 5320 if (!selector) { 5321 return; 5322 } 5323 5324 var target = $__default["default"](selector)[0]; 5325 5326 if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) { 5327 return; 5328 } 5329 5330 var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 5331 5332 var slideIndex = this.getAttribute('data-slide-to'); 5333 5334 if (slideIndex) { 5335 config.interval = false; 5336 } 5337 5338 Carousel._jQueryInterface.call($__default["default"](target), config); 5339 5340 if (slideIndex) { 5341 $__default["default"](target).data(DATA_KEY$8).to(slideIndex); 5342 } 5343 5344 event.preventDefault(); 5345 }; 5346 5347 _createClass(Carousel, null, [{ 5348 key: "VERSION", 5349 get: function get() { 5350 return VERSION$8; 5351 } 5352 }, { 5353 key: "Default", 5354 get: function get() { 5355 return Default$7; 5356 } 5357 }]); 5358 5359 return Carousel; 5360 }(); 5361 /** 5362 * Data API implementation 5363 */ 5364 5365 5366 $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler); 5367 $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () { 5368 var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE)); 5369 5370 for (var i = 0, len = carousels.length; i < len; i++) { 5371 var $carousel = $__default["default"](carousels[i]); 5372 5373 Carousel._jQueryInterface.call($carousel, $carousel.data()); 5374 } 5375 }); 5376 /** 5377 * jQuery 5378 */ 5379 5380 $__default["default"].fn[NAME$8] = Carousel._jQueryInterface; 5381 $__default["default"].fn[NAME$8].Constructor = Carousel; 5382 5383 $__default["default"].fn[NAME$8].noConflict = function () { 5384 $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8; 5385 return Carousel._jQueryInterface; 5386 }; 5387 5388 /** 5389 * Constants 5390 */ 5391 5392 var NAME$7 = 'collapse'; 5393 var VERSION$7 = '4.6.2'; 5394 var DATA_KEY$7 = 'bs.collapse'; 5395 var EVENT_KEY$7 = "." + DATA_KEY$7; 5396 var DATA_API_KEY$4 = '.data-api'; 5397 var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7]; 5398 var CLASS_NAME_SHOW$6 = 'show'; 5399 var CLASS_NAME_COLLAPSE = 'collapse'; 5400 var CLASS_NAME_COLLAPSING = 'collapsing'; 5401 var CLASS_NAME_COLLAPSED = 'collapsed'; 5402 var DIMENSION_WIDTH = 'width'; 5403 var DIMENSION_HEIGHT = 'height'; 5404 var EVENT_SHOW$4 = "show" + EVENT_KEY$7; 5405 var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7; 5406 var EVENT_HIDE$4 = "hide" + EVENT_KEY$7; 5407 var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7; 5408 var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4; 5409 var SELECTOR_ACTIVES = '.show, .collapsing'; 5410 var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]'; 5411 var Default$6 = { 5412 toggle: true, 5413 parent: '' 5414 }; 5415 var DefaultType$6 = { 5416 toggle: 'boolean', 5417 parent: '(string|element)' 5418 }; 5419 /** 5420 * Class definition 5421 */ 5422 5423 var Collapse = /*#__PURE__*/function () { 5424 function Collapse(element, config) { 5425 this._isTransitioning = false; 5426 this._element = element; 5427 this._config = this._getConfig(config); 5428 this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); 5429 var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3)); 5430 5431 for (var i = 0, len = toggleList.length; i < len; i++) { 5432 var elem = toggleList[i]; 5433 var selector = Util.getSelectorFromElement(elem); 5434 var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { 5435 return foundElem === element; 5436 }); 5437 5438 if (selector !== null && filterElement.length > 0) { 5439 this._selector = selector; 5440 5441 this._triggerArray.push(elem); 5442 } 5443 } 5444 5445 this._parent = this._config.parent ? this._getParent() : null; 5446 5447 if (!this._config.parent) { 5448 this._addAriaAndCollapsedClass(this._element, this._triggerArray); 5449 } 5450 5451 if (this._config.toggle) { 5452 this.toggle(); 5453 } 5454 } // Getters 5455 5456 5457 var _proto = Collapse.prototype; 5458 5459 // Public 5460 _proto.toggle = function toggle() { 5461 if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 5462 this.hide(); 5463 } else { 5464 this.show(); 5465 } 5466 }; 5467 5468 _proto.show = function show() { 5469 var _this = this; 5470 5471 if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 5472 return; 5473 } 5474 5475 var actives; 5476 var activesData; 5477 5478 if (this._parent) { 5479 actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) { 5480 if (typeof _this._config.parent === 'string') { 5481 return elem.getAttribute('data-parent') === _this._config.parent; 5482 } 5483 5484 return elem.classList.contains(CLASS_NAME_COLLAPSE); 5485 }); 5486 5487 if (actives.length === 0) { 5488 actives = null; 5489 } 5490 } 5491 5492 if (actives) { 5493 activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7); 5494 5495 if (activesData && activesData._isTransitioning) { 5496 return; 5497 } 5498 } 5499 5500 var startEvent = $__default["default"].Event(EVENT_SHOW$4); 5501 $__default["default"](this._element).trigger(startEvent); 5502 5503 if (startEvent.isDefaultPrevented()) { 5504 return; 5505 } 5506 5507 if (actives) { 5508 Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide'); 5509 5510 if (!activesData) { 5511 $__default["default"](actives).data(DATA_KEY$7, null); 5512 } 5513 } 5514 5515 var dimension = this._getDimension(); 5516 5517 $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING); 5518 this._element.style[dimension] = 0; 5519 5520 if (this._triggerArray.length) { 5521 $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true); 5522 } 5523 5524 this.setTransitioning(true); 5525 5526 var complete = function complete() { 5527 $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6); 5528 _this._element.style[dimension] = ''; 5529 5530 _this.setTransitioning(false); 5531 5532 $__default["default"](_this._element).trigger(EVENT_SHOWN$4); 5533 }; 5534 5535 var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 5536 var scrollSize = "scroll" + capitalizedDimension; 5537 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 5538 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 5539 this._element.style[dimension] = this._element[scrollSize] + "px"; 5540 }; 5541 5542 _proto.hide = function hide() { 5543 var _this2 = this; 5544 5545 if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 5546 return; 5547 } 5548 5549 var startEvent = $__default["default"].Event(EVENT_HIDE$4); 5550 $__default["default"](this._element).trigger(startEvent); 5551 5552 if (startEvent.isDefaultPrevented()) { 5553 return; 5554 } 5555 5556 var dimension = this._getDimension(); 5557 5558 this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; 5559 Util.reflow(this._element); 5560 $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6); 5561 var triggerArrayLength = this._triggerArray.length; 5562 5563 if (triggerArrayLength > 0) { 5564 for (var i = 0; i < triggerArrayLength; i++) { 5565 var trigger = this._triggerArray[i]; 5566 var selector = Util.getSelectorFromElement(trigger); 5567 5568 if (selector !== null) { 5569 var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector))); 5570 5571 if (!$elem.hasClass(CLASS_NAME_SHOW$6)) { 5572 $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false); 5573 } 5574 } 5575 } 5576 } 5577 5578 this.setTransitioning(true); 5579 5580 var complete = function complete() { 5581 _this2.setTransitioning(false); 5582 5583 $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4); 5584 }; 5585 5586 this._element.style[dimension] = ''; 5587 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 5588 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 5589 }; 5590 5591 _proto.setTransitioning = function setTransitioning(isTransitioning) { 5592 this._isTransitioning = isTransitioning; 5593 }; 5594 5595 _proto.dispose = function dispose() { 5596 $__default["default"].removeData(this._element, DATA_KEY$7); 5597 this._config = null; 5598 this._parent = null; 5599 this._element = null; 5600 this._triggerArray = null; 5601 this._isTransitioning = null; 5602 } // Private 5603 ; 5604 5605 _proto._getConfig = function _getConfig(config) { 5606 config = _extends({}, Default$6, config); 5607 config.toggle = Boolean(config.toggle); // Coerce string values 5608 5609 Util.typeCheckConfig(NAME$7, config, DefaultType$6); 5610 return config; 5611 }; 5612 5613 _proto._getDimension = function _getDimension() { 5614 var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH); 5615 return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT; 5616 }; 5617 5618 _proto._getParent = function _getParent() { 5619 var _this3 = this; 5620 5621 var parent; 5622 5623 if (Util.isElement(this._config.parent)) { 5624 parent = this._config.parent; // It's a jQuery object 5625 5626 if (typeof this._config.parent.jquery !== 'undefined') { 5627 parent = this._config.parent[0]; 5628 } 5629 } else { 5630 parent = document.querySelector(this._config.parent); 5631 } 5632 5633 var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; 5634 var children = [].slice.call(parent.querySelectorAll(selector)); 5635 $__default["default"](children).each(function (i, element) { 5636 _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); 5637 }); 5638 return parent; 5639 }; 5640 5641 _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { 5642 var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6); 5643 5644 if (triggerArray.length) { 5645 $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen); 5646 } 5647 } // Static 5648 ; 5649 5650 Collapse._getTargetFromElement = function _getTargetFromElement(element) { 5651 var selector = Util.getSelectorFromElement(element); 5652 return selector ? document.querySelector(selector) : null; 5653 }; 5654 5655 Collapse._jQueryInterface = function _jQueryInterface(config) { 5656 return this.each(function () { 5657 var $element = $__default["default"](this); 5658 var data = $element.data(DATA_KEY$7); 5659 5660 var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {}); 5661 5662 if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { 5663 _config.toggle = false; 5664 } 5665 5666 if (!data) { 5667 data = new Collapse(this, _config); 5668 $element.data(DATA_KEY$7, data); 5669 } 5670 5671 if (typeof config === 'string') { 5672 if (typeof data[config] === 'undefined') { 5673 throw new TypeError("No method named \"" + config + "\""); 5674 } 5675 5676 data[config](); 5677 } 5678 }); 5679 }; 5680 5681 _createClass(Collapse, null, [{ 5682 key: "VERSION", 5683 get: function get() { 5684 return VERSION$7; 5685 } 5686 }, { 5687 key: "Default", 5688 get: function get() { 5689 return Default$6; 5690 } 5691 }]); 5692 5693 return Collapse; 5694 }(); 5695 /** 5696 * Data API implementation 5697 */ 5698 5699 5700 $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 5701 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 5702 if (event.currentTarget.tagName === 'A') { 5703 event.preventDefault(); 5704 } 5705 5706 var $trigger = $__default["default"](this); 5707 var selector = Util.getSelectorFromElement(this); 5708 var selectors = [].slice.call(document.querySelectorAll(selector)); 5709 $__default["default"](selectors).each(function () { 5710 var $target = $__default["default"](this); 5711 var data = $target.data(DATA_KEY$7); 5712 var config = data ? 'toggle' : $trigger.data(); 5713 5714 Collapse._jQueryInterface.call($target, config); 5715 }); 5716 }); 5717 /** 5718 * jQuery 5719 */ 5720 5721 $__default["default"].fn[NAME$7] = Collapse._jQueryInterface; 5722 $__default["default"].fn[NAME$7].Constructor = Collapse; 5723 5724 $__default["default"].fn[NAME$7].noConflict = function () { 5725 $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7; 5726 return Collapse._jQueryInterface; 5727 }; 5728 5729 /** 5730 * Constants 5731 */ 5732 5733 var NAME$6 = 'dropdown'; 5734 var VERSION$6 = '4.6.2'; 5735 var DATA_KEY$6 = 'bs.dropdown'; 5736 var EVENT_KEY$6 = "." + DATA_KEY$6; 5737 var DATA_API_KEY$3 = '.data-api'; 5738 var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6]; 5739 var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key 5740 5741 var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key 5742 5743 var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key 5744 5745 var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key 5746 5747 var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key 5748 5749 var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) 5750 5751 var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1); 5752 var CLASS_NAME_DISABLED$1 = 'disabled'; 5753 var CLASS_NAME_SHOW$5 = 'show'; 5754 var CLASS_NAME_DROPUP = 'dropup'; 5755 var CLASS_NAME_DROPRIGHT = 'dropright'; 5756 var CLASS_NAME_DROPLEFT = 'dropleft'; 5757 var CLASS_NAME_MENURIGHT = 'dropdown-menu-right'; 5758 var CLASS_NAME_POSITION_STATIC = 'position-static'; 5759 var EVENT_HIDE$3 = "hide" + EVENT_KEY$6; 5760 var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6; 5761 var EVENT_SHOW$3 = "show" + EVENT_KEY$6; 5762 var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6; 5763 var EVENT_CLICK = "click" + EVENT_KEY$6; 5764 var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3; 5765 var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3; 5766 var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3; 5767 var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]'; 5768 var SELECTOR_FORM_CHILD = '.dropdown form'; 5769 var SELECTOR_MENU = '.dropdown-menu'; 5770 var SELECTOR_NAVBAR_NAV = '.navbar-nav'; 5771 var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 5772 var PLACEMENT_TOP = 'top-start'; 5773 var PLACEMENT_TOPEND = 'top-end'; 5774 var PLACEMENT_BOTTOM = 'bottom-start'; 5775 var PLACEMENT_BOTTOMEND = 'bottom-end'; 5776 var PLACEMENT_RIGHT = 'right-start'; 5777 var PLACEMENT_LEFT = 'left-start'; 5778 var Default$5 = { 5779 offset: 0, 5780 flip: true, 5781 boundary: 'scrollParent', 5782 reference: 'toggle', 5783 display: 'dynamic', 5784 popperConfig: null 5785 }; 5786 var DefaultType$5 = { 5787 offset: '(number|string|function)', 5788 flip: 'boolean', 5789 boundary: '(string|element)', 5790 reference: '(string|element)', 5791 display: 'string', 5792 popperConfig: '(null|object)' 5793 }; 5794 /** 5795 * Class definition 5796 */ 5797 5798 var Dropdown = /*#__PURE__*/function () { 5799 function Dropdown(element, config) { 5800 this._element = element; 5801 this._popper = null; 5802 this._config = this._getConfig(config); 5803 this._menu = this._getMenuElement(); 5804 this._inNavbar = this._detectNavbar(); 5805 5806 this._addEventListeners(); 5807 } // Getters 5808 5809 5810 var _proto = Dropdown.prototype; 5811 5812 // Public 5813 _proto.toggle = function toggle() { 5814 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) { 5815 return; 5816 } 5817 5818 var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5); 5819 5820 Dropdown._clearMenus(); 5821 5822 if (isActive) { 5823 return; 5824 } 5825 5826 this.show(true); 5827 }; 5828 5829 _proto.show = function show(usePopper) { 5830 if (usePopper === void 0) { 5831 usePopper = false; 5832 } 5833 5834 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) { 5835 return; 5836 } 5837 5838 var relatedTarget = { 5839 relatedTarget: this._element 5840 }; 5841 var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget); 5842 5843 var parent = Dropdown._getParentFromElement(this._element); 5844 5845 $__default["default"](parent).trigger(showEvent); 5846 5847 if (showEvent.isDefaultPrevented()) { 5848 return; 5849 } // Totally disable Popper for Dropdowns in Navbar 5850 5851 5852 if (!this._inNavbar && usePopper) { 5853 // Check for Popper dependency 5854 if (typeof Popper__default["default"] === 'undefined') { 5855 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 5856 } 5857 5858 var referenceElement = this._element; 5859 5860 if (this._config.reference === 'parent') { 5861 referenceElement = parent; 5862 } else if (Util.isElement(this._config.reference)) { 5863 referenceElement = this._config.reference; // Check if it's jQuery element 5864 5865 if (typeof this._config.reference.jquery !== 'undefined') { 5866 referenceElement = this._config.reference[0]; 5867 } 5868 } // If boundary is not `scrollParent`, then set position to `static` 5869 // to allow the menu to "escape" the scroll parent's boundaries 5870 // https://github.com/twbs/bootstrap/issues/24251 5871 5872 5873 if (this._config.boundary !== 'scrollParent') { 5874 $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC); 5875 } 5876 5877 this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig()); 5878 } // If this is a touch-enabled device we add extra 5879 // empty mouseover listeners to the body's immediate children; 5880 // only needed because of broken event delegation on iOS 5881 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 5882 5883 5884 if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) { 5885 $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop); 5886 } 5887 5888 this._element.focus(); 5889 5890 this._element.setAttribute('aria-expanded', true); 5891 5892 $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5); 5893 $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget)); 5894 }; 5895 5896 _proto.hide = function hide() { 5897 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) { 5898 return; 5899 } 5900 5901 var relatedTarget = { 5902 relatedTarget: this._element 5903 }; 5904 var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget); 5905 5906 var parent = Dropdown._getParentFromElement(this._element); 5907 5908 $__default["default"](parent).trigger(hideEvent); 5909 5910 if (hideEvent.isDefaultPrevented()) { 5911 return; 5912 } 5913 5914 if (this._popper) { 5915 this._popper.destroy(); 5916 } 5917 5918 $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5); 5919 $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget)); 5920 }; 5921 5922 _proto.dispose = function dispose() { 5923 $__default["default"].removeData(this._element, DATA_KEY$6); 5924 $__default["default"](this._element).off(EVENT_KEY$6); 5925 this._element = null; 5926 this._menu = null; 5927 5928 if (this._popper !== null) { 5929 this._popper.destroy(); 5930 5931 this._popper = null; 5932 } 5933 }; 5934 5935 _proto.update = function update() { 5936 this._inNavbar = this._detectNavbar(); 5937 5938 if (this._popper !== null) { 5939 this._popper.scheduleUpdate(); 5940 } 5941 } // Private 5942 ; 5943 5944 _proto._addEventListeners = function _addEventListeners() { 5945 var _this = this; 5946 5947 $__default["default"](this._element).on(EVENT_CLICK, function (event) { 5948 event.preventDefault(); 5949 event.stopPropagation(); 5950 5951 _this.toggle(); 5952 }); 5953 }; 5954 5955 _proto._getConfig = function _getConfig(config) { 5956 config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config); 5957 Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); 5958 return config; 5959 }; 5960 5961 _proto._getMenuElement = function _getMenuElement() { 5962 if (!this._menu) { 5963 var parent = Dropdown._getParentFromElement(this._element); 5964 5965 if (parent) { 5966 this._menu = parent.querySelector(SELECTOR_MENU); 5967 } 5968 } 5969 5970 return this._menu; 5971 }; 5972 5973 _proto._getPlacement = function _getPlacement() { 5974 var $parentDropdown = $__default["default"](this._element.parentNode); 5975 var placement = PLACEMENT_BOTTOM; // Handle dropup 5976 5977 if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) { 5978 placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP; 5979 } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) { 5980 placement = PLACEMENT_RIGHT; 5981 } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) { 5982 placement = PLACEMENT_LEFT; 5983 } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) { 5984 placement = PLACEMENT_BOTTOMEND; 5985 } 5986 5987 return placement; 5988 }; 5989 5990 _proto._detectNavbar = function _detectNavbar() { 5991 return $__default["default"](this._element).closest('.navbar').length > 0; 5992 }; 5993 5994 _proto._getOffset = function _getOffset() { 5995 var _this2 = this; 5996 5997 var offset = {}; 5998 5999 if (typeof this._config.offset === 'function') { 6000 offset.fn = function (data) { 6001 data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element)); 6002 return data; 6003 }; 6004 } else { 6005 offset.offset = this._config.offset; 6006 } 6007 6008 return offset; 6009 }; 6010 6011 _proto._getPopperConfig = function _getPopperConfig() { 6012 var popperConfig = { 6013 placement: this._getPlacement(), 6014 modifiers: { 6015 offset: this._getOffset(), 6016 flip: { 6017 enabled: this._config.flip 6018 }, 6019 preventOverflow: { 6020 boundariesElement: this._config.boundary 6021 } 6022 } 6023 }; // Disable Popper if we have a static display 6024 6025 if (this._config.display === 'static') { 6026 popperConfig.modifiers.applyStyle = { 6027 enabled: false 6028 }; 6029 } 6030 6031 return _extends({}, popperConfig, this._config.popperConfig); 6032 } // Static 6033 ; 6034 6035 Dropdown._jQueryInterface = function _jQueryInterface(config) { 6036 return this.each(function () { 6037 var data = $__default["default"](this).data(DATA_KEY$6); 6038 6039 var _config = typeof config === 'object' ? config : null; 6040 6041 if (!data) { 6042 data = new Dropdown(this, _config); 6043 $__default["default"](this).data(DATA_KEY$6, data); 6044 } 6045 6046 if (typeof config === 'string') { 6047 if (typeof data[config] === 'undefined') { 6048 throw new TypeError("No method named \"" + config + "\""); 6049 } 6050 6051 data[config](); 6052 } 6053 }); 6054 }; 6055 6056 Dropdown._clearMenus = function _clearMenus(event) { 6057 if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { 6058 return; 6059 } 6060 6061 var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2)); 6062 6063 for (var i = 0, len = toggles.length; i < len; i++) { 6064 var parent = Dropdown._getParentFromElement(toggles[i]); 6065 6066 var context = $__default["default"](toggles[i]).data(DATA_KEY$6); 6067 var relatedTarget = { 6068 relatedTarget: toggles[i] 6069 }; 6070 6071 if (event && event.type === 'click') { 6072 relatedTarget.clickEvent = event; 6073 } 6074 6075 if (!context) { 6076 continue; 6077 } 6078 6079 var dropdownMenu = context._menu; 6080 6081 if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) { 6082 continue; 6083 } 6084 6085 if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) { 6086 continue; 6087 } 6088 6089 var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget); 6090 $__default["default"](parent).trigger(hideEvent); 6091 6092 if (hideEvent.isDefaultPrevented()) { 6093 continue; 6094 } // If this is a touch-enabled device we remove the extra 6095 // empty mouseover listeners we added for iOS support 6096 6097 6098 if ('ontouchstart' in document.documentElement) { 6099 $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop); 6100 } 6101 6102 toggles[i].setAttribute('aria-expanded', 'false'); 6103 6104 if (context._popper) { 6105 context._popper.destroy(); 6106 } 6107 6108 $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5); 6109 $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget)); 6110 } 6111 }; 6112 6113 Dropdown._getParentFromElement = function _getParentFromElement(element) { 6114 var parent; 6115 var selector = Util.getSelectorFromElement(element); 6116 6117 if (selector) { 6118 parent = document.querySelector(selector); 6119 } 6120 6121 return parent || element.parentNode; 6122 } // eslint-disable-next-line complexity 6123 ; 6124 6125 Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { 6126 // If not input/textarea: 6127 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 6128 // If input/textarea: 6129 // - If space key => not a dropdown command 6130 // - If key is other than escape 6131 // - If key is not up or down => not a dropdown command 6132 // - If trigger inside the menu => not a dropdown command 6133 if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { 6134 return; 6135 } 6136 6137 if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) { 6138 return; 6139 } 6140 6141 var parent = Dropdown._getParentFromElement(this); 6142 6143 var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5); 6144 6145 if (!isActive && event.which === ESCAPE_KEYCODE$1) { 6146 return; 6147 } 6148 6149 event.preventDefault(); 6150 event.stopPropagation(); 6151 6152 if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) { 6153 if (event.which === ESCAPE_KEYCODE$1) { 6154 $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus'); 6155 } 6156 6157 $__default["default"](this).trigger('click'); 6158 return; 6159 } 6160 6161 var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) { 6162 return $__default["default"](item).is(':visible'); 6163 }); 6164 6165 if (items.length === 0) { 6166 return; 6167 } 6168 6169 var index = items.indexOf(event.target); 6170 6171 if (event.which === ARROW_UP_KEYCODE && index > 0) { 6172 // Up 6173 index--; 6174 } 6175 6176 if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { 6177 // Down 6178 index++; 6179 } 6180 6181 if (index < 0) { 6182 index = 0; 6183 } 6184 6185 items[index].focus(); 6186 }; 6187 6188 _createClass(Dropdown, null, [{ 6189 key: "VERSION", 6190 get: function get() { 6191 return VERSION$6; 6192 } 6193 }, { 6194 key: "Default", 6195 get: function get() { 6196 return Default$5; 6197 } 6198 }, { 6199 key: "DefaultType", 6200 get: function get() { 6201 return DefaultType$5; 6202 } 6203 }]); 6204 6205 return Dropdown; 6206 }(); 6207 /** 6208 * Data API implementation 6209 */ 6210 6211 6212 $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 6213 event.preventDefault(); 6214 event.stopPropagation(); 6215 6216 Dropdown._jQueryInterface.call($__default["default"](this), 'toggle'); 6217 }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) { 6218 e.stopPropagation(); 6219 }); 6220 /** 6221 * jQuery 6222 */ 6223 6224 $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface; 6225 $__default["default"].fn[NAME$6].Constructor = Dropdown; 6226 6227 $__default["default"].fn[NAME$6].noConflict = function () { 6228 $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6; 6229 return Dropdown._jQueryInterface; 6230 }; 6231 6232 /** 6233 * Constants 6234 */ 6235 6236 var NAME$5 = 'modal'; 6237 var VERSION$5 = '4.6.2'; 6238 var DATA_KEY$5 = 'bs.modal'; 6239 var EVENT_KEY$5 = "." + DATA_KEY$5; 6240 var DATA_API_KEY$2 = '.data-api'; 6241 var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5]; 6242 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 6243 6244 var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'; 6245 var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; 6246 var CLASS_NAME_BACKDROP = 'modal-backdrop'; 6247 var CLASS_NAME_OPEN = 'modal-open'; 6248 var CLASS_NAME_FADE$4 = 'fade'; 6249 var CLASS_NAME_SHOW$4 = 'show'; 6250 var CLASS_NAME_STATIC = 'modal-static'; 6251 var EVENT_HIDE$2 = "hide" + EVENT_KEY$5; 6252 var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5; 6253 var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5; 6254 var EVENT_SHOW$2 = "show" + EVENT_KEY$5; 6255 var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5; 6256 var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5; 6257 var EVENT_RESIZE = "resize" + EVENT_KEY$5; 6258 var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5; 6259 var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5; 6260 var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5; 6261 var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5; 6262 var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2; 6263 var SELECTOR_DIALOG = '.modal-dialog'; 6264 var SELECTOR_MODAL_BODY = '.modal-body'; 6265 var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]'; 6266 var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]'; 6267 var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 6268 var SELECTOR_STICKY_CONTENT = '.sticky-top'; 6269 var Default$4 = { 6270 backdrop: true, 6271 keyboard: true, 6272 focus: true, 6273 show: true 6274 }; 6275 var DefaultType$4 = { 6276 backdrop: '(boolean|string)', 6277 keyboard: 'boolean', 6278 focus: 'boolean', 6279 show: 'boolean' 6280 }; 6281 /** 6282 * Class definition 6283 */ 6284 6285 var Modal = /*#__PURE__*/function () { 6286 function Modal(element, config) { 6287 this._config = this._getConfig(config); 6288 this._element = element; 6289 this._dialog = element.querySelector(SELECTOR_DIALOG); 6290 this._backdrop = null; 6291 this._isShown = false; 6292 this._isBodyOverflowing = false; 6293 this._ignoreBackdropClick = false; 6294 this._isTransitioning = false; 6295 this._scrollbarWidth = 0; 6296 } // Getters 6297 6298 6299 var _proto = Modal.prototype; 6300 6301 // Public 6302 _proto.toggle = function toggle(relatedTarget) { 6303 return this._isShown ? this.hide() : this.show(relatedTarget); 6304 }; 6305 6306 _proto.show = function show(relatedTarget) { 6307 var _this = this; 6308 6309 if (this._isShown || this._isTransitioning) { 6310 return; 6311 } 6312 6313 var showEvent = $__default["default"].Event(EVENT_SHOW$2, { 6314 relatedTarget: relatedTarget 6315 }); 6316 $__default["default"](this._element).trigger(showEvent); 6317 6318 if (showEvent.isDefaultPrevented()) { 6319 return; 6320 } 6321 6322 this._isShown = true; 6323 6324 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) { 6325 this._isTransitioning = true; 6326 } 6327 6328 this._checkScrollbar(); 6329 6330 this._setScrollbar(); 6331 6332 this._adjustDialog(); 6333 6334 this._setEscapeEvent(); 6335 6336 this._setResizeEvent(); 6337 6338 $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) { 6339 return _this.hide(event); 6340 }); 6341 $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () { 6342 $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) { 6343 if ($__default["default"](event.target).is(_this._element)) { 6344 _this._ignoreBackdropClick = true; 6345 } 6346 }); 6347 }); 6348 6349 this._showBackdrop(function () { 6350 return _this._showElement(relatedTarget); 6351 }); 6352 }; 6353 6354 _proto.hide = function hide(event) { 6355 var _this2 = this; 6356 6357 if (event) { 6358 event.preventDefault(); 6359 } 6360 6361 if (!this._isShown || this._isTransitioning) { 6362 return; 6363 } 6364 6365 var hideEvent = $__default["default"].Event(EVENT_HIDE$2); 6366 $__default["default"](this._element).trigger(hideEvent); 6367 6368 if (!this._isShown || hideEvent.isDefaultPrevented()) { 6369 return; 6370 } 6371 6372 this._isShown = false; 6373 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4); 6374 6375 if (transition) { 6376 this._isTransitioning = true; 6377 } 6378 6379 this._setEscapeEvent(); 6380 6381 this._setResizeEvent(); 6382 6383 $__default["default"](document).off(EVENT_FOCUSIN); 6384 $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4); 6385 $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1); 6386 $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS); 6387 6388 if (transition) { 6389 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 6390 $__default["default"](this._element).one(Util.TRANSITION_END, function (event) { 6391 return _this2._hideModal(event); 6392 }).emulateTransitionEnd(transitionDuration); 6393 } else { 6394 this._hideModal(); 6395 } 6396 }; 6397 6398 _proto.dispose = function dispose() { 6399 [window, this._element, this._dialog].forEach(function (htmlElement) { 6400 return $__default["default"](htmlElement).off(EVENT_KEY$5); 6401 }); 6402 /** 6403 * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` 6404 * Do not move `document` in `htmlElements` array 6405 * It will remove `EVENT_CLICK_DATA_API` event that should remain 6406 */ 6407 6408 $__default["default"](document).off(EVENT_FOCUSIN); 6409 $__default["default"].removeData(this._element, DATA_KEY$5); 6410 this._config = null; 6411 this._element = null; 6412 this._dialog = null; 6413 this._backdrop = null; 6414 this._isShown = null; 6415 this._isBodyOverflowing = null; 6416 this._ignoreBackdropClick = null; 6417 this._isTransitioning = null; 6418 this._scrollbarWidth = null; 6419 }; 6420 6421 _proto.handleUpdate = function handleUpdate() { 6422 this._adjustDialog(); 6423 } // Private 6424 ; 6425 6426 _proto._getConfig = function _getConfig(config) { 6427 config = _extends({}, Default$4, config); 6428 Util.typeCheckConfig(NAME$5, config, DefaultType$4); 6429 return config; 6430 }; 6431 6432 _proto._triggerBackdropTransition = function _triggerBackdropTransition() { 6433 var _this3 = this; 6434 6435 var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED); 6436 $__default["default"](this._element).trigger(hideEventPrevented); 6437 6438 if (hideEventPrevented.isDefaultPrevented()) { 6439 return; 6440 } 6441 6442 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 6443 6444 if (!isModalOverflowing) { 6445 this._element.style.overflowY = 'hidden'; 6446 } 6447 6448 this._element.classList.add(CLASS_NAME_STATIC); 6449 6450 var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog); 6451 $__default["default"](this._element).off(Util.TRANSITION_END); 6452 $__default["default"](this._element).one(Util.TRANSITION_END, function () { 6453 _this3._element.classList.remove(CLASS_NAME_STATIC); 6454 6455 if (!isModalOverflowing) { 6456 $__default["default"](_this3._element).one(Util.TRANSITION_END, function () { 6457 _this3._element.style.overflowY = ''; 6458 }).emulateTransitionEnd(_this3._element, modalTransitionDuration); 6459 } 6460 }).emulateTransitionEnd(modalTransitionDuration); 6461 6462 this._element.focus(); 6463 }; 6464 6465 _proto._showElement = function _showElement(relatedTarget) { 6466 var _this4 = this; 6467 6468 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4); 6469 var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null; 6470 6471 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 6472 // Don't move modal's DOM position 6473 document.body.appendChild(this._element); 6474 } 6475 6476 this._element.style.display = 'block'; 6477 6478 this._element.removeAttribute('aria-hidden'); 6479 6480 this._element.setAttribute('aria-modal', true); 6481 6482 this._element.setAttribute('role', 'dialog'); 6483 6484 if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { 6485 modalBody.scrollTop = 0; 6486 } else { 6487 this._element.scrollTop = 0; 6488 } 6489 6490 if (transition) { 6491 Util.reflow(this._element); 6492 } 6493 6494 $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4); 6495 6496 if (this._config.focus) { 6497 this._enforceFocus(); 6498 } 6499 6500 var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, { 6501 relatedTarget: relatedTarget 6502 }); 6503 6504 var transitionComplete = function transitionComplete() { 6505 if (_this4._config.focus) { 6506 _this4._element.focus(); 6507 } 6508 6509 _this4._isTransitioning = false; 6510 $__default["default"](_this4._element).trigger(shownEvent); 6511 }; 6512 6513 if (transition) { 6514 var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); 6515 $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 6516 } else { 6517 transitionComplete(); 6518 } 6519 }; 6520 6521 _proto._enforceFocus = function _enforceFocus() { 6522 var _this5 = this; 6523 6524 $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop 6525 .on(EVENT_FOCUSIN, function (event) { 6526 if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) { 6527 _this5._element.focus(); 6528 } 6529 }); 6530 }; 6531 6532 _proto._setEscapeEvent = function _setEscapeEvent() { 6533 var _this6 = this; 6534 6535 if (this._isShown) { 6536 $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) { 6537 if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 6538 event.preventDefault(); 6539 6540 _this6.hide(); 6541 } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 6542 _this6._triggerBackdropTransition(); 6543 } 6544 }); 6545 } else if (!this._isShown) { 6546 $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS); 6547 } 6548 }; 6549 6550 _proto._setResizeEvent = function _setResizeEvent() { 6551 var _this7 = this; 6552 6553 if (this._isShown) { 6554 $__default["default"](window).on(EVENT_RESIZE, function (event) { 6555 return _this7.handleUpdate(event); 6556 }); 6557 } else { 6558 $__default["default"](window).off(EVENT_RESIZE); 6559 } 6560 }; 6561 6562 _proto._hideModal = function _hideModal() { 6563 var _this8 = this; 6564 6565 this._element.style.display = 'none'; 6566 6567 this._element.setAttribute('aria-hidden', true); 6568 6569 this._element.removeAttribute('aria-modal'); 6570 6571 this._element.removeAttribute('role'); 6572 6573 this._isTransitioning = false; 6574 6575 this._showBackdrop(function () { 6576 $__default["default"](document.body).removeClass(CLASS_NAME_OPEN); 6577 6578 _this8._resetAdjustments(); 6579 6580 _this8._resetScrollbar(); 6581 6582 $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2); 6583 }); 6584 }; 6585 6586 _proto._removeBackdrop = function _removeBackdrop() { 6587 if (this._backdrop) { 6588 $__default["default"](this._backdrop).remove(); 6589 this._backdrop = null; 6590 } 6591 }; 6592 6593 _proto._showBackdrop = function _showBackdrop(callback) { 6594 var _this9 = this; 6595 6596 var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : ''; 6597 6598 if (this._isShown && this._config.backdrop) { 6599 this._backdrop = document.createElement('div'); 6600 this._backdrop.className = CLASS_NAME_BACKDROP; 6601 6602 if (animate) { 6603 this._backdrop.classList.add(animate); 6604 } 6605 6606 $__default["default"](this._backdrop).appendTo(document.body); 6607 $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) { 6608 if (_this9._ignoreBackdropClick) { 6609 _this9._ignoreBackdropClick = false; 6610 return; 6611 } 6612 6613 if (event.target !== event.currentTarget) { 6614 return; 6615 } 6616 6617 if (_this9._config.backdrop === 'static') { 6618 _this9._triggerBackdropTransition(); 6619 } else { 6620 _this9.hide(); 6621 } 6622 }); 6623 6624 if (animate) { 6625 Util.reflow(this._backdrop); 6626 } 6627 6628 $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4); 6629 6630 if (!callback) { 6631 return; 6632 } 6633 6634 if (!animate) { 6635 callback(); 6636 return; 6637 } 6638 6639 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 6640 $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 6641 } else if (!this._isShown && this._backdrop) { 6642 $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4); 6643 6644 var callbackRemove = function callbackRemove() { 6645 _this9._removeBackdrop(); 6646 6647 if (callback) { 6648 callback(); 6649 } 6650 }; 6651 6652 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) { 6653 var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 6654 6655 $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 6656 } else { 6657 callbackRemove(); 6658 } 6659 } else if (callback) { 6660 callback(); 6661 } 6662 } // ---------------------------------------------------------------------- 6663 // the following methods are used to handle overflowing modals 6664 // todo (fat): these should probably be refactored out of modal.js 6665 // ---------------------------------------------------------------------- 6666 ; 6667 6668 _proto._adjustDialog = function _adjustDialog() { 6669 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 6670 6671 if (!this._isBodyOverflowing && isModalOverflowing) { 6672 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 6673 } 6674 6675 if (this._isBodyOverflowing && !isModalOverflowing) { 6676 this._element.style.paddingRight = this._scrollbarWidth + "px"; 6677 } 6678 }; 6679 6680 _proto._resetAdjustments = function _resetAdjustments() { 6681 this._element.style.paddingLeft = ''; 6682 this._element.style.paddingRight = ''; 6683 }; 6684 6685 _proto._checkScrollbar = function _checkScrollbar() { 6686 var rect = document.body.getBoundingClientRect(); 6687 this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; 6688 this._scrollbarWidth = this._getScrollbarWidth(); 6689 }; 6690 6691 _proto._setScrollbar = function _setScrollbar() { 6692 var _this10 = this; 6693 6694 if (this._isBodyOverflowing) { 6695 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 6696 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 6697 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 6698 var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding 6699 6700 $__default["default"](fixedContent).each(function (index, element) { 6701 var actualPadding = element.style.paddingRight; 6702 var calculatedPadding = $__default["default"](element).css('padding-right'); 6703 $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); 6704 }); // Adjust sticky content margin 6705 6706 $__default["default"](stickyContent).each(function (index, element) { 6707 var actualMargin = element.style.marginRight; 6708 var calculatedMargin = $__default["default"](element).css('margin-right'); 6709 $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); 6710 }); // Adjust body padding 6711 6712 var actualPadding = document.body.style.paddingRight; 6713 var calculatedPadding = $__default["default"](document.body).css('padding-right'); 6714 $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 6715 } 6716 6717 $__default["default"](document.body).addClass(CLASS_NAME_OPEN); 6718 }; 6719 6720 _proto._resetScrollbar = function _resetScrollbar() { 6721 // Restore fixed content padding 6722 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 6723 $__default["default"](fixedContent).each(function (index, element) { 6724 var padding = $__default["default"](element).data('padding-right'); 6725 $__default["default"](element).removeData('padding-right'); 6726 element.style.paddingRight = padding ? padding : ''; 6727 }); // Restore sticky content 6728 6729 var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT)); 6730 $__default["default"](elements).each(function (index, element) { 6731 var margin = $__default["default"](element).data('margin-right'); 6732 6733 if (typeof margin !== 'undefined') { 6734 $__default["default"](element).css('margin-right', margin).removeData('margin-right'); 6735 } 6736 }); // Restore body padding 6737 6738 var padding = $__default["default"](document.body).data('padding-right'); 6739 $__default["default"](document.body).removeData('padding-right'); 6740 document.body.style.paddingRight = padding ? padding : ''; 6741 }; 6742 6743 _proto._getScrollbarWidth = function _getScrollbarWidth() { 6744 // thx d.walsh 6745 var scrollDiv = document.createElement('div'); 6746 scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER; 6747 document.body.appendChild(scrollDiv); 6748 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 6749 document.body.removeChild(scrollDiv); 6750 return scrollbarWidth; 6751 } // Static 6752 ; 6753 6754 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 6755 return this.each(function () { 6756 var data = $__default["default"](this).data(DATA_KEY$5); 6757 6758 var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {}); 6759 6760 if (!data) { 6761 data = new Modal(this, _config); 6762 $__default["default"](this).data(DATA_KEY$5, data); 6763 } 6764 6765 if (typeof config === 'string') { 6766 if (typeof data[config] === 'undefined') { 6767 throw new TypeError("No method named \"" + config + "\""); 6768 } 6769 6770 data[config](relatedTarget); 6771 } else if (_config.show) { 6772 data.show(relatedTarget); 6773 } 6774 }); 6775 }; 6776 6777 _createClass(Modal, null, [{ 6778 key: "VERSION", 6779 get: function get() { 6780 return VERSION$5; 6781 } 6782 }, { 6783 key: "Default", 6784 get: function get() { 6785 return Default$4; 6786 } 6787 }]); 6788 6789 return Modal; 6790 }(); 6791 /** 6792 * Data API implementation 6793 */ 6794 6795 6796 $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 6797 var _this11 = this; 6798 6799 var target; 6800 var selector = Util.getSelectorFromElement(this); 6801 6802 if (selector) { 6803 target = document.querySelector(selector); 6804 } 6805 6806 var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 6807 6808 if (this.tagName === 'A' || this.tagName === 'AREA') { 6809 event.preventDefault(); 6810 } 6811 6812 var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) { 6813 if (showEvent.isDefaultPrevented()) { 6814 // Only register focus restorer if modal will actually get shown 6815 return; 6816 } 6817 6818 $target.one(EVENT_HIDDEN$2, function () { 6819 if ($__default["default"](_this11).is(':visible')) { 6820 _this11.focus(); 6821 } 6822 }); 6823 }); 6824 6825 Modal._jQueryInterface.call($__default["default"](target), config, this); 6826 }); 6827 /** 6828 * jQuery 6829 */ 6830 6831 $__default["default"].fn[NAME$5] = Modal._jQueryInterface; 6832 $__default["default"].fn[NAME$5].Constructor = Modal; 6833 6834 $__default["default"].fn[NAME$5].noConflict = function () { 6835 $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5; 6836 return Modal._jQueryInterface; 6837 }; 6838 6839 /** 6840 * -------------------------------------------------------------------------- 6841 * Bootstrap (v4.6.2): tools/sanitizer.js 6842 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6843 * -------------------------------------------------------------------------- 6844 */ 6845 var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; 6846 var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 6847 var DefaultWhitelist = { 6848 // Global attributes allowed on any supplied element below. 6849 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 6850 a: ['target', 'href', 'title', 'rel'], 6851 area: [], 6852 b: [], 6853 br: [], 6854 col: [], 6855 code: [], 6856 div: [], 6857 em: [], 6858 hr: [], 6859 h1: [], 6860 h2: [], 6861 h3: [], 6862 h4: [], 6863 h5: [], 6864 h6: [], 6865 i: [], 6866 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 6867 li: [], 6868 ol: [], 6869 p: [], 6870 pre: [], 6871 s: [], 6872 small: [], 6873 span: [], 6874 sub: [], 6875 sup: [], 6876 strong: [], 6877 u: [], 6878 ul: [] 6879 }; 6880 /** 6881 * A pattern that recognizes a commonly useful subset of URLs that are safe. 6882 * 6883 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 6884 */ 6885 6886 var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 6887 /** 6888 * A pattern that matches safe data URLs. Only matches image, video and audio types. 6889 * 6890 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 6891 */ 6892 6893 var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 6894 6895 function allowedAttribute(attr, allowedAttributeList) { 6896 var attrName = attr.nodeName.toLowerCase(); 6897 6898 if (allowedAttributeList.indexOf(attrName) !== -1) { 6899 if (uriAttrs.indexOf(attrName) !== -1) { 6900 return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue)); 6901 } 6902 6903 return true; 6904 } 6905 6906 var regExp = allowedAttributeList.filter(function (attrRegex) { 6907 return attrRegex instanceof RegExp; 6908 }); // Check if a regular expression validates the attribute. 6909 6910 for (var i = 0, len = regExp.length; i < len; i++) { 6911 if (regExp[i].test(attrName)) { 6912 return true; 6913 } 6914 } 6915 6916 return false; 6917 } 6918 6919 function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { 6920 if (unsafeHtml.length === 0) { 6921 return unsafeHtml; 6922 } 6923 6924 if (sanitizeFn && typeof sanitizeFn === 'function') { 6925 return sanitizeFn(unsafeHtml); 6926 } 6927 6928 var domParser = new window.DOMParser(); 6929 var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 6930 var whitelistKeys = Object.keys(whiteList); 6931 var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); 6932 6933 var _loop = function _loop(i, len) { 6934 var el = elements[i]; 6935 var elName = el.nodeName.toLowerCase(); 6936 6937 if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { 6938 el.parentNode.removeChild(el); 6939 return "continue"; 6940 } 6941 6942 var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread 6943 6944 var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); 6945 attributeList.forEach(function (attr) { 6946 if (!allowedAttribute(attr, whitelistedAttributes)) { 6947 el.removeAttribute(attr.nodeName); 6948 } 6949 }); 6950 }; 6951 6952 for (var i = 0, len = elements.length; i < len; i++) { 6953 var _ret = _loop(i); 6954 6955 if (_ret === "continue") continue; 6956 } 6957 6958 return createdDocument.body.innerHTML; 6959 } 6960 6961 /** 6962 * Constants 6963 */ 6964 6965 var NAME$4 = 'tooltip'; 6966 var VERSION$4 = '4.6.2'; 6967 var DATA_KEY$4 = 'bs.tooltip'; 6968 var EVENT_KEY$4 = "." + DATA_KEY$4; 6969 var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4]; 6970 var CLASS_PREFIX$1 = 'bs-tooltip'; 6971 var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); 6972 var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; 6973 var CLASS_NAME_FADE$3 = 'fade'; 6974 var CLASS_NAME_SHOW$3 = 'show'; 6975 var HOVER_STATE_SHOW = 'show'; 6976 var HOVER_STATE_OUT = 'out'; 6977 var SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 6978 var SELECTOR_ARROW = '.arrow'; 6979 var TRIGGER_HOVER = 'hover'; 6980 var TRIGGER_FOCUS = 'focus'; 6981 var TRIGGER_CLICK = 'click'; 6982 var TRIGGER_MANUAL = 'manual'; 6983 var AttachmentMap = { 6984 AUTO: 'auto', 6985 TOP: 'top', 6986 RIGHT: 'right', 6987 BOTTOM: 'bottom', 6988 LEFT: 'left' 6989 }; 6990 var Default$3 = { 6991 animation: true, 6992 template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', 6993 trigger: 'hover focus', 6994 title: '', 6995 delay: 0, 6996 html: false, 6997 selector: false, 6998 placement: 'top', 6999 offset: 0, 7000 container: false, 7001 fallbackPlacement: 'flip', 7002 boundary: 'scrollParent', 7003 customClass: '', 7004 sanitize: true, 7005 sanitizeFn: null, 7006 whiteList: DefaultWhitelist, 7007 popperConfig: null 7008 }; 7009 var DefaultType$3 = { 7010 animation: 'boolean', 7011 template: 'string', 7012 title: '(string|element|function)', 7013 trigger: 'string', 7014 delay: '(number|object)', 7015 html: 'boolean', 7016 selector: '(string|boolean)', 7017 placement: '(string|function)', 7018 offset: '(number|string|function)', 7019 container: '(string|element|boolean)', 7020 fallbackPlacement: '(string|array)', 7021 boundary: '(string|element)', 7022 customClass: '(string|function)', 7023 sanitize: 'boolean', 7024 sanitizeFn: '(null|function)', 7025 whiteList: 'object', 7026 popperConfig: '(null|object)' 7027 }; 7028 var Event$1 = { 7029 HIDE: "hide" + EVENT_KEY$4, 7030 HIDDEN: "hidden" + EVENT_KEY$4, 7031 SHOW: "show" + EVENT_KEY$4, 7032 SHOWN: "shown" + EVENT_KEY$4, 7033 INSERTED: "inserted" + EVENT_KEY$4, 7034 CLICK: "click" + EVENT_KEY$4, 7035 FOCUSIN: "focusin" + EVENT_KEY$4, 7036 FOCUSOUT: "focusout" + EVENT_KEY$4, 7037 MOUSEENTER: "mouseenter" + EVENT_KEY$4, 7038 MOUSELEAVE: "mouseleave" + EVENT_KEY$4 7039 }; 7040 /** 7041 * Class definition 7042 */ 7043 7044 var Tooltip = /*#__PURE__*/function () { 7045 function Tooltip(element, config) { 7046 if (typeof Popper__default["default"] === 'undefined') { 7047 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 7048 } // Private 7049 7050 7051 this._isEnabled = true; 7052 this._timeout = 0; 7053 this._hoverState = ''; 7054 this._activeTrigger = {}; 7055 this._popper = null; // Protected 7056 7057 this.element = element; 7058 this.config = this._getConfig(config); 7059 this.tip = null; 7060 7061 this._setListeners(); 7062 } // Getters 7063 7064 7065 var _proto = Tooltip.prototype; 7066 7067 // Public 7068 _proto.enable = function enable() { 7069 this._isEnabled = true; 7070 }; 7071 7072 _proto.disable = function disable() { 7073 this._isEnabled = false; 7074 }; 7075 7076 _proto.toggleEnabled = function toggleEnabled() { 7077 this._isEnabled = !this._isEnabled; 7078 }; 7079 7080 _proto.toggle = function toggle(event) { 7081 if (!this._isEnabled) { 7082 return; 7083 } 7084 7085 if (event) { 7086 var dataKey = this.constructor.DATA_KEY; 7087 var context = $__default["default"](event.currentTarget).data(dataKey); 7088 7089 if (!context) { 7090 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 7091 $__default["default"](event.currentTarget).data(dataKey, context); 7092 } 7093 7094 context._activeTrigger.click = !context._activeTrigger.click; 7095 7096 if (context._isWithActiveTrigger()) { 7097 context._enter(null, context); 7098 } else { 7099 context._leave(null, context); 7100 } 7101 } else { 7102 if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) { 7103 this._leave(null, this); 7104 7105 return; 7106 } 7107 7108 this._enter(null, this); 7109 } 7110 }; 7111 7112 _proto.dispose = function dispose() { 7113 clearTimeout(this._timeout); 7114 $__default["default"].removeData(this.element, this.constructor.DATA_KEY); 7115 $__default["default"](this.element).off(this.constructor.EVENT_KEY); 7116 $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler); 7117 7118 if (this.tip) { 7119 $__default["default"](this.tip).remove(); 7120 } 7121 7122 this._isEnabled = null; 7123 this._timeout = null; 7124 this._hoverState = null; 7125 this._activeTrigger = null; 7126 7127 if (this._popper) { 7128 this._popper.destroy(); 7129 } 7130 7131 this._popper = null; 7132 this.element = null; 7133 this.config = null; 7134 this.tip = null; 7135 }; 7136 7137 _proto.show = function show() { 7138 var _this = this; 7139 7140 if ($__default["default"](this.element).css('display') === 'none') { 7141 throw new Error('Please use show on visible elements'); 7142 } 7143 7144 var showEvent = $__default["default"].Event(this.constructor.Event.SHOW); 7145 7146 if (this.isWithContent() && this._isEnabled) { 7147 $__default["default"](this.element).trigger(showEvent); 7148 var shadowRoot = Util.findShadowRoot(this.element); 7149 var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); 7150 7151 if (showEvent.isDefaultPrevented() || !isInTheDom) { 7152 return; 7153 } 7154 7155 var tip = this.getTipElement(); 7156 var tipId = Util.getUID(this.constructor.NAME); 7157 tip.setAttribute('id', tipId); 7158 this.element.setAttribute('aria-describedby', tipId); 7159 this.setContent(); 7160 7161 if (this.config.animation) { 7162 $__default["default"](tip).addClass(CLASS_NAME_FADE$3); 7163 } 7164 7165 var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; 7166 7167 var attachment = this._getAttachment(placement); 7168 7169 this.addAttachmentClass(attachment); 7170 7171 var container = this._getContainer(); 7172 7173 $__default["default"](tip).data(this.constructor.DATA_KEY, this); 7174 7175 if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) { 7176 $__default["default"](tip).appendTo(container); 7177 } 7178 7179 $__default["default"](this.element).trigger(this.constructor.Event.INSERTED); 7180 this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment)); 7181 $__default["default"](tip).addClass(CLASS_NAME_SHOW$3); 7182 $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra 7183 // empty mouseover listeners to the body's immediate children; 7184 // only needed because of broken event delegation on iOS 7185 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 7186 7187 if ('ontouchstart' in document.documentElement) { 7188 $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop); 7189 } 7190 7191 var complete = function complete() { 7192 if (_this.config.animation) { 7193 _this._fixTransition(); 7194 } 7195 7196 var prevHoverState = _this._hoverState; 7197 _this._hoverState = null; 7198 $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN); 7199 7200 if (prevHoverState === HOVER_STATE_OUT) { 7201 _this._leave(null, _this); 7202 } 7203 }; 7204 7205 if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) { 7206 var transitionDuration = Util.getTransitionDurationFromElement(this.tip); 7207 $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 7208 } else { 7209 complete(); 7210 } 7211 } 7212 }; 7213 7214 _proto.hide = function hide(callback) { 7215 var _this2 = this; 7216 7217 var tip = this.getTipElement(); 7218 var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE); 7219 7220 var complete = function complete() { 7221 if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { 7222 tip.parentNode.removeChild(tip); 7223 } 7224 7225 _this2._cleanTipClass(); 7226 7227 _this2.element.removeAttribute('aria-describedby'); 7228 7229 $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN); 7230 7231 if (_this2._popper !== null) { 7232 _this2._popper.destroy(); 7233 } 7234 7235 if (callback) { 7236 callback(); 7237 } 7238 }; 7239 7240 $__default["default"](this.element).trigger(hideEvent); 7241 7242 if (hideEvent.isDefaultPrevented()) { 7243 return; 7244 } 7245 7246 $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra 7247 // empty mouseover listeners we added for iOS support 7248 7249 if ('ontouchstart' in document.documentElement) { 7250 $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop); 7251 } 7252 7253 this._activeTrigger[TRIGGER_CLICK] = false; 7254 this._activeTrigger[TRIGGER_FOCUS] = false; 7255 this._activeTrigger[TRIGGER_HOVER] = false; 7256 7257 if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) { 7258 var transitionDuration = Util.getTransitionDurationFromElement(tip); 7259 $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 7260 } else { 7261 complete(); 7262 } 7263 7264 this._hoverState = ''; 7265 }; 7266 7267 _proto.update = function update() { 7268 if (this._popper !== null) { 7269 this._popper.scheduleUpdate(); 7270 } 7271 } // Protected 7272 ; 7273 7274 _proto.isWithContent = function isWithContent() { 7275 return Boolean(this.getTitle()); 7276 }; 7277 7278 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 7279 $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); 7280 }; 7281 7282 _proto.getTipElement = function getTipElement() { 7283 this.tip = this.tip || $__default["default"](this.config.template)[0]; 7284 return this.tip; 7285 }; 7286 7287 _proto.setContent = function setContent() { 7288 var tip = this.getTipElement(); 7289 this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle()); 7290 $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3); 7291 }; 7292 7293 _proto.setElementContent = function setElementContent($element, content) { 7294 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 7295 // Content is a DOM node or a jQuery 7296 if (this.config.html) { 7297 if (!$__default["default"](content).parent().is($element)) { 7298 $element.empty().append(content); 7299 } 7300 } else { 7301 $element.text($__default["default"](content).text()); 7302 } 7303 7304 return; 7305 } 7306 7307 if (this.config.html) { 7308 if (this.config.sanitize) { 7309 content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); 7310 } 7311 7312 $element.html(content); 7313 } else { 7314 $element.text(content); 7315 } 7316 }; 7317 7318 _proto.getTitle = function getTitle() { 7319 var title = this.element.getAttribute('data-original-title'); 7320 7321 if (!title) { 7322 title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; 7323 } 7324 7325 return title; 7326 } // Private 7327 ; 7328 7329 _proto._getPopperConfig = function _getPopperConfig(attachment) { 7330 var _this3 = this; 7331 7332 var defaultBsConfig = { 7333 placement: attachment, 7334 modifiers: { 7335 offset: this._getOffset(), 7336 flip: { 7337 behavior: this.config.fallbackPlacement 7338 }, 7339 arrow: { 7340 element: SELECTOR_ARROW 7341 }, 7342 preventOverflow: { 7343 boundariesElement: this.config.boundary 7344 } 7345 }, 7346 onCreate: function onCreate(data) { 7347 if (data.originalPlacement !== data.placement) { 7348 _this3._handlePopperPlacementChange(data); 7349 } 7350 }, 7351 onUpdate: function onUpdate(data) { 7352 return _this3._handlePopperPlacementChange(data); 7353 } 7354 }; 7355 return _extends({}, defaultBsConfig, this.config.popperConfig); 7356 }; 7357 7358 _proto._getOffset = function _getOffset() { 7359 var _this4 = this; 7360 7361 var offset = {}; 7362 7363 if (typeof this.config.offset === 'function') { 7364 offset.fn = function (data) { 7365 data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element)); 7366 return data; 7367 }; 7368 } else { 7369 offset.offset = this.config.offset; 7370 } 7371 7372 return offset; 7373 }; 7374 7375 _proto._getContainer = function _getContainer() { 7376 if (this.config.container === false) { 7377 return document.body; 7378 } 7379 7380 if (Util.isElement(this.config.container)) { 7381 return $__default["default"](this.config.container); 7382 } 7383 7384 return $__default["default"](document).find(this.config.container); 7385 }; 7386 7387 _proto._getAttachment = function _getAttachment(placement) { 7388 return AttachmentMap[placement.toUpperCase()]; 7389 }; 7390 7391 _proto._setListeners = function _setListeners() { 7392 var _this5 = this; 7393 7394 var triggers = this.config.trigger.split(' '); 7395 triggers.forEach(function (trigger) { 7396 if (trigger === 'click') { 7397 $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) { 7398 return _this5.toggle(event); 7399 }); 7400 } else if (trigger !== TRIGGER_MANUAL) { 7401 var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN; 7402 var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT; 7403 $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) { 7404 return _this5._enter(event); 7405 }).on(eventOut, _this5.config.selector, function (event) { 7406 return _this5._leave(event); 7407 }); 7408 } 7409 }); 7410 7411 this._hideModalHandler = function () { 7412 if (_this5.element) { 7413 _this5.hide(); 7414 } 7415 }; 7416 7417 $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler); 7418 7419 if (this.config.selector) { 7420 this.config = _extends({}, this.config, { 7421 trigger: 'manual', 7422 selector: '' 7423 }); 7424 } else { 7425 this._fixTitle(); 7426 } 7427 }; 7428 7429 _proto._fixTitle = function _fixTitle() { 7430 var titleType = typeof this.element.getAttribute('data-original-title'); 7431 7432 if (this.element.getAttribute('title') || titleType !== 'string') { 7433 this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); 7434 this.element.setAttribute('title', ''); 7435 } 7436 }; 7437 7438 _proto._enter = function _enter(event, context) { 7439 var dataKey = this.constructor.DATA_KEY; 7440 context = context || $__default["default"](event.currentTarget).data(dataKey); 7441 7442 if (!context) { 7443 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 7444 $__default["default"](event.currentTarget).data(dataKey, context); 7445 } 7446 7447 if (event) { 7448 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 7449 } 7450 7451 if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) { 7452 context._hoverState = HOVER_STATE_SHOW; 7453 return; 7454 } 7455 7456 clearTimeout(context._timeout); 7457 context._hoverState = HOVER_STATE_SHOW; 7458 7459 if (!context.config.delay || !context.config.delay.show) { 7460 context.show(); 7461 return; 7462 } 7463 7464 context._timeout = setTimeout(function () { 7465 if (context._hoverState === HOVER_STATE_SHOW) { 7466 context.show(); 7467 } 7468 }, context.config.delay.show); 7469 }; 7470 7471 _proto._leave = function _leave(event, context) { 7472 var dataKey = this.constructor.DATA_KEY; 7473 context = context || $__default["default"](event.currentTarget).data(dataKey); 7474 7475 if (!context) { 7476 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 7477 $__default["default"](event.currentTarget).data(dataKey, context); 7478 } 7479 7480 if (event) { 7481 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false; 7482 } 7483 7484 if (context._isWithActiveTrigger()) { 7485 return; 7486 } 7487 7488 clearTimeout(context._timeout); 7489 context._hoverState = HOVER_STATE_OUT; 7490 7491 if (!context.config.delay || !context.config.delay.hide) { 7492 context.hide(); 7493 return; 7494 } 7495 7496 context._timeout = setTimeout(function () { 7497 if (context._hoverState === HOVER_STATE_OUT) { 7498 context.hide(); 7499 } 7500 }, context.config.delay.hide); 7501 }; 7502 7503 _proto._isWithActiveTrigger = function _isWithActiveTrigger() { 7504 for (var trigger in this._activeTrigger) { 7505 if (this._activeTrigger[trigger]) { 7506 return true; 7507 } 7508 } 7509 7510 return false; 7511 }; 7512 7513 _proto._getConfig = function _getConfig(config) { 7514 var dataAttributes = $__default["default"](this.element).data(); 7515 Object.keys(dataAttributes).forEach(function (dataAttr) { 7516 if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { 7517 delete dataAttributes[dataAttr]; 7518 } 7519 }); 7520 config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); 7521 7522 if (typeof config.delay === 'number') { 7523 config.delay = { 7524 show: config.delay, 7525 hide: config.delay 7526 }; 7527 } 7528 7529 if (typeof config.title === 'number') { 7530 config.title = config.title.toString(); 7531 } 7532 7533 if (typeof config.content === 'number') { 7534 config.content = config.content.toString(); 7535 } 7536 7537 Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); 7538 7539 if (config.sanitize) { 7540 config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); 7541 } 7542 7543 return config; 7544 }; 7545 7546 _proto._getDelegateConfig = function _getDelegateConfig() { 7547 var config = {}; 7548 7549 if (this.config) { 7550 for (var key in this.config) { 7551 if (this.constructor.Default[key] !== this.config[key]) { 7552 config[key] = this.config[key]; 7553 } 7554 } 7555 } 7556 7557 return config; 7558 }; 7559 7560 _proto._cleanTipClass = function _cleanTipClass() { 7561 var $tip = $__default["default"](this.getTipElement()); 7562 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); 7563 7564 if (tabClass !== null && tabClass.length) { 7565 $tip.removeClass(tabClass.join('')); 7566 } 7567 }; 7568 7569 _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { 7570 this.tip = popperData.instance.popper; 7571 7572 this._cleanTipClass(); 7573 7574 this.addAttachmentClass(this._getAttachment(popperData.placement)); 7575 }; 7576 7577 _proto._fixTransition = function _fixTransition() { 7578 var tip = this.getTipElement(); 7579 var initConfigAnimation = this.config.animation; 7580 7581 if (tip.getAttribute('x-placement') !== null) { 7582 return; 7583 } 7584 7585 $__default["default"](tip).removeClass(CLASS_NAME_FADE$3); 7586 this.config.animation = false; 7587 this.hide(); 7588 this.show(); 7589 this.config.animation = initConfigAnimation; 7590 } // Static 7591 ; 7592 7593 Tooltip._jQueryInterface = function _jQueryInterface(config) { 7594 return this.each(function () { 7595 var $element = $__default["default"](this); 7596 var data = $element.data(DATA_KEY$4); 7597 7598 var _config = typeof config === 'object' && config; 7599 7600 if (!data && /dispose|hide/.test(config)) { 7601 return; 7602 } 7603 7604 if (!data) { 7605 data = new Tooltip(this, _config); 7606 $element.data(DATA_KEY$4, data); 7607 } 7608 7609 if (typeof config === 'string') { 7610 if (typeof data[config] === 'undefined') { 7611 throw new TypeError("No method named \"" + config + "\""); 7612 } 7613 7614 data[config](); 7615 } 7616 }); 7617 }; 7618 7619 _createClass(Tooltip, null, [{ 7620 key: "VERSION", 7621 get: function get() { 7622 return VERSION$4; 7623 } 7624 }, { 7625 key: "Default", 7626 get: function get() { 7627 return Default$3; 7628 } 7629 }, { 7630 key: "NAME", 7631 get: function get() { 7632 return NAME$4; 7633 } 7634 }, { 7635 key: "DATA_KEY", 7636 get: function get() { 7637 return DATA_KEY$4; 7638 } 7639 }, { 7640 key: "Event", 7641 get: function get() { 7642 return Event$1; 7643 } 7644 }, { 7645 key: "EVENT_KEY", 7646 get: function get() { 7647 return EVENT_KEY$4; 7648 } 7649 }, { 7650 key: "DefaultType", 7651 get: function get() { 7652 return DefaultType$3; 7653 } 7654 }]); 7655 7656 return Tooltip; 7657 }(); 7658 /** 7659 * jQuery 7660 */ 7661 7662 7663 $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface; 7664 $__default["default"].fn[NAME$4].Constructor = Tooltip; 7665 7666 $__default["default"].fn[NAME$4].noConflict = function () { 7667 $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4; 7668 return Tooltip._jQueryInterface; 7669 }; 7670 7671 /** 7672 * Constants 7673 */ 7674 7675 var NAME$3 = 'popover'; 7676 var VERSION$3 = '4.6.2'; 7677 var DATA_KEY$3 = 'bs.popover'; 7678 var EVENT_KEY$3 = "." + DATA_KEY$3; 7679 var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3]; 7680 var CLASS_PREFIX = 'bs-popover'; 7681 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 7682 var CLASS_NAME_FADE$2 = 'fade'; 7683 var CLASS_NAME_SHOW$2 = 'show'; 7684 var SELECTOR_TITLE = '.popover-header'; 7685 var SELECTOR_CONTENT = '.popover-body'; 7686 7687 var Default$2 = _extends({}, Tooltip.Default, { 7688 placement: 'right', 7689 trigger: 'click', 7690 content: '', 7691 template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' 7692 }); 7693 7694 var DefaultType$2 = _extends({}, Tooltip.DefaultType, { 7695 content: '(string|element|function)' 7696 }); 7697 7698 var Event = { 7699 HIDE: "hide" + EVENT_KEY$3, 7700 HIDDEN: "hidden" + EVENT_KEY$3, 7701 SHOW: "show" + EVENT_KEY$3, 7702 SHOWN: "shown" + EVENT_KEY$3, 7703 INSERTED: "inserted" + EVENT_KEY$3, 7704 CLICK: "click" + EVENT_KEY$3, 7705 FOCUSIN: "focusin" + EVENT_KEY$3, 7706 FOCUSOUT: "focusout" + EVENT_KEY$3, 7707 MOUSEENTER: "mouseenter" + EVENT_KEY$3, 7708 MOUSELEAVE: "mouseleave" + EVENT_KEY$3 7709 }; 7710 /** 7711 * Class definition 7712 */ 7713 7714 var Popover = /*#__PURE__*/function (_Tooltip) { 7715 _inheritsLoose(Popover, _Tooltip); 7716 7717 function Popover() { 7718 return _Tooltip.apply(this, arguments) || this; 7719 } 7720 7721 var _proto = Popover.prototype; 7722 7723 // Overrides 7724 _proto.isWithContent = function isWithContent() { 7725 return this.getTitle() || this._getContent(); 7726 }; 7727 7728 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 7729 $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 7730 }; 7731 7732 _proto.getTipElement = function getTipElement() { 7733 this.tip = this.tip || $__default["default"](this.config.template)[0]; 7734 return this.tip; 7735 }; 7736 7737 _proto.setContent = function setContent() { 7738 var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events 7739 7740 this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle()); 7741 7742 var content = this._getContent(); 7743 7744 if (typeof content === 'function') { 7745 content = content.call(this.element); 7746 } 7747 7748 this.setElementContent($tip.find(SELECTOR_CONTENT), content); 7749 $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2); 7750 } // Private 7751 ; 7752 7753 _proto._getContent = function _getContent() { 7754 return this.element.getAttribute('data-content') || this.config.content; 7755 }; 7756 7757 _proto._cleanTipClass = function _cleanTipClass() { 7758 var $tip = $__default["default"](this.getTipElement()); 7759 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 7760 7761 if (tabClass !== null && tabClass.length > 0) { 7762 $tip.removeClass(tabClass.join('')); 7763 } 7764 } // Static 7765 ; 7766 7767 Popover._jQueryInterface = function _jQueryInterface(config) { 7768 return this.each(function () { 7769 var data = $__default["default"](this).data(DATA_KEY$3); 7770 7771 var _config = typeof config === 'object' ? config : null; 7772 7773 if (!data && /dispose|hide/.test(config)) { 7774 return; 7775 } 7776 7777 if (!data) { 7778 data = new Popover(this, _config); 7779 $__default["default"](this).data(DATA_KEY$3, data); 7780 } 7781 7782 if (typeof config === 'string') { 7783 if (typeof data[config] === 'undefined') { 7784 throw new TypeError("No method named \"" + config + "\""); 7785 } 7786 7787 data[config](); 7788 } 7789 }); 7790 }; 7791 7792 _createClass(Popover, null, [{ 7793 key: "VERSION", 7794 get: // Getters 7795 function get() { 7796 return VERSION$3; 7797 } 7798 }, { 7799 key: "Default", 7800 get: function get() { 7801 return Default$2; 7802 } 7803 }, { 7804 key: "NAME", 7805 get: function get() { 7806 return NAME$3; 7807 } 7808 }, { 7809 key: "DATA_KEY", 7810 get: function get() { 7811 return DATA_KEY$3; 7812 } 7813 }, { 7814 key: "Event", 7815 get: function get() { 7816 return Event; 7817 } 7818 }, { 7819 key: "EVENT_KEY", 7820 get: function get() { 7821 return EVENT_KEY$3; 7822 } 7823 }, { 7824 key: "DefaultType", 7825 get: function get() { 7826 return DefaultType$2; 7827 } 7828 }]); 7829 7830 return Popover; 7831 }(Tooltip); 7832 /** 7833 * jQuery 7834 */ 7835 7836 7837 $__default["default"].fn[NAME$3] = Popover._jQueryInterface; 7838 $__default["default"].fn[NAME$3].Constructor = Popover; 7839 7840 $__default["default"].fn[NAME$3].noConflict = function () { 7841 $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3; 7842 return Popover._jQueryInterface; 7843 }; 7844 7845 /** 7846 * Constants 7847 */ 7848 7849 var NAME$2 = 'scrollspy'; 7850 var VERSION$2 = '4.6.2'; 7851 var DATA_KEY$2 = 'bs.scrollspy'; 7852 var EVENT_KEY$2 = "." + DATA_KEY$2; 7853 var DATA_API_KEY$1 = '.data-api'; 7854 var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2]; 7855 var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 7856 var CLASS_NAME_ACTIVE$1 = 'active'; 7857 var EVENT_ACTIVATE = "activate" + EVENT_KEY$2; 7858 var EVENT_SCROLL = "scroll" + EVENT_KEY$2; 7859 var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1; 7860 var METHOD_OFFSET = 'offset'; 7861 var METHOD_POSITION = 'position'; 7862 var SELECTOR_DATA_SPY = '[data-spy="scroll"]'; 7863 var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group'; 7864 var SELECTOR_NAV_LINKS = '.nav-link'; 7865 var SELECTOR_NAV_ITEMS = '.nav-item'; 7866 var SELECTOR_LIST_ITEMS = '.list-group-item'; 7867 var SELECTOR_DROPDOWN$1 = '.dropdown'; 7868 var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'; 7869 var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 7870 var Default$1 = { 7871 offset: 10, 7872 method: 'auto', 7873 target: '' 7874 }; 7875 var DefaultType$1 = { 7876 offset: 'number', 7877 method: 'string', 7878 target: '(string|element)' 7879 }; 7880 /** 7881 * Class definition 7882 */ 7883 7884 var ScrollSpy = /*#__PURE__*/function () { 7885 function ScrollSpy(element, config) { 7886 var _this = this; 7887 7888 this._element = element; 7889 this._scrollElement = element.tagName === 'BODY' ? window : element; 7890 this._config = this._getConfig(config); 7891 this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS); 7892 this._offsets = []; 7893 this._targets = []; 7894 this._activeTarget = null; 7895 this._scrollHeight = 0; 7896 $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) { 7897 return _this._process(event); 7898 }); 7899 this.refresh(); 7900 7901 this._process(); 7902 } // Getters 7903 7904 7905 var _proto = ScrollSpy.prototype; 7906 7907 // Public 7908 _proto.refresh = function refresh() { 7909 var _this2 = this; 7910 7911 var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION; 7912 var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 7913 var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; 7914 this._offsets = []; 7915 this._targets = []; 7916 this._scrollHeight = this._getScrollHeight(); 7917 var targets = [].slice.call(document.querySelectorAll(this._selector)); 7918 targets.map(function (element) { 7919 var target; 7920 var targetSelector = Util.getSelectorFromElement(element); 7921 7922 if (targetSelector) { 7923 target = document.querySelector(targetSelector); 7924 } 7925 7926 if (target) { 7927 var targetBCR = target.getBoundingClientRect(); 7928 7929 if (targetBCR.width || targetBCR.height) { 7930 // TODO (fat): remove sketch reliance on jQuery position/offset 7931 return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector]; 7932 } 7933 } 7934 7935 return null; 7936 }).filter(Boolean).sort(function (a, b) { 7937 return a[0] - b[0]; 7938 }).forEach(function (item) { 7939 _this2._offsets.push(item[0]); 7940 7941 _this2._targets.push(item[1]); 7942 }); 7943 }; 7944 7945 _proto.dispose = function dispose() { 7946 $__default["default"].removeData(this._element, DATA_KEY$2); 7947 $__default["default"](this._scrollElement).off(EVENT_KEY$2); 7948 this._element = null; 7949 this._scrollElement = null; 7950 this._config = null; 7951 this._selector = null; 7952 this._offsets = null; 7953 this._targets = null; 7954 this._activeTarget = null; 7955 this._scrollHeight = null; 7956 } // Private 7957 ; 7958 7959 _proto._getConfig = function _getConfig(config) { 7960 config = _extends({}, Default$1, typeof config === 'object' && config ? config : {}); 7961 7962 if (typeof config.target !== 'string' && Util.isElement(config.target)) { 7963 var id = $__default["default"](config.target).attr('id'); 7964 7965 if (!id) { 7966 id = Util.getUID(NAME$2); 7967 $__default["default"](config.target).attr('id', id); 7968 } 7969 7970 config.target = "#" + id; 7971 } 7972 7973 Util.typeCheckConfig(NAME$2, config, DefaultType$1); 7974 return config; 7975 }; 7976 7977 _proto._getScrollTop = function _getScrollTop() { 7978 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 7979 }; 7980 7981 _proto._getScrollHeight = function _getScrollHeight() { 7982 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 7983 }; 7984 7985 _proto._getOffsetHeight = function _getOffsetHeight() { 7986 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 7987 }; 7988 7989 _proto._process = function _process() { 7990 var scrollTop = this._getScrollTop() + this._config.offset; 7991 7992 var scrollHeight = this._getScrollHeight(); 7993 7994 var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 7995 7996 if (this._scrollHeight !== scrollHeight) { 7997 this.refresh(); 7998 } 7999 8000 if (scrollTop >= maxScroll) { 8001 var target = this._targets[this._targets.length - 1]; 8002 8003 if (this._activeTarget !== target) { 8004 this._activate(target); 8005 } 8006 8007 return; 8008 } 8009 8010 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 8011 this._activeTarget = null; 8012 8013 this._clear(); 8014 8015 return; 8016 } 8017 8018 for (var i = this._offsets.length; i--;) { 8019 var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 8020 8021 if (isActiveTarget) { 8022 this._activate(this._targets[i]); 8023 } 8024 } 8025 }; 8026 8027 _proto._activate = function _activate(target) { 8028 this._activeTarget = target; 8029 8030 this._clear(); 8031 8032 var queries = this._selector.split(',').map(function (selector) { 8033 return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; 8034 }); 8035 8036 var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(',')))); 8037 8038 if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) { 8039 $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1); 8040 $link.addClass(CLASS_NAME_ACTIVE$1); 8041 } else { 8042 // Set triggered link as active 8043 $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active 8044 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 8045 8046 $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item 8047 8048 $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1); 8049 } 8050 8051 $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, { 8052 relatedTarget: target 8053 }); 8054 }; 8055 8056 _proto._clear = function _clear() { 8057 [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) { 8058 return node.classList.contains(CLASS_NAME_ACTIVE$1); 8059 }).forEach(function (node) { 8060 return node.classList.remove(CLASS_NAME_ACTIVE$1); 8061 }); 8062 } // Static 8063 ; 8064 8065 ScrollSpy._jQueryInterface = function _jQueryInterface(config) { 8066 return this.each(function () { 8067 var data = $__default["default"](this).data(DATA_KEY$2); 8068 8069 var _config = typeof config === 'object' && config; 8070 8071 if (!data) { 8072 data = new ScrollSpy(this, _config); 8073 $__default["default"](this).data(DATA_KEY$2, data); 8074 } 8075 8076 if (typeof config === 'string') { 8077 if (typeof data[config] === 'undefined') { 8078 throw new TypeError("No method named \"" + config + "\""); 8079 } 8080 8081 data[config](); 8082 } 8083 }); 8084 }; 8085 8086 _createClass(ScrollSpy, null, [{ 8087 key: "VERSION", 8088 get: function get() { 8089 return VERSION$2; 8090 } 8091 }, { 8092 key: "Default", 8093 get: function get() { 8094 return Default$1; 8095 } 8096 }]); 8097 8098 return ScrollSpy; 8099 }(); 8100 /** 8101 * Data API implementation 8102 */ 8103 8104 8105 $__default["default"](window).on(EVENT_LOAD_DATA_API, function () { 8106 var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY)); 8107 var scrollSpysLength = scrollSpys.length; 8108 8109 for (var i = scrollSpysLength; i--;) { 8110 var $spy = $__default["default"](scrollSpys[i]); 8111 8112 ScrollSpy._jQueryInterface.call($spy, $spy.data()); 8113 } 8114 }); 8115 /** 8116 * jQuery 8117 */ 8118 8119 $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface; 8120 $__default["default"].fn[NAME$2].Constructor = ScrollSpy; 8121 8122 $__default["default"].fn[NAME$2].noConflict = function () { 8123 $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2; 8124 return ScrollSpy._jQueryInterface; 8125 }; 8126 8127 /** 8128 * Constants 8129 */ 8130 8131 var NAME$1 = 'tab'; 8132 var VERSION$1 = '4.6.2'; 8133 var DATA_KEY$1 = 'bs.tab'; 8134 var EVENT_KEY$1 = "." + DATA_KEY$1; 8135 var DATA_API_KEY = '.data-api'; 8136 var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1]; 8137 var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'; 8138 var CLASS_NAME_ACTIVE = 'active'; 8139 var CLASS_NAME_DISABLED = 'disabled'; 8140 var CLASS_NAME_FADE$1 = 'fade'; 8141 var CLASS_NAME_SHOW$1 = 'show'; 8142 var EVENT_HIDE$1 = "hide" + EVENT_KEY$1; 8143 var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1; 8144 var EVENT_SHOW$1 = "show" + EVENT_KEY$1; 8145 var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1; 8146 var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY; 8147 var SELECTOR_DROPDOWN = '.dropdown'; 8148 var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 8149 var SELECTOR_ACTIVE = '.active'; 8150 var SELECTOR_ACTIVE_UL = '> li > .active'; 8151 var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]'; 8152 var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 8153 var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'; 8154 /** 8155 * Class definition 8156 */ 8157 8158 var Tab = /*#__PURE__*/function () { 8159 function Tab(element) { 8160 this._element = element; 8161 } // Getters 8162 8163 8164 var _proto = Tab.prototype; 8165 8166 // Public 8167 _proto.show = function show() { 8168 var _this = this; 8169 8170 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) { 8171 return; 8172 } 8173 8174 var target; 8175 var previous; 8176 var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]; 8177 var selector = Util.getSelectorFromElement(this._element); 8178 8179 if (listElement) { 8180 var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; 8181 previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector)); 8182 previous = previous[previous.length - 1]; 8183 } 8184 8185 var hideEvent = $__default["default"].Event(EVENT_HIDE$1, { 8186 relatedTarget: this._element 8187 }); 8188 var showEvent = $__default["default"].Event(EVENT_SHOW$1, { 8189 relatedTarget: previous 8190 }); 8191 8192 if (previous) { 8193 $__default["default"](previous).trigger(hideEvent); 8194 } 8195 8196 $__default["default"](this._element).trigger(showEvent); 8197 8198 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { 8199 return; 8200 } 8201 8202 if (selector) { 8203 target = document.querySelector(selector); 8204 } 8205 8206 this._activate(this._element, listElement); 8207 8208 var complete = function complete() { 8209 var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, { 8210 relatedTarget: _this._element 8211 }); 8212 var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, { 8213 relatedTarget: previous 8214 }); 8215 $__default["default"](previous).trigger(hiddenEvent); 8216 $__default["default"](_this._element).trigger(shownEvent); 8217 }; 8218 8219 if (target) { 8220 this._activate(target, target.parentNode, complete); 8221 } else { 8222 complete(); 8223 } 8224 }; 8225 8226 _proto.dispose = function dispose() { 8227 $__default["default"].removeData(this._element, DATA_KEY$1); 8228 this._element = null; 8229 } // Private 8230 ; 8231 8232 _proto._activate = function _activate(element, container, callback) { 8233 var _this2 = this; 8234 8235 var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE); 8236 var active = activeElements[0]; 8237 var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1); 8238 8239 var complete = function complete() { 8240 return _this2._transitionComplete(element, active, callback); 8241 }; 8242 8243 if (active && isTransitioning) { 8244 var transitionDuration = Util.getTransitionDurationFromElement(active); 8245 $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 8246 } else { 8247 complete(); 8248 } 8249 }; 8250 8251 _proto._transitionComplete = function _transitionComplete(element, active, callback) { 8252 if (active) { 8253 $__default["default"](active).removeClass(CLASS_NAME_ACTIVE); 8254 var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0]; 8255 8256 if (dropdownChild) { 8257 $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE); 8258 } 8259 8260 if (active.getAttribute('role') === 'tab') { 8261 active.setAttribute('aria-selected', false); 8262 } 8263 } 8264 8265 $__default["default"](element).addClass(CLASS_NAME_ACTIVE); 8266 8267 if (element.getAttribute('role') === 'tab') { 8268 element.setAttribute('aria-selected', true); 8269 } 8270 8271 Util.reflow(element); 8272 8273 if (element.classList.contains(CLASS_NAME_FADE$1)) { 8274 element.classList.add(CLASS_NAME_SHOW$1); 8275 } 8276 8277 var parent = element.parentNode; 8278 8279 if (parent && parent.nodeName === 'LI') { 8280 parent = parent.parentNode; 8281 } 8282 8283 if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) { 8284 var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0]; 8285 8286 if (dropdownElement) { 8287 var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE)); 8288 $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE); 8289 } 8290 8291 element.setAttribute('aria-expanded', true); 8292 } 8293 8294 if (callback) { 8295 callback(); 8296 } 8297 } // Static 8298 ; 8299 8300 Tab._jQueryInterface = function _jQueryInterface(config) { 8301 return this.each(function () { 8302 var $this = $__default["default"](this); 8303 var data = $this.data(DATA_KEY$1); 8304 8305 if (!data) { 8306 data = new Tab(this); 8307 $this.data(DATA_KEY$1, data); 8308 } 8309 8310 if (typeof config === 'string') { 8311 if (typeof data[config] === 'undefined') { 8312 throw new TypeError("No method named \"" + config + "\""); 8313 } 8314 8315 data[config](); 8316 } 8317 }); 8318 }; 8319 8320 _createClass(Tab, null, [{ 8321 key: "VERSION", 8322 get: function get() { 8323 return VERSION$1; 8324 } 8325 }]); 8326 8327 return Tab; 8328 }(); 8329 /** 8330 * Data API implementation 8331 */ 8332 8333 8334 $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 8335 event.preventDefault(); 8336 8337 Tab._jQueryInterface.call($__default["default"](this), 'show'); 8338 }); 8339 /** 8340 * jQuery 8341 */ 8342 8343 $__default["default"].fn[NAME$1] = Tab._jQueryInterface; 8344 $__default["default"].fn[NAME$1].Constructor = Tab; 8345 8346 $__default["default"].fn[NAME$1].noConflict = function () { 8347 $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1; 8348 return Tab._jQueryInterface; 8349 }; 8350 8351 /** 8352 * Constants 8353 */ 8354 8355 var NAME = 'toast'; 8356 var VERSION = '4.6.2'; 8357 var DATA_KEY = 'bs.toast'; 8358 var EVENT_KEY = "." + DATA_KEY; 8359 var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME]; 8360 var CLASS_NAME_FADE = 'fade'; 8361 var CLASS_NAME_HIDE = 'hide'; 8362 var CLASS_NAME_SHOW = 'show'; 8363 var CLASS_NAME_SHOWING = 'showing'; 8364 var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY; 8365 var EVENT_HIDE = "hide" + EVENT_KEY; 8366 var EVENT_HIDDEN = "hidden" + EVENT_KEY; 8367 var EVENT_SHOW = "show" + EVENT_KEY; 8368 var EVENT_SHOWN = "shown" + EVENT_KEY; 8369 var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'; 8370 var Default = { 8371 animation: true, 8372 autohide: true, 8373 delay: 500 8374 }; 8375 var DefaultType = { 8376 animation: 'boolean', 8377 autohide: 'boolean', 8378 delay: 'number' 8379 }; 8380 /** 8381 * Class definition 8382 */ 8383 8384 var Toast = /*#__PURE__*/function () { 8385 function Toast(element, config) { 8386 this._element = element; 8387 this._config = this._getConfig(config); 8388 this._timeout = null; 8389 8390 this._setListeners(); 8391 } // Getters 8392 8393 8394 var _proto = Toast.prototype; 8395 8396 // Public 8397 _proto.show = function show() { 8398 var _this = this; 8399 8400 var showEvent = $__default["default"].Event(EVENT_SHOW); 8401 $__default["default"](this._element).trigger(showEvent); 8402 8403 if (showEvent.isDefaultPrevented()) { 8404 return; 8405 } 8406 8407 this._clearTimeout(); 8408 8409 if (this._config.animation) { 8410 this._element.classList.add(CLASS_NAME_FADE); 8411 } 8412 8413 var complete = function complete() { 8414 _this._element.classList.remove(CLASS_NAME_SHOWING); 8415 8416 _this._element.classList.add(CLASS_NAME_SHOW); 8417 8418 $__default["default"](_this._element).trigger(EVENT_SHOWN); 8419 8420 if (_this._config.autohide) { 8421 _this._timeout = setTimeout(function () { 8422 _this.hide(); 8423 }, _this._config.delay); 8424 } 8425 }; 8426 8427 this._element.classList.remove(CLASS_NAME_HIDE); 8428 8429 Util.reflow(this._element); 8430 8431 this._element.classList.add(CLASS_NAME_SHOWING); 8432 8433 if (this._config.animation) { 8434 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 8435 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 8436 } else { 8437 complete(); 8438 } 8439 }; 8440 8441 _proto.hide = function hide() { 8442 if (!this._element.classList.contains(CLASS_NAME_SHOW)) { 8443 return; 8444 } 8445 8446 var hideEvent = $__default["default"].Event(EVENT_HIDE); 8447 $__default["default"](this._element).trigger(hideEvent); 8448 8449 if (hideEvent.isDefaultPrevented()) { 8450 return; 8451 } 8452 8453 this._close(); 8454 }; 8455 8456 _proto.dispose = function dispose() { 8457 this._clearTimeout(); 8458 8459 if (this._element.classList.contains(CLASS_NAME_SHOW)) { 8460 this._element.classList.remove(CLASS_NAME_SHOW); 8461 } 8462 8463 $__default["default"](this._element).off(EVENT_CLICK_DISMISS); 8464 $__default["default"].removeData(this._element, DATA_KEY); 8465 this._element = null; 8466 this._config = null; 8467 } // Private 8468 ; 8469 8470 _proto._getConfig = function _getConfig(config) { 8471 config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {}); 8472 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 8473 return config; 8474 }; 8475 8476 _proto._setListeners = function _setListeners() { 8477 var _this2 = this; 8478 8479 $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () { 8480 return _this2.hide(); 8481 }); 8482 }; 8483 8484 _proto._close = function _close() { 8485 var _this3 = this; 8486 8487 var complete = function complete() { 8488 _this3._element.classList.add(CLASS_NAME_HIDE); 8489 8490 $__default["default"](_this3._element).trigger(EVENT_HIDDEN); 8491 }; 8492 8493 this._element.classList.remove(CLASS_NAME_SHOW); 8494 8495 if (this._config.animation) { 8496 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 8497 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 8498 } else { 8499 complete(); 8500 } 8501 }; 8502 8503 _proto._clearTimeout = function _clearTimeout() { 8504 clearTimeout(this._timeout); 8505 this._timeout = null; 8506 } // Static 8507 ; 8508 8509 Toast._jQueryInterface = function _jQueryInterface(config) { 8510 return this.each(function () { 8511 var $element = $__default["default"](this); 8512 var data = $element.data(DATA_KEY); 8513 8514 var _config = typeof config === 'object' && config; 8515 8516 if (!data) { 8517 data = new Toast(this, _config); 8518 $element.data(DATA_KEY, data); 8519 } 8520 8521 if (typeof config === 'string') { 8522 if (typeof data[config] === 'undefined') { 8523 throw new TypeError("No method named \"" + config + "\""); 8524 } 8525 8526 data[config](this); 8527 } 8528 }); 8529 }; 8530 8531 _createClass(Toast, null, [{ 8532 key: "VERSION", 8533 get: function get() { 8534 return VERSION; 8535 } 8536 }, { 8537 key: "DefaultType", 8538 get: function get() { 8539 return DefaultType; 8540 } 8541 }, { 8542 key: "Default", 8543 get: function get() { 8544 return Default; 8545 } 8546 }]); 8547 8548 return Toast; 8549 }(); 8550 /** 8551 * jQuery 8552 */ 8553 8554 8555 $__default["default"].fn[NAME] = Toast._jQueryInterface; 8556 $__default["default"].fn[NAME].Constructor = Toast; 8557 8558 $__default["default"].fn[NAME].noConflict = function () { 8559 $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT; 8560 return Toast._jQueryInterface; 8561 }; 8562 8563 exports.Alert = Alert; 8564 exports.Button = Button; 8565 exports.Carousel = Carousel; 8566 exports.Collapse = Collapse; 8567 exports.Dropdown = Dropdown; 8568 exports.Modal = Modal; 8569 exports.Popover = Popover; 8570 exports.Scrollspy = ScrollSpy; 8571 exports.Tab = Tab; 8572 exports.Toast = Toast; 8573 exports.Tooltip = Tooltip; 8574 exports.Util = Util; 8575 8576 Object.defineProperty(exports, '__esModule', { value: true }); 8577 8578})); 8579//# sourceMappingURL=bootstrap.js.map 8580 8581 8582/***/ }), 8583
vendor: 14,213 bytes, lines 8584-9056
8584/***/ "../FigureBaseResources/node_modules/headroom.js/dist/headroom.js": 8585/*!************************************************************************!*\ 8586 !*** ../FigureBaseResources/node_modules/headroom.js/dist/headroom.js ***! 8587 \************************************************************************/ 8588/***/ (function(module, exports) { 8589 8590var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 8591 * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it 8592 * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js 8593 * License: MIT 8594 */ 8595 8596(function(root, factory) { 8597 'use strict'; 8598 8599 if (true) { 8600 // AMD. Register as an anonymous module. 8601 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 8602 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 8603 (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), 8604 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 8605 } 8606 else // removed by dead control flow 8607{} 8608}(this, function() { 8609 'use strict'; 8610 8611 /* exported features */ 8612 8613 var features = { 8614 bind : !!(function(){}.bind), 8615 classList : 'classList' in document.documentElement, 8616 rAF : !!(window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame) 8617 }; 8618 window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; 8619 8620 /** 8621 * Handles debouncing of events via requestAnimationFrame 8622 * @see http://www.html5rocks.com/en/tutorials/speed/animations/ 8623 * @param {Function} callback The callback to handle whichever event 8624 */ 8625 function Debouncer (callback) { 8626 this.callback = callback; 8627 this.ticking = false; 8628 } 8629 Debouncer.prototype = { 8630 constructor : Debouncer, 8631 8632 /** 8633 * dispatches the event to the supplied callback 8634 * @private 8635 */ 8636 update : function() { 8637 this.callback && this.callback(); 8638 this.ticking = false; 8639 }, 8640 8641 /** 8642 * ensures events don't get stacked 8643 * @private 8644 */ 8645 requestTick : function() { 8646 if(!this.ticking) { 8647 requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this))); 8648 this.ticking = true; 8649 } 8650 }, 8651 8652 /** 8653 * Attach this as the event listeners 8654 */ 8655 handleEvent : function() { 8656 this.requestTick(); 8657 } 8658 }; 8659 /** 8660 * Check if object is part of the DOM 8661 * @constructor 8662 * @param {Object} obj element to check 8663 */ 8664 function isDOMElement(obj) { 8665 return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType); 8666 } 8667 8668 /** 8669 * Helper function for extending objects 8670 */ 8671 function extend (object /*, objectN ... */) { 8672 if(arguments.length <= 0) { 8673 throw new Error('Missing arguments in extend function'); 8674 } 8675 8676 var result = object || {}, 8677 key, 8678 i; 8679 8680 for (i = 1; i < arguments.length; i++) { 8681 var replacement = arguments[i] || {}; 8682 8683 for (key in replacement) { 8684 // Recurse into object except if the object is a DOM element 8685 if(typeof result[key] === 'object' && ! isDOMElement(result[key])) { 8686 result[key] = extend(result[key], replacement[key]); 8687 } 8688 else { 8689 result[key] = result[key] || replacement[key]; 8690 } 8691 } 8692 } 8693 8694 return result; 8695 } 8696 8697 /** 8698 * Helper function for normalizing tolerance option to object format 8699 */ 8700 function normalizeTolerance (t) { 8701 return t === Object(t) ? t : { down : t, up : t }; 8702 } 8703 8704 /** 8705 * UI enhancement for fixed headers. 8706 * Hides header when scrolling down 8707 * Shows header when scrolling up 8708 * @constructor 8709 * @param {DOMElement} elem the header element 8710 * @param {Object} options options for the widget 8711 */ 8712 function Headroom (elem, options) { 8713 options = extend(options, Headroom.options); 8714 8715 this.lastKnownScrollY = 0; 8716 this.elem = elem; 8717 this.tolerance = normalizeTolerance(options.tolerance); 8718 this.classes = options.classes; 8719 this.offset = options.offset; 8720 this.scroller = options.scroller; 8721 this.initialised = false; 8722 this.onPin = options.onPin; 8723 this.onUnpin = options.onUnpin; 8724 this.onTop = options.onTop; 8725 this.onNotTop = options.onNotTop; 8726 this.onBottom = options.onBottom; 8727 this.onNotBottom = options.onNotBottom; 8728 } 8729 Headroom.prototype = { 8730 constructor : Headroom, 8731 8732 /** 8733 * Initialises the widget 8734 */ 8735 init : function() { 8736 if(!Headroom.cutsTheMustard) { 8737 return; 8738 } 8739 8740 this.debouncer = new Debouncer(this.update.bind(this)); 8741 this.elem.classList.add(this.classes.initial); 8742 8743 // defer event registration to handle browser 8744 // potentially restoring previous scroll position 8745 setTimeout(this.attachEvent.bind(this), 100); 8746 8747 return this; 8748 }, 8749 8750 /** 8751 * Unattaches events and removes any classes that were added 8752 */ 8753 destroy : function() { 8754 var classes = this.classes; 8755 8756 this.initialised = false; 8757 8758 for (var key in classes) { 8759 if(classes.hasOwnProperty(key)) { 8760 this.elem.classList.remove(classes[key]); 8761 } 8762 } 8763 8764 this.scroller.removeEventListener('scroll', this.debouncer, false); 8765 }, 8766 8767 /** 8768 * Attaches the scroll event 8769 * @private 8770 */ 8771 attachEvent : function() { 8772 if(!this.initialised){ 8773 this.lastKnownScrollY = this.getScrollY(); 8774 this.initialised = true; 8775 this.scroller.addEventListener('scroll', this.debouncer, false); 8776 8777 this.debouncer.handleEvent(); 8778 } 8779 }, 8780 8781 /** 8782 * Unpins the header if it's currently pinned 8783 */ 8784 unpin : function() { 8785 var classList = this.elem.classList, 8786 classes = this.classes; 8787 8788 if(classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) { 8789 classList.add(classes.unpinned); 8790 classList.remove(classes.pinned); 8791 this.onUnpin && this.onUnpin.call(this); 8792 } 8793 }, 8794 8795 /** 8796 * Pins the header if it's currently unpinned 8797 */ 8798 pin : function() { 8799 var classList = this.elem.classList, 8800 classes = this.classes; 8801 8802 if(classList.contains(classes.unpinned)) { 8803 classList.remove(classes.unpinned); 8804 classList.add(classes.pinned); 8805 this.onPin && this.onPin.call(this); 8806 } 8807 }, 8808 8809 /** 8810 * Handles the top states 8811 */ 8812 top : function() { 8813 var classList = this.elem.classList, 8814 classes = this.classes; 8815 8816 if(!classList.contains(classes.top)) { 8817 classList.add(classes.top); 8818 classList.remove(classes.notTop); 8819 this.onTop && this.onTop.call(this); 8820 } 8821 }, 8822 8823 /** 8824 * Handles the not top state 8825 */ 8826 notTop : function() { 8827 var classList = this.elem.classList, 8828 classes = this.classes; 8829 8830 if(!classList.contains(classes.notTop)) { 8831 classList.add(classes.notTop); 8832 classList.remove(classes.top); 8833 this.onNotTop && this.onNotTop.call(this); 8834 } 8835 }, 8836 8837 bottom : function() { 8838 var classList = this.elem.classList, 8839 classes = this.classes; 8840 8841 if(!classList.contains(classes.bottom)) { 8842 classList.add(classes.bottom); 8843 classList.remove(classes.notBottom); 8844 this.onBottom && this.onBottom.call(this); 8845 } 8846 }, 8847 8848 /** 8849 * Handles the not top state 8850 */ 8851 notBottom : function() { 8852 var classList = this.elem.classList, 8853 classes = this.classes; 8854 8855 if(!classList.contains(classes.notBottom)) { 8856 classList.add(classes.notBottom); 8857 classList.remove(classes.bottom); 8858 this.onNotBottom && this.onNotBottom.call(this); 8859 } 8860 }, 8861 8862 /** 8863 * Gets the Y scroll position 8864 * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY 8865 * @return {Number} pixels the page has scrolled along the Y-axis 8866 */ 8867 getScrollY : function() { 8868 return (this.scroller.pageYOffset !== undefined) 8869 ? this.scroller.pageYOffset 8870 : (this.scroller.scrollTop !== undefined) 8871 ? this.scroller.scrollTop 8872 : (document.documentElement || document.body.parentNode || document.body).scrollTop; 8873 }, 8874 8875 /** 8876 * Gets the height of the viewport 8877 * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript 8878 * @return {int} the height of the viewport in pixels 8879 */ 8880 getViewportHeight : function () { 8881 return window.innerHeight 8882 || document.documentElement.clientHeight 8883 || document.body.clientHeight; 8884 }, 8885 8886 /** 8887 * Gets the physical height of the DOM element 8888 * @param {Object} elm the element to calculate the physical height of which 8889 * @return {int} the physical height of the element in pixels 8890 */ 8891 getElementPhysicalHeight : function (elm) { 8892 return Math.max( 8893 elm.offsetHeight, 8894 elm.clientHeight 8895 ); 8896 }, 8897 8898 /** 8899 * Gets the physical height of the scroller element 8900 * @return {int} the physical height of the scroller element in pixels 8901 */ 8902 getScrollerPhysicalHeight : function () { 8903 return (this.scroller === window || this.scroller === document.body) 8904 ? this.getViewportHeight() 8905 : this.getElementPhysicalHeight(this.scroller); 8906 }, 8907 8908 /** 8909 * Gets the height of the document 8910 * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/ 8911 * @return {int} the height of the document in pixels 8912 */ 8913 getDocumentHeight : function () { 8914 var body = document.body, 8915 documentElement = document.documentElement; 8916 8917 return Math.max( 8918 body.scrollHeight, documentElement.scrollHeight, 8919 body.offsetHeight, documentElement.offsetHeight, 8920 body.clientHeight, documentElement.clientHeight 8921 ); 8922 }, 8923 8924 /** 8925 * Gets the height of the DOM element 8926 * @param {Object} elm the element to calculate the height of which 8927 * @return {int} the height of the element in pixels 8928 */ 8929 getElementHeight : function (elm) { 8930 return Math.max( 8931 elm.scrollHeight, 8932 elm.offsetHeight, 8933 elm.clientHeight 8934 ); 8935 }, 8936 8937 /** 8938 * Gets the height of the scroller element 8939 * @return {int} the height of the scroller element in pixels 8940 */ 8941 getScrollerHeight : function () { 8942 return (this.scroller === window || this.scroller === document.body) 8943 ? this.getDocumentHeight() 8944 : this.getElementHeight(this.scroller); 8945 }, 8946 8947 /** 8948 * determines if the scroll position is outside of document boundaries 8949 * @param {int} currentScrollY the current y scroll position 8950 * @return {bool} true if out of bounds, false otherwise 8951 */ 8952 isOutOfBounds : function (currentScrollY) { 8953 var pastTop = currentScrollY < 0, 8954 pastBottom = currentScrollY + this.getScrollerPhysicalHeight() > this.getScrollerHeight(); 8955 8956 return pastTop || pastBottom; 8957 }, 8958 8959 /** 8960 * determines if the tolerance has been exceeded 8961 * @param {int} currentScrollY the current scroll y position 8962 * @return {bool} true if tolerance exceeded, false otherwise 8963 */ 8964 toleranceExceeded : function (currentScrollY, direction) { 8965 return Math.abs(currentScrollY-this.lastKnownScrollY) >= this.tolerance[direction]; 8966 }, 8967 8968 /** 8969 * determine if it is appropriate to unpin 8970 * @param {int} currentScrollY the current y scroll position 8971 * @param {bool} toleranceExceeded has the tolerance been exceeded? 8972 * @return {bool} true if should unpin, false otherwise 8973 */ 8974 shouldUnpin : function (currentScrollY, toleranceExceeded) { 8975 var scrollingDown = currentScrollY > this.lastKnownScrollY, 8976 pastOffset = currentScrollY >= this.offset; 8977 8978 return scrollingDown && pastOffset && toleranceExceeded; 8979 }, 8980 8981 /** 8982 * determine if it is appropriate to pin 8983 * @param {int} currentScrollY the current y scroll position 8984 * @param {bool} toleranceExceeded has the tolerance been exceeded? 8985 * @return {bool} true if should pin, false otherwise 8986 */ 8987 shouldPin : function (currentScrollY, toleranceExceeded) { 8988 var scrollingUp = currentScrollY < this.lastKnownScrollY, 8989 pastOffset = currentScrollY <= this.offset; 8990 8991 return (scrollingUp && toleranceExceeded) || pastOffset; 8992 }, 8993 8994 /** 8995 * Handles updating the state of the widget 8996 */ 8997 update : function() { 8998 var currentScrollY = this.getScrollY(), 8999 scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up', 9000 toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection); 9001 9002 if(this.isOutOfBounds(currentScrollY)) { // Ignore bouncy scrolling in OSX 9003 return; 9004 } 9005 9006 if (currentScrollY <= this.offset ) { 9007 this.top(); 9008 } else { 9009 this.notTop(); 9010 } 9011 9012 if(currentScrollY + this.getViewportHeight() >= this.getScrollerHeight()) { 9013 this.bottom(); 9014 } 9015 else { 9016 this.notBottom(); 9017 } 9018 9019 if(this.shouldUnpin(currentScrollY, toleranceExceeded)) { 9020 this.unpin(); 9021 } 9022 else if(this.shouldPin(currentScrollY, toleranceExceeded)) { 9023 this.pin(); 9024 } 9025 9026 this.lastKnownScrollY = currentScrollY; 9027 } 9028 }; 9029 /** 9030 * Default options 9031 * @type {Object} 9032 */ 9033 Headroom.options = { 9034 tolerance : { 9035 up : 0, 9036 down : 0 9037 }, 9038 offset : 0, 9039 scroller: window, 9040 classes : { 9041 pinned : 'headroom--pinned', 9042 unpinned : 'headroom--unpinned', 9043 top : 'headroom--top', 9044 notTop : 'headroom--not-top', 9045 bottom : 'headroom--bottom', 9046 notBottom : 'headroom--not-bottom', 9047 initial : 'headroom' 9048 } 9049 }; 9050 Headroom.cutsTheMustard = typeof features !== 'undefined' && features.rAF && features.bind && features.classList; 9051 9052 return Headroom; 9053})); 9054 9055/***/ }), 9056
vendor: 1,407 bytes, lines 9057-9114
9057/***/ "../FigureBaseResources/node_modules/headroom.js/dist/jQuery.headroom.js": 9058/*!*******************************************************************************!*\ 9059 !*** ../FigureBaseResources/node_modules/headroom.js/dist/jQuery.headroom.js ***! 9060 \*******************************************************************************/ 9061/***/ (function() { 9062 9063/*! 9064 * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it 9065 * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js 9066 * License: MIT 9067 */ 9068 9069(function($) { 9070 9071 if(!$) { 9072 return; 9073 } 9074 9075 //////////// 9076 // Plugin // 9077 //////////// 9078 9079 $.fn.headroom = function(option) { 9080 return this.each(function() { 9081 var $this = $(this), 9082 data = $this.data('headroom'), 9083 options = typeof option === 'object' && option; 9084 9085 options = $.extend(true, {}, Headroom.options, options); 9086 9087 if (!data) { 9088 data = new Headroom(this, options); 9089 data.init(); 9090 $this.data('headroom', data); 9091 } 9092 if (typeof option === 'string') { 9093 data[option](); 9094 9095 if(option === 'destroy'){ 9096 $this.removeData('headroom'); 9097 } 9098 } 9099 }); 9100 }; 9101 9102 ////////////// 9103 // Data API // 9104 ////////////// 9105 9106 $('[data-headroom]').each(function() { 9107 var $this = $(this); 9108 $this.headroom($this.data()); 9109 }); 9110 9111}(window.Zepto || window.jQuery)); 9112 9113/***/ }), 9114
vendor: 285,839 bytes, lines 9115-19841
9115/***/ "../FigureBaseResources/node_modules/jquery/dist/jquery.js": 9116/*!*****************************************************************!*\ 9117 !*** ../FigureBaseResources/node_modules/jquery/dist/jquery.js ***! 9118 \*****************************************************************/ 9119/***/ (function(module, exports) { 9120 9121var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 9122 * jQuery JavaScript Library v3.7.1 9123 * https://jquery.com/ 9124 * 9125 * Copyright OpenJS Foundation and other contributors 9126 * Released under the MIT license 9127 * https://jquery.org/license 9128 * 9129 * Date: 2023-08-28T13:37Z 9130 */ 9131( function( global, factory ) { 9132 9133 "use strict"; 9134 9135 if ( true && typeof module.exports === "object" ) { 9136 9137 // For CommonJS and CommonJS-like environments where a proper `window` 9138 // is present, execute the factory and get jQuery. 9139 // For environments that do not have a `window` with a `document` 9140 // (such as Node.js), expose a factory as module.exports. 9141 // This accentuates the need for the creation of a real `window`. 9142 // e.g. var jQuery = require("jquery")(window); 9143 // See ticket trac-14549 for more info. 9144 module.exports = global.document ? 9145 factory( global, true ) : 9146 function( w ) { 9147 if ( !w.document ) { 9148 throw new Error( "jQuery requires a window with a document" ); 9149 } 9150 return factory( w ); 9151 }; 9152 } else { 9153 factory( global ); 9154 } 9155 9156// Pass this if window is not defined yet 9157} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 9158 9159// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 9160// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 9161// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 9162// enough that all such attempts are guarded in a try block. 9163"use strict"; 9164 9165var arr = []; 9166 9167var getProto = Object.getPrototypeOf; 9168 9169var slice = arr.slice; 9170 9171var flat = arr.flat ? function( array ) { 9172 return arr.flat.call( array ); 9173} : function( array ) { 9174 return arr.concat.apply( [], array ); 9175}; 9176 9177 9178var push = arr.push; 9179 9180var indexOf = arr.indexOf; 9181 9182var class2type = {}; 9183 9184var toString = class2type.toString; 9185 9186var hasOwn = class2type.hasOwnProperty; 9187 9188var fnToString = hasOwn.toString; 9189 9190var ObjectFunctionString = fnToString.call( Object ); 9191 9192var support = {}; 9193 9194var isFunction = function isFunction( obj ) { 9195 9196 // Support: Chrome <=57, Firefox <=52 9197 // In some browsers, typeof returns "function" for HTML <object> elements 9198 // (i.e., `typeof document.createElement( "object" ) === "function"`). 9199 // We don't want to classify *any* DOM node as a function. 9200 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 9201 // Plus for old WebKit, typeof returns "function" for HTML collections 9202 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 9203 return typeof obj === "function" && typeof obj.nodeType !== "number" && 9204 typeof obj.item !== "function"; 9205 }; 9206 9207 9208var isWindow = function isWindow( obj ) { 9209 return obj != null && obj === obj.window; 9210 }; 9211 9212 9213var document = window.document; 9214 9215 9216 9217 var preservedScriptAttributes = { 9218 type: true, 9219 src: true, 9220 nonce: true, 9221 noModule: true 9222 }; 9223 9224 function DOMEval( code, node, doc ) { 9225 doc = doc || document; 9226 9227 var i, val, 9228 script = doc.createElement( "script" ); 9229 9230 script.text = code; 9231 if ( node ) { 9232 for ( i in preservedScriptAttributes ) { 9233 9234 // Support: Firefox 64+, Edge 18+ 9235 // Some browsers don't support the "nonce" property on scripts. 9236 // On the other hand, just using `getAttribute` is not enough as 9237 // the `nonce` attribute is reset to an empty string whenever it 9238 // becomes browsing-context connected. 9239 // See https://github.com/whatwg/html/issues/2369 9240 // See https://html.spec.whatwg.org/#nonce-attributes 9241 // The `node.getAttribute` check was added for the sake of 9242 // `jQuery.globalEval` so that it can fake a nonce-containing node 9243 // via an object. 9244 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 9245 if ( val ) { 9246 script.setAttribute( i, val ); 9247 } 9248 } 9249 } 9250 doc.head.appendChild( script ).parentNode.removeChild( script ); 9251 } 9252 9253 9254function toType( obj ) { 9255 if ( obj == null ) { 9256 return obj + ""; 9257 } 9258 9259 // Support: Android <=2.3 only (functionish RegExp) 9260 return typeof obj === "object" || typeof obj === "function" ? 9261 class2type[ toString.call( obj ) ] || "object" : 9262 typeof obj; 9263} 9264/* global Symbol */ 9265// Defining this global in .eslintrc.json would create a danger of using the global 9266// unguarded in another place, it seems safer to define global only for this module 9267 9268 9269 9270var version = "3.7.1", 9271 9272 rhtmlSuffix = /HTML$/i, 9273 9274 // Define a local copy of jQuery 9275 jQuery = function( selector, context ) { 9276 9277 // The jQuery object is actually just the init constructor 'enhanced' 9278 // Need init if jQuery is called (just allow error to be thrown if not included) 9279 return new jQuery.fn.init( selector, context ); 9280 }; 9281 9282jQuery.fn = jQuery.prototype = { 9283 9284 // The current version of jQuery being used 9285 jquery: version, 9286 9287 constructor: jQuery, 9288 9289 // The default length of a jQuery object is 0 9290 length: 0, 9291 9292 toArray: function() { 9293 return slice.call( this ); 9294 }, 9295 9296 // Get the Nth element in the matched element set OR 9297 // Get the whole matched element set as a clean array 9298 get: function( num ) { 9299 9300 // Return all the elements in a clean array 9301 if ( num == null ) { 9302 return slice.call( this ); 9303 } 9304 9305 // Return just the one element from the set 9306 return num < 0 ? this[ num + this.length ] : this[ num ]; 9307 }, 9308 9309 // Take an array of elements and push it onto the stack 9310 // (returning the new matched element set) 9311 pushStack: function( elems ) { 9312 9313 // Build a new jQuery matched element set 9314 var ret = jQuery.merge( this.constructor(), elems ); 9315 9316 // Add the old object onto the stack (as a reference) 9317 ret.prevObject = this; 9318 9319 // Return the newly-formed element set 9320 return ret; 9321 }, 9322 9323 // Execute a callback for every element in the matched set. 9324 each: function( callback ) { 9325 return jQuery.each( this, callback ); 9326 }, 9327 9328 map: function( callback ) { 9329 return this.pushStack( jQuery.map( this, function( elem, i ) { 9330 return callback.call( elem, i, elem ); 9331 } ) ); 9332 }, 9333 9334 slice: function() { 9335 return this.pushStack( slice.apply( this, arguments ) ); 9336 }, 9337 9338 first: function() { 9339 return this.eq( 0 ); 9340 }, 9341 9342 last: function() { 9343 return this.eq( -1 ); 9344 }, 9345 9346 even: function() { 9347 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 9348 return ( i + 1 ) % 2; 9349 } ) ); 9350 }, 9351 9352 odd: function() { 9353 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 9354 return i % 2; 9355 } ) ); 9356 }, 9357 9358 eq: function( i ) { 9359 var len = this.length, 9360 j = +i + ( i < 0 ? len : 0 ); 9361 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 9362 }, 9363 9364 end: function() { 9365 return this.prevObject || this.constructor(); 9366 }, 9367 9368 // For internal use only. 9369 // Behaves like an Array's method, not like a jQuery method. 9370 push: push, 9371 sort: arr.sort, 9372 splice: arr.splice 9373}; 9374 9375jQuery.extend = jQuery.fn.extend = function() { 9376 var options, name, src, copy, copyIsArray, clone, 9377 target = arguments[ 0 ] || {}, 9378 i = 1, 9379 length = arguments.length, 9380 deep = false; 9381 9382 // Handle a deep copy situation 9383 if ( typeof target === "boolean" ) { 9384 deep = target; 9385 9386 // Skip the boolean and the target 9387 target = arguments[ i ] || {}; 9388 i++; 9389 } 9390 9391 // Handle case when target is a string or something (possible in deep copy) 9392 if ( typeof target !== "object" && !isFunction( target ) ) { 9393 target = {}; 9394 } 9395 9396 // Extend jQuery itself if only one argument is passed 9397 if ( i === length ) { 9398 target = this; 9399 i--; 9400 } 9401 9402 for ( ; i < length; i++ ) { 9403 9404 // Only deal with non-null/undefined values 9405 if ( ( options = arguments[ i ] ) != null ) { 9406 9407 // Extend the base object 9408 for ( name in options ) { 9409 copy = options[ name ]; 9410 9411 // Prevent Object.prototype pollution 9412 // Prevent never-ending loop 9413 if ( name === "__proto__" || target === copy ) { 9414 continue; 9415 } 9416 9417 // Recurse if we're merging plain objects or arrays 9418 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 9419 ( copyIsArray = Array.isArray( copy ) ) ) ) { 9420 src = target[ name ]; 9421 9422 // Ensure proper type for the source value 9423 if ( copyIsArray && !Array.isArray( src ) ) { 9424 clone = []; 9425 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 9426 clone = {}; 9427 } else { 9428 clone = src; 9429 } 9430 copyIsArray = false; 9431 9432 // Never move original objects, clone them 9433 target[ name ] = jQuery.extend( deep, clone, copy ); 9434 9435 // Don't bring in undefined values 9436 } else if ( copy !== undefined ) { 9437 target[ name ] = copy; 9438 } 9439 } 9440 } 9441 } 9442 9443 // Return the modified object 9444 return target; 9445}; 9446 9447jQuery.extend( { 9448 9449 // Unique for each copy of jQuery on the page 9450 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 9451 9452 // Assume jQuery is ready without the ready module 9453 isReady: true, 9454 9455 error: function( msg ) { 9456 throw new Error( msg ); 9457 }, 9458 9459 noop: function() {}, 9460 9461 isPlainObject: function( obj ) { 9462 var proto, Ctor; 9463 9464 // Detect obvious negatives 9465 // Use toString instead of jQuery.type to catch host objects 9466 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 9467 return false; 9468 } 9469 9470 proto = getProto( obj ); 9471 9472 // Objects with no prototype (e.g., `Object.create( null )`) are plain 9473 if ( !proto ) { 9474 return true; 9475 } 9476 9477 // Objects with prototype are plain iff they were constructed by a global Object function 9478 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 9479 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 9480 }, 9481 9482 isEmptyObject: function( obj ) { 9483 var name; 9484 9485 for ( name in obj ) { 9486 return false; 9487 } 9488 return true; 9489 }, 9490 9491 // Evaluates a script in a provided context; falls back to the global one 9492 // if not specified. 9493 globalEval: function( code, options, doc ) { 9494 DOMEval( code, { nonce: options && options.nonce }, doc ); 9495 }, 9496 9497 each: function( obj, callback ) { 9498 var length, i = 0; 9499 9500 if ( isArrayLike( obj ) ) { 9501 length = obj.length; 9502 for ( ; i < length; i++ ) { 9503 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 9504 break; 9505 } 9506 } 9507 } else { 9508 for ( i in obj ) { 9509 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 9510 break; 9511 } 9512 } 9513 } 9514 9515 return obj; 9516 }, 9517 9518 9519 // Retrieve the text value of an array of DOM nodes 9520 text: function( elem ) { 9521 var node, 9522 ret = "", 9523 i = 0, 9524 nodeType = elem.nodeType; 9525 9526 if ( !nodeType ) { 9527 9528 // If no nodeType, this is expected to be an array 9529 while ( ( node = elem[ i++ ] ) ) { 9530 9531 // Do not traverse comment nodes 9532 ret += jQuery.text( node ); 9533 } 9534 } 9535 if ( nodeType === 1 || nodeType === 11 ) { 9536 return elem.textContent; 9537 } 9538 if ( nodeType === 9 ) { 9539 return elem.documentElement.textContent; 9540 } 9541 if ( nodeType === 3 || nodeType === 4 ) { 9542 return elem.nodeValue; 9543 } 9544 9545 // Do not include comment or processing instruction nodes 9546 9547 return ret; 9548 }, 9549 9550 // results is for internal usage only 9551 makeArray: function( arr, results ) { 9552 var ret = results || []; 9553 9554 if ( arr != null ) { 9555 if ( isArrayLike( Object( arr ) ) ) { 9556 jQuery.merge( ret, 9557 typeof arr === "string" ? 9558 [ arr ] : arr 9559 ); 9560 } else { 9561 push.call( ret, arr ); 9562 } 9563 } 9564 9565 return ret; 9566 }, 9567 9568 inArray: function( elem, arr, i ) { 9569 return arr == null ? -1 : indexOf.call( arr, elem, i ); 9570 }, 9571 9572 isXMLDoc: function( elem ) { 9573 var namespace = elem && elem.namespaceURI, 9574 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 9575 9576 // Assume HTML when documentElement doesn't yet exist, such as inside 9577 // document fragments. 9578 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 9579 }, 9580 9581 // Support: Android <=4.0 only, PhantomJS 1 only 9582 // push.apply(_, arraylike) throws on ancient WebKit 9583 merge: function( first, second ) { 9584 var len = +second.length, 9585 j = 0, 9586 i = first.length; 9587 9588 for ( ; j < len; j++ ) { 9589 first[ i++ ] = second[ j ]; 9590 } 9591 9592 first.length = i; 9593 9594 return first; 9595 }, 9596 9597 grep: function( elems, callback, invert ) { 9598 var callbackInverse, 9599 matches = [], 9600 i = 0, 9601 length = elems.length, 9602 callbackExpect = !invert; 9603 9604 // Go through the array, only saving the items 9605 // that pass the validator function 9606 for ( ; i < length; i++ ) { 9607 callbackInverse = !callback( elems[ i ], i ); 9608 if ( callbackInverse !== callbackExpect ) { 9609 matches.push( elems[ i ] ); 9610 } 9611 } 9612 9613 return matches; 9614 }, 9615 9616 // arg is for internal usage only 9617 map: function( elems, callback, arg ) { 9618 var length, value, 9619 i = 0, 9620 ret = []; 9621 9622 // Go through the array, translating each of the items to their new values 9623 if ( isArrayLike( elems ) ) { 9624 length = elems.length; 9625 for ( ; i < length; i++ ) { 9626 value = callback( elems[ i ], i, arg ); 9627 9628 if ( value != null ) { 9629 ret.push( value ); 9630 } 9631 } 9632 9633 // Go through every key on the object, 9634 } else { 9635 for ( i in elems ) { 9636 value = callback( elems[ i ], i, arg ); 9637 9638 if ( value != null ) { 9639 ret.push( value ); 9640 } 9641 } 9642 } 9643 9644 // Flatten any nested arrays 9645 return flat( ret ); 9646 }, 9647 9648 // A global GUID counter for objects 9649 guid: 1, 9650 9651 // jQuery.support is not used in Core but other projects attach their 9652 // properties to it so it needs to exist. 9653 support: support 9654} ); 9655 9656if ( typeof Symbol === "function" ) { 9657 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 9658} 9659 9660// Populate the class2type map 9661jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 9662 function( _i, name ) { 9663 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 9664 } ); 9665 9666function isArrayLike( obj ) { 9667 9668 // Support: real iOS 8.2 only (not reproducible in simulator) 9669 // `in` check used to prevent JIT error (gh-2145) 9670 // hasOwn isn't used here due to false negatives 9671 // regarding Nodelist length in IE 9672 var length = !!obj && "length" in obj && obj.length, 9673 type = toType( obj ); 9674 9675 if ( isFunction( obj ) || isWindow( obj ) ) { 9676 return false; 9677 } 9678 9679 return type === "array" || length === 0 || 9680 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 9681} 9682 9683 9684function nodeName( elem, name ) { 9685 9686 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 9687 9688} 9689var pop = arr.pop; 9690 9691 9692var sort = arr.sort; 9693 9694 9695var splice = arr.splice; 9696 9697 9698var whitespace = "[\\x20\\t\\r\\n\\f]"; 9699 9700 9701var rtrimCSS = new RegExp( 9702 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 9703 "g" 9704); 9705 9706 9707 9708 9709// Note: an element does not contain itself 9710jQuery.contains = function( a, b ) { 9711 var bup = b && b.parentNode; 9712 9713 return a === bup || !!( bup && bup.nodeType === 1 && ( 9714 9715 // Support: IE 9 - 11+ 9716 // IE doesn't have `contains` on SVG. 9717 a.contains ? 9718 a.contains( bup ) : 9719 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 9720 ) ); 9721}; 9722 9723 9724 9725 9726// CSS string/identifier serialization 9727// https://drafts.csswg.org/cssom/#common-serializing-idioms 9728var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 9729 9730function fcssescape( ch, asCodePoint ) { 9731 if ( asCodePoint ) { 9732 9733 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 9734 if ( ch === "\0" ) { 9735 return "\uFFFD"; 9736 } 9737 9738 // Control characters and (dependent upon position) numbers get escaped as code points 9739 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 9740 } 9741 9742 // Other potentially-special ASCII characters get backslash-escaped 9743 return "\\" + ch; 9744} 9745 9746jQuery.escapeSelector = function( sel ) { 9747 return ( sel + "" ).replace( rcssescape, fcssescape ); 9748}; 9749 9750 9751 9752 9753var preferredDoc = document, 9754 pushNative = push; 9755 9756( function() { 9757 9758var i, 9759 Expr, 9760 outermostContext, 9761 sortInput, 9762 hasDuplicate, 9763 push = pushNative, 9764 9765 // Local document vars 9766 document, 9767 documentElement, 9768 documentIsHTML, 9769 rbuggyQSA, 9770 matches, 9771 9772 // Instance-specific data 9773 expando = jQuery.expando, 9774 dirruns = 0, 9775 done = 0, 9776 classCache = createCache(), 9777 tokenCache = createCache(), 9778 compilerCache = createCache(), 9779 nonnativeSelectorCache = createCache(), 9780 sortOrder = function( a, b ) { 9781 if ( a === b ) { 9782 hasDuplicate = true; 9783 } 9784 return 0; 9785 }, 9786 9787 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 9788 "loop|multiple|open|readonly|required|scoped", 9789 9790 // Regular expressions 9791 9792 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 9793 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 9794 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 9795 9796 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 9797 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 9798 9799 // Operator (capture 2) 9800 "*([*^$|!~]?=)" + whitespace + 9801 9802 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 9803 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 9804 whitespace + "*\\]", 9805 9806 pseudos = ":(" + identifier + ")(?:\\((" + 9807 9808 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 9809 // 1. quoted (capture 3; capture 4 or capture 5) 9810 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 9811 9812 // 2. simple (capture 6) 9813 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 9814 9815 // 3. anything else (capture 2) 9816 ".*" + 9817 ")\\)|)", 9818 9819 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 9820 rwhitespace = new RegExp( whitespace + "+", "g" ), 9821 9822 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 9823 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 9824 whitespace + "*" ), 9825 rdescend = new RegExp( whitespace + "|>" ), 9826 9827 rpseudo = new RegExp( pseudos ), 9828 ridentifier = new RegExp( "^" + identifier + "$" ), 9829 9830 matchExpr = { 9831 ID: new RegExp( "^#(" + identifier + ")" ), 9832 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 9833 TAG: new RegExp( "^(" + identifier + "|[*])" ), 9834 ATTR: new RegExp( "^" + attributes ), 9835 PSEUDO: new RegExp( "^" + pseudos ), 9836 CHILD: new RegExp( 9837 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 9838 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 9839 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 9840 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 9841 9842 // For use in libraries implementing .is() 9843 // We use this for POS matching in `select` 9844 needsContext: new RegExp( "^" + whitespace + 9845 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 9846 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 9847 }, 9848 9849 rinputs = /^(?:input|select|textarea|button)$/i, 9850 rheader = /^h\d$/i, 9851 9852 // Easily-parseable/retrievable ID or TAG or CLASS selectors 9853 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 9854 9855 rsibling = /[+~]/, 9856 9857 // CSS escapes 9858 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 9859 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 9860 "?|\\\\([^\\r\\n\\f])", "g" ), 9861 funescape = function( escape, nonHex ) { 9862 var high = "0x" + escape.slice( 1 ) - 0x10000; 9863 9864 if ( nonHex ) { 9865 9866 // Strip the backslash prefix from a non-hex escape sequence 9867 return nonHex; 9868 } 9869 9870 // Replace a hexadecimal escape sequence with the encoded Unicode code point 9871 // Support: IE <=11+ 9872 // For values outside the Basic Multilingual Plane (BMP), manually construct a 9873 // surrogate pair 9874 return high < 0 ? 9875 String.fromCharCode( high + 0x10000 ) : 9876 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 9877 }, 9878 9879 // Used for iframes; see `setDocument`. 9880 // Support: IE 9 - 11+, Edge 12 - 18+ 9881 // Removing the function wrapper causes a "Permission Denied" 9882 // error in IE/Edge. 9883 unloadHandler = function() { 9884 setDocument(); 9885 }, 9886 9887 inDisabledFieldset = addCombinator( 9888 function( elem ) { 9889 return elem.disabled === true && nodeName( elem, "fieldset" ); 9890 }, 9891 { dir: "parentNode", next: "legend" } 9892 ); 9893 9894// Support: IE <=9 only 9895// Accessing document.activeElement can throw unexpectedly 9896// https://bugs.jquery.com/ticket/13393 9897function safeActiveElement() { 9898 try { 9899 return document.activeElement; 9900 } catch ( err ) { } 9901} 9902 9903// Optimize for push.apply( _, NodeList ) 9904try { 9905 push.apply( 9906 ( arr = slice.call( preferredDoc.childNodes ) ), 9907 preferredDoc.childNodes 9908 ); 9909 9910 // Support: Android <=4.0 9911 // Detect silently failing push.apply 9912 // eslint-disable-next-line no-unused-expressions 9913 arr[ preferredDoc.childNodes.length ].nodeType; 9914} catch ( e ) { 9915 push = { 9916 apply: function( target, els ) { 9917 pushNative.apply( target, slice.call( els ) ); 9918 }, 9919 call: function( target ) { 9920 pushNative.apply( target, slice.call( arguments, 1 ) ); 9921 } 9922 }; 9923} 9924 9925function find( selector, context, results, seed ) { 9926 var m, i, elem, nid, match, groups, newSelector, 9927 newContext = context && context.ownerDocument, 9928 9929 // nodeType defaults to 9, since context defaults to document 9930 nodeType = context ? context.nodeType : 9; 9931 9932 results = results || []; 9933 9934 // Return early from calls with invalid selector or context 9935 if ( typeof selector !== "string" || !selector || 9936 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 9937 9938 return results; 9939 } 9940 9941 // Try to shortcut find operations (as opposed to filters) in HTML documents 9942 if ( !seed ) { 9943 setDocument( context ); 9944 context = context || document; 9945 9946 if ( documentIsHTML ) { 9947 9948 // If the selector is sufficiently simple, try using a "get*By*" DOM method 9949 // (excepting DocumentFragment context, where the methods don't exist) 9950 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 9951 9952 // ID selector 9953 if ( ( m = match[ 1 ] ) ) { 9954 9955 // Document context 9956 if ( nodeType === 9 ) { 9957 if ( ( elem = context.getElementById( m ) ) ) { 9958 9959 // Support: IE 9 only 9960 // getElementById can match elements by name instead of ID 9961 if ( elem.id === m ) { 9962 push.call( results, elem ); 9963 return results; 9964 } 9965 } else { 9966 return results; 9967 } 9968 9969 // Element context 9970 } else { 9971 9972 // Support: IE 9 only 9973 // getElementById can match elements by name instead of ID 9974 if ( newContext && ( elem = newContext.getElementById( m ) ) && 9975 find.contains( context, elem ) && 9976 elem.id === m ) { 9977 9978 push.call( results, elem ); 9979 return results; 9980 } 9981 } 9982 9983 // Type selector 9984 } else if ( match[ 2 ] ) { 9985 push.apply( results, context.getElementsByTagName( selector ) ); 9986 return results; 9987 9988 // Class selector 9989 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 9990 push.apply( results, context.getElementsByClassName( m ) ); 9991 return results; 9992 } 9993 } 9994 9995 // Take advantage of querySelectorAll 9996 if ( !nonnativeSelectorCache[ selector + " " ] && 9997 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 9998 9999 newSelector = selector; 10000 newContext = context; 10001 10002 // qSA considers elements outside a scoping root when evaluating child or 10003 // descendant combinators, which is not what we want. 10004 // In such cases, we work around the behavior by prefixing every selector in the 10005 // list with an ID selector referencing the scope context. 10006 // The technique has to be used as well when a leading combinator is used 10007 // as such selectors are not recognized by querySelectorAll. 10008 // Thanks to Andrew Dupont for this technique. 10009 if ( nodeType === 1 && 10010 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 10011 10012 // Expand context for sibling selectors 10013 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 10014 context; 10015 10016 // We can use :scope instead of the ID hack if the browser 10017 // supports it & if we're not changing the context. 10018 // Support: IE 11+, Edge 17 - 18+ 10019 // IE/Edge sometimes throw a "Permission denied" error when 10020 // strict-comparing two documents; shallow comparisons work. 10021 // eslint-disable-next-line eqeqeq 10022 if ( newContext != context || !support.scope ) { 10023 10024 // Capture the context ID, setting it first if necessary 10025 if ( ( nid = context.getAttribute( "id" ) ) ) { 10026 nid = jQuery.escapeSelector( nid ); 10027 } else { 10028 context.setAttribute( "id", ( nid = expando ) ); 10029 } 10030 } 10031 10032 // Prefix every selector in the list 10033 groups = tokenize( selector ); 10034 i = groups.length; 10035 while ( i-- ) { 10036 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 10037 toSelector( groups[ i ] ); 10038 } 10039 newSelector = groups.join( "," ); 10040 } 10041 10042 try { 10043 push.apply( results, 10044 newContext.querySelectorAll( newSelector ) 10045 ); 10046 return results; 10047 } catch ( qsaError ) { 10048 nonnativeSelectorCache( selector, true ); 10049 } finally { 10050 if ( nid === expando ) { 10051 context.removeAttribute( "id" ); 10052 } 10053 } 10054 } 10055 } 10056 } 10057 10058 // All others 10059 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 10060} 10061 10062/** 10063 * Create key-value caches of limited size 10064 * @returns {function(string, object)} Returns the Object data after storing it on itself with 10065 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 10066 * deleting the oldest entry 10067 */ 10068function createCache() { 10069 var keys = []; 10070 10071 function cache( key, value ) { 10072 10073 // Use (key + " ") to avoid collision with native prototype properties 10074 // (see https://github.com/jquery/sizzle/issues/157) 10075 if ( keys.push( key + " " ) > Expr.cacheLength ) { 10076 10077 // Only keep the most recent entries 10078 delete cache[ keys.shift() ]; 10079 } 10080 return ( cache[ key + " " ] = value ); 10081 } 10082 return cache; 10083} 10084 10085/** 10086 * Mark a function for special use by jQuery selector module 10087 * @param {Function} fn The function to mark 10088 */ 10089function markFunction( fn ) { 10090 fn[ expando ] = true; 10091 return fn; 10092} 10093 10094/** 10095 * Support testing using an element 10096 * @param {Function} fn Passed the created element and returns a boolean result 10097 */ 10098function assert( fn ) { 10099 var el = document.createElement( "fieldset" ); 10100 10101 try { 10102 return !!fn( el ); 10103 } catch ( e ) { 10104 return false; 10105 } finally { 10106 10107 // Remove from its parent by default 10108 if ( el.parentNode ) { 10109 el.parentNode.removeChild( el ); 10110 } 10111 10112 // release memory in IE 10113 el = null; 10114 } 10115} 10116 10117/** 10118 * Returns a function to use in pseudos for input types 10119 * @param {String} type 10120 */ 10121function createInputPseudo( type ) { 10122 return function( elem ) { 10123 return nodeName( elem, "input" ) && elem.type === type; 10124 }; 10125} 10126 10127/** 10128 * Returns a function to use in pseudos for buttons 10129 * @param {String} type 10130 */ 10131function createButtonPseudo( type ) { 10132 return function( elem ) { 10133 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 10134 elem.type === type; 10135 }; 10136} 10137 10138/** 10139 * Returns a function to use in pseudos for :enabled/:disabled 10140 * @param {Boolean} disabled true for :disabled; false for :enabled 10141 */ 10142function createDisabledPseudo( disabled ) { 10143 10144 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 10145 return function( elem ) { 10146 10147 // Only certain elements can match :enabled or :disabled 10148 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 10149 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 10150 if ( "form" in elem ) { 10151 10152 // Check for inherited disabledness on relevant non-disabled elements: 10153 // * listed form-associated elements in a disabled fieldset 10154 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 10155 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 10156 // * option elements in a disabled optgroup 10157 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 10158 // All such elements have a "form" property. 10159 if ( elem.parentNode && elem.disabled === false ) { 10160 10161 // Option elements defer to a parent optgroup if present 10162 if ( "label" in elem ) { 10163 if ( "label" in elem.parentNode ) { 10164 return elem.parentNode.disabled === disabled; 10165 } else { 10166 return elem.disabled === disabled; 10167 } 10168 } 10169 10170 // Support: IE 6 - 11+ 10171 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 10172 return elem.isDisabled === disabled || 10173 10174 // Where there is no isDisabled, check manually 10175 elem.isDisabled !== !disabled && 10176 inDisabledFieldset( elem ) === disabled; 10177 } 10178 10179 return elem.disabled === disabled; 10180 10181 // Try to winnow out elements that can't be disabled before trusting the disabled property. 10182 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 10183 // even exist on them, let alone have a boolean value. 10184 } else if ( "label" in elem ) { 10185 return elem.disabled === disabled; 10186 } 10187 10188 // Remaining elements are neither :enabled nor :disabled 10189 return false; 10190 }; 10191} 10192 10193/** 10194 * Returns a function to use in pseudos for positionals 10195 * @param {Function} fn 10196 */ 10197function createPositionalPseudo( fn ) { 10198 return markFunction( function( argument ) { 10199 argument = +argument; 10200 return markFunction( function( seed, matches ) { 10201 var j, 10202 matchIndexes = fn( [], seed.length, argument ), 10203 i = matchIndexes.length; 10204 10205 // Match elements found at the specified indexes 10206 while ( i-- ) { 10207 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 10208 seed[ j ] = !( matches[ j ] = seed[ j ] ); 10209 } 10210 } 10211 } ); 10212 } ); 10213} 10214 10215/** 10216 * Checks a node for validity as a jQuery selector context 10217 * @param {Element|Object=} context 10218 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 10219 */ 10220function testContext( context ) { 10221 return context && typeof context.getElementsByTagName !== "undefined" && context; 10222} 10223 10224/** 10225 * Sets document-related variables once based on the current document 10226 * @param {Element|Object} [node] An element or document object to use to set the document 10227 * @returns {Object} Returns the current document 10228 */ 10229function setDocument( node ) { 10230 var subWindow, 10231 doc = node ? node.ownerDocument || node : preferredDoc; 10232 10233 // Return early if doc is invalid or already selected 10234 // Support: IE 11+, Edge 17 - 18+ 10235 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10236 // two documents; shallow comparisons work. 10237 // eslint-disable-next-line eqeqeq 10238 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 10239 return document; 10240 } 10241 10242 // Update global variables 10243 document = doc; 10244 documentElement = document.documentElement; 10245 documentIsHTML = !jQuery.isXMLDoc( document ); 10246 10247 // Support: iOS 7 only, IE 9 - 11+ 10248 // Older browsers didn't support unprefixed `matches`. 10249 matches = documentElement.matches || 10250 documentElement.webkitMatchesSelector || 10251 documentElement.msMatchesSelector; 10252 10253 // Support: IE 9 - 11+, Edge 12 - 18+ 10254 // Accessing iframe documents after unload throws "permission denied" errors 10255 // (see trac-13936). 10256 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 10257 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 10258 if ( documentElement.msMatchesSelector && 10259 10260 // Support: IE 11+, Edge 17 - 18+ 10261 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10262 // two documents; shallow comparisons work. 10263 // eslint-disable-next-line eqeqeq 10264 preferredDoc != document && 10265 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 10266 10267 // Support: IE 9 - 11+, Edge 12 - 18+ 10268 subWindow.addEventListener( "unload", unloadHandler ); 10269 } 10270 10271 // Support: IE <10 10272 // Check if getElementById returns elements by name 10273 // The broken getElementById methods don't pick up programmatically-set names, 10274 // so use a roundabout getElementsByName test 10275 support.getById = assert( function( el ) { 10276 documentElement.appendChild( el ).id = jQuery.expando; 10277 return !document.getElementsByName || 10278 !document.getElementsByName( jQuery.expando ).length; 10279 } ); 10280 10281 // Support: IE 9 only 10282 // Check to see if it's possible to do matchesSelector 10283 // on a disconnected node. 10284 support.disconnectedMatch = assert( function( el ) { 10285 return matches.call( el, "*" ); 10286 } ); 10287 10288 // Support: IE 9 - 11+, Edge 12 - 18+ 10289 // IE/Edge don't support the :scope pseudo-class. 10290 support.scope = assert( function() { 10291 return document.querySelectorAll( ":scope" ); 10292 } ); 10293 10294 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 10295 // Make sure the `:has()` argument is parsed unforgivingly. 10296 // We include `*` in the test to detect buggy implementations that are 10297 // _selectively_ forgiving (specifically when the list includes at least 10298 // one valid selector). 10299 // Note that we treat complete lack of support for `:has()` as if it were 10300 // spec-compliant support, which is fine because use of `:has()` in such 10301 // environments will fail in the qSA path and fall back to jQuery traversal 10302 // anyway. 10303 support.cssHas = assert( function() { 10304 try { 10305 document.querySelector( ":has(*,:jqfake)" ); 10306 return false; 10307 } catch ( e ) { 10308 return true; 10309 } 10310 } ); 10311 10312 // ID filter and find 10313 if ( support.getById ) { 10314 Expr.filter.ID = function( id ) { 10315 var attrId = id.replace( runescape, funescape ); 10316 return function( elem ) { 10317 return elem.getAttribute( "id" ) === attrId; 10318 }; 10319 }; 10320 Expr.find.ID = function( id, context ) { 10321 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 10322 var elem = context.getElementById( id ); 10323 return elem ? [ elem ] : []; 10324 } 10325 }; 10326 } else { 10327 Expr.filter.ID = function( id ) { 10328 var attrId = id.replace( runescape, funescape ); 10329 return function( elem ) { 10330 var node = typeof elem.getAttributeNode !== "undefined" && 10331 elem.getAttributeNode( "id" ); 10332 return node && node.value === attrId; 10333 }; 10334 }; 10335 10336 // Support: IE 6 - 7 only 10337 // getElementById is not reliable as a find shortcut 10338 Expr.find.ID = function( id, context ) { 10339 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 10340 var node, i, elems, 10341 elem = context.getElementById( id ); 10342 10343 if ( elem ) { 10344 10345 // Verify the id attribute 10346 node = elem.getAttributeNode( "id" ); 10347 if ( node && node.value === id ) { 10348 return [ elem ]; 10349 } 10350 10351 // Fall back on getElementsByName 10352 elems = context.getElementsByName( id ); 10353 i = 0; 10354 while ( ( elem = elems[ i++ ] ) ) { 10355 node = elem.getAttributeNode( "id" ); 10356 if ( node && node.value === id ) { 10357 return [ elem ]; 10358 } 10359 } 10360 } 10361 10362 return []; 10363 } 10364 }; 10365 } 10366 10367 // Tag 10368 Expr.find.TAG = function( tag, context ) { 10369 if ( typeof context.getElementsByTagName !== "undefined" ) { 10370 return context.getElementsByTagName( tag ); 10371 10372 // DocumentFragment nodes don't have gEBTN 10373 } else { 10374 return context.querySelectorAll( tag ); 10375 } 10376 }; 10377 10378 // Class 10379 Expr.find.CLASS = function( className, context ) { 10380 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 10381 return context.getElementsByClassName( className ); 10382 } 10383 }; 10384 10385 /* QSA/matchesSelector 10386 ---------------------------------------------------------------------- */ 10387 10388 // QSA and matchesSelector support 10389 10390 rbuggyQSA = []; 10391 10392 // Build QSA regex 10393 // Regex strategy adopted from Diego Perini 10394 assert( function( el ) { 10395 10396 var input; 10397 10398 documentElement.appendChild( el ).innerHTML = 10399 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 10400 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 10401 "<option selected=''></option></select>"; 10402 10403 // Support: iOS <=7 - 8 only 10404 // Boolean attributes and "value" are not treated correctly in some XML documents 10405 if ( !el.querySelectorAll( "[selected]" ).length ) { 10406 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 10407 } 10408 10409 // Support: iOS <=7 - 8 only 10410 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 10411 rbuggyQSA.push( "~=" ); 10412 } 10413 10414 // Support: iOS 8 only 10415 // https://bugs.webkit.org/show_bug.cgi?id=136851 10416 // In-page `selector#id sibling-combinator selector` fails 10417 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 10418 rbuggyQSA.push( ".#.+[+~]" ); 10419 } 10420 10421 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 10422 // In some of the document kinds, these selectors wouldn't work natively. 10423 // This is probably OK but for backwards compatibility we want to maintain 10424 // handling them through jQuery traversal in jQuery 3.x. 10425 if ( !el.querySelectorAll( ":checked" ).length ) { 10426 rbuggyQSA.push( ":checked" ); 10427 } 10428 10429 // Support: Windows 8 Native Apps 10430 // The type and name attributes are restricted during .innerHTML assignment 10431 input = document.createElement( "input" ); 10432 input.setAttribute( "type", "hidden" ); 10433 el.appendChild( input ).setAttribute( "name", "D" ); 10434 10435 // Support: IE 9 - 11+ 10436 // IE's :disabled selector does not pick up the children of disabled fieldsets 10437 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 10438 // In some of the document kinds, these selectors wouldn't work natively. 10439 // This is probably OK but for backwards compatibility we want to maintain 10440 // handling them through jQuery traversal in jQuery 3.x. 10441 documentElement.appendChild( el ).disabled = true; 10442 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 10443 rbuggyQSA.push( ":enabled", ":disabled" ); 10444 } 10445 10446 // Support: IE 11+, Edge 15 - 18+ 10447 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 10448 // Adding a temporary attribute to the document before the selection works 10449 // around the issue. 10450 // Interestingly, IE 10 & older don't seem to have the issue. 10451 input = document.createElement( "input" ); 10452 input.setAttribute( "name", "" ); 10453 el.appendChild( input ); 10454 if ( !el.querySelectorAll( "[name='']" ).length ) { 10455 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 10456 whitespace + "*(?:''|\"\")" ); 10457 } 10458 } ); 10459 10460 if ( !support.cssHas ) { 10461 10462 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 10463 // Our regular `try-catch` mechanism fails to detect natively-unsupported 10464 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 10465 // in browsers that parse the `:has()` argument as a forgiving selector list. 10466 // https://drafts.csswg.org/selectors/#relational now requires the argument 10467 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 10468 rbuggyQSA.push( ":has" ); 10469 } 10470 10471 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 10472 10473 /* Sorting 10474 ---------------------------------------------------------------------- */ 10475 10476 // Document order sorting 10477 sortOrder = function( a, b ) { 10478 10479 // Flag for duplicate removal 10480 if ( a === b ) { 10481 hasDuplicate = true; 10482 return 0; 10483 } 10484 10485 // Sort on method existence if only one input has compareDocumentPosition 10486 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 10487 if ( compare ) { 10488 return compare; 10489 } 10490 10491 // Calculate position if both inputs belong to the same document 10492 // Support: IE 11+, Edge 17 - 18+ 10493 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10494 // two documents; shallow comparisons work. 10495 // eslint-disable-next-line eqeqeq 10496 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 10497 a.compareDocumentPosition( b ) : 10498 10499 // Otherwise we know they are disconnected 10500 1; 10501 10502 // Disconnected nodes 10503 if ( compare & 1 || 10504 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 10505 10506 // Choose the first element that is related to our preferred document 10507 // Support: IE 11+, Edge 17 - 18+ 10508 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10509 // two documents; shallow comparisons work. 10510 // eslint-disable-next-line eqeqeq 10511 if ( a === document || a.ownerDocument == preferredDoc && 10512 find.contains( preferredDoc, a ) ) { 10513 return -1; 10514 } 10515 10516 // Support: IE 11+, Edge 17 - 18+ 10517 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10518 // two documents; shallow comparisons work. 10519 // eslint-disable-next-line eqeqeq 10520 if ( b === document || b.ownerDocument == preferredDoc && 10521 find.contains( preferredDoc, b ) ) { 10522 return 1; 10523 } 10524 10525 // Maintain original order 10526 return sortInput ? 10527 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 10528 0; 10529 } 10530 10531 return compare & 4 ? -1 : 1; 10532 }; 10533 10534 return document; 10535} 10536 10537find.matches = function( expr, elements ) { 10538 return find( expr, null, null, elements ); 10539}; 10540 10541find.matchesSelector = function( elem, expr ) { 10542 setDocument( elem ); 10543 10544 if ( documentIsHTML && 10545 !nonnativeSelectorCache[ expr + " " ] && 10546 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 10547 10548 try { 10549 var ret = matches.call( elem, expr ); 10550 10551 // IE 9's matchesSelector returns false on disconnected nodes 10552 if ( ret || support.disconnectedMatch || 10553 10554 // As well, disconnected nodes are said to be in a document 10555 // fragment in IE 9 10556 elem.document && elem.document.nodeType !== 11 ) { 10557 return ret; 10558 } 10559 } catch ( e ) { 10560 nonnativeSelectorCache( expr, true ); 10561 } 10562 } 10563 10564 return find( expr, document, null, [ elem ] ).length > 0; 10565}; 10566 10567find.contains = function( context, elem ) { 10568 10569 // Set document vars if needed 10570 // Support: IE 11+, Edge 17 - 18+ 10571 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10572 // two documents; shallow comparisons work. 10573 // eslint-disable-next-line eqeqeq 10574 if ( ( context.ownerDocument || context ) != document ) { 10575 setDocument( context ); 10576 } 10577 return jQuery.contains( context, elem ); 10578}; 10579 10580 10581find.attr = function( elem, name ) { 10582 10583 // Set document vars if needed 10584 // Support: IE 11+, Edge 17 - 18+ 10585 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10586 // two documents; shallow comparisons work. 10587 // eslint-disable-next-line eqeqeq 10588 if ( ( elem.ownerDocument || elem ) != document ) { 10589 setDocument( elem ); 10590 } 10591 10592 var fn = Expr.attrHandle[ name.toLowerCase() ], 10593 10594 // Don't get fooled by Object.prototype properties (see trac-13807) 10595 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 10596 fn( elem, name, !documentIsHTML ) : 10597 undefined; 10598 10599 if ( val !== undefined ) { 10600 return val; 10601 } 10602 10603 return elem.getAttribute( name ); 10604}; 10605 10606find.error = function( msg ) { 10607 throw new Error( "Syntax error, unrecognized expression: " + msg ); 10608}; 10609 10610/** 10611 * Document sorting and removing duplicates 10612 * @param {ArrayLike} results 10613 */ 10614jQuery.uniqueSort = function( results ) { 10615 var elem, 10616 duplicates = [], 10617 j = 0, 10618 i = 0; 10619 10620 // Unless we *know* we can detect duplicates, assume their presence 10621 // 10622 // Support: Android <=4.0+ 10623 // Testing for detecting duplicates is unpredictable so instead assume we can't 10624 // depend on duplicate detection in all browsers without a stable sort. 10625 hasDuplicate = !support.sortStable; 10626 sortInput = !support.sortStable && slice.call( results, 0 ); 10627 sort.call( results, sortOrder ); 10628 10629 if ( hasDuplicate ) { 10630 while ( ( elem = results[ i++ ] ) ) { 10631 if ( elem === results[ i ] ) { 10632 j = duplicates.push( i ); 10633 } 10634 } 10635 while ( j-- ) { 10636 splice.call( results, duplicates[ j ], 1 ); 10637 } 10638 } 10639 10640 // Clear input after sorting to release objects 10641 // See https://github.com/jquery/sizzle/pull/225 10642 sortInput = null; 10643 10644 return results; 10645}; 10646 10647jQuery.fn.uniqueSort = function() { 10648 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 10649}; 10650 10651Expr = jQuery.expr = { 10652 10653 // Can be adjusted by the user 10654 cacheLength: 50, 10655 10656 createPseudo: markFunction, 10657 10658 match: matchExpr, 10659 10660 attrHandle: {}, 10661 10662 find: {}, 10663 10664 relative: { 10665 ">": { dir: "parentNode", first: true }, 10666 " ": { dir: "parentNode" }, 10667 "+": { dir: "previousSibling", first: true }, 10668 "~": { dir: "previousSibling" } 10669 }, 10670 10671 preFilter: { 10672 ATTR: function( match ) { 10673 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 10674 10675 // Move the given value to match[3] whether quoted or unquoted 10676 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 10677 .replace( runescape, funescape ); 10678 10679 if ( match[ 2 ] === "~=" ) { 10680 match[ 3 ] = " " + match[ 3 ] + " "; 10681 } 10682 10683 return match.slice( 0, 4 ); 10684 }, 10685 10686 CHILD: function( match ) { 10687 10688 /* matches from matchExpr["CHILD"] 10689 1 type (only|nth|...) 10690 2 what (child|of-type) 10691 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 10692 4 xn-component of xn+y argument ([+-]?\d*n|) 10693 5 sign of xn-component 10694 6 x of xn-component 10695 7 sign of y-component 10696 8 y of y-component 10697 */ 10698 match[ 1 ] = match[ 1 ].toLowerCase(); 10699 10700 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 10701 10702 // nth-* requires argument 10703 if ( !match[ 3 ] ) { 10704 find.error( match[ 0 ] ); 10705 } 10706 10707 // numeric x and y parameters for Expr.filter.CHILD 10708 // remember that false/true cast respectively to 0/1 10709 match[ 4 ] = +( match[ 4 ] ? 10710 match[ 5 ] + ( match[ 6 ] || 1 ) : 10711 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 10712 ); 10713 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 10714 10715 // other types prohibit arguments 10716 } else if ( match[ 3 ] ) { 10717 find.error( match[ 0 ] ); 10718 } 10719 10720 return match; 10721 }, 10722 10723 PSEUDO: function( match ) { 10724 var excess, 10725 unquoted = !match[ 6 ] && match[ 2 ]; 10726 10727 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 10728 return null; 10729 } 10730 10731 // Accept quoted arguments as-is 10732 if ( match[ 3 ] ) { 10733 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 10734 10735 // Strip excess characters from unquoted arguments 10736 } else if ( unquoted && rpseudo.test( unquoted ) && 10737 10738 // Get excess from tokenize (recursively) 10739 ( excess = tokenize( unquoted, true ) ) && 10740 10741 // advance to the next closing parenthesis 10742 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 10743 10744 // excess is a negative index 10745 match[ 0 ] = match[ 0 ].slice( 0, excess ); 10746 match[ 2 ] = unquoted.slice( 0, excess ); 10747 } 10748 10749 // Return only captures needed by the pseudo filter method (type and argument) 10750 return match.slice( 0, 3 ); 10751 } 10752 }, 10753 10754 filter: { 10755 10756 TAG: function( nodeNameSelector ) { 10757 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 10758 return nodeNameSelector === "*" ? 10759 function() { 10760 return true; 10761 } : 10762 function( elem ) { 10763 return nodeName( elem, expectedNodeName ); 10764 }; 10765 }, 10766 10767 CLASS: function( className ) { 10768 var pattern = classCache[ className + " " ]; 10769 10770 return pattern || 10771 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 10772 "(" + whitespace + "|$)" ) ) && 10773 classCache( className, function( elem ) { 10774 return pattern.test( 10775 typeof elem.className === "string" && elem.className || 10776 typeof elem.getAttribute !== "undefined" && 10777 elem.getAttribute( "class" ) || 10778 "" 10779 ); 10780 } ); 10781 }, 10782 10783 ATTR: function( name, operator, check ) { 10784 return function( elem ) { 10785 var result = find.attr( elem, name ); 10786 10787 if ( result == null ) { 10788 return operator === "!="; 10789 } 10790 if ( !operator ) { 10791 return true; 10792 } 10793 10794 result += ""; 10795 10796 if ( operator === "=" ) { 10797 return result === check; 10798 } 10799 if ( operator === "!=" ) { 10800 return result !== check; 10801 } 10802 if ( operator === "^=" ) { 10803 return check && result.indexOf( check ) === 0; 10804 } 10805 if ( operator === "*=" ) { 10806 return check && result.indexOf( check ) > -1; 10807 } 10808 if ( operator === "$=" ) { 10809 return check && result.slice( -check.length ) === check; 10810 } 10811 if ( operator === "~=" ) { 10812 return ( " " + result.replace( rwhitespace, " " ) + " " ) 10813 .indexOf( check ) > -1; 10814 } 10815 if ( operator === "|=" ) { 10816 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 10817 } 10818 10819 return false; 10820 }; 10821 }, 10822 10823 CHILD: function( type, what, _argument, first, last ) { 10824 var simple = type.slice( 0, 3 ) !== "nth", 10825 forward = type.slice( -4 ) !== "last", 10826 ofType = what === "of-type"; 10827 10828 return first === 1 && last === 0 ? 10829 10830 // Shortcut for :nth-*(n) 10831 function( elem ) { 10832 return !!elem.parentNode; 10833 } : 10834 10835 function( elem, _context, xml ) { 10836 var cache, outerCache, node, nodeIndex, start, 10837 dir = simple !== forward ? "nextSibling" : "previousSibling", 10838 parent = elem.parentNode, 10839 name = ofType && elem.nodeName.toLowerCase(), 10840 useCache = !xml && !ofType, 10841 diff = false; 10842 10843 if ( parent ) { 10844 10845 // :(first|last|only)-(child|of-type) 10846 if ( simple ) { 10847 while ( dir ) { 10848 node = elem; 10849 while ( ( node = node[ dir ] ) ) { 10850 if ( ofType ? 10851 nodeName( node, name ) : 10852 node.nodeType === 1 ) { 10853 10854 return false; 10855 } 10856 } 10857 10858 // Reverse direction for :only-* (if we haven't yet done so) 10859 start = dir = type === "only" && !start && "nextSibling"; 10860 } 10861 return true; 10862 } 10863 10864 start = [ forward ? parent.firstChild : parent.lastChild ]; 10865 10866 // non-xml :nth-child(...) stores cache data on `parent` 10867 if ( forward && useCache ) { 10868 10869 // Seek `elem` from a previously-cached index 10870 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 10871 cache = outerCache[ type ] || []; 10872 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 10873 diff = nodeIndex && cache[ 2 ]; 10874 node = nodeIndex && parent.childNodes[ nodeIndex ]; 10875 10876 while ( ( node = ++nodeIndex && node && node[ dir ] || 10877 10878 // Fallback to seeking `elem` from the start 10879 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 10880 10881 // When found, cache indexes on `parent` and break 10882 if ( node.nodeType === 1 && ++diff && node === elem ) { 10883 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 10884 break; 10885 } 10886 } 10887 10888 } else { 10889 10890 // Use previously-cached element index if available 10891 if ( useCache ) { 10892 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 10893 cache = outerCache[ type ] || []; 10894 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 10895 diff = nodeIndex; 10896 } 10897 10898 // xml :nth-child(...) 10899 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 10900 if ( diff === false ) { 10901 10902 // Use the same loop as above to seek `elem` from the start 10903 while ( ( node = ++nodeIndex && node && node[ dir ] || 10904 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 10905 10906 if ( ( ofType ? 10907 nodeName( node, name ) : 10908 node.nodeType === 1 ) && 10909 ++diff ) { 10910 10911 // Cache the index of each encountered element 10912 if ( useCache ) { 10913 outerCache = node[ expando ] || 10914 ( node[ expando ] = {} ); 10915 outerCache[ type ] = [ dirruns, diff ]; 10916 } 10917 10918 if ( node === elem ) { 10919 break; 10920 } 10921 } 10922 } 10923 } 10924 } 10925 10926 // Incorporate the offset, then check against cycle size 10927 diff -= last; 10928 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 10929 } 10930 }; 10931 }, 10932 10933 PSEUDO: function( pseudo, argument ) { 10934 10935 // pseudo-class names are case-insensitive 10936 // https://www.w3.org/TR/selectors/#pseudo-classes 10937 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 10938 // Remember that setFilters inherits from pseudos 10939 var args, 10940 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 10941 find.error( "unsupported pseudo: " + pseudo ); 10942 10943 // The user may use createPseudo to indicate that 10944 // arguments are needed to create the filter function 10945 // just as jQuery does 10946 if ( fn[ expando ] ) { 10947 return fn( argument ); 10948 } 10949 10950 // But maintain support for old signatures 10951 if ( fn.length > 1 ) { 10952 args = [ pseudo, pseudo, "", argument ]; 10953 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 10954 markFunction( function( seed, matches ) { 10955 var idx, 10956 matched = fn( seed, argument ), 10957 i = matched.length; 10958 while ( i-- ) { 10959 idx = indexOf.call( seed, matched[ i ] ); 10960 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 10961 } 10962 } ) : 10963 function( elem ) { 10964 return fn( elem, 0, args ); 10965 }; 10966 } 10967 10968 return fn; 10969 } 10970 }, 10971 10972 pseudos: { 10973 10974 // Potentially complex pseudos 10975 not: markFunction( function( selector ) { 10976 10977 // Trim the selector passed to compile 10978 // to avoid treating leading and trailing 10979 // spaces as combinators 10980 var input = [], 10981 results = [], 10982 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 10983 10984 return matcher[ expando ] ? 10985 markFunction( function( seed, matches, _context, xml ) { 10986 var elem, 10987 unmatched = matcher( seed, null, xml, [] ), 10988 i = seed.length; 10989 10990 // Match elements unmatched by `matcher` 10991 while ( i-- ) { 10992 if ( ( elem = unmatched[ i ] ) ) { 10993 seed[ i ] = !( matches[ i ] = elem ); 10994 } 10995 } 10996 } ) : 10997 function( elem, _context, xml ) { 10998 input[ 0 ] = elem; 10999 matcher( input, null, xml, results ); 11000 11001 // Don't keep the element 11002 // (see https://github.com/jquery/sizzle/issues/299) 11003 input[ 0 ] = null; 11004 return !results.pop(); 11005 }; 11006 } ), 11007 11008 has: markFunction( function( selector ) { 11009 return function( elem ) { 11010 return find( selector, elem ).length > 0; 11011 }; 11012 } ), 11013 11014 contains: markFunction( function( text ) { 11015 text = text.replace( runescape, funescape ); 11016 return function( elem ) { 11017 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 11018 }; 11019 } ), 11020 11021 // "Whether an element is represented by a :lang() selector 11022 // is based solely on the element's language value 11023 // being equal to the identifier C, 11024 // or beginning with the identifier C immediately followed by "-". 11025 // The matching of C against the element's language value is performed case-insensitively. 11026 // The identifier C does not have to be a valid language name." 11027 // https://www.w3.org/TR/selectors/#lang-pseudo 11028 lang: markFunction( function( lang ) { 11029 11030 // lang value must be a valid identifier 11031 if ( !ridentifier.test( lang || "" ) ) { 11032 find.error( "unsupported lang: " + lang ); 11033 } 11034 lang = lang.replace( runescape, funescape ).toLowerCase(); 11035 return function( elem ) { 11036 var elemLang; 11037 do { 11038 if ( ( elemLang = documentIsHTML ? 11039 elem.lang : 11040 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 11041 11042 elemLang = elemLang.toLowerCase(); 11043 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 11044 } 11045 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 11046 return false; 11047 }; 11048 } ), 11049 11050 // Miscellaneous 11051 target: function( elem ) { 11052 var hash = window.location && window.location.hash; 11053 return hash && hash.slice( 1 ) === elem.id; 11054 }, 11055 11056 root: function( elem ) { 11057 return elem === documentElement; 11058 }, 11059 11060 focus: function( elem ) { 11061 return elem === safeActiveElement() && 11062 document.hasFocus() && 11063 !!( elem.type || elem.href || ~elem.tabIndex ); 11064 }, 11065 11066 // Boolean properties 11067 enabled: createDisabledPseudo( false ), 11068 disabled: createDisabledPseudo( true ), 11069 11070 checked: function( elem ) { 11071 11072 // In CSS3, :checked should return both checked and selected elements 11073 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 11074 return ( nodeName( elem, "input" ) && !!elem.checked ) || 11075 ( nodeName( elem, "option" ) && !!elem.selected ); 11076 }, 11077 11078 selected: function( elem ) { 11079 11080 // Support: IE <=11+ 11081 // Accessing the selectedIndex property 11082 // forces the browser to treat the default option as 11083 // selected when in an optgroup. 11084 if ( elem.parentNode ) { 11085 // eslint-disable-next-line no-unused-expressions 11086 elem.parentNode.selectedIndex; 11087 } 11088 11089 return elem.selected === true; 11090 }, 11091 11092 // Contents 11093 empty: function( elem ) { 11094 11095 // https://www.w3.org/TR/selectors/#empty-pseudo 11096 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 11097 // but not by others (comment: 8; processing instruction: 7; etc.) 11098 // nodeType < 6 works because attributes (2) do not appear as children 11099 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 11100 if ( elem.nodeType < 6 ) { 11101 return false; 11102 } 11103 } 11104 return true; 11105 }, 11106 11107 parent: function( elem ) { 11108 return !Expr.pseudos.empty( elem ); 11109 }, 11110 11111 // Element/input types 11112 header: function( elem ) { 11113 return rheader.test( elem.nodeName ); 11114 }, 11115 11116 input: function( elem ) { 11117 return rinputs.test( elem.nodeName ); 11118 }, 11119 11120 button: function( elem ) { 11121 return nodeName( elem, "input" ) && elem.type === "button" || 11122 nodeName( elem, "button" ); 11123 }, 11124 11125 text: function( elem ) { 11126 var attr; 11127 return nodeName( elem, "input" ) && elem.type === "text" && 11128 11129 // Support: IE <10 only 11130 // New HTML5 attribute values (e.g., "search") appear 11131 // with elem.type === "text" 11132 ( ( attr = elem.getAttribute( "type" ) ) == null || 11133 attr.toLowerCase() === "text" ); 11134 }, 11135 11136 // Position-in-collection 11137 first: createPositionalPseudo( function() { 11138 return [ 0 ]; 11139 } ), 11140 11141 last: createPositionalPseudo( function( _matchIndexes, length ) { 11142 return [ length - 1 ]; 11143 } ), 11144 11145 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 11146 return [ argument < 0 ? argument + length : argument ]; 11147 } ), 11148 11149 even: createPositionalPseudo( function( matchIndexes, length ) { 11150 var i = 0; 11151 for ( ; i < length; i += 2 ) { 11152 matchIndexes.push( i ); 11153 } 11154 return matchIndexes; 11155 } ), 11156 11157 odd: createPositionalPseudo( function( matchIndexes, length ) { 11158 var i = 1; 11159 for ( ; i < length; i += 2 ) { 11160 matchIndexes.push( i ); 11161 } 11162 return matchIndexes; 11163 } ), 11164 11165 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 11166 var i; 11167 11168 if ( argument < 0 ) { 11169 i = argument + length; 11170 } else if ( argument > length ) { 11171 i = length; 11172 } else { 11173 i = argument; 11174 } 11175 11176 for ( ; --i >= 0; ) { 11177 matchIndexes.push( i ); 11178 } 11179 return matchIndexes; 11180 } ), 11181 11182 gt: createPositionalPseudo( function( matchIndexes, length, argument ) { 11183 var i = argument < 0 ? argument + length : argument; 11184 for ( ; ++i < length; ) { 11185 matchIndexes.push( i ); 11186 } 11187 return matchIndexes; 11188 } ) 11189 } 11190}; 11191 11192Expr.pseudos.nth = Expr.pseudos.eq; 11193 11194// Add button/input type pseudos 11195for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 11196 Expr.pseudos[ i ] = createInputPseudo( i ); 11197} 11198for ( i in { submit: true, reset: true } ) { 11199 Expr.pseudos[ i ] = createButtonPseudo( i ); 11200} 11201 11202// Easy API for creating new setFilters 11203function setFilters() {} 11204setFilters.prototype = Expr.filters = Expr.pseudos; 11205Expr.setFilters = new setFilters(); 11206 11207function tokenize( selector, parseOnly ) { 11208 var matched, match, tokens, type, 11209 soFar, groups, preFilters, 11210 cached = tokenCache[ selector + " " ]; 11211 11212 if ( cached ) { 11213 return parseOnly ? 0 : cached.slice( 0 ); 11214 } 11215 11216 soFar = selector; 11217 groups = []; 11218 preFilters = Expr.preFilter; 11219 11220 while ( soFar ) { 11221 11222 // Comma and first run 11223 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 11224 if ( match ) { 11225 11226 // Don't consume trailing commas as valid 11227 soFar = soFar.slice( match[ 0 ].length ) || soFar; 11228 } 11229 groups.push( ( tokens = [] ) ); 11230 } 11231 11232 matched = false; 11233 11234 // Combinators 11235 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 11236 matched = match.shift(); 11237 tokens.push( { 11238 value: matched, 11239 11240 // Cast descendant combinators to space 11241 type: match[ 0 ].replace( rtrimCSS, " " ) 11242 } ); 11243 soFar = soFar.slice( matched.length ); 11244 } 11245 11246 // Filters 11247 for ( type in Expr.filter ) { 11248 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 11249 ( match = preFilters[ type ]( match ) ) ) ) { 11250 matched = match.shift(); 11251 tokens.push( { 11252 value: matched, 11253 type: type, 11254 matches: match 11255 } ); 11256 soFar = soFar.slice( matched.length ); 11257 } 11258 } 11259 11260 if ( !matched ) { 11261 break; 11262 } 11263 } 11264 11265 // Return the length of the invalid excess 11266 // if we're just parsing 11267 // Otherwise, throw an error or return tokens 11268 if ( parseOnly ) { 11269 return soFar.length; 11270 } 11271 11272 return soFar ? 11273 find.error( selector ) : 11274 11275 // Cache the tokens 11276 tokenCache( selector, groups ).slice( 0 ); 11277} 11278 11279function toSelector( tokens ) { 11280 var i = 0, 11281 len = tokens.length, 11282 selector = ""; 11283 for ( ; i < len; i++ ) { 11284 selector += tokens[ i ].value; 11285 } 11286 return selector; 11287} 11288 11289function addCombinator( matcher, combinator, base ) { 11290 var dir = combinator.dir, 11291 skip = combinator.next, 11292 key = skip || dir, 11293 checkNonElements = base && key === "parentNode", 11294 doneName = done++; 11295 11296 return combinator.first ? 11297 11298 // Check against closest ancestor/preceding element 11299 function( elem, context, xml ) { 11300 while ( ( elem = elem[ dir ] ) ) { 11301 if ( elem.nodeType === 1 || checkNonElements ) { 11302 return matcher( elem, context, xml ); 11303 } 11304 } 11305 return false; 11306 } : 11307 11308 // Check against all ancestor/preceding elements 11309 function( elem, context, xml ) { 11310 var oldCache, outerCache, 11311 newCache = [ dirruns, doneName ]; 11312 11313 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 11314 if ( xml ) { 11315 while ( ( elem = elem[ dir ] ) ) { 11316 if ( elem.nodeType === 1 || checkNonElements ) { 11317 if ( matcher( elem, context, xml ) ) { 11318 return true; 11319 } 11320 } 11321 } 11322 } else { 11323 while ( ( elem = elem[ dir ] ) ) { 11324 if ( elem.nodeType === 1 || checkNonElements ) { 11325 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 11326 11327 if ( skip && nodeName( elem, skip ) ) { 11328 elem = elem[ dir ] || elem; 11329 } else if ( ( oldCache = outerCache[ key ] ) && 11330 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 11331 11332 // Assign to newCache so results back-propagate to previous elements 11333 return ( newCache[ 2 ] = oldCache[ 2 ] ); 11334 } else { 11335 11336 // Reuse newcache so results back-propagate to previous elements 11337 outerCache[ key ] = newCache; 11338 11339 // A match means we're done; a fail means we have to keep checking 11340 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 11341 return true; 11342 } 11343 } 11344 } 11345 } 11346 } 11347 return false; 11348 }; 11349} 11350 11351function elementMatcher( matchers ) { 11352 return matchers.length > 1 ? 11353 function( elem, context, xml ) { 11354 var i = matchers.length; 11355 while ( i-- ) { 11356 if ( !matchers[ i ]( elem, context, xml ) ) { 11357 return false; 11358 } 11359 } 11360 return true; 11361 } : 11362 matchers[ 0 ]; 11363} 11364 11365function multipleContexts( selector, contexts, results ) { 11366 var i = 0, 11367 len = contexts.length; 11368 for ( ; i < len; i++ ) { 11369 find( selector, contexts[ i ], results ); 11370 } 11371 return results; 11372} 11373 11374function condense( unmatched, map, filter, context, xml ) { 11375 var elem, 11376 newUnmatched = [], 11377 i = 0, 11378 len = unmatched.length, 11379 mapped = map != null; 11380 11381 for ( ; i < len; i++ ) { 11382 if ( ( elem = unmatched[ i ] ) ) { 11383 if ( !filter || filter( elem, context, xml ) ) { 11384 newUnmatched.push( elem ); 11385 if ( mapped ) { 11386 map.push( i ); 11387 } 11388 } 11389 } 11390 } 11391 11392 return newUnmatched; 11393} 11394 11395function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 11396 if ( postFilter && !postFilter[ expando ] ) { 11397 postFilter = setMatcher( postFilter ); 11398 } 11399 if ( postFinder && !postFinder[ expando ] ) { 11400 postFinder = setMatcher( postFinder, postSelector ); 11401 } 11402 return markFunction( function( seed, results, context, xml ) { 11403 var temp, i, elem, matcherOut, 11404 preMap = [], 11405 postMap = [], 11406 preexisting = results.length, 11407 11408 // Get initial elements from seed or context 11409 elems = seed || 11410 multipleContexts( selector || "*", 11411 context.nodeType ? [ context ] : context, [] ), 11412 11413 // Prefilter to get matcher input, preserving a map for seed-results synchronization 11414 matcherIn = preFilter && ( seed || !selector ) ? 11415 condense( elems, preMap, preFilter, context, xml ) : 11416 elems; 11417 11418 if ( matcher ) { 11419 11420 // If we have a postFinder, or filtered seed, or non-seed postFilter 11421 // or preexisting results, 11422 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 11423 11424 // ...intermediate processing is necessary 11425 [] : 11426 11427 // ...otherwise use results directly 11428 results; 11429 11430 // Find primary matches 11431 matcher( matcherIn, matcherOut, context, xml ); 11432 } else { 11433 matcherOut = matcherIn; 11434 } 11435 11436 // Apply postFilter 11437 if ( postFilter ) { 11438 temp = condense( matcherOut, postMap ); 11439 postFilter( temp, [], context, xml ); 11440 11441 // Un-match failing elements by moving them back to matcherIn 11442 i = temp.length; 11443 while ( i-- ) { 11444 if ( ( elem = temp[ i ] ) ) { 11445 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 11446 } 11447 } 11448 } 11449 11450 if ( seed ) { 11451 if ( postFinder || preFilter ) { 11452 if ( postFinder ) { 11453 11454 // Get the final matcherOut by condensing this intermediate into postFinder contexts 11455 temp = []; 11456 i = matcherOut.length; 11457 while ( i-- ) { 11458 if ( ( elem = matcherOut[ i ] ) ) { 11459 11460 // Restore matcherIn since elem is not yet a final match 11461 temp.push( ( matcherIn[ i ] = elem ) ); 11462 } 11463 } 11464 postFinder( null, ( matcherOut = [] ), temp, xml ); 11465 } 11466 11467 // Move matched elements from seed to results to keep them synchronized 11468 i = matcherOut.length; 11469 while ( i-- ) { 11470 if ( ( elem = matcherOut[ i ] ) && 11471 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 11472 11473 seed[ temp ] = !( results[ temp ] = elem ); 11474 } 11475 } 11476 } 11477 11478 // Add elements to results, through postFinder if defined 11479 } else { 11480 matcherOut = condense( 11481 matcherOut === results ? 11482 matcherOut.splice( preexisting, matcherOut.length ) : 11483 matcherOut 11484 ); 11485 if ( postFinder ) { 11486 postFinder( null, results, matcherOut, xml ); 11487 } else { 11488 push.apply( results, matcherOut ); 11489 } 11490 } 11491 } ); 11492} 11493 11494function matcherFromTokens( tokens ) { 11495 var checkContext, matcher, j, 11496 len = tokens.length, 11497 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 11498 implicitRelative = leadingRelative || Expr.relative[ " " ], 11499 i = leadingRelative ? 1 : 0, 11500 11501 // The foundational matcher ensures that elements are reachable from top-level context(s) 11502 matchContext = addCombinator( function( elem ) { 11503 return elem === checkContext; 11504 }, implicitRelative, true ), 11505 matchAnyContext = addCombinator( function( elem ) { 11506 return indexOf.call( checkContext, elem ) > -1; 11507 }, implicitRelative, true ), 11508 matchers = [ function( elem, context, xml ) { 11509 11510 // Support: IE 11+, Edge 17 - 18+ 11511 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 11512 // two documents; shallow comparisons work. 11513 // eslint-disable-next-line eqeqeq 11514 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 11515 ( checkContext = context ).nodeType ? 11516 matchContext( elem, context, xml ) : 11517 matchAnyContext( elem, context, xml ) ); 11518 11519 // Avoid hanging onto element 11520 // (see https://github.com/jquery/sizzle/issues/299) 11521 checkContext = null; 11522 return ret; 11523 } ]; 11524 11525 for ( ; i < len; i++ ) { 11526 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 11527 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 11528 } else { 11529 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 11530 11531 // Return special upon seeing a positional matcher 11532 if ( matcher[ expando ] ) { 11533 11534 // Find the next relative operator (if any) for proper handling 11535 j = ++i; 11536 for ( ; j < len; j++ ) { 11537 if ( Expr.relative[ tokens[ j ].type ] ) { 11538 break; 11539 } 11540 } 11541 return setMatcher( 11542 i > 1 && elementMatcher( matchers ), 11543 i > 1 && toSelector( 11544 11545 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 11546 tokens.slice( 0, i - 1 ) 11547 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 11548 ).replace( rtrimCSS, "$1" ), 11549 matcher, 11550 i < j && matcherFromTokens( tokens.slice( i, j ) ), 11551 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 11552 j < len && toSelector( tokens ) 11553 ); 11554 } 11555 matchers.push( matcher ); 11556 } 11557 } 11558 11559 return elementMatcher( matchers ); 11560} 11561 11562function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 11563 var bySet = setMatchers.length > 0, 11564 byElement = elementMatchers.length > 0, 11565 superMatcher = function( seed, context, xml, results, outermost ) { 11566 var elem, j, matcher, 11567 matchedCount = 0, 11568 i = "0", 11569 unmatched = seed && [], 11570 setMatched = [], 11571 contextBackup = outermostContext, 11572 11573 // We must always have either seed elements or outermost context 11574 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 11575 11576 // Use integer dirruns iff this is the outermost matcher 11577 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 11578 len = elems.length; 11579 11580 if ( outermost ) { 11581 11582 // Support: IE 11+, Edge 17 - 18+ 11583 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 11584 // two documents; shallow comparisons work. 11585 // eslint-disable-next-line eqeqeq 11586 outermostContext = context == document || context || outermost; 11587 } 11588 11589 // Add elements passing elementMatchers directly to results 11590 // Support: iOS <=7 - 9 only 11591 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 11592 // elements by id. (see trac-14142) 11593 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 11594 if ( byElement && elem ) { 11595 j = 0; 11596 11597 // Support: IE 11+, Edge 17 - 18+ 11598 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 11599 // two documents; shallow comparisons work. 11600 // eslint-disable-next-line eqeqeq 11601 if ( !context && elem.ownerDocument != document ) { 11602 setDocument( elem ); 11603 xml = !documentIsHTML; 11604 } 11605 while ( ( matcher = elementMatchers[ j++ ] ) ) { 11606 if ( matcher( elem, context || document, xml ) ) { 11607 push.call( results, elem ); 11608 break; 11609 } 11610 } 11611 if ( outermost ) { 11612 dirruns = dirrunsUnique; 11613 } 11614 } 11615 11616 // Track unmatched elements for set filters 11617 if ( bySet ) { 11618 11619 // They will have gone through all possible matchers 11620 if ( ( elem = !matcher && elem ) ) { 11621 matchedCount--; 11622 } 11623 11624 // Lengthen the array for every element, matched or not 11625 if ( seed ) { 11626 unmatched.push( elem ); 11627 } 11628 } 11629 } 11630 11631 // `i` is now the count of elements visited above, and adding it to `matchedCount` 11632 // makes the latter nonnegative. 11633 matchedCount += i; 11634 11635 // Apply set filters to unmatched elements 11636 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 11637 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 11638 // no element matchers and no seed. 11639 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 11640 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 11641 // numerically zero. 11642 if ( bySet && i !== matchedCount ) { 11643 j = 0; 11644 while ( ( matcher = setMatchers[ j++ ] ) ) { 11645 matcher( unmatched, setMatched, context, xml ); 11646 } 11647 11648 if ( seed ) { 11649 11650 // Reintegrate element matches to eliminate the need for sorting 11651 if ( matchedCount > 0 ) { 11652 while ( i-- ) { 11653 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 11654 setMatched[ i ] = pop.call( results ); 11655 } 11656 } 11657 } 11658 11659 // Discard index placeholder values to get only actual matches 11660 setMatched = condense( setMatched ); 11661 } 11662 11663 // Add matches to results 11664 push.apply( results, setMatched ); 11665 11666 // Seedless set matches succeeding multiple successful matchers stipulate sorting 11667 if ( outermost && !seed && setMatched.length > 0 && 11668 ( matchedCount + setMatchers.length ) > 1 ) { 11669 11670 jQuery.uniqueSort( results ); 11671 } 11672 } 11673 11674 // Override manipulation of globals by nested matchers 11675 if ( outermost ) { 11676 dirruns = dirrunsUnique; 11677 outermostContext = contextBackup; 11678 } 11679 11680 return unmatched; 11681 }; 11682 11683 return bySet ? 11684 markFunction( superMatcher ) : 11685 superMatcher; 11686} 11687 11688function compile( selector, match /* Internal Use Only */ ) { 11689 var i, 11690 setMatchers = [], 11691 elementMatchers = [], 11692 cached = compilerCache[ selector + " " ]; 11693 11694 if ( !cached ) { 11695 11696 // Generate a function of recursive functions that can be used to check each element 11697 if ( !match ) { 11698 match = tokenize( selector ); 11699 } 11700 i = match.length; 11701 while ( i-- ) { 11702 cached = matcherFromTokens( match[ i ] ); 11703 if ( cached[ expando ] ) { 11704 setMatchers.push( cached ); 11705 } else { 11706 elementMatchers.push( cached ); 11707 } 11708 } 11709 11710 // Cache the compiled function 11711 cached = compilerCache( selector, 11712 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 11713 11714 // Save selector and tokenization 11715 cached.selector = selector; 11716 } 11717 return cached; 11718} 11719 11720/** 11721 * A low-level selection function that works with jQuery's compiled 11722 * selector functions 11723 * @param {String|Function} selector A selector or a pre-compiled 11724 * selector function built with jQuery selector compile 11725 * @param {Element} context 11726 * @param {Array} [results] 11727 * @param {Array} [seed] A set of elements to match against 11728 */ 11729function select( selector, context, results, seed ) { 11730 var i, tokens, token, type, find, 11731 compiled = typeof selector === "function" && selector, 11732 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 11733 11734 results = results || []; 11735 11736 // Try to minimize operations if there is only one selector in the list and no seed 11737 // (the latter of which guarantees us context) 11738 if ( match.length === 1 ) { 11739 11740 // Reduce context if the leading compound selector is an ID 11741 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 11742 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 11743 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 11744 11745 context = ( Expr.find.ID( 11746 token.matches[ 0 ].replace( runescape, funescape ), 11747 context 11748 ) || [] )[ 0 ]; 11749 if ( !context ) { 11750 return results; 11751 11752 // Precompiled matchers will still verify ancestry, so step up a level 11753 } else if ( compiled ) { 11754 context = context.parentNode; 11755 } 11756 11757 selector = selector.slice( tokens.shift().value.length ); 11758 } 11759 11760 // Fetch a seed set for right-to-left matching 11761 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 11762 while ( i-- ) { 11763 token = tokens[ i ]; 11764 11765 // Abort if we hit a combinator 11766 if ( Expr.relative[ ( type = token.type ) ] ) { 11767 break; 11768 } 11769 if ( ( find = Expr.find[ type ] ) ) { 11770 11771 // Search, expanding context for leading sibling combinators 11772 if ( ( seed = find( 11773 token.matches[ 0 ].replace( runescape, funescape ), 11774 rsibling.test( tokens[ 0 ].type ) && 11775 testContext( context.parentNode ) || context 11776 ) ) ) { 11777 11778 // If seed is empty or no tokens remain, we can return early 11779 tokens.splice( i, 1 ); 11780 selector = seed.length && toSelector( tokens ); 11781 if ( !selector ) { 11782 push.apply( results, seed ); 11783 return results; 11784 } 11785 11786 break; 11787 } 11788 } 11789 } 11790 } 11791 11792 // Compile and execute a filtering function if one is not provided 11793 // Provide `match` to avoid retokenization if we modified the selector above 11794 ( compiled || compile( selector, match ) )( 11795 seed, 11796 context, 11797 !documentIsHTML, 11798 results, 11799 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 11800 ); 11801 return results; 11802} 11803 11804// One-time assignments 11805 11806// Support: Android <=4.0 - 4.1+ 11807// Sort stability 11808support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 11809 11810// Initialize against the default document 11811setDocument(); 11812 11813// Support: Android <=4.0 - 4.1+ 11814// Detached nodes confoundingly follow *each other* 11815support.sortDetached = assert( function( el ) { 11816 11817 // Should return 1, but returns 4 (following) 11818 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 11819} ); 11820 11821jQuery.find = find; 11822 11823// Deprecated 11824jQuery.expr[ ":" ] = jQuery.expr.pseudos; 11825jQuery.unique = jQuery.uniqueSort; 11826 11827// These have always been private, but they used to be documented as part of 11828// Sizzle so let's maintain them for now for backwards compatibility purposes. 11829find.compile = compile; 11830find.select = select; 11831find.setDocument = setDocument; 11832find.tokenize = tokenize; 11833 11834find.escape = jQuery.escapeSelector; 11835find.getText = jQuery.text; 11836find.isXML = jQuery.isXMLDoc; 11837find.selectors = jQuery.expr; 11838find.support = jQuery.support; 11839find.uniqueSort = jQuery.uniqueSort; 11840 11841 /* eslint-enable */ 11842 11843} )(); 11844 11845 11846var dir = function( elem, dir, until ) { 11847 var matched = [], 11848 truncate = until !== undefined; 11849 11850 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 11851 if ( elem.nodeType === 1 ) { 11852 if ( truncate && jQuery( elem ).is( until ) ) { 11853 break; 11854 } 11855 matched.push( elem ); 11856 } 11857 } 11858 return matched; 11859}; 11860 11861 11862var siblings = function( n, elem ) { 11863 var matched = []; 11864 11865 for ( ; n; n = n.nextSibling ) { 11866 if ( n.nodeType === 1 && n !== elem ) { 11867 matched.push( n ); 11868 } 11869 } 11870 11871 return matched; 11872}; 11873 11874 11875var rneedsContext = jQuery.expr.match.needsContext; 11876 11877var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 11878 11879 11880 11881// Implement the identical functionality for filter and not 11882function winnow( elements, qualifier, not ) { 11883 if ( isFunction( qualifier ) ) { 11884 return jQuery.grep( elements, function( elem, i ) { 11885 return !!qualifier.call( elem, i, elem ) !== not; 11886 } ); 11887 } 11888 11889 // Single element 11890 if ( qualifier.nodeType ) { 11891 return jQuery.grep( elements, function( elem ) { 11892 return ( elem === qualifier ) !== not; 11893 } ); 11894 } 11895 11896 // Arraylike of elements (jQuery, arguments, Array) 11897 if ( typeof qualifier !== "string" ) { 11898 return jQuery.grep( elements, function( elem ) { 11899 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 11900 } ); 11901 } 11902 11903 // Filtered directly for both simple and complex selectors 11904 return jQuery.filter( qualifier, elements, not ); 11905} 11906 11907jQuery.filter = function( expr, elems, not ) { 11908 var elem = elems[ 0 ]; 11909 11910 if ( not ) { 11911 expr = ":not(" + expr + ")"; 11912 } 11913 11914 if ( elems.length === 1 && elem.nodeType === 1 ) { 11915 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 11916 } 11917 11918 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 11919 return elem.nodeType === 1; 11920 } ) ); 11921}; 11922 11923jQuery.fn.extend( { 11924 find: function( selector ) { 11925 var i, ret, 11926 len = this.length, 11927 self = this; 11928 11929 if ( typeof selector !== "string" ) { 11930 return this.pushStack( jQuery( selector ).filter( function() { 11931 for ( i = 0; i < len; i++ ) { 11932 if ( jQuery.contains( self[ i ], this ) ) { 11933 return true; 11934 } 11935 } 11936 } ) ); 11937 } 11938 11939 ret = this.pushStack( [] ); 11940 11941 for ( i = 0; i < len; i++ ) { 11942 jQuery.find( selector, self[ i ], ret ); 11943 } 11944 11945 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 11946 }, 11947 filter: function( selector ) { 11948 return this.pushStack( winnow( this, selector || [], false ) ); 11949 }, 11950 not: function( selector ) { 11951 return this.pushStack( winnow( this, selector || [], true ) ); 11952 }, 11953 is: function( selector ) { 11954 return !!winnow( 11955 this, 11956 11957 // If this is a positional/relative selector, check membership in the returned set 11958 // so $("p:first").is("p:last") won't return true for a doc with two "p". 11959 typeof selector === "string" && rneedsContext.test( selector ) ? 11960 jQuery( selector ) : 11961 selector || [], 11962 false 11963 ).length; 11964 } 11965} ); 11966 11967 11968// Initialize a jQuery object 11969 11970 11971// A central reference to the root jQuery(document) 11972var rootjQuery, 11973 11974 // A simple way to check for HTML strings 11975 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 11976 // Strict HTML recognition (trac-11290: must start with <) 11977 // Shortcut simple #id case for speed 11978 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 11979 11980 init = jQuery.fn.init = function( selector, context, root ) { 11981 var match, elem; 11982 11983 // HANDLE: $(""), $(null), $(undefined), $(false) 11984 if ( !selector ) { 11985 return this; 11986 } 11987 11988 // Method init() accepts an alternate rootjQuery 11989 // so migrate can support jQuery.sub (gh-2101) 11990 root = root || rootjQuery; 11991 11992 // Handle HTML strings 11993 if ( typeof selector === "string" ) { 11994 if ( selector[ 0 ] === "<" && 11995 selector[ selector.length - 1 ] === ">" && 11996 selector.length >= 3 ) { 11997 11998 // Assume that strings that start and end with <> are HTML and skip the regex check 11999 match = [ null, selector, null ]; 12000 12001 } else { 12002 match = rquickExpr.exec( selector ); 12003 } 12004 12005 // Match html or make sure no context is specified for #id 12006 if ( match && ( match[ 1 ] || !context ) ) { 12007 12008 // HANDLE: $(html) -> $(array) 12009 if ( match[ 1 ] ) { 12010 context = context instanceof jQuery ? context[ 0 ] : context; 12011 12012 // Option to run scripts is true for back-compat 12013 // Intentionally let the error be thrown if parseHTML is not present 12014 jQuery.merge( this, jQuery.parseHTML( 12015 match[ 1 ], 12016 context && context.nodeType ? context.ownerDocument || context : document, 12017 true 12018 ) ); 12019 12020 // HANDLE: $(html, props) 12021 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 12022 for ( match in context ) { 12023 12024 // Properties of context are called as methods if possible 12025 if ( isFunction( this[ match ] ) ) { 12026 this[ match ]( context[ match ] ); 12027 12028 // ...and otherwise set as attributes 12029 } else { 12030 this.attr( match, context[ match ] ); 12031 } 12032 } 12033 } 12034 12035 return this; 12036 12037 // HANDLE: $(#id) 12038 } else { 12039 elem = document.getElementById( match[ 2 ] ); 12040 12041 if ( elem ) { 12042 12043 // Inject the element directly into the jQuery object 12044 this[ 0 ] = elem; 12045 this.length = 1; 12046 } 12047 return this; 12048 } 12049 12050 // HANDLE: $(expr, $(...)) 12051 } else if ( !context || context.jquery ) { 12052 return ( context || root ).find( selector ); 12053 12054 // HANDLE: $(expr, context) 12055 // (which is just equivalent to: $(context).find(expr) 12056 } else { 12057 return this.constructor( context ).find( selector ); 12058 } 12059 12060 // HANDLE: $(DOMElement) 12061 } else if ( selector.nodeType ) { 12062 this[ 0 ] = selector; 12063 this.length = 1; 12064 return this; 12065 12066 // HANDLE: $(function) 12067 // Shortcut for document ready 12068 } else if ( isFunction( selector ) ) { 12069 return root.ready !== undefined ? 12070 root.ready( selector ) : 12071 12072 // Execute immediately if ready is not present 12073 selector( jQuery ); 12074 } 12075 12076 return jQuery.makeArray( selector, this ); 12077 }; 12078 12079// Give the init function the jQuery prototype for later instantiation 12080init.prototype = jQuery.fn; 12081 12082// Initialize central reference 12083rootjQuery = jQuery( document ); 12084 12085 12086var rparentsprev = /^(?:parents|prev(?:Until|All))/, 12087 12088 // Methods guaranteed to produce a unique set when starting from a unique set 12089 guaranteedUnique = { 12090 children: true, 12091 contents: true, 12092 next: true, 12093 prev: true 12094 }; 12095 12096jQuery.fn.extend( { 12097 has: function( target ) { 12098 var targets = jQuery( target, this ), 12099 l = targets.length; 12100 12101 return this.filter( function() { 12102 var i = 0; 12103 for ( ; i < l; i++ ) { 12104 if ( jQuery.contains( this, targets[ i ] ) ) { 12105 return true; 12106 } 12107 } 12108 } ); 12109 }, 12110 12111 closest: function( selectors, context ) { 12112 var cur, 12113 i = 0, 12114 l = this.length, 12115 matched = [], 12116 targets = typeof selectors !== "string" && jQuery( selectors ); 12117 12118 // Positional selectors never match, since there's no _selection_ context 12119 if ( !rneedsContext.test( selectors ) ) { 12120 for ( ; i < l; i++ ) { 12121 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 12122 12123 // Always skip document fragments 12124 if ( cur.nodeType < 11 && ( targets ? 12125 targets.index( cur ) > -1 : 12126 12127 // Don't pass non-elements to jQuery#find 12128 cur.nodeType === 1 && 12129 jQuery.find.matchesSelector( cur, selectors ) ) ) { 12130 12131 matched.push( cur ); 12132 break; 12133 } 12134 } 12135 } 12136 } 12137 12138 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 12139 }, 12140 12141 // Determine the position of an element within the set 12142 index: function( elem ) { 12143 12144 // No argument, return index in parent 12145 if ( !elem ) { 12146 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 12147 } 12148 12149 // Index in selector 12150 if ( typeof elem === "string" ) { 12151 return indexOf.call( jQuery( elem ), this[ 0 ] ); 12152 } 12153 12154 // Locate the position of the desired element 12155 return indexOf.call( this, 12156 12157 // If it receives a jQuery object, the first element is used 12158 elem.jquery ? elem[ 0 ] : elem 12159 ); 12160 }, 12161 12162 add: function( selector, context ) { 12163 return this.pushStack( 12164 jQuery.uniqueSort( 12165 jQuery.merge( this.get(), jQuery( selector, context ) ) 12166 ) 12167 ); 12168 }, 12169 12170 addBack: function( selector ) { 12171 return this.add( selector == null ? 12172 this.prevObject : this.prevObject.filter( selector ) 12173 ); 12174 } 12175} ); 12176 12177function sibling( cur, dir ) { 12178 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 12179 return cur; 12180} 12181 12182jQuery.each( { 12183 parent: function( elem ) { 12184 var parent = elem.parentNode; 12185 return parent && parent.nodeType !== 11 ? parent : null; 12186 }, 12187 parents: function( elem ) { 12188 return dir( elem, "parentNode" ); 12189 }, 12190 parentsUntil: function( elem, _i, until ) { 12191 return dir( elem, "parentNode", until ); 12192 }, 12193 next: function( elem ) { 12194 return sibling( elem, "nextSibling" ); 12195 }, 12196 prev: function( elem ) { 12197 return sibling( elem, "previousSibling" ); 12198 }, 12199 nextAll: function( elem ) { 12200 return dir( elem, "nextSibling" ); 12201 }, 12202 prevAll: function( elem ) { 12203 return dir( elem, "previousSibling" ); 12204 }, 12205 nextUntil: function( elem, _i, until ) { 12206 return dir( elem, "nextSibling", until ); 12207 }, 12208 prevUntil: function( elem, _i, until ) { 12209 return dir( elem, "previousSibling", until ); 12210 }, 12211 siblings: function( elem ) { 12212 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 12213 }, 12214 children: function( elem ) { 12215 return siblings( elem.firstChild ); 12216 }, 12217 contents: function( elem ) { 12218 if ( elem.contentDocument != null && 12219 12220 // Support: IE 11+ 12221 // <object> elements with no `data` attribute has an object 12222 // `contentDocument` with a `null` prototype. 12223 getProto( elem.contentDocument ) ) { 12224 12225 return elem.contentDocument; 12226 } 12227 12228 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 12229 // Treat the template element as a regular one in browsers that 12230 // don't support it. 12231 if ( nodeName( elem, "template" ) ) { 12232 elem = elem.content || elem; 12233 } 12234 12235 return jQuery.merge( [], elem.childNodes ); 12236 } 12237}, function( name, fn ) { 12238 jQuery.fn[ name ] = function( until, selector ) { 12239 var matched = jQuery.map( this, fn, until ); 12240 12241 if ( name.slice( -5 ) !== "Until" ) { 12242 selector = until; 12243 } 12244 12245 if ( selector && typeof selector === "string" ) { 12246 matched = jQuery.filter( selector, matched ); 12247 } 12248 12249 if ( this.length > 1 ) { 12250 12251 // Remove duplicates 12252 if ( !guaranteedUnique[ name ] ) { 12253 jQuery.uniqueSort( matched ); 12254 } 12255 12256 // Reverse order for parents* and prev-derivatives 12257 if ( rparentsprev.test( name ) ) { 12258 matched.reverse(); 12259 } 12260 } 12261 12262 return this.pushStack( matched ); 12263 }; 12264} ); 12265var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 12266 12267 12268 12269// Convert String-formatted options into Object-formatted ones 12270function createOptions( options ) { 12271 var object = {}; 12272 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 12273 object[ flag ] = true; 12274 } ); 12275 return object; 12276} 12277 12278/* 12279 * Create a callback list using the following parameters: 12280 * 12281 * options: an optional list of space-separated options that will change how 12282 * the callback list behaves or a more traditional option object 12283 * 12284 * By default a callback list will act like an event callback list and can be 12285 * "fired" multiple times. 12286 * 12287 * Possible options: 12288 * 12289 * once: will ensure the callback list can only be fired once (like a Deferred) 12290 * 12291 * memory: will keep track of previous values and will call any callback added 12292 * after the list has been fired right away with the latest "memorized" 12293 * values (like a Deferred) 12294 * 12295 * unique: will ensure a callback can only be added once (no duplicate in the list) 12296 * 12297 * stopOnFalse: interrupt callings when a callback returns false 12298 * 12299 */ 12300jQuery.Callbacks = function( options ) { 12301 12302 // Convert options from String-formatted to Object-formatted if needed 12303 // (we check in cache first) 12304 options = typeof options === "string" ? 12305 createOptions( options ) : 12306 jQuery.extend( {}, options ); 12307 12308 var // Flag to know if list is currently firing 12309 firing, 12310 12311 // Last fire value for non-forgettable lists 12312 memory, 12313 12314 // Flag to know if list was already fired 12315 fired, 12316 12317 // Flag to prevent firing 12318 locked, 12319 12320 // Actual callback list 12321 list = [], 12322 12323 // Queue of execution data for repeatable lists 12324 queue = [], 12325 12326 // Index of currently firing callback (modified by add/remove as needed) 12327 firingIndex = -1, 12328 12329 // Fire callbacks 12330 fire = function() { 12331 12332 // Enforce single-firing 12333 locked = locked || options.once; 12334 12335 // Execute callbacks for all pending executions, 12336 // respecting firingIndex overrides and runtime changes 12337 fired = firing = true; 12338 for ( ; queue.length; firingIndex = -1 ) { 12339 memory = queue.shift(); 12340 while ( ++firingIndex < list.length ) { 12341 12342 // Run callback and check for early termination 12343 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 12344 options.stopOnFalse ) { 12345 12346 // Jump to end and forget the data so .add doesn't re-fire 12347 firingIndex = list.length; 12348 memory = false; 12349 } 12350 } 12351 } 12352 12353 // Forget the data if we're done with it 12354 if ( !options.memory ) { 12355 memory = false; 12356 } 12357 12358 firing = false; 12359 12360 // Clean up if we're done firing for good 12361 if ( locked ) { 12362 12363 // Keep an empty list if we have data for future add calls 12364 if ( memory ) { 12365 list = []; 12366 12367 // Otherwise, this object is spent 12368 } else { 12369 list = ""; 12370 } 12371 } 12372 }, 12373 12374 // Actual Callbacks object 12375 self = { 12376 12377 // Add a callback or a collection of callbacks to the list 12378 add: function() { 12379 if ( list ) { 12380 12381 // If we have memory from a past run, we should fire after adding 12382 if ( memory && !firing ) { 12383 firingIndex = list.length - 1; 12384 queue.push( memory ); 12385 } 12386 12387 ( function add( args ) { 12388 jQuery.each( args, function( _, arg ) { 12389 if ( isFunction( arg ) ) { 12390 if ( !options.unique || !self.has( arg ) ) { 12391 list.push( arg ); 12392 } 12393 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 12394 12395 // Inspect recursively 12396 add( arg ); 12397 } 12398 } ); 12399 } )( arguments ); 12400 12401 if ( memory && !firing ) { 12402 fire(); 12403 } 12404 } 12405 return this; 12406 }, 12407 12408 // Remove a callback from the list 12409 remove: function() { 12410 jQuery.each( arguments, function( _, arg ) { 12411 var index; 12412 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 12413 list.splice( index, 1 ); 12414 12415 // Handle firing indexes 12416 if ( index <= firingIndex ) { 12417 firingIndex--; 12418 } 12419 } 12420 } ); 12421 return this; 12422 }, 12423 12424 // Check if a given callback is in the list. 12425 // If no argument is given, return whether or not list has callbacks attached. 12426 has: function( fn ) { 12427 return fn ? 12428 jQuery.inArray( fn, list ) > -1 : 12429 list.length > 0; 12430 }, 12431 12432 // Remove all callbacks from the list 12433 empty: function() { 12434 if ( list ) { 12435 list = []; 12436 } 12437 return this; 12438 }, 12439 12440 // Disable .fire and .add 12441 // Abort any current/pending executions 12442 // Clear all callbacks and values 12443 disable: function() { 12444 locked = queue = []; 12445 list = memory = ""; 12446 return this; 12447 }, 12448 disabled: function() { 12449 return !list; 12450 }, 12451 12452 // Disable .fire 12453 // Also disable .add unless we have memory (since it would have no effect) 12454 // Abort any pending executions 12455 lock: function() { 12456 locked = queue = []; 12457 if ( !memory && !firing ) { 12458 list = memory = ""; 12459 } 12460 return this; 12461 }, 12462 locked: function() { 12463 return !!locked; 12464 }, 12465 12466 // Call all callbacks with the given context and arguments 12467 fireWith: function( context, args ) { 12468 if ( !locked ) { 12469 args = args || []; 12470 args = [ context, args.slice ? args.slice() : args ]; 12471 queue.push( args ); 12472 if ( !firing ) { 12473 fire(); 12474 } 12475 } 12476 return this; 12477 }, 12478 12479 // Call all the callbacks with the given arguments 12480 fire: function() { 12481 self.fireWith( this, arguments ); 12482 return this; 12483 }, 12484 12485 // To know if the callbacks have already been called at least once 12486 fired: function() { 12487 return !!fired; 12488 } 12489 }; 12490 12491 return self; 12492}; 12493 12494 12495function Identity( v ) { 12496 return v; 12497} 12498function Thrower( ex ) { 12499 throw ex; 12500} 12501 12502function adoptValue( value, resolve, reject, noValue ) { 12503 var method; 12504 12505 try { 12506 12507 // Check for promise aspect first to privilege synchronous behavior 12508 if ( value && isFunction( ( method = value.promise ) ) ) { 12509 method.call( value ).done( resolve ).fail( reject ); 12510 12511 // Other thenables 12512 } else if ( value && isFunction( ( method = value.then ) ) ) { 12513 method.call( value, resolve, reject ); 12514 12515 // Other non-thenables 12516 } else { 12517 12518 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 12519 // * false: [ value ].slice( 0 ) => resolve( value ) 12520 // * true: [ value ].slice( 1 ) => resolve() 12521 resolve.apply( undefined, [ value ].slice( noValue ) ); 12522 } 12523 12524 // For Promises/A+, convert exceptions into rejections 12525 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 12526 // Deferred#then to conditionally suppress rejection. 12527 } catch ( value ) { 12528 12529 // Support: Android 4.0 only 12530 // Strict mode functions invoked without .call/.apply get global-object context 12531 reject.apply( undefined, [ value ] ); 12532 } 12533} 12534 12535jQuery.extend( { 12536 12537 Deferred: function( func ) { 12538 var tuples = [ 12539 12540 // action, add listener, callbacks, 12541 // ... .then handlers, argument index, [final state] 12542 [ "notify", "progress", jQuery.Callbacks( "memory" ), 12543 jQuery.Callbacks( "memory" ), 2 ], 12544 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 12545 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 12546 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 12547 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 12548 ], 12549 state = "pending", 12550 promise = { 12551 state: function() { 12552 return state; 12553 }, 12554 always: function() { 12555 deferred.done( arguments ).fail( arguments ); 12556 return this; 12557 }, 12558 "catch": function( fn ) { 12559 return promise.then( null, fn ); 12560 }, 12561 12562 // Keep pipe for back-compat 12563 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 12564 var fns = arguments; 12565 12566 return jQuery.Deferred( function( newDefer ) { 12567 jQuery.each( tuples, function( _i, tuple ) { 12568 12569 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 12570 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 12571 12572 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 12573 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 12574 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 12575 deferred[ tuple[ 1 ] ]( function() { 12576 var returned = fn && fn.apply( this, arguments ); 12577 if ( returned && isFunction( returned.promise ) ) { 12578 returned.promise() 12579 .progress( newDefer.notify ) 12580 .done( newDefer.resolve ) 12581 .fail( newDefer.reject ); 12582 } else { 12583 newDefer[ tuple[ 0 ] + "With" ]( 12584 this, 12585 fn ? [ returned ] : arguments 12586 ); 12587 } 12588 } ); 12589 } ); 12590 fns = null; 12591 } ).promise(); 12592 }, 12593 then: function( onFulfilled, onRejected, onProgress ) { 12594 var maxDepth = 0; 12595 function resolve( depth, deferred, handler, special ) { 12596 return function() { 12597 var that = this, 12598 args = arguments, 12599 mightThrow = function() { 12600 var returned, then; 12601 12602 // Support: Promises/A+ section 2.3.3.3.3 12603 // https://promisesaplus.com/#point-59 12604 // Ignore double-resolution attempts 12605 if ( depth < maxDepth ) { 12606 return; 12607 } 12608 12609 returned = handler.apply( that, args ); 12610 12611 // Support: Promises/A+ section 2.3.1 12612 // https://promisesaplus.com/#point-48 12613 if ( returned === deferred.promise() ) { 12614 throw new TypeError( "Thenable self-resolution" ); 12615 } 12616 12617 // Support: Promises/A+ sections 2.3.3.1, 3.5 12618 // https://promisesaplus.com/#point-54 12619 // https://promisesaplus.com/#point-75 12620 // Retrieve `then` only once 12621 then = returned && 12622 12623 // Support: Promises/A+ section 2.3.4 12624 // https://promisesaplus.com/#point-64 12625 // Only check objects and functions for thenability 12626 ( typeof returned === "object" || 12627 typeof returned === "function" ) && 12628 returned.then; 12629 12630 // Handle a returned thenable 12631 if ( isFunction( then ) ) { 12632 12633 // Special processors (notify) just wait for resolution 12634 if ( special ) { 12635 then.call( 12636 returned, 12637 resolve( maxDepth, deferred, Identity, special ), 12638 resolve( maxDepth, deferred, Thrower, special ) 12639 ); 12640 12641 // Normal processors (resolve) also hook into progress 12642 } else { 12643 12644 // ...and disregard older resolution values 12645 maxDepth++; 12646 12647 then.call( 12648 returned, 12649 resolve( maxDepth, deferred, Identity, special ), 12650 resolve( maxDepth, deferred, Thrower, special ), 12651 resolve( maxDepth, deferred, Identity, 12652 deferred.notifyWith ) 12653 ); 12654 } 12655 12656 // Handle all other returned values 12657 } else { 12658 12659 // Only substitute handlers pass on context 12660 // and multiple values (non-spec behavior) 12661 if ( handler !== Identity ) { 12662 that = undefined; 12663 args = [ returned ]; 12664 } 12665 12666 // Process the value(s) 12667 // Default process is resolve 12668 ( special || deferred.resolveWith )( that, args ); 12669 } 12670 }, 12671 12672 // Only normal processors (resolve) catch and reject exceptions 12673 process = special ? 12674 mightThrow : 12675 function() { 12676 try { 12677 mightThrow(); 12678 } catch ( e ) { 12679 12680 if ( jQuery.Deferred.exceptionHook ) { 12681 jQuery.Deferred.exceptionHook( e, 12682 process.error ); 12683 } 12684 12685 // Support: Promises/A+ section 2.3.3.3.4.1 12686 // https://promisesaplus.com/#point-61 12687 // Ignore post-resolution exceptions 12688 if ( depth + 1 >= maxDepth ) { 12689 12690 // Only substitute handlers pass on context 12691 // and multiple values (non-spec behavior) 12692 if ( handler !== Thrower ) { 12693 that = undefined; 12694 args = [ e ]; 12695 } 12696 12697 deferred.rejectWith( that, args ); 12698 } 12699 } 12700 }; 12701 12702 // Support: Promises/A+ section 2.3.3.3.1 12703 // https://promisesaplus.com/#point-57 12704 // Re-resolve promises immediately to dodge false rejection from 12705 // subsequent errors 12706 if ( depth ) { 12707 process(); 12708 } else { 12709 12710 // Call an optional hook to record the error, in case of exception 12711 // since it's otherwise lost when execution goes async 12712 if ( jQuery.Deferred.getErrorHook ) { 12713 process.error = jQuery.Deferred.getErrorHook(); 12714 12715 // The deprecated alias of the above. While the name suggests 12716 // returning the stack, not an error instance, jQuery just passes 12717 // it directly to `console.warn` so both will work; an instance 12718 // just better cooperates with source maps. 12719 } else if ( jQuery.Deferred.getStackHook ) { 12720 process.error = jQuery.Deferred.getStackHook(); 12721 } 12722 window.setTimeout( process ); 12723 } 12724 }; 12725 } 12726 12727 return jQuery.Deferred( function( newDefer ) { 12728 12729 // progress_handlers.add( ... ) 12730 tuples[ 0 ][ 3 ].add( 12731 resolve( 12732 0, 12733 newDefer, 12734 isFunction( onProgress ) ? 12735 onProgress : 12736 Identity, 12737 newDefer.notifyWith 12738 ) 12739 ); 12740 12741 // fulfilled_handlers.add( ... ) 12742 tuples[ 1 ][ 3 ].add( 12743 resolve( 12744 0, 12745 newDefer, 12746 isFunction( onFulfilled ) ? 12747 onFulfilled : 12748 Identity 12749 ) 12750 ); 12751 12752 // rejected_handlers.add( ... ) 12753 tuples[ 2 ][ 3 ].add( 12754 resolve( 12755 0, 12756 newDefer, 12757 isFunction( onRejected ) ? 12758 onRejected : 12759 Thrower 12760 ) 12761 ); 12762 } ).promise(); 12763 }, 12764 12765 // Get a promise for this deferred 12766 // If obj is provided, the promise aspect is added to the object 12767 promise: function( obj ) { 12768 return obj != null ? jQuery.extend( obj, promise ) : promise; 12769 } 12770 }, 12771 deferred = {}; 12772 12773 // Add list-specific methods 12774 jQuery.each( tuples, function( i, tuple ) { 12775 var list = tuple[ 2 ], 12776 stateString = tuple[ 5 ]; 12777 12778 // promise.progress = list.add 12779 // promise.done = list.add 12780 // promise.fail = list.add 12781 promise[ tuple[ 1 ] ] = list.add; 12782 12783 // Handle state 12784 if ( stateString ) { 12785 list.add( 12786 function() { 12787 12788 // state = "resolved" (i.e., fulfilled) 12789 // state = "rejected" 12790 state = stateString; 12791 }, 12792 12793 // rejected_callbacks.disable 12794 // fulfilled_callbacks.disable 12795 tuples[ 3 - i ][ 2 ].disable, 12796 12797 // rejected_handlers.disable 12798 // fulfilled_handlers.disable 12799 tuples[ 3 - i ][ 3 ].disable, 12800 12801 // progress_callbacks.lock 12802 tuples[ 0 ][ 2 ].lock, 12803 12804 // progress_handlers.lock 12805 tuples[ 0 ][ 3 ].lock 12806 ); 12807 } 12808 12809 // progress_handlers.fire 12810 // fulfilled_handlers.fire 12811 // rejected_handlers.fire 12812 list.add( tuple[ 3 ].fire ); 12813 12814 // deferred.notify = function() { deferred.notifyWith(...) } 12815 // deferred.resolve = function() { deferred.resolveWith(...) } 12816 // deferred.reject = function() { deferred.rejectWith(...) } 12817 deferred[ tuple[ 0 ] ] = function() { 12818 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 12819 return this; 12820 }; 12821 12822 // deferred.notifyWith = list.fireWith 12823 // deferred.resolveWith = list.fireWith 12824 // deferred.rejectWith = list.fireWith 12825 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 12826 } ); 12827 12828 // Make the deferred a promise 12829 promise.promise( deferred ); 12830 12831 // Call given func if any 12832 if ( func ) { 12833 func.call( deferred, deferred ); 12834 } 12835 12836 // All done! 12837 return deferred; 12838 }, 12839 12840 // Deferred helper 12841 when: function( singleValue ) { 12842 var 12843 12844 // count of uncompleted subordinates 12845 remaining = arguments.length, 12846 12847 // count of unprocessed arguments 12848 i = remaining, 12849 12850 // subordinate fulfillment data 12851 resolveContexts = Array( i ), 12852 resolveValues = slice.call( arguments ), 12853 12854 // the primary Deferred 12855 primary = jQuery.Deferred(), 12856 12857 // subordinate callback factory 12858 updateFunc = function( i ) { 12859 return function( value ) { 12860 resolveContexts[ i ] = this; 12861 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 12862 if ( !( --remaining ) ) { 12863 primary.resolveWith( resolveContexts, resolveValues ); 12864 } 12865 }; 12866 }; 12867 12868 // Single- and empty arguments are adopted like Promise.resolve 12869 if ( remaining <= 1 ) { 12870 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 12871 !remaining ); 12872 12873 // Use .then() to unwrap secondary thenables (cf. gh-3000) 12874 if ( primary.state() === "pending" || 12875 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 12876 12877 return primary.then(); 12878 } 12879 } 12880 12881 // Multiple arguments are aggregated like Promise.all array elements 12882 while ( i-- ) { 12883 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 12884 } 12885 12886 return primary.promise(); 12887 } 12888} ); 12889 12890 12891// These usually indicate a programmer mistake during development, 12892// warn about them ASAP rather than swallowing them by default. 12893var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 12894 12895// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 12896// captured before the async barrier to get the original error cause 12897// which may otherwise be hidden. 12898jQuery.Deferred.exceptionHook = function( error, asyncError ) { 12899 12900 // Support: IE 8 - 9 only 12901 // Console exists when dev tools are open, which can happen at any time 12902 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 12903 window.console.warn( "jQuery.Deferred exception: " + error.message, 12904 error.stack, asyncError ); 12905 } 12906}; 12907 12908 12909 12910 12911jQuery.readyException = function( error ) { 12912 window.setTimeout( function() { 12913 throw error; 12914 } ); 12915}; 12916 12917 12918 12919 12920// The deferred used on DOM ready 12921var readyList = jQuery.Deferred(); 12922 12923jQuery.fn.ready = function( fn ) { 12924 12925 readyList 12926 .then( fn ) 12927 12928 // Wrap jQuery.readyException in a function so that the lookup 12929 // happens at the time of error handling instead of callback 12930 // registration. 12931 .catch( function( error ) { 12932 jQuery.readyException( error ); 12933 } ); 12934 12935 return this; 12936}; 12937 12938jQuery.extend( { 12939 12940 // Is the DOM ready to be used? Set to true once it occurs. 12941 isReady: false, 12942 12943 // A counter to track how many items to wait for before 12944 // the ready event fires. See trac-6781 12945 readyWait: 1, 12946 12947 // Handle when the DOM is ready 12948 ready: function( wait ) { 12949 12950 // Abort if there are pending holds or we're already ready 12951 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 12952 return; 12953 } 12954 12955 // Remember that the DOM is ready 12956 jQuery.isReady = true; 12957 12958 // If a normal DOM Ready event fired, decrement, and wait if need be 12959 if ( wait !== true && --jQuery.readyWait > 0 ) { 12960 return; 12961 } 12962 12963 // If there are functions bound, to execute 12964 readyList.resolveWith( document, [ jQuery ] ); 12965 } 12966} ); 12967 12968jQuery.ready.then = readyList.then; 12969 12970// The ready event handler and self cleanup method 12971function completed() { 12972 document.removeEventListener( "DOMContentLoaded", completed ); 12973 window.removeEventListener( "load", completed ); 12974 jQuery.ready(); 12975} 12976 12977// Catch cases where $(document).ready() is called 12978// after the browser event has already occurred. 12979// Support: IE <=9 - 10 only 12980// Older IE sometimes signals "interactive" too soon 12981if ( document.readyState === "complete" || 12982 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 12983 12984 // Handle it asynchronously to allow scripts the opportunity to delay ready 12985 window.setTimeout( jQuery.ready ); 12986 12987} else { 12988 12989 // Use the handy event callback 12990 document.addEventListener( "DOMContentLoaded", completed ); 12991 12992 // A fallback to window.onload, that will always work 12993 window.addEventListener( "load", completed ); 12994} 12995 12996 12997 12998 12999// Multifunctional method to get and set values of a collection 13000// The value/s can optionally be executed if it's a function 13001var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 13002 var i = 0, 13003 len = elems.length, 13004 bulk = key == null; 13005 13006 // Sets many values 13007 if ( toType( key ) === "object" ) { 13008 chainable = true; 13009 for ( i in key ) { 13010 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 13011 } 13012 13013 // Sets one value 13014 } else if ( value !== undefined ) { 13015 chainable = true; 13016 13017 if ( !isFunction( value ) ) { 13018 raw = true; 13019 } 13020 13021 if ( bulk ) { 13022 13023 // Bulk operations run against the entire set 13024 if ( raw ) { 13025 fn.call( elems, value ); 13026 fn = null; 13027 13028 // ...except when executing function values 13029 } else { 13030 bulk = fn; 13031 fn = function( elem, _key, value ) { 13032 return bulk.call( jQuery( elem ), value ); 13033 }; 13034 } 13035 } 13036 13037 if ( fn ) { 13038 for ( ; i < len; i++ ) { 13039 fn( 13040 elems[ i ], key, raw ? 13041 value : 13042 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 13043 ); 13044 } 13045 } 13046 } 13047 13048 if ( chainable ) { 13049 return elems; 13050 } 13051 13052 // Gets 13053 if ( bulk ) { 13054 return fn.call( elems ); 13055 } 13056 13057 return len ? fn( elems[ 0 ], key ) : emptyGet; 13058}; 13059 13060 13061// Matches dashed string for camelizing 13062var rmsPrefix = /^-ms-/, 13063 rdashAlpha = /-([a-z])/g; 13064 13065// Used by camelCase as callback to replace() 13066function fcamelCase( _all, letter ) { 13067 return letter.toUpperCase(); 13068} 13069 13070// Convert dashed to camelCase; used by the css and data modules 13071// Support: IE <=9 - 11, Edge 12 - 15 13072// Microsoft forgot to hump their vendor prefix (trac-9572) 13073function camelCase( string ) { 13074 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 13075} 13076var acceptData = function( owner ) { 13077 13078 // Accepts only: 13079 // - Node 13080 // - Node.ELEMENT_NODE 13081 // - Node.DOCUMENT_NODE 13082 // - Object 13083 // - Any 13084 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 13085}; 13086 13087 13088 13089 13090function Data() { 13091 this.expando = jQuery.expando + Data.uid++; 13092} 13093 13094Data.uid = 1; 13095 13096Data.prototype = { 13097 13098 cache: function( owner ) { 13099 13100 // Check if the owner object already has a cache 13101 var value = owner[ this.expando ]; 13102 13103 // If not, create one 13104 if ( !value ) { 13105 value = {}; 13106 13107 // We can accept data for non-element nodes in modern browsers, 13108 // but we should not, see trac-8335. 13109 // Always return an empty object. 13110 if ( acceptData( owner ) ) { 13111 13112 // If it is a node unlikely to be stringify-ed or looped over 13113 // use plain assignment 13114 if ( owner.nodeType ) { 13115 owner[ this.expando ] = value; 13116 13117 // Otherwise secure it in a non-enumerable property 13118 // configurable must be true to allow the property to be 13119 // deleted when data is removed 13120 } else { 13121 Object.defineProperty( owner, this.expando, { 13122 value: value, 13123 configurable: true 13124 } ); 13125 } 13126 } 13127 } 13128 13129 return value; 13130 }, 13131 set: function( owner, data, value ) { 13132 var prop, 13133 cache = this.cache( owner ); 13134 13135 // Handle: [ owner, key, value ] args 13136 // Always use camelCase key (gh-2257) 13137 if ( typeof data === "string" ) { 13138 cache[ camelCase( data ) ] = value; 13139 13140 // Handle: [ owner, { properties } ] args 13141 } else { 13142 13143 // Copy the properties one-by-one to the cache object 13144 for ( prop in data ) { 13145 cache[ camelCase( prop ) ] = data[ prop ]; 13146 } 13147 } 13148 return cache; 13149 }, 13150 get: function( owner, key ) { 13151 return key === undefined ? 13152 this.cache( owner ) : 13153 13154 // Always use camelCase key (gh-2257) 13155 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 13156 }, 13157 access: function( owner, key, value ) { 13158 13159 // In cases where either: 13160 // 13161 // 1. No key was specified 13162 // 2. A string key was specified, but no value provided 13163 // 13164 // Take the "read" path and allow the get method to determine 13165 // which value to return, respectively either: 13166 // 13167 // 1. The entire cache object 13168 // 2. The data stored at the key 13169 // 13170 if ( key === undefined || 13171 ( ( key && typeof key === "string" ) && value === undefined ) ) { 13172 13173 return this.get( owner, key ); 13174 } 13175 13176 // When the key is not a string, or both a key and value 13177 // are specified, set or extend (existing objects) with either: 13178 // 13179 // 1. An object of properties 13180 // 2. A key and value 13181 // 13182 this.set( owner, key, value ); 13183 13184 // Since the "set" path can have two possible entry points 13185 // return the expected data based on which path was taken[*] 13186 return value !== undefined ? value : key; 13187 }, 13188 remove: function( owner, key ) { 13189 var i, 13190 cache = owner[ this.expando ]; 13191 13192 if ( cache === undefined ) { 13193 return; 13194 } 13195 13196 if ( key !== undefined ) { 13197 13198 // Support array or space separated string of keys 13199 if ( Array.isArray( key ) ) { 13200 13201 // If key is an array of keys... 13202 // We always set camelCase keys, so remove that. 13203 key = key.map( camelCase ); 13204 } else { 13205 key = camelCase( key ); 13206 13207 // If a key with the spaces exists, use it. 13208 // Otherwise, create an array by matching non-whitespace 13209 key = key in cache ? 13210 [ key ] : 13211 ( key.match( rnothtmlwhite ) || [] ); 13212 } 13213 13214 i = key.length; 13215 13216 while ( i-- ) { 13217 delete cache[ key[ i ] ]; 13218 } 13219 } 13220 13221 // Remove the expando if there's no more data 13222 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 13223 13224 // Support: Chrome <=35 - 45 13225 // Webkit & Blink performance suffers when deleting properties 13226 // from DOM nodes, so set to undefined instead 13227 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 13228 if ( owner.nodeType ) { 13229 owner[ this.expando ] = undefined; 13230 } else { 13231 delete owner[ this.expando ]; 13232 } 13233 } 13234 }, 13235 hasData: function( owner ) { 13236 var cache = owner[ this.expando ]; 13237 return cache !== undefined && !jQuery.isEmptyObject( cache ); 13238 } 13239}; 13240var dataPriv = new Data(); 13241 13242var dataUser = new Data(); 13243 13244 13245 13246// Implementation Summary 13247// 13248// 1. Enforce API surface and semantic compatibility with 1.9.x branch 13249// 2. Improve the module's maintainability by reducing the storage 13250// paths to a single mechanism. 13251// 3. Use the same single mechanism to support "private" and "user" data. 13252// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 13253// 5. Avoid exposing implementation details on user objects (eg. expando properties) 13254// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 13255 13256var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 13257 rmultiDash = /[A-Z]/g; 13258 13259function getData( data ) { 13260 if ( data === "true" ) { 13261 return true; 13262 } 13263 13264 if ( data === "false" ) { 13265 return false; 13266 } 13267 13268 if ( data === "null" ) { 13269 return null; 13270 } 13271 13272 // Only convert to a number if it doesn't change the string 13273 if ( data === +data + "" ) { 13274 return +data; 13275 } 13276 13277 if ( rbrace.test( data ) ) { 13278 return JSON.parse( data ); 13279 } 13280 13281 return data; 13282} 13283 13284function dataAttr( elem, key, data ) { 13285 var name; 13286 13287 // If nothing was found internally, try to fetch any 13288 // data from the HTML5 data-* attribute 13289 if ( data === undefined && elem.nodeType === 1 ) { 13290 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 13291 data = elem.getAttribute( name ); 13292 13293 if ( typeof data === "string" ) { 13294 try { 13295 data = getData( data ); 13296 } catch ( e ) {} 13297 13298 // Make sure we set the data so it isn't changed later 13299 dataUser.set( elem, key, data ); 13300 } else { 13301 data = undefined; 13302 } 13303 } 13304 return data; 13305} 13306 13307jQuery.extend( { 13308 hasData: function( elem ) { 13309 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 13310 }, 13311 13312 data: function( elem, name, data ) { 13313 return dataUser.access( elem, name, data ); 13314 }, 13315 13316 removeData: function( elem, name ) { 13317 dataUser.remove( elem, name ); 13318 }, 13319 13320 // TODO: Now that all calls to _data and _removeData have been replaced 13321 // with direct calls to dataPriv methods, these can be deprecated. 13322 _data: function( elem, name, data ) { 13323 return dataPriv.access( elem, name, data ); 13324 }, 13325 13326 _removeData: function( elem, name ) { 13327 dataPriv.remove( elem, name ); 13328 } 13329} ); 13330 13331jQuery.fn.extend( { 13332 data: function( key, value ) { 13333 var i, name, data, 13334 elem = this[ 0 ], 13335 attrs = elem && elem.attributes; 13336 13337 // Gets all values 13338 if ( key === undefined ) { 13339 if ( this.length ) { 13340 data = dataUser.get( elem ); 13341 13342 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 13343 i = attrs.length; 13344 while ( i-- ) { 13345 13346 // Support: IE 11 only 13347 // The attrs elements can be null (trac-14894) 13348 if ( attrs[ i ] ) { 13349 name = attrs[ i ].name; 13350 if ( name.indexOf( "data-" ) === 0 ) { 13351 name = camelCase( name.slice( 5 ) ); 13352 dataAttr( elem, name, data[ name ] ); 13353 } 13354 } 13355 } 13356 dataPriv.set( elem, "hasDataAttrs", true ); 13357 } 13358 } 13359 13360 return data; 13361 } 13362 13363 // Sets multiple values 13364 if ( typeof key === "object" ) { 13365 return this.each( function() { 13366 dataUser.set( this, key ); 13367 } ); 13368 } 13369 13370 return access( this, function( value ) { 13371 var data; 13372 13373 // The calling jQuery object (element matches) is not empty 13374 // (and therefore has an element appears at this[ 0 ]) and the 13375 // `value` parameter was not undefined. An empty jQuery object 13376 // will result in `undefined` for elem = this[ 0 ] which will 13377 // throw an exception if an attempt to read a data cache is made. 13378 if ( elem && value === undefined ) { 13379 13380 // Attempt to get data from the cache 13381 // The key will always be camelCased in Data 13382 data = dataUser.get( elem, key ); 13383 if ( data !== undefined ) { 13384 return data; 13385 } 13386 13387 // Attempt to "discover" the data in 13388 // HTML5 custom data-* attrs 13389 data = dataAttr( elem, key ); 13390 if ( data !== undefined ) { 13391 return data; 13392 } 13393 13394 // We tried really hard, but the data doesn't exist. 13395 return; 13396 } 13397 13398 // Set the data... 13399 this.each( function() { 13400 13401 // We always store the camelCased key 13402 dataUser.set( this, key, value ); 13403 } ); 13404 }, null, value, arguments.length > 1, null, true ); 13405 }, 13406 13407 removeData: function( key ) { 13408 return this.each( function() { 13409 dataUser.remove( this, key ); 13410 } ); 13411 } 13412} ); 13413 13414 13415jQuery.extend( { 13416 queue: function( elem, type, data ) { 13417 var queue; 13418 13419 if ( elem ) { 13420 type = ( type || "fx" ) + "queue"; 13421 queue = dataPriv.get( elem, type ); 13422 13423 // Speed up dequeue by getting out quickly if this is just a lookup 13424 if ( data ) { 13425 if ( !queue || Array.isArray( data ) ) { 13426 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 13427 } else { 13428 queue.push( data ); 13429 } 13430 } 13431 return queue || []; 13432 } 13433 }, 13434 13435 dequeue: function( elem, type ) { 13436 type = type || "fx"; 13437 13438 var queue = jQuery.queue( elem, type ), 13439 startLength = queue.length, 13440 fn = queue.shift(), 13441 hooks = jQuery._queueHooks( elem, type ), 13442 next = function() { 13443 jQuery.dequeue( elem, type ); 13444 }; 13445 13446 // If the fx queue is dequeued, always remove the progress sentinel 13447 if ( fn === "inprogress" ) { 13448 fn = queue.shift(); 13449 startLength--; 13450 } 13451 13452 if ( fn ) { 13453 13454 // Add a progress sentinel to prevent the fx queue from being 13455 // automatically dequeued 13456 if ( type === "fx" ) { 13457 queue.unshift( "inprogress" ); 13458 } 13459 13460 // Clear up the last queue stop function 13461 delete hooks.stop; 13462 fn.call( elem, next, hooks ); 13463 } 13464 13465 if ( !startLength && hooks ) { 13466 hooks.empty.fire(); 13467 } 13468 }, 13469 13470 // Not public - generate a queueHooks object, or return the current one 13471 _queueHooks: function( elem, type ) { 13472 var key = type + "queueHooks"; 13473 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 13474 empty: jQuery.Callbacks( "once memory" ).add( function() { 13475 dataPriv.remove( elem, [ type + "queue", key ] ); 13476 } ) 13477 } ); 13478 } 13479} ); 13480 13481jQuery.fn.extend( { 13482 queue: function( type, data ) { 13483 var setter = 2; 13484 13485 if ( typeof type !== "string" ) { 13486 data = type; 13487 type = "fx"; 13488 setter--; 13489 } 13490 13491 if ( arguments.length < setter ) { 13492 return jQuery.queue( this[ 0 ], type ); 13493 } 13494 13495 return data === undefined ? 13496 this : 13497 this.each( function() { 13498 var queue = jQuery.queue( this, type, data ); 13499 13500 // Ensure a hooks for this queue 13501 jQuery._queueHooks( this, type ); 13502 13503 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 13504 jQuery.dequeue( this, type ); 13505 } 13506 } ); 13507 }, 13508 dequeue: function( type ) { 13509 return this.each( function() { 13510 jQuery.dequeue( this, type ); 13511 } ); 13512 }, 13513 clearQueue: function( type ) { 13514 return this.queue( type || "fx", [] ); 13515 }, 13516 13517 // Get a promise resolved when queues of a certain type 13518 // are emptied (fx is the type by default) 13519 promise: function( type, obj ) { 13520 var tmp, 13521 count = 1, 13522 defer = jQuery.Deferred(), 13523 elements = this, 13524 i = this.length, 13525 resolve = function() { 13526 if ( !( --count ) ) { 13527 defer.resolveWith( elements, [ elements ] ); 13528 } 13529 }; 13530 13531 if ( typeof type !== "string" ) { 13532 obj = type; 13533 type = undefined; 13534 } 13535 type = type || "fx"; 13536 13537 while ( i-- ) { 13538 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 13539 if ( tmp && tmp.empty ) { 13540 count++; 13541 tmp.empty.add( resolve ); 13542 } 13543 } 13544 resolve(); 13545 return defer.promise( obj ); 13546 } 13547} ); 13548var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 13549 13550var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 13551 13552 13553var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 13554 13555var documentElement = document.documentElement; 13556 13557 13558 13559 var isAttached = function( elem ) { 13560 return jQuery.contains( elem.ownerDocument, elem ); 13561 }, 13562 composed = { composed: true }; 13563 13564 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 13565 // Check attachment across shadow DOM boundaries when possible (gh-3504) 13566 // Support: iOS 10.0-10.2 only 13567 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 13568 // leading to errors. We need to check for `getRootNode`. 13569 if ( documentElement.getRootNode ) { 13570 isAttached = function( elem ) { 13571 return jQuery.contains( elem.ownerDocument, elem ) || 13572 elem.getRootNode( composed ) === elem.ownerDocument; 13573 }; 13574 } 13575var isHiddenWithinTree = function( elem, el ) { 13576 13577 // isHiddenWithinTree might be called from jQuery#filter function; 13578 // in that case, element will be second argument 13579 elem = el || elem; 13580 13581 // Inline style trumps all 13582 return elem.style.display === "none" || 13583 elem.style.display === "" && 13584 13585 // Otherwise, check computed style 13586 // Support: Firefox <=43 - 45 13587 // Disconnected elements can have computed display: none, so first confirm that elem is 13588 // in the document. 13589 isAttached( elem ) && 13590 13591 jQuery.css( elem, "display" ) === "none"; 13592 }; 13593 13594 13595 13596function adjustCSS( elem, prop, valueParts, tween ) { 13597 var adjusted, scale, 13598 maxIterations = 20, 13599 currentValue = tween ? 13600 function() { 13601 return tween.cur(); 13602 } : 13603 function() { 13604 return jQuery.css( elem, prop, "" ); 13605 }, 13606 initial = currentValue(), 13607 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 13608 13609 // Starting value computation is required for potential unit mismatches 13610 initialInUnit = elem.nodeType && 13611 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 13612 rcssNum.exec( jQuery.css( elem, prop ) ); 13613 13614 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 13615 13616 // Support: Firefox <=54 13617 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 13618 initial = initial / 2; 13619 13620 // Trust units reported by jQuery.css 13621 unit = unit || initialInUnit[ 3 ]; 13622 13623 // Iteratively approximate from a nonzero starting point 13624 initialInUnit = +initial || 1; 13625 13626 while ( maxIterations-- ) { 13627 13628 // Evaluate and update our best guess (doubling guesses that zero out). 13629 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 13630 jQuery.style( elem, prop, initialInUnit + unit ); 13631 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 13632 maxIterations = 0; 13633 } 13634 initialInUnit = initialInUnit / scale; 13635 13636 } 13637 13638 initialInUnit = initialInUnit * 2; 13639 jQuery.style( elem, prop, initialInUnit + unit ); 13640 13641 // Make sure we update the tween properties later on 13642 valueParts = valueParts || []; 13643 } 13644 13645 if ( valueParts ) { 13646 initialInUnit = +initialInUnit || +initial || 0; 13647 13648 // Apply relative offset (+=/-=) if specified 13649 adjusted = valueParts[ 1 ] ? 13650 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 13651 +valueParts[ 2 ]; 13652 if ( tween ) { 13653 tween.unit = unit; 13654 tween.start = initialInUnit; 13655 tween.end = adjusted; 13656 } 13657 } 13658 return adjusted; 13659} 13660 13661 13662var defaultDisplayMap = {}; 13663 13664function getDefaultDisplay( elem ) { 13665 var temp, 13666 doc = elem.ownerDocument, 13667 nodeName = elem.nodeName, 13668 display = defaultDisplayMap[ nodeName ]; 13669 13670 if ( display ) { 13671 return display; 13672 } 13673 13674 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 13675 display = jQuery.css( temp, "display" ); 13676 13677 temp.parentNode.removeChild( temp ); 13678 13679 if ( display === "none" ) { 13680 display = "block"; 13681 } 13682 defaultDisplayMap[ nodeName ] = display; 13683 13684 return display; 13685} 13686 13687function showHide( elements, show ) { 13688 var display, elem, 13689 values = [], 13690 index = 0, 13691 length = elements.length; 13692 13693 // Determine new display value for elements that need to change 13694 for ( ; index < length; index++ ) { 13695 elem = elements[ index ]; 13696 if ( !elem.style ) { 13697 continue; 13698 } 13699 13700 display = elem.style.display; 13701 if ( show ) { 13702 13703 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 13704 // check is required in this first loop unless we have a nonempty display value (either 13705 // inline or about-to-be-restored) 13706 if ( display === "none" ) { 13707 values[ index ] = dataPriv.get( elem, "display" ) || null; 13708 if ( !values[ index ] ) { 13709 elem.style.display = ""; 13710 } 13711 } 13712 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 13713 values[ index ] = getDefaultDisplay( elem ); 13714 } 13715 } else { 13716 if ( display !== "none" ) { 13717 values[ index ] = "none"; 13718 13719 // Remember what we're overwriting 13720 dataPriv.set( elem, "display", display ); 13721 } 13722 } 13723 } 13724 13725 // Set the display of the elements in a second loop to avoid constant reflow 13726 for ( index = 0; index < length; index++ ) { 13727 if ( values[ index ] != null ) { 13728 elements[ index ].style.display = values[ index ]; 13729 } 13730 } 13731 13732 return elements; 13733} 13734 13735jQuery.fn.extend( { 13736 show: function() { 13737 return showHide( this, true ); 13738 }, 13739 hide: function() { 13740 return showHide( this ); 13741 }, 13742 toggle: function( state ) { 13743 if ( typeof state === "boolean" ) { 13744 return state ? this.show() : this.hide(); 13745 } 13746 13747 return this.each( function() { 13748 if ( isHiddenWithinTree( this ) ) { 13749 jQuery( this ).show(); 13750 } else { 13751 jQuery( this ).hide(); 13752 } 13753 } ); 13754 } 13755} ); 13756var rcheckableType = ( /^(?:checkbox|radio)$/i ); 13757 13758var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 13759 13760var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 13761 13762 13763 13764( function() { 13765 var fragment = document.createDocumentFragment(), 13766 div = fragment.appendChild( document.createElement( "div" ) ), 13767 input = document.createElement( "input" ); 13768 13769 // Support: Android 4.0 - 4.3 only 13770 // Check state lost if the name is set (trac-11217) 13771 // Support: Windows Web Apps (WWA) 13772 // `name` and `type` must use .setAttribute for WWA (trac-14901) 13773 input.setAttribute( "type", "radio" ); 13774 input.setAttribute( "checked", "checked" ); 13775 input.setAttribute( "name", "t" ); 13776 13777 div.appendChild( input ); 13778 13779 // Support: Android <=4.1 only 13780 // Older WebKit doesn't clone checked state correctly in fragments 13781 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 13782 13783 // Support: IE <=11 only 13784 // Make sure textarea (and checkbox) defaultValue is properly cloned 13785 div.innerHTML = "<textarea>x</textarea>"; 13786 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 13787 13788 // Support: IE <=9 only 13789 // IE <=9 replaces <option> tags with their contents when inserted outside of 13790 // the select element. 13791 div.innerHTML = "<option></option>"; 13792 support.option = !!div.lastChild; 13793} )(); 13794 13795 13796// We have to close these tags to support XHTML (trac-13200) 13797var wrapMap = { 13798 13799 // XHTML parsers do not magically insert elements in the 13800 // same way that tag soup parsers do. So we cannot shorten 13801 // this by omitting <tbody> or other required elements. 13802 thead: [ 1, "<table>", "</table>" ], 13803 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 13804 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 13805 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 13806 13807 _default: [ 0, "", "" ] 13808}; 13809 13810wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 13811wrapMap.th = wrapMap.td; 13812 13813// Support: IE <=9 only 13814if ( !support.option ) { 13815 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 13816} 13817 13818 13819function getAll( context, tag ) { 13820 13821 // Support: IE <=9 - 11 only 13822 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 13823 var ret; 13824 13825 if ( typeof context.getElementsByTagName !== "undefined" ) { 13826 ret = context.getElementsByTagName( tag || "*" ); 13827 13828 } else if ( typeof context.querySelectorAll !== "undefined" ) { 13829 ret = context.querySelectorAll( tag || "*" ); 13830 13831 } else { 13832 ret = []; 13833 } 13834 13835 if ( tag === undefined || tag && nodeName( context, tag ) ) { 13836 return jQuery.merge( [ context ], ret ); 13837 } 13838 13839 return ret; 13840} 13841 13842 13843// Mark scripts as having already been evaluated 13844function setGlobalEval( elems, refElements ) { 13845 var i = 0, 13846 l = elems.length; 13847 13848 for ( ; i < l; i++ ) { 13849 dataPriv.set( 13850 elems[ i ], 13851 "globalEval", 13852 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 13853 ); 13854 } 13855} 13856 13857 13858var rhtml = /<|&#?\w+;/; 13859 13860function buildFragment( elems, context, scripts, selection, ignored ) { 13861 var elem, tmp, tag, wrap, attached, j, 13862 fragment = context.createDocumentFragment(), 13863 nodes = [], 13864 i = 0, 13865 l = elems.length; 13866 13867 for ( ; i < l; i++ ) { 13868 elem = elems[ i ]; 13869 13870 if ( elem || elem === 0 ) { 13871 13872 // Add nodes directly 13873 if ( toType( elem ) === "object" ) { 13874 13875 // Support: Android <=4.0 only, PhantomJS 1 only 13876 // push.apply(_, arraylike) throws on ancient WebKit 13877 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 13878 13879 // Convert non-html into a text node 13880 } else if ( !rhtml.test( elem ) ) { 13881 nodes.push( context.createTextNode( elem ) ); 13882 13883 // Convert html into DOM nodes 13884 } else { 13885 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 13886 13887 // Deserialize a standard representation 13888 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 13889 wrap = wrapMap[ tag ] || wrapMap._default; 13890 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 13891 13892 // Descend through wrappers to the right content 13893 j = wrap[ 0 ]; 13894 while ( j-- ) { 13895 tmp = tmp.lastChild; 13896 } 13897 13898 // Support: Android <=4.0 only, PhantomJS 1 only 13899 // push.apply(_, arraylike) throws on ancient WebKit 13900 jQuery.merge( nodes, tmp.childNodes ); 13901 13902 // Remember the top-level container 13903 tmp = fragment.firstChild; 13904 13905 // Ensure the created nodes are orphaned (trac-12392) 13906 tmp.textContent = ""; 13907 } 13908 } 13909 } 13910 13911 // Remove wrapper from fragment 13912 fragment.textContent = ""; 13913 13914 i = 0; 13915 while ( ( elem = nodes[ i++ ] ) ) { 13916 13917 // Skip elements already in the context collection (trac-4087) 13918 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 13919 if ( ignored ) { 13920 ignored.push( elem ); 13921 } 13922 continue; 13923 } 13924 13925 attached = isAttached( elem ); 13926 13927 // Append to fragment 13928 tmp = getAll( fragment.appendChild( elem ), "script" ); 13929 13930 // Preserve script evaluation history 13931 if ( attached ) { 13932 setGlobalEval( tmp ); 13933 } 13934 13935 // Capture executables 13936 if ( scripts ) { 13937 j = 0; 13938 while ( ( elem = tmp[ j++ ] ) ) { 13939 if ( rscriptType.test( elem.type || "" ) ) { 13940 scripts.push( elem ); 13941 } 13942 } 13943 } 13944 } 13945 13946 return fragment; 13947} 13948 13949 13950var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 13951 13952function returnTrue() { 13953 return true; 13954} 13955 13956function returnFalse() { 13957 return false; 13958} 13959 13960function on( elem, types, selector, data, fn, one ) { 13961 var origFn, type; 13962 13963 // Types can be a map of types/handlers 13964 if ( typeof types === "object" ) { 13965 13966 // ( types-Object, selector, data ) 13967 if ( typeof selector !== "string" ) { 13968 13969 // ( types-Object, data ) 13970 data = data || selector; 13971 selector = undefined; 13972 } 13973 for ( type in types ) { 13974 on( elem, type, selector, data, types[ type ], one ); 13975 } 13976 return elem; 13977 } 13978 13979 if ( data == null && fn == null ) { 13980 13981 // ( types, fn ) 13982 fn = selector; 13983 data = selector = undefined; 13984 } else if ( fn == null ) { 13985 if ( typeof selector === "string" ) { 13986 13987 // ( types, selector, fn ) 13988 fn = data; 13989 data = undefined; 13990 } else { 13991 13992 // ( types, data, fn ) 13993 fn = data; 13994 data = selector; 13995 selector = undefined; 13996 } 13997 } 13998 if ( fn === false ) { 13999 fn = returnFalse; 14000 } else if ( !fn ) { 14001 return elem; 14002 } 14003 14004 if ( one === 1 ) { 14005 origFn = fn; 14006 fn = function( event ) { 14007 14008 // Can use an empty set, since event contains the info 14009 jQuery().off( event ); 14010 return origFn.apply( this, arguments ); 14011 }; 14012 14013 // Use same guid so caller can remove using origFn 14014 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 14015 } 14016 return elem.each( function() { 14017 jQuery.event.add( this, types, fn, data, selector ); 14018 } ); 14019} 14020 14021/* 14022 * Helper functions for managing events -- not part of the public interface. 14023 * Props to Dean Edwards' addEvent library for many of the ideas. 14024 */ 14025jQuery.event = { 14026 14027 global: {}, 14028 14029 add: function( elem, types, handler, data, selector ) { 14030 14031 var handleObjIn, eventHandle, tmp, 14032 events, t, handleObj, 14033 special, handlers, type, namespaces, origType, 14034 elemData = dataPriv.get( elem ); 14035 14036 // Only attach events to objects that accept data 14037 if ( !acceptData( elem ) ) { 14038 return; 14039 } 14040 14041 // Caller can pass in an object of custom data in lieu of the handler 14042 if ( handler.handler ) { 14043 handleObjIn = handler; 14044 handler = handleObjIn.handler; 14045 selector = handleObjIn.selector; 14046 } 14047 14048 // Ensure that invalid selectors throw exceptions at attach time 14049 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 14050 if ( selector ) { 14051 jQuery.find.matchesSelector( documentElement, selector ); 14052 } 14053 14054 // Make sure that the handler has a unique ID, used to find/remove it later 14055 if ( !handler.guid ) { 14056 handler.guid = jQuery.guid++; 14057 } 14058 14059 // Init the element's event structure and main handler, if this is the first 14060 if ( !( events = elemData.events ) ) { 14061 events = elemData.events = Object.create( null ); 14062 } 14063 if ( !( eventHandle = elemData.handle ) ) { 14064 eventHandle = elemData.handle = function( e ) { 14065 14066 // Discard the second event of a jQuery.event.trigger() and 14067 // when an event is called after a page has unloaded 14068 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 14069 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 14070 }; 14071 } 14072 14073 // Handle multiple events separated by a space 14074 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 14075 t = types.length; 14076 while ( t-- ) { 14077 tmp = rtypenamespace.exec( types[ t ] ) || []; 14078 type = origType = tmp[ 1 ]; 14079 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 14080 14081 // There *must* be a type, no attaching namespace-only handlers 14082 if ( !type ) { 14083 continue; 14084 } 14085 14086 // If event changes its type, use the special event handlers for the changed type 14087 special = jQuery.event.special[ type ] || {}; 14088 14089 // If selector defined, determine special event api type, otherwise given type 14090 type = ( selector ? special.delegateType : special.bindType ) || type; 14091 14092 // Update special based on newly reset type 14093 special = jQuery.event.special[ type ] || {}; 14094 14095 // handleObj is passed to all event handlers 14096 handleObj = jQuery.extend( { 14097 type: type, 14098 origType: origType, 14099 data: data, 14100 handler: handler, 14101 guid: handler.guid, 14102 selector: selector, 14103 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 14104 namespace: namespaces.join( "." ) 14105 }, handleObjIn ); 14106 14107 // Init the event handler queue if we're the first 14108 if ( !( handlers = events[ type ] ) ) { 14109 handlers = events[ type ] = []; 14110 handlers.delegateCount = 0; 14111 14112 // Only use addEventListener if the special events handler returns false 14113 if ( !special.setup || 14114 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 14115 14116 if ( elem.addEventListener ) { 14117 elem.addEventListener( type, eventHandle ); 14118 } 14119 } 14120 } 14121 14122 if ( special.add ) { 14123 special.add.call( elem, handleObj ); 14124 14125 if ( !handleObj.handler.guid ) { 14126 handleObj.handler.guid = handler.guid; 14127 } 14128 } 14129 14130 // Add to the element's handler list, delegates in front 14131 if ( selector ) { 14132 handlers.splice( handlers.delegateCount++, 0, handleObj ); 14133 } else { 14134 handlers.push( handleObj ); 14135 } 14136 14137 // Keep track of which events have ever been used, for event optimization 14138 jQuery.event.global[ type ] = true; 14139 } 14140 14141 }, 14142 14143 // Detach an event or set of events from an element 14144 remove: function( elem, types, handler, selector, mappedTypes ) { 14145 14146 var j, origCount, tmp, 14147 events, t, handleObj, 14148 special, handlers, type, namespaces, origType, 14149 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 14150 14151 if ( !elemData || !( events = elemData.events ) ) { 14152 return; 14153 } 14154 14155 // Once for each type.namespace in types; type may be omitted 14156 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 14157 t = types.length; 14158 while ( t-- ) { 14159 tmp = rtypenamespace.exec( types[ t ] ) || []; 14160 type = origType = tmp[ 1 ]; 14161 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 14162 14163 // Unbind all events (on this namespace, if provided) for the element 14164 if ( !type ) { 14165 for ( type in events ) { 14166 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 14167 } 14168 continue; 14169 } 14170 14171 special = jQuery.event.special[ type ] || {}; 14172 type = ( selector ? special.delegateType : special.bindType ) || type; 14173 handlers = events[ type ] || []; 14174 tmp = tmp[ 2 ] && 14175 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 14176 14177 // Remove matching events 14178 origCount = j = handlers.length; 14179 while ( j-- ) { 14180 handleObj = handlers[ j ]; 14181 14182 if ( ( mappedTypes || origType === handleObj.origType ) && 14183 ( !handler || handler.guid === handleObj.guid ) && 14184 ( !tmp || tmp.test( handleObj.namespace ) ) && 14185 ( !selector || selector === handleObj.selector || 14186 selector === "**" && handleObj.selector ) ) { 14187 handlers.splice( j, 1 ); 14188 14189 if ( handleObj.selector ) { 14190 handlers.delegateCount--; 14191 } 14192 if ( special.remove ) { 14193 special.remove.call( elem, handleObj ); 14194 } 14195 } 14196 } 14197 14198 // Remove generic event handler if we removed something and no more handlers exist 14199 // (avoids potential for endless recursion during removal of special event handlers) 14200 if ( origCount && !handlers.length ) { 14201 if ( !special.teardown || 14202 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 14203 14204 jQuery.removeEvent( elem, type, elemData.handle ); 14205 } 14206 14207 delete events[ type ]; 14208 } 14209 } 14210 14211 // Remove data and the expando if it's no longer used 14212 if ( jQuery.isEmptyObject( events ) ) { 14213 dataPriv.remove( elem, "handle events" ); 14214 } 14215 }, 14216 14217 dispatch: function( nativeEvent ) { 14218 14219 var i, j, ret, matched, handleObj, handlerQueue, 14220 args = new Array( arguments.length ), 14221 14222 // Make a writable jQuery.Event from the native event object 14223 event = jQuery.event.fix( nativeEvent ), 14224 14225 handlers = ( 14226 dataPriv.get( this, "events" ) || Object.create( null ) 14227 )[ event.type ] || [], 14228 special = jQuery.event.special[ event.type ] || {}; 14229 14230 // Use the fix-ed jQuery.Event rather than the (read-only) native event 14231 args[ 0 ] = event; 14232 14233 for ( i = 1; i < arguments.length; i++ ) { 14234 args[ i ] = arguments[ i ]; 14235 } 14236 14237 event.delegateTarget = this; 14238 14239 // Call the preDispatch hook for the mapped type, and let it bail if desired 14240 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 14241 return; 14242 } 14243 14244 // Determine handlers 14245 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 14246 14247 // Run delegates first; they may want to stop propagation beneath us 14248 i = 0; 14249 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 14250 event.currentTarget = matched.elem; 14251 14252 j = 0; 14253 while ( ( handleObj = matched.handlers[ j++ ] ) && 14254 !event.isImmediatePropagationStopped() ) { 14255 14256 // If the event is namespaced, then each handler is only invoked if it is 14257 // specially universal or its namespaces are a superset of the event's. 14258 if ( !event.rnamespace || handleObj.namespace === false || 14259 event.rnamespace.test( handleObj.namespace ) ) { 14260 14261 event.handleObj = handleObj; 14262 event.data = handleObj.data; 14263 14264 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 14265 handleObj.handler ).apply( matched.elem, args ); 14266 14267 if ( ret !== undefined ) { 14268 if ( ( event.result = ret ) === false ) { 14269 event.preventDefault(); 14270 event.stopPropagation(); 14271 } 14272 } 14273 } 14274 } 14275 } 14276 14277 // Call the postDispatch hook for the mapped type 14278 if ( special.postDispatch ) { 14279 special.postDispatch.call( this, event ); 14280 } 14281 14282 return event.result; 14283 }, 14284 14285 handlers: function( event, handlers ) { 14286 var i, handleObj, sel, matchedHandlers, matchedSelectors, 14287 handlerQueue = [], 14288 delegateCount = handlers.delegateCount, 14289 cur = event.target; 14290 14291 // Find delegate handlers 14292 if ( delegateCount && 14293 14294 // Support: IE <=9 14295 // Black-hole SVG <use> instance trees (trac-13180) 14296 cur.nodeType && 14297 14298 // Support: Firefox <=42 14299 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 14300 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 14301 // Support: IE 11 only 14302 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 14303 !( event.type === "click" && event.button >= 1 ) ) { 14304 14305 for ( ; cur !== this; cur = cur.parentNode || this ) { 14306 14307 // Don't check non-elements (trac-13208) 14308 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 14309 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 14310 matchedHandlers = []; 14311 matchedSelectors = {}; 14312 for ( i = 0; i < delegateCount; i++ ) { 14313 handleObj = handlers[ i ]; 14314 14315 // Don't conflict with Object.prototype properties (trac-13203) 14316 sel = handleObj.selector + " "; 14317 14318 if ( matchedSelectors[ sel ] === undefined ) { 14319 matchedSelectors[ sel ] = handleObj.needsContext ? 14320 jQuery( sel, this ).index( cur ) > -1 : 14321 jQuery.find( sel, this, null, [ cur ] ).length; 14322 } 14323 if ( matchedSelectors[ sel ] ) { 14324 matchedHandlers.push( handleObj ); 14325 } 14326 } 14327 if ( matchedHandlers.length ) { 14328 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 14329 } 14330 } 14331 } 14332 } 14333 14334 // Add the remaining (directly-bound) handlers 14335 cur = this; 14336 if ( delegateCount < handlers.length ) { 14337 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 14338 } 14339 14340 return handlerQueue; 14341 }, 14342 14343 addProp: function( name, hook ) { 14344 Object.defineProperty( jQuery.Event.prototype, name, { 14345 enumerable: true, 14346 configurable: true, 14347 14348 get: isFunction( hook ) ? 14349 function() { 14350 if ( this.originalEvent ) { 14351 return hook( this.originalEvent ); 14352 } 14353 } : 14354 function() { 14355 if ( this.originalEvent ) { 14356 return this.originalEvent[ name ]; 14357 } 14358 }, 14359 14360 set: function( value ) { 14361 Object.defineProperty( this, name, { 14362 enumerable: true, 14363 configurable: true, 14364 writable: true, 14365 value: value 14366 } ); 14367 } 14368 } ); 14369 }, 14370 14371 fix: function( originalEvent ) { 14372 return originalEvent[ jQuery.expando ] ? 14373 originalEvent : 14374 new jQuery.Event( originalEvent ); 14375 }, 14376 14377 special: { 14378 load: { 14379 14380 // Prevent triggered image.load events from bubbling to window.load 14381 noBubble: true 14382 }, 14383 click: { 14384 14385 // Utilize native event to ensure correct state for checkable inputs 14386 setup: function( data ) { 14387 14388 // For mutual compressibility with _default, replace `this` access with a local var. 14389 // `|| data` is dead code meant only to preserve the variable through minification. 14390 var el = this || data; 14391 14392 // Claim the first handler 14393 if ( rcheckableType.test( el.type ) && 14394 el.click && nodeName( el, "input" ) ) { 14395 14396 // dataPriv.set( el, "click", ... ) 14397 leverageNative( el, "click", true ); 14398 } 14399 14400 // Return false to allow normal processing in the caller 14401 return false; 14402 }, 14403 trigger: function( data ) { 14404 14405 // For mutual compressibility with _default, replace `this` access with a local var. 14406 // `|| data` is dead code meant only to preserve the variable through minification. 14407 var el = this || data; 14408 14409 // Force setup before triggering a click 14410 if ( rcheckableType.test( el.type ) && 14411 el.click && nodeName( el, "input" ) ) { 14412 14413 leverageNative( el, "click" ); 14414 } 14415 14416 // Return non-false to allow normal event-path propagation 14417 return true; 14418 }, 14419 14420 // For cross-browser consistency, suppress native .click() on links 14421 // Also prevent it if we're currently inside a leveraged native-event stack 14422 _default: function( event ) { 14423 var target = event.target; 14424 return rcheckableType.test( target.type ) && 14425 target.click && nodeName( target, "input" ) && 14426 dataPriv.get( target, "click" ) || 14427 nodeName( target, "a" ); 14428 } 14429 }, 14430 14431 beforeunload: { 14432 postDispatch: function( event ) { 14433 14434 // Support: Firefox 20+ 14435 // Firefox doesn't alert if the returnValue field is not set. 14436 if ( event.result !== undefined && event.originalEvent ) { 14437 event.originalEvent.returnValue = event.result; 14438 } 14439 } 14440 } 14441 } 14442}; 14443 14444// Ensure the presence of an event listener that handles manually-triggered 14445// synthetic events by interrupting progress until reinvoked in response to 14446// *native* events that it fires directly, ensuring that state changes have 14447// already occurred before other listeners are invoked. 14448function leverageNative( el, type, isSetup ) { 14449 14450 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 14451 if ( !isSetup ) { 14452 if ( dataPriv.get( el, type ) === undefined ) { 14453 jQuery.event.add( el, type, returnTrue ); 14454 } 14455 return; 14456 } 14457 14458 // Register the controller as a special universal handler for all event namespaces 14459 dataPriv.set( el, type, false ); 14460 jQuery.event.add( el, type, { 14461 namespace: false, 14462 handler: function( event ) { 14463 var result, 14464 saved = dataPriv.get( this, type ); 14465 14466 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 14467 14468 // Interrupt processing of the outer synthetic .trigger()ed event 14469 if ( !saved ) { 14470 14471 // Store arguments for use when handling the inner native event 14472 // There will always be at least one argument (an event object), so this array 14473 // will not be confused with a leftover capture object. 14474 saved = slice.call( arguments ); 14475 dataPriv.set( this, type, saved ); 14476 14477 // Trigger the native event and capture its result 14478 this[ type ](); 14479 result = dataPriv.get( this, type ); 14480 dataPriv.set( this, type, false ); 14481 14482 if ( saved !== result ) { 14483 14484 // Cancel the outer synthetic event 14485 event.stopImmediatePropagation(); 14486 event.preventDefault(); 14487 14488 return result; 14489 } 14490 14491 // If this is an inner synthetic event for an event with a bubbling surrogate 14492 // (focus or blur), assume that the surrogate already propagated from triggering 14493 // the native event and prevent that from happening again here. 14494 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 14495 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 14496 // less bad than duplication. 14497 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 14498 event.stopPropagation(); 14499 } 14500 14501 // If this is a native event triggered above, everything is now in order 14502 // Fire an inner synthetic event with the original arguments 14503 } else if ( saved ) { 14504 14505 // ...and capture the result 14506 dataPriv.set( this, type, jQuery.event.trigger( 14507 saved[ 0 ], 14508 saved.slice( 1 ), 14509 this 14510 ) ); 14511 14512 // Abort handling of the native event by all jQuery handlers while allowing 14513 // native handlers on the same element to run. On target, this is achieved 14514 // by stopping immediate propagation just on the jQuery event. However, 14515 // the native event is re-wrapped by a jQuery one on each level of the 14516 // propagation so the only way to stop it for jQuery is to stop it for 14517 // everyone via native `stopPropagation()`. This is not a problem for 14518 // focus/blur which don't bubble, but it does also stop click on checkboxes 14519 // and radios. We accept this limitation. 14520 event.stopPropagation(); 14521 event.isImmediatePropagationStopped = returnTrue; 14522 } 14523 } 14524 } ); 14525} 14526 14527jQuery.removeEvent = function( elem, type, handle ) { 14528 14529 // This "if" is needed for plain objects 14530 if ( elem.removeEventListener ) { 14531 elem.removeEventListener( type, handle ); 14532 } 14533}; 14534 14535jQuery.Event = function( src, props ) { 14536 14537 // Allow instantiation without the 'new' keyword 14538 if ( !( this instanceof jQuery.Event ) ) { 14539 return new jQuery.Event( src, props ); 14540 } 14541 14542 // Event object 14543 if ( src && src.type ) { 14544 this.originalEvent = src; 14545 this.type = src.type; 14546 14547 // Events bubbling up the document may have been marked as prevented 14548 // by a handler lower down the tree; reflect the correct value. 14549 this.isDefaultPrevented = src.defaultPrevented || 14550 src.defaultPrevented === undefined && 14551 14552 // Support: Android <=2.3 only 14553 src.returnValue === false ? 14554 returnTrue : 14555 returnFalse; 14556 14557 // Create target properties 14558 // Support: Safari <=6 - 7 only 14559 // Target should not be a text node (trac-504, trac-13143) 14560 this.target = ( src.target && src.target.nodeType === 3 ) ? 14561 src.target.parentNode : 14562 src.target; 14563 14564 this.currentTarget = src.currentTarget; 14565 this.relatedTarget = src.relatedTarget; 14566 14567 // Event type 14568 } else { 14569 this.type = src; 14570 } 14571 14572 // Put explicitly provided properties onto the event object 14573 if ( props ) { 14574 jQuery.extend( this, props ); 14575 } 14576 14577 // Create a timestamp if incoming event doesn't have one 14578 this.timeStamp = src && src.timeStamp || Date.now(); 14579 14580 // Mark it as fixed 14581 this[ jQuery.expando ] = true; 14582}; 14583 14584// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 14585// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 14586jQuery.Event.prototype = { 14587 constructor: jQuery.Event, 14588 isDefaultPrevented: returnFalse, 14589 isPropagationStopped: returnFalse, 14590 isImmediatePropagationStopped: returnFalse, 14591 isSimulated: false, 14592 14593 preventDefault: function() { 14594 var e = this.originalEvent; 14595 14596 this.isDefaultPrevented = returnTrue; 14597 14598 if ( e && !this.isSimulated ) { 14599 e.preventDefault(); 14600 } 14601 }, 14602 stopPropagation: function() { 14603 var e = this.originalEvent; 14604 14605 this.isPropagationStopped = returnTrue; 14606 14607 if ( e && !this.isSimulated ) { 14608 e.stopPropagation(); 14609 } 14610 }, 14611 stopImmediatePropagation: function() { 14612 var e = this.originalEvent; 14613 14614 this.isImmediatePropagationStopped = returnTrue; 14615 14616 if ( e && !this.isSimulated ) { 14617 e.stopImmediatePropagation(); 14618 } 14619 14620 this.stopPropagation(); 14621 } 14622}; 14623 14624// Includes all common event props including KeyEvent and MouseEvent specific props 14625jQuery.each( { 14626 altKey: true, 14627 bubbles: true, 14628 cancelable: true, 14629 changedTouches: true, 14630 ctrlKey: true, 14631 detail: true, 14632 eventPhase: true, 14633 metaKey: true, 14634 pageX: true, 14635 pageY: true, 14636 shiftKey: true, 14637 view: true, 14638 "char": true, 14639 code: true, 14640 charCode: true, 14641 key: true, 14642 keyCode: true, 14643 button: true, 14644 buttons: true, 14645 clientX: true, 14646 clientY: true, 14647 offsetX: true, 14648 offsetY: true, 14649 pointerId: true, 14650 pointerType: true, 14651 screenX: true, 14652 screenY: true, 14653 targetTouches: true, 14654 toElement: true, 14655 touches: true, 14656 which: true 14657}, jQuery.event.addProp ); 14658 14659jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 14660 14661 function focusMappedHandler( nativeEvent ) { 14662 if ( document.documentMode ) { 14663 14664 // Support: IE 11+ 14665 // Attach a single focusin/focusout handler on the document while someone wants 14666 // focus/blur. This is because the former are synchronous in IE while the latter 14667 // are async. In other browsers, all those handlers are invoked synchronously. 14668 14669 // `handle` from private data would already wrap the event, but we need 14670 // to change the `type` here. 14671 var handle = dataPriv.get( this, "handle" ), 14672 event = jQuery.event.fix( nativeEvent ); 14673 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 14674 event.isSimulated = true; 14675 14676 // First, handle focusin/focusout 14677 handle( nativeEvent ); 14678 14679 // ...then, handle focus/blur 14680 // 14681 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 14682 // invoking the handler at the lower level. 14683 if ( event.target === event.currentTarget ) { 14684 14685 // The setup part calls `leverageNative`, which, in turn, calls 14686 // `jQuery.event.add`, so event handle will already have been set 14687 // by this point. 14688 handle( event ); 14689 } 14690 } else { 14691 14692 // For non-IE browsers, attach a single capturing handler on the document 14693 // while someone wants focusin/focusout. 14694 jQuery.event.simulate( delegateType, nativeEvent.target, 14695 jQuery.event.fix( nativeEvent ) ); 14696 } 14697 } 14698 14699 jQuery.event.special[ type ] = { 14700 14701 // Utilize native event if possible so blur/focus sequence is correct 14702 setup: function() { 14703 14704 var attaches; 14705 14706 // Claim the first handler 14707 // dataPriv.set( this, "focus", ... ) 14708 // dataPriv.set( this, "blur", ... ) 14709 leverageNative( this, type, true ); 14710 14711 if ( document.documentMode ) { 14712 14713 // Support: IE 9 - 11+ 14714 // We use the same native handler for focusin & focus (and focusout & blur) 14715 // so we need to coordinate setup & teardown parts between those events. 14716 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 14717 attaches = dataPriv.get( this, delegateType ); 14718 if ( !attaches ) { 14719 this.addEventListener( delegateType, focusMappedHandler ); 14720 } 14721 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 14722 } else { 14723 14724 // Return false to allow normal processing in the caller 14725 return false; 14726 } 14727 }, 14728 trigger: function() { 14729 14730 // Force setup before trigger 14731 leverageNative( this, type ); 14732 14733 // Return non-false to allow normal event-path propagation 14734 return true; 14735 }, 14736 14737 teardown: function() { 14738 var attaches; 14739 14740 if ( document.documentMode ) { 14741 attaches = dataPriv.get( this, delegateType ) - 1; 14742 if ( !attaches ) { 14743 this.removeEventListener( delegateType, focusMappedHandler ); 14744 dataPriv.remove( this, delegateType ); 14745 } else { 14746 dataPriv.set( this, delegateType, attaches ); 14747 } 14748 } else { 14749 14750 // Return false to indicate standard teardown should be applied 14751 return false; 14752 } 14753 }, 14754 14755 // Suppress native focus or blur if we're currently inside 14756 // a leveraged native-event stack 14757 _default: function( event ) { 14758 return dataPriv.get( event.target, type ); 14759 }, 14760 14761 delegateType: delegateType 14762 }; 14763 14764 // Support: Firefox <=44 14765 // Firefox doesn't have focus(in | out) events 14766 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 14767 // 14768 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 14769 // focus(in | out) events fire after focus & blur events, 14770 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 14771 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 14772 // 14773 // Support: IE 9 - 11+ 14774 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 14775 // attach a single handler for both events in IE. 14776 jQuery.event.special[ delegateType ] = { 14777 setup: function() { 14778 14779 // Handle: regular nodes (via `this.ownerDocument`), window 14780 // (via `this.document`) & document (via `this`). 14781 var doc = this.ownerDocument || this.document || this, 14782 dataHolder = document.documentMode ? this : doc, 14783 attaches = dataPriv.get( dataHolder, delegateType ); 14784 14785 // Support: IE 9 - 11+ 14786 // We use the same native handler for focusin & focus (and focusout & blur) 14787 // so we need to coordinate setup & teardown parts between those events. 14788 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 14789 if ( !attaches ) { 14790 if ( document.documentMode ) { 14791 this.addEventListener( delegateType, focusMappedHandler ); 14792 } else { 14793 doc.addEventListener( type, focusMappedHandler, true ); 14794 } 14795 } 14796 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 14797 }, 14798 teardown: function() { 14799 var doc = this.ownerDocument || this.document || this, 14800 dataHolder = document.documentMode ? this : doc, 14801 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 14802 14803 if ( !attaches ) { 14804 if ( document.documentMode ) { 14805 this.removeEventListener( delegateType, focusMappedHandler ); 14806 } else { 14807 doc.removeEventListener( type, focusMappedHandler, true ); 14808 } 14809 dataPriv.remove( dataHolder, delegateType ); 14810 } else { 14811 dataPriv.set( dataHolder, delegateType, attaches ); 14812 } 14813 } 14814 }; 14815} ); 14816 14817// Create mouseenter/leave events using mouseover/out and event-time checks 14818// so that event delegation works in jQuery. 14819// Do the same for pointerenter/pointerleave and pointerover/pointerout 14820// 14821// Support: Safari 7 only 14822// Safari sends mouseenter too often; see: 14823// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 14824// for the description of the bug (it existed in older Chrome versions as well). 14825jQuery.each( { 14826 mouseenter: "mouseover", 14827 mouseleave: "mouseout", 14828 pointerenter: "pointerover", 14829 pointerleave: "pointerout" 14830}, function( orig, fix ) { 14831 jQuery.event.special[ orig ] = { 14832 delegateType: fix, 14833 bindType: fix, 14834 14835 handle: function( event ) { 14836 var ret, 14837 target = this, 14838 related = event.relatedTarget, 14839 handleObj = event.handleObj; 14840 14841 // For mouseenter/leave call the handler if related is outside the target. 14842 // NB: No relatedTarget if the mouse left/entered the browser window 14843 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 14844 event.type = handleObj.origType; 14845 ret = handleObj.handler.apply( this, arguments ); 14846 event.type = fix; 14847 } 14848 return ret; 14849 } 14850 }; 14851} ); 14852 14853jQuery.fn.extend( { 14854 14855 on: function( types, selector, data, fn ) { 14856 return on( this, types, selector, data, fn ); 14857 }, 14858 one: function( types, selector, data, fn ) { 14859 return on( this, types, selector, data, fn, 1 ); 14860 }, 14861 off: function( types, selector, fn ) { 14862 var handleObj, type; 14863 if ( types && types.preventDefault && types.handleObj ) { 14864 14865 // ( event ) dispatched jQuery.Event 14866 handleObj = types.handleObj; 14867 jQuery( types.delegateTarget ).off( 14868 handleObj.namespace ? 14869 handleObj.origType + "." + handleObj.namespace : 14870 handleObj.origType, 14871 handleObj.selector, 14872 handleObj.handler 14873 ); 14874 return this; 14875 } 14876 if ( typeof types === "object" ) { 14877 14878 // ( types-object [, selector] ) 14879 for ( type in types ) { 14880 this.off( type, selector, types[ type ] ); 14881 } 14882 return this; 14883 } 14884 if ( selector === false || typeof selector === "function" ) { 14885 14886 // ( types [, fn] ) 14887 fn = selector; 14888 selector = undefined; 14889 } 14890 if ( fn === false ) { 14891 fn = returnFalse; 14892 } 14893 return this.each( function() { 14894 jQuery.event.remove( this, types, fn, selector ); 14895 } ); 14896 } 14897} ); 14898 14899 14900var 14901 14902 // Support: IE <=10 - 11, Edge 12 - 13 only 14903 // In IE/Edge using regex groups here causes severe slowdowns. 14904 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 14905 rnoInnerhtml = /<script|<style|<link/i, 14906 14907 // checked="checked" or checked 14908 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 14909 14910 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 14911 14912// Prefer a tbody over its parent table for containing new rows 14913function manipulationTarget( elem, content ) { 14914 if ( nodeName( elem, "table" ) && 14915 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 14916 14917 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 14918 } 14919 14920 return elem; 14921} 14922 14923// Replace/restore the type attribute of script elements for safe DOM manipulation 14924function disableScript( elem ) { 14925 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 14926 return elem; 14927} 14928function restoreScript( elem ) { 14929 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 14930 elem.type = elem.type.slice( 5 ); 14931 } else { 14932 elem.removeAttribute( "type" ); 14933 } 14934 14935 return elem; 14936} 14937 14938function cloneCopyEvent( src, dest ) { 14939 var i, l, type, pdataOld, udataOld, udataCur, events; 14940 14941 if ( dest.nodeType !== 1 ) { 14942 return; 14943 } 14944 14945 // 1. Copy private data: events, handlers, etc. 14946 if ( dataPriv.hasData( src ) ) { 14947 pdataOld = dataPriv.get( src ); 14948 events = pdataOld.events; 14949 14950 if ( events ) { 14951 dataPriv.remove( dest, "handle events" ); 14952 14953 for ( type in events ) { 14954 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 14955 jQuery.event.add( dest, type, events[ type ][ i ] ); 14956 } 14957 } 14958 } 14959 } 14960 14961 // 2. Copy user data 14962 if ( dataUser.hasData( src ) ) { 14963 udataOld = dataUser.access( src ); 14964 udataCur = jQuery.extend( {}, udataOld ); 14965 14966 dataUser.set( dest, udataCur ); 14967 } 14968} 14969 14970// Fix IE bugs, see support tests 14971function fixInput( src, dest ) { 14972 var nodeName = dest.nodeName.toLowerCase(); 14973 14974 // Fails to persist the checked state of a cloned checkbox or radio button. 14975 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 14976 dest.checked = src.checked; 14977 14978 // Fails to return the selected option to the default selected state when cloning options 14979 } else if ( nodeName === "input" || nodeName === "textarea" ) { 14980 dest.defaultValue = src.defaultValue; 14981 } 14982} 14983 14984function domManip( collection, args, callback, ignored ) { 14985 14986 // Flatten any nested arrays 14987 args = flat( args ); 14988 14989 var fragment, first, scripts, hasScripts, node, doc, 14990 i = 0, 14991 l = collection.length, 14992 iNoClone = l - 1, 14993 value = args[ 0 ], 14994 valueIsFunction = isFunction( value ); 14995 14996 // We can't cloneNode fragments that contain checked, in WebKit 14997 if ( valueIsFunction || 14998 ( l > 1 && typeof value === "string" && 14999 !support.checkClone && rchecked.test( value ) ) ) { 15000 return collection.each( function( index ) { 15001 var self = collection.eq( index ); 15002 if ( valueIsFunction ) { 15003 args[ 0 ] = value.call( this, index, self.html() ); 15004 } 15005 domManip( self, args, callback, ignored ); 15006 } ); 15007 } 15008 15009 if ( l ) { 15010 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 15011 first = fragment.firstChild; 15012 15013 if ( fragment.childNodes.length === 1 ) { 15014 fragment = first; 15015 } 15016 15017 // Require either new content or an interest in ignored elements to invoke the callback 15018 if ( first || ignored ) { 15019 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 15020 hasScripts = scripts.length; 15021 15022 // Use the original fragment for the last item 15023 // instead of the first because it can end up 15024 // being emptied incorrectly in certain situations (trac-8070). 15025 for ( ; i < l; i++ ) { 15026 node = fragment; 15027 15028 if ( i !== iNoClone ) { 15029 node = jQuery.clone( node, true, true ); 15030 15031 // Keep references to cloned scripts for later restoration 15032 if ( hasScripts ) { 15033 15034 // Support: Android <=4.0 only, PhantomJS 1 only 15035 // push.apply(_, arraylike) throws on ancient WebKit 15036 jQuery.merge( scripts, getAll( node, "script" ) ); 15037 } 15038 } 15039 15040 callback.call( collection[ i ], node, i ); 15041 } 15042 15043 if ( hasScripts ) { 15044 doc = scripts[ scripts.length - 1 ].ownerDocument; 15045 15046 // Re-enable scripts 15047 jQuery.map( scripts, restoreScript ); 15048 15049 // Evaluate executable scripts on first document insertion 15050 for ( i = 0; i < hasScripts; i++ ) { 15051 node = scripts[ i ]; 15052 if ( rscriptType.test( node.type || "" ) && 15053 !dataPriv.access( node, "globalEval" ) && 15054 jQuery.contains( doc, node ) ) { 15055 15056 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 15057 15058 // Optional AJAX dependency, but won't run scripts if not present 15059 if ( jQuery._evalUrl && !node.noModule ) { 15060 jQuery._evalUrl( node.src, { 15061 nonce: node.nonce || node.getAttribute( "nonce" ) 15062 }, doc ); 15063 } 15064 } else { 15065 15066 // Unwrap a CDATA section containing script contents. This shouldn't be 15067 // needed as in XML documents they're already not visible when 15068 // inspecting element contents and in HTML documents they have no 15069 // meaning but we're preserving that logic for backwards compatibility. 15070 // This will be removed completely in 4.0. See gh-4904. 15071 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 15072 } 15073 } 15074 } 15075 } 15076 } 15077 } 15078 15079 return collection; 15080} 15081 15082function remove( elem, selector, keepData ) { 15083 var node, 15084 nodes = selector ? jQuery.filter( selector, elem ) : elem, 15085 i = 0; 15086 15087 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 15088 if ( !keepData && node.nodeType === 1 ) { 15089 jQuery.cleanData( getAll( node ) ); 15090 } 15091 15092 if ( node.parentNode ) { 15093 if ( keepData && isAttached( node ) ) { 15094 setGlobalEval( getAll( node, "script" ) ); 15095 } 15096 node.parentNode.removeChild( node ); 15097 } 15098 } 15099 15100 return elem; 15101} 15102 15103jQuery.extend( { 15104 htmlPrefilter: function( html ) { 15105 return html; 15106 }, 15107 15108 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 15109 var i, l, srcElements, destElements, 15110 clone = elem.cloneNode( true ), 15111 inPage = isAttached( elem ); 15112 15113 // Fix IE cloning issues 15114 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 15115 !jQuery.isXMLDoc( elem ) ) { 15116 15117 // We eschew jQuery#find here for performance reasons: 15118 // https://jsperf.com/getall-vs-sizzle/2 15119 destElements = getAll( clone ); 15120 srcElements = getAll( elem ); 15121 15122 for ( i = 0, l = srcElements.length; i < l; i++ ) { 15123 fixInput( srcElements[ i ], destElements[ i ] ); 15124 } 15125 } 15126 15127 // Copy the events from the original to the clone 15128 if ( dataAndEvents ) { 15129 if ( deepDataAndEvents ) { 15130 srcElements = srcElements || getAll( elem ); 15131 destElements = destElements || getAll( clone ); 15132 15133 for ( i = 0, l = srcElements.length; i < l; i++ ) { 15134 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 15135 } 15136 } else { 15137 cloneCopyEvent( elem, clone ); 15138 } 15139 } 15140 15141 // Preserve script evaluation history 15142 destElements = getAll( clone, "script" ); 15143 if ( destElements.length > 0 ) { 15144 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 15145 } 15146 15147 // Return the cloned set 15148 return clone; 15149 }, 15150 15151 cleanData: function( elems ) { 15152 var data, elem, type, 15153 special = jQuery.event.special, 15154 i = 0; 15155 15156 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 15157 if ( acceptData( elem ) ) { 15158 if ( ( data = elem[ dataPriv.expando ] ) ) { 15159 if ( data.events ) { 15160 for ( type in data.events ) { 15161 if ( special[ type ] ) { 15162 jQuery.event.remove( elem, type ); 15163 15164 // This is a shortcut to avoid jQuery.event.remove's overhead 15165 } else { 15166 jQuery.removeEvent( elem, type, data.handle ); 15167 } 15168 } 15169 } 15170 15171 // Support: Chrome <=35 - 45+ 15172 // Assign undefined instead of using delete, see Data#remove 15173 elem[ dataPriv.expando ] = undefined; 15174 } 15175 if ( elem[ dataUser.expando ] ) { 15176 15177 // Support: Chrome <=35 - 45+ 15178 // Assign undefined instead of using delete, see Data#remove 15179 elem[ dataUser.expando ] = undefined; 15180 } 15181 } 15182 } 15183 } 15184} ); 15185 15186jQuery.fn.extend( { 15187 detach: function( selector ) { 15188 return remove( this, selector, true ); 15189 }, 15190 15191 remove: function( selector ) { 15192 return remove( this, selector ); 15193 }, 15194 15195 text: function( value ) { 15196 return access( this, function( value ) { 15197 return value === undefined ? 15198 jQuery.text( this ) : 15199 this.empty().each( function() { 15200 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 15201 this.textContent = value; 15202 } 15203 } ); 15204 }, null, value, arguments.length ); 15205 }, 15206 15207 append: function() { 15208 return domManip( this, arguments, function( elem ) { 15209 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 15210 var target = manipulationTarget( this, elem ); 15211 target.appendChild( elem ); 15212 } 15213 } ); 15214 }, 15215 15216 prepend: function() { 15217 return domManip( this, arguments, function( elem ) { 15218 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 15219 var target = manipulationTarget( this, elem ); 15220 target.insertBefore( elem, target.firstChild ); 15221 } 15222 } ); 15223 }, 15224 15225 before: function() { 15226 return domManip( this, arguments, function( elem ) { 15227 if ( this.parentNode ) { 15228 this.parentNode.insertBefore( elem, this ); 15229 } 15230 } ); 15231 }, 15232 15233 after: function() { 15234 return domManip( this, arguments, function( elem ) { 15235 if ( this.parentNode ) { 15236 this.parentNode.insertBefore( elem, this.nextSibling ); 15237 } 15238 } ); 15239 }, 15240 15241 empty: function() { 15242 var elem, 15243 i = 0; 15244 15245 for ( ; ( elem = this[ i ] ) != null; i++ ) { 15246 if ( elem.nodeType === 1 ) { 15247 15248 // Prevent memory leaks 15249 jQuery.cleanData( getAll( elem, false ) ); 15250 15251 // Remove any remaining nodes 15252 elem.textContent = ""; 15253 } 15254 } 15255 15256 return this; 15257 }, 15258 15259 clone: function( dataAndEvents, deepDataAndEvents ) { 15260 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 15261 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 15262 15263 return this.map( function() { 15264 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 15265 } ); 15266 }, 15267 15268 html: function( value ) { 15269 return access( this, function( value ) { 15270 var elem = this[ 0 ] || {}, 15271 i = 0, 15272 l = this.length; 15273 15274 if ( value === undefined && elem.nodeType === 1 ) { 15275 return elem.innerHTML; 15276 } 15277 15278 // See if we can take a shortcut and just use innerHTML 15279 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 15280 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 15281 15282 value = jQuery.htmlPrefilter( value ); 15283 15284 try { 15285 for ( ; i < l; i++ ) { 15286 elem = this[ i ] || {}; 15287 15288 // Remove element nodes and prevent memory leaks 15289 if ( elem.nodeType === 1 ) { 15290 jQuery.cleanData( getAll( elem, false ) ); 15291 elem.innerHTML = value; 15292 } 15293 } 15294 15295 elem = 0; 15296 15297 // If using innerHTML throws an exception, use the fallback method 15298 } catch ( e ) {} 15299 } 15300 15301 if ( elem ) { 15302 this.empty().append( value ); 15303 } 15304 }, null, value, arguments.length ); 15305 }, 15306 15307 replaceWith: function() { 15308 var ignored = []; 15309 15310 // Make the changes, replacing each non-ignored context element with the new content 15311 return domManip( this, arguments, function( elem ) { 15312 var parent = this.parentNode; 15313 15314 if ( jQuery.inArray( this, ignored ) < 0 ) { 15315 jQuery.cleanData( getAll( this ) ); 15316 if ( parent ) { 15317 parent.replaceChild( elem, this ); 15318 } 15319 } 15320 15321 // Force callback invocation 15322 }, ignored ); 15323 } 15324} ); 15325 15326jQuery.each( { 15327 appendTo: "append", 15328 prependTo: "prepend", 15329 insertBefore: "before", 15330 insertAfter: "after", 15331 replaceAll: "replaceWith" 15332}, function( name, original ) { 15333 jQuery.fn[ name ] = function( selector ) { 15334 var elems, 15335 ret = [], 15336 insert = jQuery( selector ), 15337 last = insert.length - 1, 15338 i = 0; 15339 15340 for ( ; i <= last; i++ ) { 15341 elems = i === last ? this : this.clone( true ); 15342 jQuery( insert[ i ] )[ original ]( elems ); 15343 15344 // Support: Android <=4.0 only, PhantomJS 1 only 15345 // .get() because push.apply(_, arraylike) throws on ancient WebKit 15346 push.apply( ret, elems.get() ); 15347 } 15348 15349 return this.pushStack( ret ); 15350 }; 15351} ); 15352var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 15353 15354var rcustomProp = /^--/; 15355 15356 15357var getStyles = function( elem ) { 15358 15359 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 15360 // IE throws on elements created in popups 15361 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 15362 var view = elem.ownerDocument.defaultView; 15363 15364 if ( !view || !view.opener ) { 15365 view = window; 15366 } 15367 15368 return view.getComputedStyle( elem ); 15369 }; 15370 15371var swap = function( elem, options, callback ) { 15372 var ret, name, 15373 old = {}; 15374 15375 // Remember the old values, and insert the new ones 15376 for ( name in options ) { 15377 old[ name ] = elem.style[ name ]; 15378 elem.style[ name ] = options[ name ]; 15379 } 15380 15381 ret = callback.call( elem ); 15382 15383 // Revert the old values 15384 for ( name in options ) { 15385 elem.style[ name ] = old[ name ]; 15386 } 15387 15388 return ret; 15389}; 15390 15391 15392var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 15393 15394 15395 15396( function() { 15397 15398 // Executing both pixelPosition & boxSizingReliable tests require only one layout 15399 // so they're executed at the same time to save the second computation. 15400 function computeStyleTests() { 15401 15402 // This is a singleton, we need to execute it only once 15403 if ( !div ) { 15404 return; 15405 } 15406 15407 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 15408 "margin-top:1px;padding:0;border:0"; 15409 div.style.cssText = 15410 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 15411 "margin:auto;border:1px;padding:1px;" + 15412 "width:60%;top:1%"; 15413 documentElement.appendChild( container ).appendChild( div ); 15414 15415 var divStyle = window.getComputedStyle( div ); 15416 pixelPositionVal = divStyle.top !== "1%"; 15417 15418 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 15419 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 15420 15421 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 15422 // Some styles come back with percentage values, even though they shouldn't 15423 div.style.right = "60%"; 15424 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 15425 15426 // Support: IE 9 - 11 only 15427 // Detect misreporting of content dimensions for box-sizing:border-box elements 15428 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 15429 15430 // Support: IE 9 only 15431 // Detect overflow:scroll screwiness (gh-3699) 15432 // Support: Chrome <=64 15433 // Don't get tricked when zoom affects offsetWidth (gh-4029) 15434 div.style.position = "absolute"; 15435 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 15436 15437 documentElement.removeChild( container ); 15438 15439 // Nullify the div so it wouldn't be stored in the memory and 15440 // it will also be a sign that checks already performed 15441 div = null; 15442 } 15443 15444 function roundPixelMeasures( measure ) { 15445 return Math.round( parseFloat( measure ) ); 15446 } 15447 15448 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 15449 reliableTrDimensionsVal, reliableMarginLeftVal, 15450 container = document.createElement( "div" ), 15451 div = document.createElement( "div" ); 15452 15453 // Finish early in limited (non-browser) environments 15454 if ( !div.style ) { 15455 return; 15456 } 15457 15458 // Support: IE <=9 - 11 only 15459 // Style of cloned element affects source element cloned (trac-8908) 15460 div.style.backgroundClip = "content-box"; 15461 div.cloneNode( true ).style.backgroundClip = ""; 15462 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 15463 15464 jQuery.extend( support, { 15465 boxSizingReliable: function() { 15466 computeStyleTests(); 15467 return boxSizingReliableVal; 15468 }, 15469 pixelBoxStyles: function() { 15470 computeStyleTests(); 15471 return pixelBoxStylesVal; 15472 }, 15473 pixelPosition: function() { 15474 computeStyleTests(); 15475 return pixelPositionVal; 15476 }, 15477 reliableMarginLeft: function() { 15478 computeStyleTests(); 15479 return reliableMarginLeftVal; 15480 }, 15481 scrollboxSize: function() { 15482 computeStyleTests(); 15483 return scrollboxSizeVal; 15484 }, 15485 15486 // Support: IE 9 - 11+, Edge 15 - 18+ 15487 // IE/Edge misreport `getComputedStyle` of table rows with width/height 15488 // set in CSS while `offset*` properties report correct values. 15489 // Behavior in IE 9 is more subtle than in newer versions & it passes 15490 // some versions of this test; make sure not to make it pass there! 15491 // 15492 // Support: Firefox 70+ 15493 // Only Firefox includes border widths 15494 // in computed dimensions. (gh-4529) 15495 reliableTrDimensions: function() { 15496 var table, tr, trChild, trStyle; 15497 if ( reliableTrDimensionsVal == null ) { 15498 table = document.createElement( "table" ); 15499 tr = document.createElement( "tr" ); 15500 trChild = document.createElement( "div" ); 15501 15502 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 15503 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 15504 15505 // Support: Chrome 86+ 15506 // Height set through cssText does not get applied. 15507 // Computed height then comes back as 0. 15508 tr.style.height = "1px"; 15509 trChild.style.height = "9px"; 15510 15511 // Support: Android 8 Chrome 86+ 15512 // In our bodyBackground.html iframe, 15513 // display for all div elements is set to "inline", 15514 // which causes a problem only in Android 8 Chrome 86. 15515 // Ensuring the div is `display: block` 15516 // gets around this issue. 15517 trChild.style.display = "block"; 15518 15519 documentElement 15520 .appendChild( table ) 15521 .appendChild( tr ) 15522 .appendChild( trChild ); 15523 15524 trStyle = window.getComputedStyle( tr ); 15525 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 15526 parseInt( trStyle.borderTopWidth, 10 ) + 15527 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 15528 15529 documentElement.removeChild( table ); 15530 } 15531 return reliableTrDimensionsVal; 15532 } 15533 } ); 15534} )(); 15535 15536 15537function curCSS( elem, name, computed ) { 15538 var width, minWidth, maxWidth, ret, 15539 isCustomProp = rcustomProp.test( name ), 15540 15541 // Support: Firefox 51+ 15542 // Retrieving style before computed somehow 15543 // fixes an issue with getting wrong values 15544 // on detached elements 15545 style = elem.style; 15546 15547 computed = computed || getStyles( elem ); 15548 15549 // getPropertyValue is needed for: 15550 // .css('filter') (IE 9 only, trac-12537) 15551 // .css('--customProperty) (gh-3144) 15552 if ( computed ) { 15553 15554 // Support: IE <=9 - 11+ 15555 // IE only supports `"float"` in `getPropertyValue`; in computed styles 15556 // it's only available as `"cssFloat"`. We no longer modify properties 15557 // sent to `.css()` apart from camelCasing, so we need to check both. 15558 // Normally, this would create difference in behavior: if 15559 // `getPropertyValue` returns an empty string, the value returned 15560 // by `.css()` would be `undefined`. This is usually the case for 15561 // disconnected elements. However, in IE even disconnected elements 15562 // with no styles return `"none"` for `getPropertyValue( "float" )` 15563 ret = computed.getPropertyValue( name ) || computed[ name ]; 15564 15565 if ( isCustomProp && ret ) { 15566 15567 // Support: Firefox 105+, Chrome <=105+ 15568 // Spec requires trimming whitespace for custom properties (gh-4926). 15569 // Firefox only trims leading whitespace. Chrome just collapses 15570 // both leading & trailing whitespace to a single space. 15571 // 15572 // Fall back to `undefined` if empty string returned. 15573 // This collapses a missing definition with property defined 15574 // and set to an empty string but there's no standard API 15575 // allowing us to differentiate them without a performance penalty 15576 // and returning `undefined` aligns with older jQuery. 15577 // 15578 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 15579 // as whitespace while CSS does not, but this is not a problem 15580 // because CSS preprocessing replaces them with U+000A LINE FEED 15581 // (which *is* CSS whitespace) 15582 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 15583 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 15584 } 15585 15586 if ( ret === "" && !isAttached( elem ) ) { 15587 ret = jQuery.style( elem, name ); 15588 } 15589 15590 // A tribute to the "awesome hack by Dean Edwards" 15591 // Android Browser returns percentage for some values, 15592 // but width seems to be reliably pixels. 15593 // This is against the CSSOM draft spec: 15594 // https://drafts.csswg.org/cssom/#resolved-values 15595 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 15596 15597 // Remember the original values 15598 width = style.width; 15599 minWidth = style.minWidth; 15600 maxWidth = style.maxWidth; 15601 15602 // Put in the new values to get a computed value out 15603 style.minWidth = style.maxWidth = style.width = ret; 15604 ret = computed.width; 15605 15606 // Revert the changed values 15607 style.width = width; 15608 style.minWidth = minWidth; 15609 style.maxWidth = maxWidth; 15610 } 15611 } 15612 15613 return ret !== undefined ? 15614 15615 // Support: IE <=9 - 11 only 15616 // IE returns zIndex value as an integer. 15617 ret + "" : 15618 ret; 15619} 15620 15621 15622function addGetHookIf( conditionFn, hookFn ) { 15623 15624 // Define the hook, we'll check on the first run if it's really needed. 15625 return { 15626 get: function() { 15627 if ( conditionFn() ) { 15628 15629 // Hook not needed (or it's not possible to use it due 15630 // to missing dependency), remove it. 15631 delete this.get; 15632 return; 15633 } 15634 15635 // Hook needed; redefine it so that the support test is not executed again. 15636 return ( this.get = hookFn ).apply( this, arguments ); 15637 } 15638 }; 15639} 15640 15641 15642var cssPrefixes = [ "Webkit", "Moz", "ms" ], 15643 emptyStyle = document.createElement( "div" ).style, 15644 vendorProps = {}; 15645 15646// Return a vendor-prefixed property or undefined 15647function vendorPropName( name ) { 15648 15649 // Check for vendor prefixed names 15650 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 15651 i = cssPrefixes.length; 15652 15653 while ( i-- ) { 15654 name = cssPrefixes[ i ] + capName; 15655 if ( name in emptyStyle ) { 15656 return name; 15657 } 15658 } 15659} 15660 15661// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 15662function finalPropName( name ) { 15663 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 15664 15665 if ( final ) { 15666 return final; 15667 } 15668 if ( name in emptyStyle ) { 15669 return name; 15670 } 15671 return vendorProps[ name ] = vendorPropName( name ) || name; 15672} 15673 15674 15675var 15676 15677 // Swappable if display is none or starts with table 15678 // except "table", "table-cell", or "table-caption" 15679 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 15680 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 15681 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 15682 cssNormalTransform = { 15683 letterSpacing: "0", 15684 fontWeight: "400" 15685 }; 15686 15687function setPositiveNumber( _elem, value, subtract ) { 15688 15689 // Any relative (+/-) values have already been 15690 // normalized at this point 15691 var matches = rcssNum.exec( value ); 15692 return matches ? 15693 15694 // Guard against undefined "subtract", e.g., when used as in cssHooks 15695 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 15696 value; 15697} 15698 15699function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 15700 var i = dimension === "width" ? 1 : 0, 15701 extra = 0, 15702 delta = 0, 15703 marginDelta = 0; 15704 15705 // Adjustment may not be necessary 15706 if ( box === ( isBorderBox ? "border" : "content" ) ) { 15707 return 0; 15708 } 15709 15710 for ( ; i < 4; i += 2 ) { 15711 15712 // Both box models exclude margin 15713 // Count margin delta separately to only add it after scroll gutter adjustment. 15714 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 15715 if ( box === "margin" ) { 15716 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 15717 } 15718 15719 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 15720 if ( !isBorderBox ) { 15721 15722 // Add padding 15723 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 15724 15725 // For "border" or "margin", add border 15726 if ( box !== "padding" ) { 15727 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 15728 15729 // But still keep track of it otherwise 15730 } else { 15731 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 15732 } 15733 15734 // If we get here with a border-box (content + padding + border), we're seeking "content" or 15735 // "padding" or "margin" 15736 } else { 15737 15738 // For "content", subtract padding 15739 if ( box === "content" ) { 15740 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 15741 } 15742 15743 // For "content" or "padding", subtract border 15744 if ( box !== "margin" ) { 15745 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 15746 } 15747 } 15748 } 15749 15750 // Account for positive content-box scroll gutter when requested by providing computedVal 15751 if ( !isBorderBox && computedVal >= 0 ) { 15752 15753 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 15754 // Assuming integer scroll gutter, subtract the rest and round down 15755 delta += Math.max( 0, Math.ceil( 15756 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 15757 computedVal - 15758 delta - 15759 extra - 15760 0.5 15761 15762 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 15763 // Use an explicit zero to avoid NaN (gh-3964) 15764 ) ) || 0; 15765 } 15766 15767 return delta + marginDelta; 15768} 15769 15770function getWidthOrHeight( elem, dimension, extra ) { 15771 15772 // Start with computed style 15773 var styles = getStyles( elem ), 15774 15775 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 15776 // Fake content-box until we know it's needed to know the true value. 15777 boxSizingNeeded = !support.boxSizingReliable() || extra, 15778 isBorderBox = boxSizingNeeded && 15779 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 15780 valueIsBorderBox = isBorderBox, 15781 15782 val = curCSS( elem, dimension, styles ), 15783 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 15784 15785 // Support: Firefox <=54 15786 // Return a confounding non-pixel value or feign ignorance, as appropriate. 15787 if ( rnumnonpx.test( val ) ) { 15788 if ( !extra ) { 15789 return val; 15790 } 15791 val = "auto"; 15792 } 15793 15794 15795 // Support: IE 9 - 11 only 15796 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 15797 // In those cases, the computed value can be trusted to be border-box. 15798 if ( ( !support.boxSizingReliable() && isBorderBox || 15799 15800 // Support: IE 10 - 11+, Edge 15 - 18+ 15801 // IE/Edge misreport `getComputedStyle` of table rows with width/height 15802 // set in CSS while `offset*` properties report correct values. 15803 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 15804 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 15805 15806 // Fall back to offsetWidth/offsetHeight when value is "auto" 15807 // This happens for inline elements with no explicit setting (gh-3571) 15808 val === "auto" || 15809 15810 // Support: Android <=4.1 - 4.3 only 15811 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 15812 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 15813 15814 // Make sure the element is visible & connected 15815 elem.getClientRects().length ) { 15816 15817 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 15818 15819 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 15820 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 15821 // retrieved value as a content box dimension. 15822 valueIsBorderBox = offsetProp in elem; 15823 if ( valueIsBorderBox ) { 15824 val = elem[ offsetProp ]; 15825 } 15826 } 15827 15828 // Normalize "" and auto 15829 val = parseFloat( val ) || 0; 15830 15831 // Adjust for the element's box model 15832 return ( val + 15833 boxModelAdjustment( 15834 elem, 15835 dimension, 15836 extra || ( isBorderBox ? "border" : "content" ), 15837 valueIsBorderBox, 15838 styles, 15839 15840 // Provide the current computed size to request scroll gutter calculation (gh-3589) 15841 val 15842 ) 15843 ) + "px"; 15844} 15845 15846jQuery.extend( { 15847 15848 // Add in style property hooks for overriding the default 15849 // behavior of getting and setting a style property 15850 cssHooks: { 15851 opacity: { 15852 get: function( elem, computed ) { 15853 if ( computed ) { 15854 15855 // We should always get a number back from opacity 15856 var ret = curCSS( elem, "opacity" ); 15857 return ret === "" ? "1" : ret; 15858 } 15859 } 15860 } 15861 }, 15862 15863 // Don't automatically add "px" to these possibly-unitless properties 15864 cssNumber: { 15865 animationIterationCount: true, 15866 aspectRatio: true, 15867 borderImageSlice: true, 15868 columnCount: true, 15869 flexGrow: true, 15870 flexShrink: true, 15871 fontWeight: true, 15872 gridArea: true, 15873 gridColumn: true, 15874 gridColumnEnd: true, 15875 gridColumnStart: true, 15876 gridRow: true, 15877 gridRowEnd: true, 15878 gridRowStart: true, 15879 lineHeight: true, 15880 opacity: true, 15881 order: true, 15882 orphans: true, 15883 scale: true, 15884 widows: true, 15885 zIndex: true, 15886 zoom: true, 15887 15888 // SVG-related 15889 fillOpacity: true, 15890 floodOpacity: true, 15891 stopOpacity: true, 15892 strokeMiterlimit: true, 15893 strokeOpacity: true 15894 }, 15895 15896 // Add in properties whose names you wish to fix before 15897 // setting or getting the value 15898 cssProps: {}, 15899 15900 // Get and set the style property on a DOM Node 15901 style: function( elem, name, value, extra ) { 15902 15903 // Don't set styles on text and comment nodes 15904 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 15905 return; 15906 } 15907 15908 // Make sure that we're working with the right name 15909 var ret, type, hooks, 15910 origName = camelCase( name ), 15911 isCustomProp = rcustomProp.test( name ), 15912 style = elem.style; 15913 15914 // Make sure that we're working with the right name. We don't 15915 // want to query the value if it is a CSS custom property 15916 // since they are user-defined. 15917 if ( !isCustomProp ) { 15918 name = finalPropName( origName ); 15919 } 15920 15921 // Gets hook for the prefixed version, then unprefixed version 15922 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 15923 15924 // Check if we're setting a value 15925 if ( value !== undefined ) { 15926 type = typeof value; 15927 15928 // Convert "+=" or "-=" to relative numbers (trac-7345) 15929 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 15930 value = adjustCSS( elem, name, ret ); 15931 15932 // Fixes bug trac-9237 15933 type = "number"; 15934 } 15935 15936 // Make sure that null and NaN values aren't set (trac-7116) 15937 if ( value == null || value !== value ) { 15938 return; 15939 } 15940 15941 // If a number was passed in, add the unit (except for certain CSS properties) 15942 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 15943 // "px" to a few hardcoded values. 15944 if ( type === "number" && !isCustomProp ) { 15945 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 15946 } 15947 15948 // background-* props affect original clone's values 15949 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 15950 style[ name ] = "inherit"; 15951 } 15952 15953 // If a hook was provided, use that value, otherwise just set the specified value 15954 if ( !hooks || !( "set" in hooks ) || 15955 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 15956 15957 if ( isCustomProp ) { 15958 style.setProperty( name, value ); 15959 } else { 15960 style[ name ] = value; 15961 } 15962 } 15963 15964 } else { 15965 15966 // If a hook was provided get the non-computed value from there 15967 if ( hooks && "get" in hooks && 15968 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 15969 15970 return ret; 15971 } 15972 15973 // Otherwise just get the value from the style object 15974 return style[ name ]; 15975 } 15976 }, 15977 15978 css: function( elem, name, extra, styles ) { 15979 var val, num, hooks, 15980 origName = camelCase( name ), 15981 isCustomProp = rcustomProp.test( name ); 15982 15983 // Make sure that we're working with the right name. We don't 15984 // want to modify the value if it is a CSS custom property 15985 // since they are user-defined. 15986 if ( !isCustomProp ) { 15987 name = finalPropName( origName ); 15988 } 15989 15990 // Try prefixed name followed by the unprefixed name 15991 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 15992 15993 // If a hook was provided get the computed value from there 15994 if ( hooks && "get" in hooks ) { 15995 val = hooks.get( elem, true, extra ); 15996 } 15997 15998 // Otherwise, if a way to get the computed value exists, use that 15999 if ( val === undefined ) { 16000 val = curCSS( elem, name, styles ); 16001 } 16002 16003 // Convert "normal" to computed value 16004 if ( val === "normal" && name in cssNormalTransform ) { 16005 val = cssNormalTransform[ name ]; 16006 } 16007 16008 // Make numeric if forced or a qualifier was provided and val looks numeric 16009 if ( extra === "" || extra ) { 16010 num = parseFloat( val ); 16011 return extra === true || isFinite( num ) ? num || 0 : val; 16012 } 16013 16014 return val; 16015 } 16016} ); 16017 16018jQuery.each( [ "height", "width" ], function( _i, dimension ) { 16019 jQuery.cssHooks[ dimension ] = { 16020 get: function( elem, computed, extra ) { 16021 if ( computed ) { 16022 16023 // Certain elements can have dimension info if we invisibly show them 16024 // but it must have a current display style that would benefit 16025 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 16026 16027 // Support: Safari 8+ 16028 // Table columns in Safari have non-zero offsetWidth & zero 16029 // getBoundingClientRect().width unless display is changed. 16030 // Support: IE <=11 only 16031 // Running getBoundingClientRect on a disconnected node 16032 // in IE throws an error. 16033 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 16034 swap( elem, cssShow, function() { 16035 return getWidthOrHeight( elem, dimension, extra ); 16036 } ) : 16037 getWidthOrHeight( elem, dimension, extra ); 16038 } 16039 }, 16040 16041 set: function( elem, value, extra ) { 16042 var matches, 16043 styles = getStyles( elem ), 16044 16045 // Only read styles.position if the test has a chance to fail 16046 // to avoid forcing a reflow. 16047 scrollboxSizeBuggy = !support.scrollboxSize() && 16048 styles.position === "absolute", 16049 16050 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 16051 boxSizingNeeded = scrollboxSizeBuggy || extra, 16052 isBorderBox = boxSizingNeeded && 16053 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 16054 subtract = extra ? 16055 boxModelAdjustment( 16056 elem, 16057 dimension, 16058 extra, 16059 isBorderBox, 16060 styles 16061 ) : 16062 0; 16063 16064 // Account for unreliable border-box dimensions by comparing offset* to computed and 16065 // faking a content-box to get border and padding (gh-3699) 16066 if ( isBorderBox && scrollboxSizeBuggy ) { 16067 subtract -= Math.ceil( 16068 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 16069 parseFloat( styles[ dimension ] ) - 16070 boxModelAdjustment( elem, dimension, "border", false, styles ) - 16071 0.5 16072 ); 16073 } 16074 16075 // Convert to pixels if value adjustment is needed 16076 if ( subtract && ( matches = rcssNum.exec( value ) ) && 16077 ( matches[ 3 ] || "px" ) !== "px" ) { 16078 16079 elem.style[ dimension ] = value; 16080 value = jQuery.css( elem, dimension ); 16081 } 16082 16083 return setPositiveNumber( elem, value, subtract ); 16084 } 16085 }; 16086} ); 16087 16088jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 16089 function( elem, computed ) { 16090 if ( computed ) { 16091 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 16092 elem.getBoundingClientRect().left - 16093 swap( elem, { marginLeft: 0 }, function() { 16094 return elem.getBoundingClientRect().left; 16095 } ) 16096 ) + "px"; 16097 } 16098 } 16099); 16100 16101// These hooks are used by animate to expand properties 16102jQuery.each( { 16103 margin: "", 16104 padding: "", 16105 border: "Width" 16106}, function( prefix, suffix ) { 16107 jQuery.cssHooks[ prefix + suffix ] = { 16108 expand: function( value ) { 16109 var i = 0, 16110 expanded = {}, 16111 16112 // Assumes a single number if not a string 16113 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 16114 16115 for ( ; i < 4; i++ ) { 16116 expanded[ prefix + cssExpand[ i ] + suffix ] = 16117 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 16118 } 16119 16120 return expanded; 16121 } 16122 }; 16123 16124 if ( prefix !== "margin" ) { 16125 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 16126 } 16127} ); 16128 16129jQuery.fn.extend( { 16130 css: function( name, value ) { 16131 return access( this, function( elem, name, value ) { 16132 var styles, len, 16133 map = {}, 16134 i = 0; 16135 16136 if ( Array.isArray( name ) ) { 16137 styles = getStyles( elem ); 16138 len = name.length; 16139 16140 for ( ; i < len; i++ ) { 16141 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 16142 } 16143 16144 return map; 16145 } 16146 16147 return value !== undefined ? 16148 jQuery.style( elem, name, value ) : 16149 jQuery.css( elem, name ); 16150 }, name, value, arguments.length > 1 ); 16151 } 16152} ); 16153 16154 16155function Tween( elem, options, prop, end, easing ) { 16156 return new Tween.prototype.init( elem, options, prop, end, easing ); 16157} 16158jQuery.Tween = Tween; 16159 16160Tween.prototype = { 16161 constructor: Tween, 16162 init: function( elem, options, prop, end, easing, unit ) { 16163 this.elem = elem; 16164 this.prop = prop; 16165 this.easing = easing || jQuery.easing._default; 16166 this.options = options; 16167 this.start = this.now = this.cur(); 16168 this.end = end; 16169 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 16170 }, 16171 cur: function() { 16172 var hooks = Tween.propHooks[ this.prop ]; 16173 16174 return hooks && hooks.get ? 16175 hooks.get( this ) : 16176 Tween.propHooks._default.get( this ); 16177 }, 16178 run: function( percent ) { 16179 var eased, 16180 hooks = Tween.propHooks[ this.prop ]; 16181 16182 if ( this.options.duration ) { 16183 this.pos = eased = jQuery.easing[ this.easing ]( 16184 percent, this.options.duration * percent, 0, 1, this.options.duration 16185 ); 16186 } else { 16187 this.pos = eased = percent; 16188 } 16189 this.now = ( this.end - this.start ) * eased + this.start; 16190 16191 if ( this.options.step ) { 16192 this.options.step.call( this.elem, this.now, this ); 16193 } 16194 16195 if ( hooks && hooks.set ) { 16196 hooks.set( this ); 16197 } else { 16198 Tween.propHooks._default.set( this ); 16199 } 16200 return this; 16201 } 16202}; 16203 16204Tween.prototype.init.prototype = Tween.prototype; 16205 16206Tween.propHooks = { 16207 _default: { 16208 get: function( tween ) { 16209 var result; 16210 16211 // Use a property on the element directly when it is not a DOM element, 16212 // or when there is no matching style property that exists. 16213 if ( tween.elem.nodeType !== 1 || 16214 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 16215 return tween.elem[ tween.prop ]; 16216 } 16217 16218 // Passing an empty string as a 3rd parameter to .css will automatically 16219 // attempt a parseFloat and fallback to a string if the parse fails. 16220 // Simple values such as "10px" are parsed to Float; 16221 // complex values such as "rotate(1rad)" are returned as-is. 16222 result = jQuery.css( tween.elem, tween.prop, "" ); 16223 16224 // Empty strings, null, undefined and "auto" are converted to 0. 16225 return !result || result === "auto" ? 0 : result; 16226 }, 16227 set: function( tween ) { 16228 16229 // Use step hook for back compat. 16230 // Use cssHook if its there. 16231 // Use .style if available and use plain properties where available. 16232 if ( jQuery.fx.step[ tween.prop ] ) { 16233 jQuery.fx.step[ tween.prop ]( tween ); 16234 } else if ( tween.elem.nodeType === 1 && ( 16235 jQuery.cssHooks[ tween.prop ] || 16236 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 16237 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 16238 } else { 16239 tween.elem[ tween.prop ] = tween.now; 16240 } 16241 } 16242 } 16243}; 16244 16245// Support: IE <=9 only 16246// Panic based approach to setting things on disconnected nodes 16247Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 16248 set: function( tween ) { 16249 if ( tween.elem.nodeType && tween.elem.parentNode ) { 16250 tween.elem[ tween.prop ] = tween.now; 16251 } 16252 } 16253}; 16254 16255jQuery.easing = { 16256 linear: function( p ) { 16257 return p; 16258 }, 16259 swing: function( p ) { 16260 return 0.5 - Math.cos( p * Math.PI ) / 2; 16261 }, 16262 _default: "swing" 16263}; 16264 16265jQuery.fx = Tween.prototype.init; 16266 16267// Back compat <1.8 extension point 16268jQuery.fx.step = {}; 16269 16270 16271 16272 16273var 16274 fxNow, inProgress, 16275 rfxtypes = /^(?:toggle|show|hide)$/, 16276 rrun = /queueHooks$/; 16277 16278function schedule() { 16279 if ( inProgress ) { 16280 if ( document.hidden === false && window.requestAnimationFrame ) { 16281 window.requestAnimationFrame( schedule ); 16282 } else { 16283 window.setTimeout( schedule, jQuery.fx.interval ); 16284 } 16285 16286 jQuery.fx.tick(); 16287 } 16288} 16289 16290// Animations created synchronously will run synchronously 16291function createFxNow() { 16292 window.setTimeout( function() { 16293 fxNow = undefined; 16294 } ); 16295 return ( fxNow = Date.now() ); 16296} 16297 16298// Generate parameters to create a standard animation 16299function genFx( type, includeWidth ) { 16300 var which, 16301 i = 0, 16302 attrs = { height: type }; 16303 16304 // If we include width, step value is 1 to do all cssExpand values, 16305 // otherwise step value is 2 to skip over Left and Right 16306 includeWidth = includeWidth ? 1 : 0; 16307 for ( ; i < 4; i += 2 - includeWidth ) { 16308 which = cssExpand[ i ]; 16309 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 16310 } 16311 16312 if ( includeWidth ) { 16313 attrs.opacity = attrs.width = type; 16314 } 16315 16316 return attrs; 16317} 16318 16319function createTween( value, prop, animation ) { 16320 var tween, 16321 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 16322 index = 0, 16323 length = collection.length; 16324 for ( ; index < length; index++ ) { 16325 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 16326 16327 // We're done with this property 16328 return tween; 16329 } 16330 } 16331} 16332 16333function defaultPrefilter( elem, props, opts ) { 16334 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 16335 isBox = "width" in props || "height" in props, 16336 anim = this, 16337 orig = {}, 16338 style = elem.style, 16339 hidden = elem.nodeType && isHiddenWithinTree( elem ), 16340 dataShow = dataPriv.get( elem, "fxshow" ); 16341 16342 // Queue-skipping animations hijack the fx hooks 16343 if ( !opts.queue ) { 16344 hooks = jQuery._queueHooks( elem, "fx" ); 16345 if ( hooks.unqueued == null ) { 16346 hooks.unqueued = 0; 16347 oldfire = hooks.empty.fire; 16348 hooks.empty.fire = function() { 16349 if ( !hooks.unqueued ) { 16350 oldfire(); 16351 } 16352 }; 16353 } 16354 hooks.unqueued++; 16355 16356 anim.always( function() { 16357 16358 // Ensure the complete handler is called before this completes 16359 anim.always( function() { 16360 hooks.unqueued--; 16361 if ( !jQuery.queue( elem, "fx" ).length ) { 16362 hooks.empty.fire(); 16363 } 16364 } ); 16365 } ); 16366 } 16367 16368 // Detect show/hide animations 16369 for ( prop in props ) { 16370 value = props[ prop ]; 16371 if ( rfxtypes.test( value ) ) { 16372 delete props[ prop ]; 16373 toggle = toggle || value === "toggle"; 16374 if ( value === ( hidden ? "hide" : "show" ) ) { 16375 16376 // Pretend to be hidden if this is a "show" and 16377 // there is still data from a stopped show/hide 16378 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 16379 hidden = true; 16380 16381 // Ignore all other no-op show/hide data 16382 } else { 16383 continue; 16384 } 16385 } 16386 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 16387 } 16388 } 16389 16390 // Bail out if this is a no-op like .hide().hide() 16391 propTween = !jQuery.isEmptyObject( props ); 16392 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 16393 return; 16394 } 16395 16396 // Restrict "overflow" and "display" styles during box animations 16397 if ( isBox && elem.nodeType === 1 ) { 16398 16399 // Support: IE <=9 - 11, Edge 12 - 15 16400 // Record all 3 overflow attributes because IE does not infer the shorthand 16401 // from identically-valued overflowX and overflowY and Edge just mirrors 16402 // the overflowX value there. 16403 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 16404 16405 // Identify a display type, preferring old show/hide data over the CSS cascade 16406 restoreDisplay = dataShow && dataShow.display; 16407 if ( restoreDisplay == null ) { 16408 restoreDisplay = dataPriv.get( elem, "display" ); 16409 } 16410 display = jQuery.css( elem, "display" ); 16411 if ( display === "none" ) { 16412 if ( restoreDisplay ) { 16413 display = restoreDisplay; 16414 } else { 16415 16416 // Get nonempty value(s) by temporarily forcing visibility 16417 showHide( [ elem ], true ); 16418 restoreDisplay = elem.style.display || restoreDisplay; 16419 display = jQuery.css( elem, "display" ); 16420 showHide( [ elem ] ); 16421 } 16422 } 16423 16424 // Animate inline elements as inline-block 16425 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 16426 if ( jQuery.css( elem, "float" ) === "none" ) { 16427 16428 // Restore the original display value at the end of pure show/hide animations 16429 if ( !propTween ) { 16430 anim.done( function() { 16431 style.display = restoreDisplay; 16432 } ); 16433 if ( restoreDisplay == null ) { 16434 display = style.display; 16435 restoreDisplay = display === "none" ? "" : display; 16436 } 16437 } 16438 style.display = "inline-block"; 16439 } 16440 } 16441 } 16442 16443 if ( opts.overflow ) { 16444 style.overflow = "hidden"; 16445 anim.always( function() { 16446 style.overflow = opts.overflow[ 0 ]; 16447 style.overflowX = opts.overflow[ 1 ]; 16448 style.overflowY = opts.overflow[ 2 ]; 16449 } ); 16450 } 16451 16452 // Implement show/hide animations 16453 propTween = false; 16454 for ( prop in orig ) { 16455 16456 // General show/hide setup for this element animation 16457 if ( !propTween ) { 16458 if ( dataShow ) { 16459 if ( "hidden" in dataShow ) { 16460 hidden = dataShow.hidden; 16461 } 16462 } else { 16463 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 16464 } 16465 16466 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 16467 if ( toggle ) { 16468 dataShow.hidden = !hidden; 16469 } 16470 16471 // Show elements before animating them 16472 if ( hidden ) { 16473 showHide( [ elem ], true ); 16474 } 16475 16476 /* eslint-disable no-loop-func */ 16477 16478 anim.done( function() { 16479 16480 /* eslint-enable no-loop-func */ 16481 16482 // The final step of a "hide" animation is actually hiding the element 16483 if ( !hidden ) { 16484 showHide( [ elem ] ); 16485 } 16486 dataPriv.remove( elem, "fxshow" ); 16487 for ( prop in orig ) { 16488 jQuery.style( elem, prop, orig[ prop ] ); 16489 } 16490 } ); 16491 } 16492 16493 // Per-property setup 16494 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 16495 if ( !( prop in dataShow ) ) { 16496 dataShow[ prop ] = propTween.start; 16497 if ( hidden ) { 16498 propTween.end = propTween.start; 16499 propTween.start = 0; 16500 } 16501 } 16502 } 16503} 16504 16505function propFilter( props, specialEasing ) { 16506 var index, name, easing, value, hooks; 16507 16508 // camelCase, specialEasing and expand cssHook pass 16509 for ( index in props ) { 16510 name = camelCase( index ); 16511 easing = specialEasing[ name ]; 16512 value = props[ index ]; 16513 if ( Array.isArray( value ) ) { 16514 easing = value[ 1 ]; 16515 value = props[ index ] = value[ 0 ]; 16516 } 16517 16518 if ( index !== name ) { 16519 props[ name ] = value; 16520 delete props[ index ]; 16521 } 16522 16523 hooks = jQuery.cssHooks[ name ]; 16524 if ( hooks && "expand" in hooks ) { 16525 value = hooks.expand( value ); 16526 delete props[ name ]; 16527 16528 // Not quite $.extend, this won't overwrite existing keys. 16529 // Reusing 'index' because we have the correct "name" 16530 for ( index in value ) { 16531 if ( !( index in props ) ) { 16532 props[ index ] = value[ index ]; 16533 specialEasing[ index ] = easing; 16534 } 16535 } 16536 } else { 16537 specialEasing[ name ] = easing; 16538 } 16539 } 16540} 16541 16542function Animation( elem, properties, options ) { 16543 var result, 16544 stopped, 16545 index = 0, 16546 length = Animation.prefilters.length, 16547 deferred = jQuery.Deferred().always( function() { 16548 16549 // Don't match elem in the :animated selector 16550 delete tick.elem; 16551 } ), 16552 tick = function() { 16553 if ( stopped ) { 16554 return false; 16555 } 16556 var currentTime = fxNow || createFxNow(), 16557 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 16558 16559 // Support: Android 2.3 only 16560 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 16561 temp = remaining / animation.duration || 0, 16562 percent = 1 - temp, 16563 index = 0, 16564 length = animation.tweens.length; 16565 16566 for ( ; index < length; index++ ) { 16567 animation.tweens[ index ].run( percent ); 16568 } 16569 16570 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 16571 16572 // If there's more to do, yield 16573 if ( percent < 1 && length ) { 16574 return remaining; 16575 } 16576 16577 // If this was an empty animation, synthesize a final progress notification 16578 if ( !length ) { 16579 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 16580 } 16581 16582 // Resolve the animation and report its conclusion 16583 deferred.resolveWith( elem, [ animation ] ); 16584 return false; 16585 }, 16586 animation = deferred.promise( { 16587 elem: elem, 16588 props: jQuery.extend( {}, properties ), 16589 opts: jQuery.extend( true, { 16590 specialEasing: {}, 16591 easing: jQuery.easing._default 16592 }, options ), 16593 originalProperties: properties, 16594 originalOptions: options, 16595 startTime: fxNow || createFxNow(), 16596 duration: options.duration, 16597 tweens: [], 16598 createTween: function( prop, end ) { 16599 var tween = jQuery.Tween( elem, animation.opts, prop, end, 16600 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 16601 animation.tweens.push( tween ); 16602 return tween; 16603 }, 16604 stop: function( gotoEnd ) { 16605 var index = 0, 16606 16607 // If we are going to the end, we want to run all the tweens 16608 // otherwise we skip this part 16609 length = gotoEnd ? animation.tweens.length : 0; 16610 if ( stopped ) { 16611 return this; 16612 } 16613 stopped = true; 16614 for ( ; index < length; index++ ) { 16615 animation.tweens[ index ].run( 1 ); 16616 } 16617 16618 // Resolve when we played the last frame; otherwise, reject 16619 if ( gotoEnd ) { 16620 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 16621 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 16622 } else { 16623 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 16624 } 16625 return this; 16626 } 16627 } ), 16628 props = animation.props; 16629 16630 propFilter( props, animation.opts.specialEasing ); 16631 16632 for ( ; index < length; index++ ) { 16633 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 16634 if ( result ) { 16635 if ( isFunction( result.stop ) ) { 16636 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 16637 result.stop.bind( result ); 16638 } 16639 return result; 16640 } 16641 } 16642 16643 jQuery.map( props, createTween, animation ); 16644 16645 if ( isFunction( animation.opts.start ) ) { 16646 animation.opts.start.call( elem, animation ); 16647 } 16648 16649 // Attach callbacks from options 16650 animation 16651 .progress( animation.opts.progress ) 16652 .done( animation.opts.done, animation.opts.complete ) 16653 .fail( animation.opts.fail ) 16654 .always( animation.opts.always ); 16655 16656 jQuery.fx.timer( 16657 jQuery.extend( tick, { 16658 elem: elem, 16659 anim: animation, 16660 queue: animation.opts.queue 16661 } ) 16662 ); 16663 16664 return animation; 16665} 16666 16667jQuery.Animation = jQuery.extend( Animation, { 16668 16669 tweeners: { 16670 "*": [ function( prop, value ) { 16671 var tween = this.createTween( prop, value ); 16672 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 16673 return tween; 16674 } ] 16675 }, 16676 16677 tweener: function( props, callback ) { 16678 if ( isFunction( props ) ) { 16679 callback = props; 16680 props = [ "*" ]; 16681 } else { 16682 props = props.match( rnothtmlwhite ); 16683 } 16684 16685 var prop, 16686 index = 0, 16687 length = props.length; 16688 16689 for ( ; index < length; index++ ) { 16690 prop = props[ index ]; 16691 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 16692 Animation.tweeners[ prop ].unshift( callback ); 16693 } 16694 }, 16695 16696 prefilters: [ defaultPrefilter ], 16697 16698 prefilter: function( callback, prepend ) { 16699 if ( prepend ) { 16700 Animation.prefilters.unshift( callback ); 16701 } else { 16702 Animation.prefilters.push( callback ); 16703 } 16704 } 16705} ); 16706 16707jQuery.speed = function( speed, easing, fn ) { 16708 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 16709 complete: fn || !fn && easing || 16710 isFunction( speed ) && speed, 16711 duration: speed, 16712 easing: fn && easing || easing && !isFunction( easing ) && easing 16713 }; 16714 16715 // Go to the end state if fx are off 16716 if ( jQuery.fx.off ) { 16717 opt.duration = 0; 16718 16719 } else { 16720 if ( typeof opt.duration !== "number" ) { 16721 if ( opt.duration in jQuery.fx.speeds ) { 16722 opt.duration = jQuery.fx.speeds[ opt.duration ]; 16723 16724 } else { 16725 opt.duration = jQuery.fx.speeds._default; 16726 } 16727 } 16728 } 16729 16730 // Normalize opt.queue - true/undefined/null -> "fx" 16731 if ( opt.queue == null || opt.queue === true ) { 16732 opt.queue = "fx"; 16733 } 16734 16735 // Queueing 16736 opt.old = opt.complete; 16737 16738 opt.complete = function() { 16739 if ( isFunction( opt.old ) ) { 16740 opt.old.call( this ); 16741 } 16742 16743 if ( opt.queue ) { 16744 jQuery.dequeue( this, opt.queue ); 16745 } 16746 }; 16747 16748 return opt; 16749}; 16750 16751jQuery.fn.extend( { 16752 fadeTo: function( speed, to, easing, callback ) { 16753 16754 // Show any hidden elements after setting opacity to 0 16755 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 16756 16757 // Animate to the value specified 16758 .end().animate( { opacity: to }, speed, easing, callback ); 16759 }, 16760 animate: function( prop, speed, easing, callback ) { 16761 var empty = jQuery.isEmptyObject( prop ), 16762 optall = jQuery.speed( speed, easing, callback ), 16763 doAnimation = function() { 16764 16765 // Operate on a copy of prop so per-property easing won't be lost 16766 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 16767 16768 // Empty animations, or finishing resolves immediately 16769 if ( empty || dataPriv.get( this, "finish" ) ) { 16770 anim.stop( true ); 16771 } 16772 }; 16773 16774 doAnimation.finish = doAnimation; 16775 16776 return empty || optall.queue === false ? 16777 this.each( doAnimation ) : 16778 this.queue( optall.queue, doAnimation ); 16779 }, 16780 stop: function( type, clearQueue, gotoEnd ) { 16781 var stopQueue = function( hooks ) { 16782 var stop = hooks.stop; 16783 delete hooks.stop; 16784 stop( gotoEnd ); 16785 }; 16786 16787 if ( typeof type !== "string" ) { 16788 gotoEnd = clearQueue; 16789 clearQueue = type; 16790 type = undefined; 16791 } 16792 if ( clearQueue ) { 16793 this.queue( type || "fx", [] ); 16794 } 16795 16796 return this.each( function() { 16797 var dequeue = true, 16798 index = type != null && type + "queueHooks", 16799 timers = jQuery.timers, 16800 data = dataPriv.get( this ); 16801 16802 if ( index ) { 16803 if ( data[ index ] && data[ index ].stop ) { 16804 stopQueue( data[ index ] ); 16805 } 16806 } else { 16807 for ( index in data ) { 16808 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 16809 stopQueue( data[ index ] ); 16810 } 16811 } 16812 } 16813 16814 for ( index = timers.length; index--; ) { 16815 if ( timers[ index ].elem === this && 16816 ( type == null || timers[ index ].queue === type ) ) { 16817 16818 timers[ index ].anim.stop( gotoEnd ); 16819 dequeue = false; 16820 timers.splice( index, 1 ); 16821 } 16822 } 16823 16824 // Start the next in the queue if the last step wasn't forced. 16825 // Timers currently will call their complete callbacks, which 16826 // will dequeue but only if they were gotoEnd. 16827 if ( dequeue || !gotoEnd ) { 16828 jQuery.dequeue( this, type ); 16829 } 16830 } ); 16831 }, 16832 finish: function( type ) { 16833 if ( type !== false ) { 16834 type = type || "fx"; 16835 } 16836 return this.each( function() { 16837 var index, 16838 data = dataPriv.get( this ), 16839 queue = data[ type + "queue" ], 16840 hooks = data[ type + "queueHooks" ], 16841 timers = jQuery.timers, 16842 length = queue ? queue.length : 0; 16843 16844 // Enable finishing flag on private data 16845 data.finish = true; 16846 16847 // Empty the queue first 16848 jQuery.queue( this, type, [] ); 16849 16850 if ( hooks && hooks.stop ) { 16851 hooks.stop.call( this, true ); 16852 } 16853 16854 // Look for any active animations, and finish them 16855 for ( index = timers.length; index--; ) { 16856 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 16857 timers[ index ].anim.stop( true ); 16858 timers.splice( index, 1 ); 16859 } 16860 } 16861 16862 // Look for any animations in the old queue and finish them 16863 for ( index = 0; index < length; index++ ) { 16864 if ( queue[ index ] && queue[ index ].finish ) { 16865 queue[ index ].finish.call( this ); 16866 } 16867 } 16868 16869 // Turn off finishing flag 16870 delete data.finish; 16871 } ); 16872 } 16873} ); 16874 16875jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 16876 var cssFn = jQuery.fn[ name ]; 16877 jQuery.fn[ name ] = function( speed, easing, callback ) { 16878 return speed == null || typeof speed === "boolean" ? 16879 cssFn.apply( this, arguments ) : 16880 this.animate( genFx( name, true ), speed, easing, callback ); 16881 }; 16882} ); 16883 16884// Generate shortcuts for custom animations 16885jQuery.each( { 16886 slideDown: genFx( "show" ), 16887 slideUp: genFx( "hide" ), 16888 slideToggle: genFx( "toggle" ), 16889 fadeIn: { opacity: "show" }, 16890 fadeOut: { opacity: "hide" }, 16891 fadeToggle: { opacity: "toggle" } 16892}, function( name, props ) { 16893 jQuery.fn[ name ] = function( speed, easing, callback ) { 16894 return this.animate( props, speed, easing, callback ); 16895 }; 16896} ); 16897 16898jQuery.timers = []; 16899jQuery.fx.tick = function() { 16900 var timer, 16901 i = 0, 16902 timers = jQuery.timers; 16903 16904 fxNow = Date.now(); 16905 16906 for ( ; i < timers.length; i++ ) { 16907 timer = timers[ i ]; 16908 16909 // Run the timer and safely remove it when done (allowing for external removal) 16910 if ( !timer() && timers[ i ] === timer ) { 16911 timers.splice( i--, 1 ); 16912 } 16913 } 16914 16915 if ( !timers.length ) { 16916 jQuery.fx.stop(); 16917 } 16918 fxNow = undefined; 16919}; 16920 16921jQuery.fx.timer = function( timer ) { 16922 jQuery.timers.push( timer ); 16923 jQuery.fx.start(); 16924}; 16925 16926jQuery.fx.interval = 13; 16927jQuery.fx.start = function() { 16928 if ( inProgress ) { 16929 return; 16930 } 16931 16932 inProgress = true; 16933 schedule(); 16934}; 16935 16936jQuery.fx.stop = function() { 16937 inProgress = null; 16938}; 16939 16940jQuery.fx.speeds = { 16941 slow: 600, 16942 fast: 200, 16943 16944 // Default speed 16945 _default: 400 16946}; 16947 16948 16949// Based off of the plugin by Clint Helfers, with permission. 16950jQuery.fn.delay = function( time, type ) { 16951 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 16952 type = type || "fx"; 16953 16954 return this.queue( type, function( next, hooks ) { 16955 var timeout = window.setTimeout( next, time ); 16956 hooks.stop = function() { 16957 window.clearTimeout( timeout ); 16958 }; 16959 } ); 16960}; 16961 16962 16963( function() { 16964 var input = document.createElement( "input" ), 16965 select = document.createElement( "select" ), 16966 opt = select.appendChild( document.createElement( "option" ) ); 16967 16968 input.type = "checkbox"; 16969 16970 // Support: Android <=4.3 only 16971 // Default value for a checkbox should be "on" 16972 support.checkOn = input.value !== ""; 16973 16974 // Support: IE <=11 only 16975 // Must access selectedIndex to make default options select 16976 support.optSelected = opt.selected; 16977 16978 // Support: IE <=11 only 16979 // An input loses its value after becoming a radio 16980 input = document.createElement( "input" ); 16981 input.value = "t"; 16982 input.type = "radio"; 16983 support.radioValue = input.value === "t"; 16984} )(); 16985 16986 16987var boolHook, 16988 attrHandle = jQuery.expr.attrHandle; 16989 16990jQuery.fn.extend( { 16991 attr: function( name, value ) { 16992 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 16993 }, 16994 16995 removeAttr: function( name ) { 16996 return this.each( function() { 16997 jQuery.removeAttr( this, name ); 16998 } ); 16999 } 17000} ); 17001 17002jQuery.extend( { 17003 attr: function( elem, name, value ) { 17004 var ret, hooks, 17005 nType = elem.nodeType; 17006 17007 // Don't get/set attributes on text, comment and attribute nodes 17008 if ( nType === 3 || nType === 8 || nType === 2 ) { 17009 return; 17010 } 17011 17012 // Fallback to prop when attributes are not supported 17013 if ( typeof elem.getAttribute === "undefined" ) { 17014 return jQuery.prop( elem, name, value ); 17015 } 17016 17017 // Attribute hooks are determined by the lowercase version 17018 // Grab necessary hook if one is defined 17019 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 17020 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 17021 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 17022 } 17023 17024 if ( value !== undefined ) { 17025 if ( value === null ) { 17026 jQuery.removeAttr( elem, name ); 17027 return; 17028 } 17029 17030 if ( hooks && "set" in hooks && 17031 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 17032 return ret; 17033 } 17034 17035 elem.setAttribute( name, value + "" ); 17036 return value; 17037 } 17038 17039 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 17040 return ret; 17041 } 17042 17043 ret = jQuery.find.attr( elem, name ); 17044 17045 // Non-existent attributes return null, we normalize to undefined 17046 return ret == null ? undefined : ret; 17047 }, 17048 17049 attrHooks: { 17050 type: { 17051 set: function( elem, value ) { 17052 if ( !support.radioValue && value === "radio" && 17053 nodeName( elem, "input" ) ) { 17054 var val = elem.value; 17055 elem.setAttribute( "type", value ); 17056 if ( val ) { 17057 elem.value = val; 17058 } 17059 return value; 17060 } 17061 } 17062 } 17063 }, 17064 17065 removeAttr: function( elem, value ) { 17066 var name, 17067 i = 0, 17068 17069 // Attribute names can contain non-HTML whitespace characters 17070 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 17071 attrNames = value && value.match( rnothtmlwhite ); 17072 17073 if ( attrNames && elem.nodeType === 1 ) { 17074 while ( ( name = attrNames[ i++ ] ) ) { 17075 elem.removeAttribute( name ); 17076 } 17077 } 17078 } 17079} ); 17080 17081// Hooks for boolean attributes 17082boolHook = { 17083 set: function( elem, value, name ) { 17084 if ( value === false ) { 17085 17086 // Remove boolean attributes when set to false 17087 jQuery.removeAttr( elem, name ); 17088 } else { 17089 elem.setAttribute( name, name ); 17090 } 17091 return name; 17092 } 17093}; 17094 17095jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 17096 var getter = attrHandle[ name ] || jQuery.find.attr; 17097 17098 attrHandle[ name ] = function( elem, name, isXML ) { 17099 var ret, handle, 17100 lowercaseName = name.toLowerCase(); 17101 17102 if ( !isXML ) { 17103 17104 // Avoid an infinite loop by temporarily removing this function from the getter 17105 handle = attrHandle[ lowercaseName ]; 17106 attrHandle[ lowercaseName ] = ret; 17107 ret = getter( elem, name, isXML ) != null ? 17108 lowercaseName : 17109 null; 17110 attrHandle[ lowercaseName ] = handle; 17111 } 17112 return ret; 17113 }; 17114} ); 17115 17116 17117 17118 17119var rfocusable = /^(?:input|select|textarea|button)$/i, 17120 rclickable = /^(?:a|area)$/i; 17121 17122jQuery.fn.extend( { 17123 prop: function( name, value ) { 17124 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 17125 }, 17126 17127 removeProp: function( name ) { 17128 return this.each( function() { 17129 delete this[ jQuery.propFix[ name ] || name ]; 17130 } ); 17131 } 17132} ); 17133 17134jQuery.extend( { 17135 prop: function( elem, name, value ) { 17136 var ret, hooks, 17137 nType = elem.nodeType; 17138 17139 // Don't get/set properties on text, comment and attribute nodes 17140 if ( nType === 3 || nType === 8 || nType === 2 ) { 17141 return; 17142 } 17143 17144 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 17145 17146 // Fix name and attach hooks 17147 name = jQuery.propFix[ name ] || name; 17148 hooks = jQuery.propHooks[ name ]; 17149 } 17150 17151 if ( value !== undefined ) { 17152 if ( hooks && "set" in hooks && 17153 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 17154 return ret; 17155 } 17156 17157 return ( elem[ name ] = value ); 17158 } 17159 17160 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 17161 return ret; 17162 } 17163 17164 return elem[ name ]; 17165 }, 17166 17167 propHooks: { 17168 tabIndex: { 17169 get: function( elem ) { 17170 17171 // Support: IE <=9 - 11 only 17172 // elem.tabIndex doesn't always return the 17173 // correct value when it hasn't been explicitly set 17174 // Use proper attribute retrieval (trac-12072) 17175 var tabindex = jQuery.find.attr( elem, "tabindex" ); 17176 17177 if ( tabindex ) { 17178 return parseInt( tabindex, 10 ); 17179 } 17180 17181 if ( 17182 rfocusable.test( elem.nodeName ) || 17183 rclickable.test( elem.nodeName ) && 17184 elem.href 17185 ) { 17186 return 0; 17187 } 17188 17189 return -1; 17190 } 17191 } 17192 }, 17193 17194 propFix: { 17195 "for": "htmlFor", 17196 "class": "className" 17197 } 17198} ); 17199 17200// Support: IE <=11 only 17201// Accessing the selectedIndex property 17202// forces the browser to respect setting selected 17203// on the option 17204// The getter ensures a default option is selected 17205// when in an optgroup 17206// eslint rule "no-unused-expressions" is disabled for this code 17207// since it considers such accessions noop 17208if ( !support.optSelected ) { 17209 jQuery.propHooks.selected = { 17210 get: function( elem ) { 17211 17212 /* eslint no-unused-expressions: "off" */ 17213 17214 var parent = elem.parentNode; 17215 if ( parent && parent.parentNode ) { 17216 parent.parentNode.selectedIndex; 17217 } 17218 return null; 17219 }, 17220 set: function( elem ) { 17221 17222 /* eslint no-unused-expressions: "off" */ 17223 17224 var parent = elem.parentNode; 17225 if ( parent ) { 17226 parent.selectedIndex; 17227 17228 if ( parent.parentNode ) { 17229 parent.parentNode.selectedIndex; 17230 } 17231 } 17232 } 17233 }; 17234} 17235 17236jQuery.each( [ 17237 "tabIndex", 17238 "readOnly", 17239 "maxLength", 17240 "cellSpacing", 17241 "cellPadding", 17242 "rowSpan", 17243 "colSpan", 17244 "useMap", 17245 "frameBorder", 17246 "contentEditable" 17247], function() { 17248 jQuery.propFix[ this.toLowerCase() ] = this; 17249} ); 17250 17251 17252 17253 17254 // Strip and collapse whitespace according to HTML spec 17255 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 17256 function stripAndCollapse( value ) { 17257 var tokens = value.match( rnothtmlwhite ) || []; 17258 return tokens.join( " " ); 17259 } 17260 17261 17262function getClass( elem ) { 17263 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 17264} 17265 17266function classesToArray( value ) { 17267 if ( Array.isArray( value ) ) { 17268 return value; 17269 } 17270 if ( typeof value === "string" ) { 17271 return value.match( rnothtmlwhite ) || []; 17272 } 17273 return []; 17274} 17275 17276jQuery.fn.extend( { 17277 addClass: function( value ) { 17278 var classNames, cur, curValue, className, i, finalValue; 17279 17280 if ( isFunction( value ) ) { 17281 return this.each( function( j ) { 17282 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 17283 } ); 17284 } 17285 17286 classNames = classesToArray( value ); 17287 17288 if ( classNames.length ) { 17289 return this.each( function() { 17290 curValue = getClass( this ); 17291 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 17292 17293 if ( cur ) { 17294 for ( i = 0; i < classNames.length; i++ ) { 17295 className = classNames[ i ]; 17296 if ( cur.indexOf( " " + className + " " ) < 0 ) { 17297 cur += className + " "; 17298 } 17299 } 17300 17301 // Only assign if different to avoid unneeded rendering. 17302 finalValue = stripAndCollapse( cur ); 17303 if ( curValue !== finalValue ) { 17304 this.setAttribute( "class", finalValue ); 17305 } 17306 } 17307 } ); 17308 } 17309 17310 return this; 17311 }, 17312 17313 removeClass: function( value ) { 17314 var classNames, cur, curValue, className, i, finalValue; 17315 17316 if ( isFunction( value ) ) { 17317 return this.each( function( j ) { 17318 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 17319 } ); 17320 } 17321 17322 if ( !arguments.length ) { 17323 return this.attr( "class", "" ); 17324 } 17325 17326 classNames = classesToArray( value ); 17327 17328 if ( classNames.length ) { 17329 return this.each( function() { 17330 curValue = getClass( this ); 17331 17332 // This expression is here for better compressibility (see addClass) 17333 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 17334 17335 if ( cur ) { 17336 for ( i = 0; i < classNames.length; i++ ) { 17337 className = classNames[ i ]; 17338 17339 // Remove *all* instances 17340 while ( cur.indexOf( " " + className + " " ) > -1 ) { 17341 cur = cur.replace( " " + className + " ", " " ); 17342 } 17343 } 17344 17345 // Only assign if different to avoid unneeded rendering. 17346 finalValue = stripAndCollapse( cur ); 17347 if ( curValue !== finalValue ) { 17348 this.setAttribute( "class", finalValue ); 17349 } 17350 } 17351 } ); 17352 } 17353 17354 return this; 17355 }, 17356 17357 toggleClass: function( value, stateVal ) { 17358 var classNames, className, i, self, 17359 type = typeof value, 17360 isValidValue = type === "string" || Array.isArray( value ); 17361 17362 if ( isFunction( value ) ) { 17363 return this.each( function( i ) { 17364 jQuery( this ).toggleClass( 17365 value.call( this, i, getClass( this ), stateVal ), 17366 stateVal 17367 ); 17368 } ); 17369 } 17370 17371 if ( typeof stateVal === "boolean" && isValidValue ) { 17372 return stateVal ? this.addClass( value ) : this.removeClass( value ); 17373 } 17374 17375 classNames = classesToArray( value ); 17376 17377 return this.each( function() { 17378 if ( isValidValue ) { 17379 17380 // Toggle individual class names 17381 self = jQuery( this ); 17382 17383 for ( i = 0; i < classNames.length; i++ ) { 17384 className = classNames[ i ]; 17385 17386 // Check each className given, space separated list 17387 if ( self.hasClass( className ) ) { 17388 self.removeClass( className ); 17389 } else { 17390 self.addClass( className ); 17391 } 17392 } 17393 17394 // Toggle whole class name 17395 } else if ( value === undefined || type === "boolean" ) { 17396 className = getClass( this ); 17397 if ( className ) { 17398 17399 // Store className if set 17400 dataPriv.set( this, "__className__", className ); 17401 } 17402 17403 // If the element has a class name or if we're passed `false`, 17404 // then remove the whole classname (if there was one, the above saved it). 17405 // Otherwise bring back whatever was previously saved (if anything), 17406 // falling back to the empty string if nothing was stored. 17407 if ( this.setAttribute ) { 17408 this.setAttribute( "class", 17409 className || value === false ? 17410 "" : 17411 dataPriv.get( this, "__className__" ) || "" 17412 ); 17413 } 17414 } 17415 } ); 17416 }, 17417 17418 hasClass: function( selector ) { 17419 var className, elem, 17420 i = 0; 17421 17422 className = " " + selector + " "; 17423 while ( ( elem = this[ i++ ] ) ) { 17424 if ( elem.nodeType === 1 && 17425 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 17426 return true; 17427 } 17428 } 17429 17430 return false; 17431 } 17432} ); 17433 17434 17435 17436 17437var rreturn = /\r/g; 17438 17439jQuery.fn.extend( { 17440 val: function( value ) { 17441 var hooks, ret, valueIsFunction, 17442 elem = this[ 0 ]; 17443 17444 if ( !arguments.length ) { 17445 if ( elem ) { 17446 hooks = jQuery.valHooks[ elem.type ] || 17447 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 17448 17449 if ( hooks && 17450 "get" in hooks && 17451 ( ret = hooks.get( elem, "value" ) ) !== undefined 17452 ) { 17453 return ret; 17454 } 17455 17456 ret = elem.value; 17457 17458 // Handle most common string cases 17459 if ( typeof ret === "string" ) { 17460 return ret.replace( rreturn, "" ); 17461 } 17462 17463 // Handle cases where value is null/undef or number 17464 return ret == null ? "" : ret; 17465 } 17466 17467 return; 17468 } 17469 17470 valueIsFunction = isFunction( value ); 17471 17472 return this.each( function( i ) { 17473 var val; 17474 17475 if ( this.nodeType !== 1 ) { 17476 return; 17477 } 17478 17479 if ( valueIsFunction ) { 17480 val = value.call( this, i, jQuery( this ).val() ); 17481 } else { 17482 val = value; 17483 } 17484 17485 // Treat null/undefined as ""; convert numbers to string 17486 if ( val == null ) { 17487 val = ""; 17488 17489 } else if ( typeof val === "number" ) { 17490 val += ""; 17491 17492 } else if ( Array.isArray( val ) ) { 17493 val = jQuery.map( val, function( value ) { 17494 return value == null ? "" : value + ""; 17495 } ); 17496 } 17497 17498 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 17499 17500 // If set returns undefined, fall back to normal setting 17501 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 17502 this.value = val; 17503 } 17504 } ); 17505 } 17506} ); 17507 17508jQuery.extend( { 17509 valHooks: { 17510 option: { 17511 get: function( elem ) { 17512 17513 var val = jQuery.find.attr( elem, "value" ); 17514 return val != null ? 17515 val : 17516 17517 // Support: IE <=10 - 11 only 17518 // option.text throws exceptions (trac-14686, trac-14858) 17519 // Strip and collapse whitespace 17520 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 17521 stripAndCollapse( jQuery.text( elem ) ); 17522 } 17523 }, 17524 select: { 17525 get: function( elem ) { 17526 var value, option, i, 17527 options = elem.options, 17528 index = elem.selectedIndex, 17529 one = elem.type === "select-one", 17530 values = one ? null : [], 17531 max = one ? index + 1 : options.length; 17532 17533 if ( index < 0 ) { 17534 i = max; 17535 17536 } else { 17537 i = one ? index : 0; 17538 } 17539 17540 // Loop through all the selected options 17541 for ( ; i < max; i++ ) { 17542 option = options[ i ]; 17543 17544 // Support: IE <=9 only 17545 // IE8-9 doesn't update selected after form reset (trac-2551) 17546 if ( ( option.selected || i === index ) && 17547 17548 // Don't return options that are disabled or in a disabled optgroup 17549 !option.disabled && 17550 ( !option.parentNode.disabled || 17551 !nodeName( option.parentNode, "optgroup" ) ) ) { 17552 17553 // Get the specific value for the option 17554 value = jQuery( option ).val(); 17555 17556 // We don't need an array for one selects 17557 if ( one ) { 17558 return value; 17559 } 17560 17561 // Multi-Selects return an array 17562 values.push( value ); 17563 } 17564 } 17565 17566 return values; 17567 }, 17568 17569 set: function( elem, value ) { 17570 var optionSet, option, 17571 options = elem.options, 17572 values = jQuery.makeArray( value ), 17573 i = options.length; 17574 17575 while ( i-- ) { 17576 option = options[ i ]; 17577 17578 /* eslint-disable no-cond-assign */ 17579 17580 if ( option.selected = 17581 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 17582 ) { 17583 optionSet = true; 17584 } 17585 17586 /* eslint-enable no-cond-assign */ 17587 } 17588 17589 // Force browsers to behave consistently when non-matching value is set 17590 if ( !optionSet ) { 17591 elem.selectedIndex = -1; 17592 } 17593 return values; 17594 } 17595 } 17596 } 17597} ); 17598 17599// Radios and checkboxes getter/setter 17600jQuery.each( [ "radio", "checkbox" ], function() { 17601 jQuery.valHooks[ this ] = { 17602 set: function( elem, value ) { 17603 if ( Array.isArray( value ) ) { 17604 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 17605 } 17606 } 17607 }; 17608 if ( !support.checkOn ) { 17609 jQuery.valHooks[ this ].get = function( elem ) { 17610 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 17611 }; 17612 } 17613} ); 17614 17615 17616 17617 17618// Return jQuery for attributes-only inclusion 17619var location = window.location; 17620 17621var nonce = { guid: Date.now() }; 17622 17623var rquery = ( /\?/ ); 17624 17625 17626 17627// Cross-browser xml parsing 17628jQuery.parseXML = function( data ) { 17629 var xml, parserErrorElem; 17630 if ( !data || typeof data !== "string" ) { 17631 return null; 17632 } 17633 17634 // Support: IE 9 - 11 only 17635 // IE throws on parseFromString with invalid input. 17636 try { 17637 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 17638 } catch ( e ) {} 17639 17640 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 17641 if ( !xml || parserErrorElem ) { 17642 jQuery.error( "Invalid XML: " + ( 17643 parserErrorElem ? 17644 jQuery.map( parserErrorElem.childNodes, function( el ) { 17645 return el.textContent; 17646 } ).join( "\n" ) : 17647 data 17648 ) ); 17649 } 17650 return xml; 17651}; 17652 17653 17654var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 17655 stopPropagationCallback = function( e ) { 17656 e.stopPropagation(); 17657 }; 17658 17659jQuery.extend( jQuery.event, { 17660 17661 trigger: function( event, data, elem, onlyHandlers ) { 17662 17663 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 17664 eventPath = [ elem || document ], 17665 type = hasOwn.call( event, "type" ) ? event.type : event, 17666 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 17667 17668 cur = lastElement = tmp = elem = elem || document; 17669 17670 // Don't do events on text and comment nodes 17671 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 17672 return; 17673 } 17674 17675 // focus/blur morphs to focusin/out; ensure we're not firing them right now 17676 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 17677 return; 17678 } 17679 17680 if ( type.indexOf( "." ) > -1 ) { 17681 17682 // Namespaced trigger; create a regexp to match event type in handle() 17683 namespaces = type.split( "." ); 17684 type = namespaces.shift(); 17685 namespaces.sort(); 17686 } 17687 ontype = type.indexOf( ":" ) < 0 && "on" + type; 17688 17689 // Caller can pass in a jQuery.Event object, Object, or just an event type string 17690 event = event[ jQuery.expando ] ? 17691 event : 17692 new jQuery.Event( type, typeof event === "object" && event ); 17693 17694 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 17695 event.isTrigger = onlyHandlers ? 2 : 3; 17696 event.namespace = namespaces.join( "." ); 17697 event.rnamespace = event.namespace ? 17698 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 17699 null; 17700 17701 // Clean up the event in case it is being reused 17702 event.result = undefined; 17703 if ( !event.target ) { 17704 event.target = elem; 17705 } 17706 17707 // Clone any incoming data and prepend the event, creating the handler arg list 17708 data = data == null ? 17709 [ event ] : 17710 jQuery.makeArray( data, [ event ] ); 17711 17712 // Allow special events to draw outside the lines 17713 special = jQuery.event.special[ type ] || {}; 17714 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 17715 return; 17716 } 17717 17718 // Determine event propagation path in advance, per W3C events spec (trac-9951) 17719 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 17720 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 17721 17722 bubbleType = special.delegateType || type; 17723 if ( !rfocusMorph.test( bubbleType + type ) ) { 17724 cur = cur.parentNode; 17725 } 17726 for ( ; cur; cur = cur.parentNode ) { 17727 eventPath.push( cur ); 17728 tmp = cur; 17729 } 17730 17731 // Only add window if we got to document (e.g., not plain obj or detached DOM) 17732 if ( tmp === ( elem.ownerDocument || document ) ) { 17733 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 17734 } 17735 } 17736 17737 // Fire handlers on the event path 17738 i = 0; 17739 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 17740 lastElement = cur; 17741 event.type = i > 1 ? 17742 bubbleType : 17743 special.bindType || type; 17744 17745 // jQuery handler 17746 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 17747 dataPriv.get( cur, "handle" ); 17748 if ( handle ) { 17749 handle.apply( cur, data ); 17750 } 17751 17752 // Native handler 17753 handle = ontype && cur[ ontype ]; 17754 if ( handle && handle.apply && acceptData( cur ) ) { 17755 event.result = handle.apply( cur, data ); 17756 if ( event.result === false ) { 17757 event.preventDefault(); 17758 } 17759 } 17760 } 17761 event.type = type; 17762 17763 // If nobody prevented the default action, do it now 17764 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 17765 17766 if ( ( !special._default || 17767 special._default.apply( eventPath.pop(), data ) === false ) && 17768 acceptData( elem ) ) { 17769 17770 // Call a native DOM method on the target with the same name as the event. 17771 // Don't do default actions on window, that's where global variables be (trac-6170) 17772 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 17773 17774 // Don't re-trigger an onFOO event when we call its FOO() method 17775 tmp = elem[ ontype ]; 17776 17777 if ( tmp ) { 17778 elem[ ontype ] = null; 17779 } 17780 17781 // Prevent re-triggering of the same event, since we already bubbled it above 17782 jQuery.event.triggered = type; 17783 17784 if ( event.isPropagationStopped() ) { 17785 lastElement.addEventListener( type, stopPropagationCallback ); 17786 } 17787 17788 elem[ type ](); 17789 17790 if ( event.isPropagationStopped() ) { 17791 lastElement.removeEventListener( type, stopPropagationCallback ); 17792 } 17793 17794 jQuery.event.triggered = undefined; 17795 17796 if ( tmp ) { 17797 elem[ ontype ] = tmp; 17798 } 17799 } 17800 } 17801 } 17802 17803 return event.result; 17804 }, 17805 17806 // Piggyback on a donor event to simulate a different one 17807 // Used only for `focus(in | out)` events 17808 simulate: function( type, elem, event ) { 17809 var e = jQuery.extend( 17810 new jQuery.Event(), 17811 event, 17812 { 17813 type: type, 17814 isSimulated: true 17815 } 17816 ); 17817 17818 jQuery.event.trigger( e, null, elem ); 17819 } 17820 17821} ); 17822 17823jQuery.fn.extend( { 17824 17825 trigger: function( type, data ) { 17826 return this.each( function() { 17827 jQuery.event.trigger( type, data, this ); 17828 } ); 17829 }, 17830 triggerHandler: function( type, data ) { 17831 var elem = this[ 0 ]; 17832 if ( elem ) { 17833 return jQuery.event.trigger( type, data, elem, true ); 17834 } 17835 } 17836} ); 17837 17838 17839var 17840 rbracket = /\[\]$/, 17841 rCRLF = /\r?\n/g, 17842 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 17843 rsubmittable = /^(?:input|select|textarea|keygen)/i; 17844 17845function buildParams( prefix, obj, traditional, add ) { 17846 var name; 17847 17848 if ( Array.isArray( obj ) ) { 17849 17850 // Serialize array item. 17851 jQuery.each( obj, function( i, v ) { 17852 if ( traditional || rbracket.test( prefix ) ) { 17853 17854 // Treat each array item as a scalar. 17855 add( prefix, v ); 17856 17857 } else { 17858 17859 // Item is non-scalar (array or object), encode its numeric index. 17860 buildParams( 17861 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 17862 v, 17863 traditional, 17864 add 17865 ); 17866 } 17867 } ); 17868 17869 } else if ( !traditional && toType( obj ) === "object" ) { 17870 17871 // Serialize object item. 17872 for ( name in obj ) { 17873 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 17874 } 17875 17876 } else { 17877 17878 // Serialize scalar item. 17879 add( prefix, obj ); 17880 } 17881} 17882 17883// Serialize an array of form elements or a set of 17884// key/values into a query string 17885jQuery.param = function( a, traditional ) { 17886 var prefix, 17887 s = [], 17888 add = function( key, valueOrFunction ) { 17889 17890 // If value is a function, invoke it and use its return value 17891 var value = isFunction( valueOrFunction ) ? 17892 valueOrFunction() : 17893 valueOrFunction; 17894 17895 s[ s.length ] = encodeURIComponent( key ) + "=" + 17896 encodeURIComponent( value == null ? "" : value ); 17897 }; 17898 17899 if ( a == null ) { 17900 return ""; 17901 } 17902 17903 // If an array was passed in, assume that it is an array of form elements. 17904 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 17905 17906 // Serialize the form elements 17907 jQuery.each( a, function() { 17908 add( this.name, this.value ); 17909 } ); 17910 17911 } else { 17912 17913 // If traditional, encode the "old" way (the way 1.3.2 or older 17914 // did it), otherwise encode params recursively. 17915 for ( prefix in a ) { 17916 buildParams( prefix, a[ prefix ], traditional, add ); 17917 } 17918 } 17919 17920 // Return the resulting serialization 17921 return s.join( "&" ); 17922}; 17923 17924jQuery.fn.extend( { 17925 serialize: function() { 17926 return jQuery.param( this.serializeArray() ); 17927 }, 17928 serializeArray: function() { 17929 return this.map( function() { 17930 17931 // Can add propHook for "elements" to filter or add form elements 17932 var elements = jQuery.prop( this, "elements" ); 17933 return elements ? jQuery.makeArray( elements ) : this; 17934 } ).filter( function() { 17935 var type = this.type; 17936 17937 // Use .is( ":disabled" ) so that fieldset[disabled] works 17938 return this.name && !jQuery( this ).is( ":disabled" ) && 17939 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 17940 ( this.checked || !rcheckableType.test( type ) ); 17941 } ).map( function( _i, elem ) { 17942 var val = jQuery( this ).val(); 17943 17944 if ( val == null ) { 17945 return null; 17946 } 17947 17948 if ( Array.isArray( val ) ) { 17949 return jQuery.map( val, function( val ) { 17950 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 17951 } ); 17952 } 17953 17954 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 17955 } ).get(); 17956 } 17957} ); 17958 17959 17960var 17961 r20 = /%20/g, 17962 rhash = /#.*$/, 17963 rantiCache = /([?&])_=[^&]*/, 17964 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 17965 17966 // trac-7653, trac-8125, trac-8152: local protocol detection 17967 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 17968 rnoContent = /^(?:GET|HEAD)$/, 17969 rprotocol = /^\/\//, 17970 17971 /* Prefilters 17972 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 17973 * 2) These are called: 17974 * - BEFORE asking for a transport 17975 * - AFTER param serialization (s.data is a string if s.processData is true) 17976 * 3) key is the dataType 17977 * 4) the catchall symbol "*" can be used 17978 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 17979 */ 17980 prefilters = {}, 17981 17982 /* Transports bindings 17983 * 1) key is the dataType 17984 * 2) the catchall symbol "*" can be used 17985 * 3) selection will start with transport dataType and THEN go to "*" if needed 17986 */ 17987 transports = {}, 17988 17989 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 17990 allTypes = "*/".concat( "*" ), 17991 17992 // Anchor tag for parsing the document origin 17993 originAnchor = document.createElement( "a" ); 17994 17995originAnchor.href = location.href; 17996 17997// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 17998function addToPrefiltersOrTransports( structure ) { 17999 18000 // dataTypeExpression is optional and defaults to "*" 18001 return function( dataTypeExpression, func ) { 18002 18003 if ( typeof dataTypeExpression !== "string" ) { 18004 func = dataTypeExpression; 18005 dataTypeExpression = "*"; 18006 } 18007 18008 var dataType, 18009 i = 0, 18010 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 18011 18012 if ( isFunction( func ) ) { 18013 18014 // For each dataType in the dataTypeExpression 18015 while ( ( dataType = dataTypes[ i++ ] ) ) { 18016 18017 // Prepend if requested 18018 if ( dataType[ 0 ] === "+" ) { 18019 dataType = dataType.slice( 1 ) || "*"; 18020 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 18021 18022 // Otherwise append 18023 } else { 18024 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 18025 } 18026 } 18027 } 18028 }; 18029} 18030 18031// Base inspection function for prefilters and transports 18032function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 18033 18034 var inspected = {}, 18035 seekingTransport = ( structure === transports ); 18036 18037 function inspect( dataType ) { 18038 var selected; 18039 inspected[ dataType ] = true; 18040 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 18041 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 18042 if ( typeof dataTypeOrTransport === "string" && 18043 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 18044 18045 options.dataTypes.unshift( dataTypeOrTransport ); 18046 inspect( dataTypeOrTransport ); 18047 return false; 18048 } else if ( seekingTransport ) { 18049 return !( selected = dataTypeOrTransport ); 18050 } 18051 } ); 18052 return selected; 18053 } 18054 18055 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 18056} 18057 18058// A special extend for ajax options 18059// that takes "flat" options (not to be deep extended) 18060// Fixes trac-9887 18061function ajaxExtend( target, src ) { 18062 var key, deep, 18063 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 18064 18065 for ( key in src ) { 18066 if ( src[ key ] !== undefined ) { 18067 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 18068 } 18069 } 18070 if ( deep ) { 18071 jQuery.extend( true, target, deep ); 18072 } 18073 18074 return target; 18075} 18076 18077/* Handles responses to an ajax request: 18078 * - finds the right dataType (mediates between content-type and expected dataType) 18079 * - returns the corresponding response 18080 */ 18081function ajaxHandleResponses( s, jqXHR, responses ) { 18082 18083 var ct, type, finalDataType, firstDataType, 18084 contents = s.contents, 18085 dataTypes = s.dataTypes; 18086 18087 // Remove auto dataType and get content-type in the process 18088 while ( dataTypes[ 0 ] === "*" ) { 18089 dataTypes.shift(); 18090 if ( ct === undefined ) { 18091 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 18092 } 18093 } 18094 18095 // Check if we're dealing with a known content-type 18096 if ( ct ) { 18097 for ( type in contents ) { 18098 if ( contents[ type ] && contents[ type ].test( ct ) ) { 18099 dataTypes.unshift( type ); 18100 break; 18101 } 18102 } 18103 } 18104 18105 // Check to see if we have a response for the expected dataType 18106 if ( dataTypes[ 0 ] in responses ) { 18107 finalDataType = dataTypes[ 0 ]; 18108 } else { 18109 18110 // Try convertible dataTypes 18111 for ( type in responses ) { 18112 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 18113 finalDataType = type; 18114 break; 18115 } 18116 if ( !firstDataType ) { 18117 firstDataType = type; 18118 } 18119 } 18120 18121 // Or just use first one 18122 finalDataType = finalDataType || firstDataType; 18123 } 18124 18125 // If we found a dataType 18126 // We add the dataType to the list if needed 18127 // and return the corresponding response 18128 if ( finalDataType ) { 18129 if ( finalDataType !== dataTypes[ 0 ] ) { 18130 dataTypes.unshift( finalDataType ); 18131 } 18132 return responses[ finalDataType ]; 18133 } 18134} 18135 18136/* Chain conversions given the request and the original response 18137 * Also sets the responseXXX fields on the jqXHR instance 18138 */ 18139function ajaxConvert( s, response, jqXHR, isSuccess ) { 18140 var conv2, current, conv, tmp, prev, 18141 converters = {}, 18142 18143 // Work with a copy of dataTypes in case we need to modify it for conversion 18144 dataTypes = s.dataTypes.slice(); 18145 18146 // Create converters map with lowercased keys 18147 if ( dataTypes[ 1 ] ) { 18148 for ( conv in s.converters ) { 18149 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 18150 } 18151 } 18152 18153 current = dataTypes.shift(); 18154 18155 // Convert to each sequential dataType 18156 while ( current ) { 18157 18158 if ( s.responseFields[ current ] ) { 18159 jqXHR[ s.responseFields[ current ] ] = response; 18160 } 18161 18162 // Apply the dataFilter if provided 18163 if ( !prev && isSuccess && s.dataFilter ) { 18164 response = s.dataFilter( response, s.dataType ); 18165 } 18166 18167 prev = current; 18168 current = dataTypes.shift(); 18169 18170 if ( current ) { 18171 18172 // There's only work to do if current dataType is non-auto 18173 if ( current === "*" ) { 18174 18175 current = prev; 18176 18177 // Convert response if prev dataType is non-auto and differs from current 18178 } else if ( prev !== "*" && prev !== current ) { 18179 18180 // Seek a direct converter 18181 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 18182 18183 // If none found, seek a pair 18184 if ( !conv ) { 18185 for ( conv2 in converters ) { 18186 18187 // If conv2 outputs current 18188 tmp = conv2.split( " " ); 18189 if ( tmp[ 1 ] === current ) { 18190 18191 // If prev can be converted to accepted input 18192 conv = converters[ prev + " " + tmp[ 0 ] ] || 18193 converters[ "* " + tmp[ 0 ] ]; 18194 if ( conv ) { 18195 18196 // Condense equivalence converters 18197 if ( conv === true ) { 18198 conv = converters[ conv2 ]; 18199 18200 // Otherwise, insert the intermediate dataType 18201 } else if ( converters[ conv2 ] !== true ) { 18202 current = tmp[ 0 ]; 18203 dataTypes.unshift( tmp[ 1 ] ); 18204 } 18205 break; 18206 } 18207 } 18208 } 18209 } 18210 18211 // Apply converter (if not an equivalence) 18212 if ( conv !== true ) { 18213 18214 // Unless errors are allowed to bubble, catch and return them 18215 if ( conv && s.throws ) { 18216 response = conv( response ); 18217 } else { 18218 try { 18219 response = conv( response ); 18220 } catch ( e ) { 18221 return { 18222 state: "parsererror", 18223 error: conv ? e : "No conversion from " + prev + " to " + current 18224 }; 18225 } 18226 } 18227 } 18228 } 18229 } 18230 } 18231 18232 return { state: "success", data: response }; 18233} 18234 18235jQuery.extend( { 18236 18237 // Counter for holding the number of active queries 18238 active: 0, 18239 18240 // Last-Modified header cache for next request 18241 lastModified: {}, 18242 etag: {}, 18243 18244 ajaxSettings: { 18245 url: location.href, 18246 type: "GET", 18247 isLocal: rlocalProtocol.test( location.protocol ), 18248 global: true, 18249 processData: true, 18250 async: true, 18251 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 18252 18253 /* 18254 timeout: 0, 18255 data: null, 18256 dataType: null, 18257 username: null, 18258 password: null, 18259 cache: null, 18260 throws: false, 18261 traditional: false, 18262 headers: {}, 18263 */ 18264 18265 accepts: { 18266 "*": allTypes, 18267 text: "text/plain", 18268 html: "text/html", 18269 xml: "application/xml, text/xml", 18270 json: "application/json, text/javascript" 18271 }, 18272 18273 contents: { 18274 xml: /\bxml\b/, 18275 html: /\bhtml/, 18276 json: /\bjson\b/ 18277 }, 18278 18279 responseFields: { 18280 xml: "responseXML", 18281 text: "responseText", 18282 json: "responseJSON" 18283 }, 18284 18285 // Data converters 18286 // Keys separate source (or catchall "*") and destination types with a single space 18287 converters: { 18288 18289 // Convert anything to text 18290 "* text": String, 18291 18292 // Text to html (true = no transformation) 18293 "text html": true, 18294 18295 // Evaluate text as a json expression 18296 "text json": JSON.parse, 18297 18298 // Parse text as xml 18299 "text xml": jQuery.parseXML 18300 }, 18301 18302 // For options that shouldn't be deep extended: 18303 // you can add your own custom options here if 18304 // and when you create one that shouldn't be 18305 // deep extended (see ajaxExtend) 18306 flatOptions: { 18307 url: true, 18308 context: true 18309 } 18310 }, 18311 18312 // Creates a full fledged settings object into target 18313 // with both ajaxSettings and settings fields. 18314 // If target is omitted, writes into ajaxSettings. 18315 ajaxSetup: function( target, settings ) { 18316 return settings ? 18317 18318 // Building a settings object 18319 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 18320 18321 // Extending ajaxSettings 18322 ajaxExtend( jQuery.ajaxSettings, target ); 18323 }, 18324 18325 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 18326 ajaxTransport: addToPrefiltersOrTransports( transports ), 18327 18328 // Main method 18329 ajax: function( url, options ) { 18330 18331 // If url is an object, simulate pre-1.5 signature 18332 if ( typeof url === "object" ) { 18333 options = url; 18334 url = undefined; 18335 } 18336 18337 // Force options to be an object 18338 options = options || {}; 18339 18340 var transport, 18341 18342 // URL without anti-cache param 18343 cacheURL, 18344 18345 // Response headers 18346 responseHeadersString, 18347 responseHeaders, 18348 18349 // timeout handle 18350 timeoutTimer, 18351 18352 // Url cleanup var 18353 urlAnchor, 18354 18355 // Request state (becomes false upon send and true upon completion) 18356 completed, 18357 18358 // To know if global events are to be dispatched 18359 fireGlobals, 18360 18361 // Loop variable 18362 i, 18363 18364 // uncached part of the url 18365 uncached, 18366 18367 // Create the final options object 18368 s = jQuery.ajaxSetup( {}, options ), 18369 18370 // Callbacks context 18371 callbackContext = s.context || s, 18372 18373 // Context for global events is callbackContext if it is a DOM node or jQuery collection 18374 globalEventContext = s.context && 18375 ( callbackContext.nodeType || callbackContext.jquery ) ? 18376 jQuery( callbackContext ) : 18377 jQuery.event, 18378 18379 // Deferreds 18380 deferred = jQuery.Deferred(), 18381 completeDeferred = jQuery.Callbacks( "once memory" ), 18382 18383 // Status-dependent callbacks 18384 statusCode = s.statusCode || {}, 18385 18386 // Headers (they are sent all at once) 18387 requestHeaders = {}, 18388 requestHeadersNames = {}, 18389 18390 // Default abort message 18391 strAbort = "canceled", 18392 18393 // Fake xhr 18394 jqXHR = { 18395 readyState: 0, 18396 18397 // Builds headers hashtable if needed 18398 getResponseHeader: function( key ) { 18399 var match; 18400 if ( completed ) { 18401 if ( !responseHeaders ) { 18402 responseHeaders = {}; 18403 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 18404 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 18405 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 18406 .concat( match[ 2 ] ); 18407 } 18408 } 18409 match = responseHeaders[ key.toLowerCase() + " " ]; 18410 } 18411 return match == null ? null : match.join( ", " ); 18412 }, 18413 18414 // Raw string 18415 getAllResponseHeaders: function() { 18416 return completed ? responseHeadersString : null; 18417 }, 18418 18419 // Caches the header 18420 setRequestHeader: function( name, value ) { 18421 if ( completed == null ) { 18422 name = requestHeadersNames[ name.toLowerCase() ] = 18423 requestHeadersNames[ name.toLowerCase() ] || name; 18424 requestHeaders[ name ] = value; 18425 } 18426 return this; 18427 }, 18428 18429 // Overrides response content-type header 18430 overrideMimeType: function( type ) { 18431 if ( completed == null ) { 18432 s.mimeType = type; 18433 } 18434 return this; 18435 }, 18436 18437 // Status-dependent callbacks 18438 statusCode: function( map ) { 18439 var code; 18440 if ( map ) { 18441 if ( completed ) { 18442 18443 // Execute the appropriate callbacks 18444 jqXHR.always( map[ jqXHR.status ] ); 18445 } else { 18446 18447 // Lazy-add the new callbacks in a way that preserves old ones 18448 for ( code in map ) { 18449 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 18450 } 18451 } 18452 } 18453 return this; 18454 }, 18455 18456 // Cancel the request 18457 abort: function( statusText ) { 18458 var finalText = statusText || strAbort; 18459 if ( transport ) { 18460 transport.abort( finalText ); 18461 } 18462 done( 0, finalText ); 18463 return this; 18464 } 18465 }; 18466 18467 // Attach deferreds 18468 deferred.promise( jqXHR ); 18469 18470 // Add protocol if not provided (prefilters might expect it) 18471 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 18472 // We also use the url parameter if available 18473 s.url = ( ( url || s.url || location.href ) + "" ) 18474 .replace( rprotocol, location.protocol + "//" ); 18475 18476 // Alias method option to type as per ticket trac-12004 18477 s.type = options.method || options.type || s.method || s.type; 18478 18479 // Extract dataTypes list 18480 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 18481 18482 // A cross-domain request is in order when the origin doesn't match the current origin. 18483 if ( s.crossDomain == null ) { 18484 urlAnchor = document.createElement( "a" ); 18485 18486 // Support: IE <=8 - 11, Edge 12 - 15 18487 // IE throws exception on accessing the href property if url is malformed, 18488 // e.g. http://example.com:80x/ 18489 try { 18490 urlAnchor.href = s.url; 18491 18492 // Support: IE <=8 - 11 only 18493 // Anchor's host property isn't correctly set when s.url is relative 18494 urlAnchor.href = urlAnchor.href; 18495 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 18496 urlAnchor.protocol + "//" + urlAnchor.host; 18497 } catch ( e ) { 18498 18499 // If there is an error parsing the URL, assume it is crossDomain, 18500 // it can be rejected by the transport if it is invalid 18501 s.crossDomain = true; 18502 } 18503 } 18504 18505 // Convert data if not already a string 18506 if ( s.data && s.processData && typeof s.data !== "string" ) { 18507 s.data = jQuery.param( s.data, s.traditional ); 18508 } 18509 18510 // Apply prefilters 18511 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 18512 18513 // If request was aborted inside a prefilter, stop there 18514 if ( completed ) { 18515 return jqXHR; 18516 } 18517 18518 // We can fire global events as of now if asked to 18519 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 18520 fireGlobals = jQuery.event && s.global; 18521 18522 // Watch for a new set of requests 18523 if ( fireGlobals && jQuery.active++ === 0 ) { 18524 jQuery.event.trigger( "ajaxStart" ); 18525 } 18526 18527 // Uppercase the type 18528 s.type = s.type.toUpperCase(); 18529 18530 // Determine if request has content 18531 s.hasContent = !rnoContent.test( s.type ); 18532 18533 // Save the URL in case we're toying with the If-Modified-Since 18534 // and/or If-None-Match header later on 18535 // Remove hash to simplify url manipulation 18536 cacheURL = s.url.replace( rhash, "" ); 18537 18538 // More options handling for requests with no content 18539 if ( !s.hasContent ) { 18540 18541 // Remember the hash so we can put it back 18542 uncached = s.url.slice( cacheURL.length ); 18543 18544 // If data is available and should be processed, append data to url 18545 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 18546 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 18547 18548 // trac-9682: remove data so that it's not used in an eventual retry 18549 delete s.data; 18550 } 18551 18552 // Add or update anti-cache param if needed 18553 if ( s.cache === false ) { 18554 cacheURL = cacheURL.replace( rantiCache, "$1" ); 18555 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 18556 uncached; 18557 } 18558 18559 // Put hash and anti-cache on the URL that will be requested (gh-1732) 18560 s.url = cacheURL + uncached; 18561 18562 // Change '%20' to '+' if this is encoded form body content (gh-2658) 18563 } else if ( s.data && s.processData && 18564 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 18565 s.data = s.data.replace( r20, "+" ); 18566 } 18567 18568 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 18569 if ( s.ifModified ) { 18570 if ( jQuery.lastModified[ cacheURL ] ) { 18571 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 18572 } 18573 if ( jQuery.etag[ cacheURL ] ) { 18574 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 18575 } 18576 } 18577 18578 // Set the correct header, if data is being sent 18579 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 18580 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 18581 } 18582 18583 // Set the Accepts header for the server, depending on the dataType 18584 jqXHR.setRequestHeader( 18585 "Accept", 18586 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 18587 s.accepts[ s.dataTypes[ 0 ] ] + 18588 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 18589 s.accepts[ "*" ] 18590 ); 18591 18592 // Check for headers option 18593 for ( i in s.headers ) { 18594 jqXHR.setRequestHeader( i, s.headers[ i ] ); 18595 } 18596 18597 // Allow custom headers/mimetypes and early abort 18598 if ( s.beforeSend && 18599 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 18600 18601 // Abort if not done already and return 18602 return jqXHR.abort(); 18603 } 18604 18605 // Aborting is no longer a cancellation 18606 strAbort = "abort"; 18607 18608 // Install callbacks on deferreds 18609 completeDeferred.add( s.complete ); 18610 jqXHR.done( s.success ); 18611 jqXHR.fail( s.error ); 18612 18613 // Get transport 18614 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 18615 18616 // If no transport, we auto-abort 18617 if ( !transport ) { 18618 done( -1, "No Transport" ); 18619 } else { 18620 jqXHR.readyState = 1; 18621 18622 // Send global event 18623 if ( fireGlobals ) { 18624 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 18625 } 18626 18627 // If request was aborted inside ajaxSend, stop there 18628 if ( completed ) { 18629 return jqXHR; 18630 } 18631 18632 // Timeout 18633 if ( s.async && s.timeout > 0 ) { 18634 timeoutTimer = window.setTimeout( function() { 18635 jqXHR.abort( "timeout" ); 18636 }, s.timeout ); 18637 } 18638 18639 try { 18640 completed = false; 18641 transport.send( requestHeaders, done ); 18642 } catch ( e ) { 18643 18644 // Rethrow post-completion exceptions 18645 if ( completed ) { 18646 throw e; 18647 } 18648 18649 // Propagate others as results 18650 done( -1, e ); 18651 } 18652 } 18653 18654 // Callback for when everything is done 18655 function done( status, nativeStatusText, responses, headers ) { 18656 var isSuccess, success, error, response, modified, 18657 statusText = nativeStatusText; 18658 18659 // Ignore repeat invocations 18660 if ( completed ) { 18661 return; 18662 } 18663 18664 completed = true; 18665 18666 // Clear timeout if it exists 18667 if ( timeoutTimer ) { 18668 window.clearTimeout( timeoutTimer ); 18669 } 18670 18671 // Dereference transport for early garbage collection 18672 // (no matter how long the jqXHR object will be used) 18673 transport = undefined; 18674 18675 // Cache response headers 18676 responseHeadersString = headers || ""; 18677 18678 // Set readyState 18679 jqXHR.readyState = status > 0 ? 4 : 0; 18680 18681 // Determine if successful 18682 isSuccess = status >= 200 && status < 300 || status === 304; 18683 18684 // Get response data 18685 if ( responses ) { 18686 response = ajaxHandleResponses( s, jqXHR, responses ); 18687 } 18688 18689 // Use a noop converter for missing script but not if jsonp 18690 if ( !isSuccess && 18691 jQuery.inArray( "script", s.dataTypes ) > -1 && 18692 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 18693 s.converters[ "text script" ] = function() {}; 18694 } 18695 18696 // Convert no matter what (that way responseXXX fields are always set) 18697 response = ajaxConvert( s, response, jqXHR, isSuccess ); 18698 18699 // If successful, handle type chaining 18700 if ( isSuccess ) { 18701 18702 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 18703 if ( s.ifModified ) { 18704 modified = jqXHR.getResponseHeader( "Last-Modified" ); 18705 if ( modified ) { 18706 jQuery.lastModified[ cacheURL ] = modified; 18707 } 18708 modified = jqXHR.getResponseHeader( "etag" ); 18709 if ( modified ) { 18710 jQuery.etag[ cacheURL ] = modified; 18711 } 18712 } 18713 18714 // if no content 18715 if ( status === 204 || s.type === "HEAD" ) { 18716 statusText = "nocontent"; 18717 18718 // if not modified 18719 } else if ( status === 304 ) { 18720 statusText = "notmodified"; 18721 18722 // If we have data, let's convert it 18723 } else { 18724 statusText = response.state; 18725 success = response.data; 18726 error = response.error; 18727 isSuccess = !error; 18728 } 18729 } else { 18730 18731 // Extract error from statusText and normalize for non-aborts 18732 error = statusText; 18733 if ( status || !statusText ) { 18734 statusText = "error"; 18735 if ( status < 0 ) { 18736 status = 0; 18737 } 18738 } 18739 } 18740 18741 // Set data for the fake xhr object 18742 jqXHR.status = status; 18743 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 18744 18745 // Success/Error 18746 if ( isSuccess ) { 18747 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 18748 } else { 18749 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 18750 } 18751 18752 // Status-dependent callbacks 18753 jqXHR.statusCode( statusCode ); 18754 statusCode = undefined; 18755 18756 if ( fireGlobals ) { 18757 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 18758 [ jqXHR, s, isSuccess ? success : error ] ); 18759 } 18760 18761 // Complete 18762 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 18763 18764 if ( fireGlobals ) { 18765 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 18766 18767 // Handle the global AJAX counter 18768 if ( !( --jQuery.active ) ) { 18769 jQuery.event.trigger( "ajaxStop" ); 18770 } 18771 } 18772 } 18773 18774 return jqXHR; 18775 }, 18776 18777 getJSON: function( url, data, callback ) { 18778 return jQuery.get( url, data, callback, "json" ); 18779 }, 18780 18781 getScript: function( url, callback ) { 18782 return jQuery.get( url, undefined, callback, "script" ); 18783 } 18784} ); 18785 18786jQuery.each( [ "get", "post" ], function( _i, method ) { 18787 jQuery[ method ] = function( url, data, callback, type ) { 18788 18789 // Shift arguments if data argument was omitted 18790 if ( isFunction( data ) ) { 18791 type = type || callback; 18792 callback = data; 18793 data = undefined; 18794 } 18795 18796 // The url can be an options object (which then must have .url) 18797 return jQuery.ajax( jQuery.extend( { 18798 url: url, 18799 type: method, 18800 dataType: type, 18801 data: data, 18802 success: callback 18803 }, jQuery.isPlainObject( url ) && url ) ); 18804 }; 18805} ); 18806 18807jQuery.ajaxPrefilter( function( s ) { 18808 var i; 18809 for ( i in s.headers ) { 18810 if ( i.toLowerCase() === "content-type" ) { 18811 s.contentType = s.headers[ i ] || ""; 18812 } 18813 } 18814} ); 18815 18816 18817jQuery._evalUrl = function( url, options, doc ) { 18818 return jQuery.ajax( { 18819 url: url, 18820 18821 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 18822 type: "GET", 18823 dataType: "script", 18824 cache: true, 18825 async: false, 18826 global: false, 18827 18828 // Only evaluate the response if it is successful (gh-4126) 18829 // dataFilter is not invoked for failure responses, so using it instead 18830 // of the default converter is kludgy but it works. 18831 converters: { 18832 "text script": function() {} 18833 }, 18834 dataFilter: function( response ) { 18835 jQuery.globalEval( response, options, doc ); 18836 } 18837 } ); 18838}; 18839 18840 18841jQuery.fn.extend( { 18842 wrapAll: function( html ) { 18843 var wrap; 18844 18845 if ( this[ 0 ] ) { 18846 if ( isFunction( html ) ) { 18847 html = html.call( this[ 0 ] ); 18848 } 18849 18850 // The elements to wrap the target around 18851 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 18852 18853 if ( this[ 0 ].parentNode ) { 18854 wrap.insertBefore( this[ 0 ] ); 18855 } 18856 18857 wrap.map( function() { 18858 var elem = this; 18859 18860 while ( elem.firstElementChild ) { 18861 elem = elem.firstElementChild; 18862 } 18863 18864 return elem; 18865 } ).append( this ); 18866 } 18867 18868 return this; 18869 }, 18870 18871 wrapInner: function( html ) { 18872 if ( isFunction( html ) ) { 18873 return this.each( function( i ) { 18874 jQuery( this ).wrapInner( html.call( this, i ) ); 18875 } ); 18876 } 18877 18878 return this.each( function() { 18879 var self = jQuery( this ), 18880 contents = self.contents(); 18881 18882 if ( contents.length ) { 18883 contents.wrapAll( html ); 18884 18885 } else { 18886 self.append( html ); 18887 } 18888 } ); 18889 }, 18890 18891 wrap: function( html ) { 18892 var htmlIsFunction = isFunction( html ); 18893 18894 return this.each( function( i ) { 18895 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 18896 } ); 18897 }, 18898 18899 unwrap: function( selector ) { 18900 this.parent( selector ).not( "body" ).each( function() { 18901 jQuery( this ).replaceWith( this.childNodes ); 18902 } ); 18903 return this; 18904 } 18905} ); 18906 18907 18908jQuery.expr.pseudos.hidden = function( elem ) { 18909 return !jQuery.expr.pseudos.visible( elem ); 18910}; 18911jQuery.expr.pseudos.visible = function( elem ) { 18912 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 18913}; 18914 18915 18916 18917 18918jQuery.ajaxSettings.xhr = function() { 18919 try { 18920 return new window.XMLHttpRequest(); 18921 } catch ( e ) {} 18922}; 18923 18924var xhrSuccessStatus = { 18925 18926 // File protocol always yields status code 0, assume 200 18927 0: 200, 18928 18929 // Support: IE <=9 only 18930 // trac-1450: sometimes IE returns 1223 when it should be 204 18931 1223: 204 18932 }, 18933 xhrSupported = jQuery.ajaxSettings.xhr(); 18934 18935support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 18936support.ajax = xhrSupported = !!xhrSupported; 18937 18938jQuery.ajaxTransport( function( options ) { 18939 var callback, errorCallback; 18940 18941 // Cross domain only allowed if supported through XMLHttpRequest 18942 if ( support.cors || xhrSupported && !options.crossDomain ) { 18943 return { 18944 send: function( headers, complete ) { 18945 var i, 18946 xhr = options.xhr(); 18947 18948 xhr.open( 18949 options.type, 18950 options.url, 18951 options.async, 18952 options.username, 18953 options.password 18954 ); 18955 18956 // Apply custom fields if provided 18957 if ( options.xhrFields ) { 18958 for ( i in options.xhrFields ) { 18959 xhr[ i ] = options.xhrFields[ i ]; 18960 } 18961 } 18962 18963 // Override mime type if needed 18964 if ( options.mimeType && xhr.overrideMimeType ) { 18965 xhr.overrideMimeType( options.mimeType ); 18966 } 18967 18968 // X-Requested-With header 18969 // For cross-domain requests, seeing as conditions for a preflight are 18970 // akin to a jigsaw puzzle, we simply never set it to be sure. 18971 // (it can always be set on a per-request basis or even using ajaxSetup) 18972 // For same-domain requests, won't change header if already provided. 18973 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 18974 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 18975 } 18976 18977 // Set headers 18978 for ( i in headers ) { 18979 xhr.setRequestHeader( i, headers[ i ] ); 18980 } 18981 18982 // Callback 18983 callback = function( type ) { 18984 return function() { 18985 if ( callback ) { 18986 callback = errorCallback = xhr.onload = 18987 xhr.onerror = xhr.onabort = xhr.ontimeout = 18988 xhr.onreadystatechange = null; 18989 18990 if ( type === "abort" ) { 18991 xhr.abort(); 18992 } else if ( type === "error" ) { 18993 18994 // Support: IE <=9 only 18995 // On a manual native abort, IE9 throws 18996 // errors on any property access that is not readyState 18997 if ( typeof xhr.status !== "number" ) { 18998 complete( 0, "error" ); 18999 } else { 19000 complete( 19001 19002 // File: protocol always yields status 0; see trac-8605, trac-14207 19003 xhr.status, 19004 xhr.statusText 19005 ); 19006 } 19007 } else { 19008 complete( 19009 xhrSuccessStatus[ xhr.status ] || xhr.status, 19010 xhr.statusText, 19011 19012 // Support: IE <=9 only 19013 // IE9 has no XHR2 but throws on binary (trac-11426) 19014 // For XHR2 non-text, let the caller handle it (gh-2498) 19015 ( xhr.responseType || "text" ) !== "text" || 19016 typeof xhr.responseText !== "string" ? 19017 { binary: xhr.response } : 19018 { text: xhr.responseText }, 19019 xhr.getAllResponseHeaders() 19020 ); 19021 } 19022 } 19023 }; 19024 }; 19025 19026 // Listen to events 19027 xhr.onload = callback(); 19028 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 19029 19030 // Support: IE 9 only 19031 // Use onreadystatechange to replace onabort 19032 // to handle uncaught aborts 19033 if ( xhr.onabort !== undefined ) { 19034 xhr.onabort = errorCallback; 19035 } else { 19036 xhr.onreadystatechange = function() { 19037 19038 // Check readyState before timeout as it changes 19039 if ( xhr.readyState === 4 ) { 19040 19041 // Allow onerror to be called first, 19042 // but that will not handle a native abort 19043 // Also, save errorCallback to a variable 19044 // as xhr.onerror cannot be accessed 19045 window.setTimeout( function() { 19046 if ( callback ) { 19047 errorCallback(); 19048 } 19049 } ); 19050 } 19051 }; 19052 } 19053 19054 // Create the abort callback 19055 callback = callback( "abort" ); 19056 19057 try { 19058 19059 // Do send the request (this may raise an exception) 19060 xhr.send( options.hasContent && options.data || null ); 19061 } catch ( e ) { 19062 19063 // trac-14683: Only rethrow if this hasn't been notified as an error yet 19064 if ( callback ) { 19065 throw e; 19066 } 19067 } 19068 }, 19069 19070 abort: function() { 19071 if ( callback ) { 19072 callback(); 19073 } 19074 } 19075 }; 19076 } 19077} ); 19078 19079 19080 19081 19082// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 19083jQuery.ajaxPrefilter( function( s ) { 19084 if ( s.crossDomain ) { 19085 s.contents.script = false; 19086 } 19087} ); 19088 19089// Install script dataType 19090jQuery.ajaxSetup( { 19091 accepts: { 19092 script: "text/javascript, application/javascript, " + 19093 "application/ecmascript, application/x-ecmascript" 19094 }, 19095 contents: { 19096 script: /\b(?:java|ecma)script\b/ 19097 }, 19098 converters: { 19099 "text script": function( text ) { 19100 jQuery.globalEval( text ); 19101 return text; 19102 } 19103 } 19104} ); 19105 19106// Handle cache's special case and crossDomain 19107jQuery.ajaxPrefilter( "script", function( s ) { 19108 if ( s.cache === undefined ) { 19109 s.cache = false; 19110 } 19111 if ( s.crossDomain ) { 19112 s.type = "GET"; 19113 } 19114} ); 19115 19116// Bind script tag hack transport 19117jQuery.ajaxTransport( "script", function( s ) { 19118 19119 // This transport only deals with cross domain or forced-by-attrs requests 19120 if ( s.crossDomain || s.scriptAttrs ) { 19121 var script, callback; 19122 return { 19123 send: function( _, complete ) { 19124 script = jQuery( "<script>" ) 19125 .attr( s.scriptAttrs || {} ) 19126 .prop( { charset: s.scriptCharset, src: s.url } ) 19127 .on( "load error", callback = function( evt ) { 19128 script.remove(); 19129 callback = null; 19130 if ( evt ) { 19131 complete( evt.type === "error" ? 404 : 200, evt.type ); 19132 } 19133 } ); 19134 19135 // Use native DOM manipulation to avoid our domManip AJAX trickery 19136 document.head.appendChild( script[ 0 ] ); 19137 }, 19138 abort: function() { 19139 if ( callback ) { 19140 callback(); 19141 } 19142 } 19143 }; 19144 } 19145} ); 19146 19147 19148 19149 19150var oldCallbacks = [], 19151 rjsonp = /(=)\?(?=&|$)|\?\?/; 19152 19153// Default jsonp settings 19154jQuery.ajaxSetup( { 19155 jsonp: "callback", 19156 jsonpCallback: function() { 19157 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 19158 this[ callback ] = true; 19159 return callback; 19160 } 19161} ); 19162 19163// Detect, normalize options and install callbacks for jsonp requests 19164jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 19165 19166 var callbackName, overwritten, responseContainer, 19167 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 19168 "url" : 19169 typeof s.data === "string" && 19170 ( s.contentType || "" ) 19171 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 19172 rjsonp.test( s.data ) && "data" 19173 ); 19174 19175 // Handle iff the expected data type is "jsonp" or we have a parameter to set 19176 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 19177 19178 // Get callback name, remembering preexisting value associated with it 19179 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 19180 s.jsonpCallback() : 19181 s.jsonpCallback; 19182 19183 // Insert callback into url or form data 19184 if ( jsonProp ) { 19185 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 19186 } else if ( s.jsonp !== false ) { 19187 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 19188 } 19189 19190 // Use data converter to retrieve json after script execution 19191 s.converters[ "script json" ] = function() { 19192 if ( !responseContainer ) { 19193 jQuery.error( callbackName + " was not called" ); 19194 } 19195 return responseContainer[ 0 ]; 19196 }; 19197 19198 // Force json dataType 19199 s.dataTypes[ 0 ] = "json"; 19200 19201 // Install callback 19202 overwritten = window[ callbackName ]; 19203 window[ callbackName ] = function() { 19204 responseContainer = arguments; 19205 }; 19206 19207 // Clean-up function (fires after converters) 19208 jqXHR.always( function() { 19209 19210 // If previous value didn't exist - remove it 19211 if ( overwritten === undefined ) { 19212 jQuery( window ).removeProp( callbackName ); 19213 19214 // Otherwise restore preexisting value 19215 } else { 19216 window[ callbackName ] = overwritten; 19217 } 19218 19219 // Save back as free 19220 if ( s[ callbackName ] ) { 19221 19222 // Make sure that re-using the options doesn't screw things around 19223 s.jsonpCallback = originalSettings.jsonpCallback; 19224 19225 // Save the callback name for future use 19226 oldCallbacks.push( callbackName ); 19227 } 19228 19229 // Call if it was a function and we have a response 19230 if ( responseContainer && isFunction( overwritten ) ) { 19231 overwritten( responseContainer[ 0 ] ); 19232 } 19233 19234 responseContainer = overwritten = undefined; 19235 } ); 19236 19237 // Delegate to script 19238 return "script"; 19239 } 19240} ); 19241 19242 19243 19244 19245// Support: Safari 8 only 19246// In Safari 8 documents created via document.implementation.createHTMLDocument 19247// collapse sibling forms: the second one becomes a child of the first one. 19248// Because of that, this security measure has to be disabled in Safari 8. 19249// https://bugs.webkit.org/show_bug.cgi?id=137337 19250support.createHTMLDocument = ( function() { 19251 var body = document.implementation.createHTMLDocument( "" ).body; 19252 body.innerHTML = "<form></form><form></form>"; 19253 return body.childNodes.length === 2; 19254} )(); 19255 19256 19257// Argument "data" should be string of html 19258// context (optional): If specified, the fragment will be created in this context, 19259// defaults to document 19260// keepScripts (optional): If true, will include scripts passed in the html string 19261jQuery.parseHTML = function( data, context, keepScripts ) { 19262 if ( typeof data !== "string" ) { 19263 return []; 19264 } 19265 if ( typeof context === "boolean" ) { 19266 keepScripts = context; 19267 context = false; 19268 } 19269 19270 var base, parsed, scripts; 19271 19272 if ( !context ) { 19273 19274 // Stop scripts or inline event handlers from being executed immediately 19275 // by using document.implementation 19276 if ( support.createHTMLDocument ) { 19277 context = document.implementation.createHTMLDocument( "" ); 19278 19279 // Set the base href for the created document 19280 // so any parsed elements with URLs 19281 // are based on the document's URL (gh-2965) 19282 base = context.createElement( "base" ); 19283 base.href = document.location.href; 19284 context.head.appendChild( base ); 19285 } else { 19286 context = document; 19287 } 19288 } 19289 19290 parsed = rsingleTag.exec( data ); 19291 scripts = !keepScripts && []; 19292 19293 // Single tag 19294 if ( parsed ) { 19295 return [ context.createElement( parsed[ 1 ] ) ]; 19296 } 19297 19298 parsed = buildFragment( [ data ], context, scripts ); 19299 19300 if ( scripts && scripts.length ) { 19301 jQuery( scripts ).remove(); 19302 } 19303 19304 return jQuery.merge( [], parsed.childNodes ); 19305}; 19306 19307 19308/** 19309 * Load a url into a page 19310 */ 19311jQuery.fn.load = function( url, params, callback ) { 19312 var selector, type, response, 19313 self = this, 19314 off = url.indexOf( " " ); 19315 19316 if ( off > -1 ) { 19317 selector = stripAndCollapse( url.slice( off ) ); 19318 url = url.slice( 0, off ); 19319 } 19320 19321 // If it's a function 19322 if ( isFunction( params ) ) { 19323 19324 // We assume that it's the callback 19325 callback = params; 19326 params = undefined; 19327 19328 // Otherwise, build a param string 19329 } else if ( params && typeof params === "object" ) { 19330 type = "POST"; 19331 } 19332 19333 // If we have elements to modify, make the request 19334 if ( self.length > 0 ) { 19335 jQuery.ajax( { 19336 url: url, 19337 19338 // If "type" variable is undefined, then "GET" method will be used. 19339 // Make value of this field explicit since 19340 // user can override it through ajaxSetup method 19341 type: type || "GET", 19342 dataType: "html", 19343 data: params 19344 } ).done( function( responseText ) { 19345 19346 // Save response for use in complete callback 19347 response = arguments; 19348 19349 self.html( selector ? 19350 19351 // If a selector was specified, locate the right elements in a dummy div 19352 // Exclude scripts to avoid IE 'Permission Denied' errors 19353 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 19354 19355 // Otherwise use the full result 19356 responseText ); 19357 19358 // If the request succeeds, this function gets "data", "status", "jqXHR" 19359 // but they are ignored because response was set above. 19360 // If it fails, this function gets "jqXHR", "status", "error" 19361 } ).always( callback && function( jqXHR, status ) { 19362 self.each( function() { 19363 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 19364 } ); 19365 } ); 19366 } 19367 19368 return this; 19369}; 19370 19371 19372 19373 19374jQuery.expr.pseudos.animated = function( elem ) { 19375 return jQuery.grep( jQuery.timers, function( fn ) { 19376 return elem === fn.elem; 19377 } ).length; 19378}; 19379 19380 19381 19382 19383jQuery.offset = { 19384 setOffset: function( elem, options, i ) { 19385 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 19386 position = jQuery.css( elem, "position" ), 19387 curElem = jQuery( elem ), 19388 props = {}; 19389 19390 // Set position first, in-case top/left are set even on static elem 19391 if ( position === "static" ) { 19392 elem.style.position = "relative"; 19393 } 19394 19395 curOffset = curElem.offset(); 19396 curCSSTop = jQuery.css( elem, "top" ); 19397 curCSSLeft = jQuery.css( elem, "left" ); 19398 calculatePosition = ( position === "absolute" || position === "fixed" ) && 19399 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 19400 19401 // Need to be able to calculate position if either 19402 // top or left is auto and position is either absolute or fixed 19403 if ( calculatePosition ) { 19404 curPosition = curElem.position(); 19405 curTop = curPosition.top; 19406 curLeft = curPosition.left; 19407 19408 } else { 19409 curTop = parseFloat( curCSSTop ) || 0; 19410 curLeft = parseFloat( curCSSLeft ) || 0; 19411 } 19412 19413 if ( isFunction( options ) ) { 19414 19415 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 19416 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 19417 } 19418 19419 if ( options.top != null ) { 19420 props.top = ( options.top - curOffset.top ) + curTop; 19421 } 19422 if ( options.left != null ) { 19423 props.left = ( options.left - curOffset.left ) + curLeft; 19424 } 19425 19426 if ( "using" in options ) { 19427 options.using.call( elem, props ); 19428 19429 } else { 19430 curElem.css( props ); 19431 } 19432 } 19433}; 19434 19435jQuery.fn.extend( { 19436 19437 // offset() relates an element's border box to the document origin 19438 offset: function( options ) { 19439 19440 // Preserve chaining for setter 19441 if ( arguments.length ) { 19442 return options === undefined ? 19443 this : 19444 this.each( function( i ) { 19445 jQuery.offset.setOffset( this, options, i ); 19446 } ); 19447 } 19448 19449 var rect, win, 19450 elem = this[ 0 ]; 19451 19452 if ( !elem ) { 19453 return; 19454 } 19455 19456 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 19457 // Support: IE <=11 only 19458 // Running getBoundingClientRect on a 19459 // disconnected node in IE throws an error 19460 if ( !elem.getClientRects().length ) { 19461 return { top: 0, left: 0 }; 19462 } 19463 19464 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 19465 rect = elem.getBoundingClientRect(); 19466 win = elem.ownerDocument.defaultView; 19467 return { 19468 top: rect.top + win.pageYOffset, 19469 left: rect.left + win.pageXOffset 19470 }; 19471 }, 19472 19473 // position() relates an element's margin box to its offset parent's padding box 19474 // This corresponds to the behavior of CSS absolute positioning 19475 position: function() { 19476 if ( !this[ 0 ] ) { 19477 return; 19478 } 19479 19480 var offsetParent, offset, doc, 19481 elem = this[ 0 ], 19482 parentOffset = { top: 0, left: 0 }; 19483 19484 // position:fixed elements are offset from the viewport, which itself always has zero offset 19485 if ( jQuery.css( elem, "position" ) === "fixed" ) { 19486 19487 // Assume position:fixed implies availability of getBoundingClientRect 19488 offset = elem.getBoundingClientRect(); 19489 19490 } else { 19491 offset = this.offset(); 19492 19493 // Account for the *real* offset parent, which can be the document or its root element 19494 // when a statically positioned element is identified 19495 doc = elem.ownerDocument; 19496 offsetParent = elem.offsetParent || doc.documentElement; 19497 while ( offsetParent && 19498 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 19499 jQuery.css( offsetParent, "position" ) === "static" ) { 19500 19501 offsetParent = offsetParent.parentNode; 19502 } 19503 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 19504 19505 // Incorporate borders into its offset, since they are outside its content origin 19506 parentOffset = jQuery( offsetParent ).offset(); 19507 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 19508 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 19509 } 19510 } 19511 19512 // Subtract parent offsets and element margins 19513 return { 19514 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 19515 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 19516 }; 19517 }, 19518 19519 // This method will return documentElement in the following cases: 19520 // 1) For the element inside the iframe without offsetParent, this method will return 19521 // documentElement of the parent window 19522 // 2) For the hidden or detached element 19523 // 3) For body or html element, i.e. in case of the html node - it will return itself 19524 // 19525 // but those exceptions were never presented as a real life use-cases 19526 // and might be considered as more preferable results. 19527 // 19528 // This logic, however, is not guaranteed and can change at any point in the future 19529 offsetParent: function() { 19530 return this.map( function() { 19531 var offsetParent = this.offsetParent; 19532 19533 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 19534 offsetParent = offsetParent.offsetParent; 19535 } 19536 19537 return offsetParent || documentElement; 19538 } ); 19539 } 19540} ); 19541 19542// Create scrollLeft and scrollTop methods 19543jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 19544 var top = "pageYOffset" === prop; 19545 19546 jQuery.fn[ method ] = function( val ) { 19547 return access( this, function( elem, method, val ) { 19548 19549 // Coalesce documents and windows 19550 var win; 19551 if ( isWindow( elem ) ) { 19552 win = elem; 19553 } else if ( elem.nodeType === 9 ) { 19554 win = elem.defaultView; 19555 } 19556 19557 if ( val === undefined ) { 19558 return win ? win[ prop ] : elem[ method ]; 19559 } 19560 19561 if ( win ) { 19562 win.scrollTo( 19563 !top ? val : win.pageXOffset, 19564 top ? val : win.pageYOffset 19565 ); 19566 19567 } else { 19568 elem[ method ] = val; 19569 } 19570 }, method, val, arguments.length ); 19571 }; 19572} ); 19573 19574// Support: Safari <=7 - 9.1, Chrome <=37 - 49 19575// Add the top/left cssHooks using jQuery.fn.position 19576// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 19577// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 19578// getComputedStyle returns percent when specified for top/left/bottom/right; 19579// rather than make the css module depend on the offset module, just check for it here 19580jQuery.each( [ "top", "left" ], function( _i, prop ) { 19581 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 19582 function( elem, computed ) { 19583 if ( computed ) { 19584 computed = curCSS( elem, prop ); 19585 19586 // If curCSS returns percentage, fallback to offset 19587 return rnumnonpx.test( computed ) ? 19588 jQuery( elem ).position()[ prop ] + "px" : 19589 computed; 19590 } 19591 } 19592 ); 19593} ); 19594 19595 19596// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 19597jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 19598 jQuery.each( { 19599 padding: "inner" + name, 19600 content: type, 19601 "": "outer" + name 19602 }, function( defaultExtra, funcName ) { 19603 19604 // Margin is only for outerHeight, outerWidth 19605 jQuery.fn[ funcName ] = function( margin, value ) { 19606 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 19607 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 19608 19609 return access( this, function( elem, type, value ) { 19610 var doc; 19611 19612 if ( isWindow( elem ) ) { 19613 19614 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 19615 return funcName.indexOf( "outer" ) === 0 ? 19616 elem[ "inner" + name ] : 19617 elem.document.documentElement[ "client" + name ]; 19618 } 19619 19620 // Get document width or height 19621 if ( elem.nodeType === 9 ) { 19622 doc = elem.documentElement; 19623 19624 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 19625 // whichever is greatest 19626 return Math.max( 19627 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 19628 elem.body[ "offset" + name ], doc[ "offset" + name ], 19629 doc[ "client" + name ] 19630 ); 19631 } 19632 19633 return value === undefined ? 19634 19635 // Get width or height on the element, requesting but not forcing parseFloat 19636 jQuery.css( elem, type, extra ) : 19637 19638 // Set width or height on the element 19639 jQuery.style( elem, type, value, extra ); 19640 }, type, chainable ? margin : undefined, chainable ); 19641 }; 19642 } ); 19643} ); 19644 19645 19646jQuery.each( [ 19647 "ajaxStart", 19648 "ajaxStop", 19649 "ajaxComplete", 19650 "ajaxError", 19651 "ajaxSuccess", 19652 "ajaxSend" 19653], function( _i, type ) { 19654 jQuery.fn[ type ] = function( fn ) { 19655 return this.on( type, fn ); 19656 }; 19657} ); 19658 19659 19660 19661 19662jQuery.fn.extend( { 19663 19664 bind: function( types, data, fn ) { 19665 return this.on( types, null, data, fn ); 19666 }, 19667 unbind: function( types, fn ) { 19668 return this.off( types, null, fn ); 19669 }, 19670 19671 delegate: function( selector, types, data, fn ) { 19672 return this.on( types, selector, data, fn ); 19673 }, 19674 undelegate: function( selector, types, fn ) { 19675 19676 // ( namespace ) or ( selector, types [, fn] ) 19677 return arguments.length === 1 ? 19678 this.off( selector, "**" ) : 19679 this.off( types, selector || "**", fn ); 19680 }, 19681 19682 hover: function( fnOver, fnOut ) { 19683 return this 19684 .on( "mouseenter", fnOver ) 19685 .on( "mouseleave", fnOut || fnOver ); 19686 } 19687} ); 19688 19689jQuery.each( 19690 ( "blur focus focusin focusout resize scroll click dblclick " + 19691 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 19692 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 19693 function( _i, name ) { 19694 19695 // Handle event binding 19696 jQuery.fn[ name ] = function( data, fn ) { 19697 return arguments.length > 0 ? 19698 this.on( name, null, data, fn ) : 19699 this.trigger( name ); 19700 }; 19701 } 19702); 19703 19704 19705 19706 19707// Support: Android <=4.0 only 19708// Make sure we trim BOM and NBSP 19709// Require that the "whitespace run" starts from a non-whitespace 19710// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 19711var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 19712 19713// Bind a function to a context, optionally partially applying any 19714// arguments. 19715// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 19716// However, it is not slated for removal any time soon 19717jQuery.proxy = function( fn, context ) { 19718 var tmp, args, proxy; 19719 19720 if ( typeof context === "string" ) { 19721 tmp = fn[ context ]; 19722 context = fn; 19723 fn = tmp; 19724 } 19725 19726 // Quick check to determine if target is callable, in the spec 19727 // this throws a TypeError, but we will just return undefined. 19728 if ( !isFunction( fn ) ) { 19729 return undefined; 19730 } 19731 19732 // Simulated bind 19733 args = slice.call( arguments, 2 ); 19734 proxy = function() { 19735 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 19736 }; 19737 19738 // Set the guid of unique handler to the same of original handler, so it can be removed 19739 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 19740 19741 return proxy; 19742}; 19743 19744jQuery.holdReady = function( hold ) { 19745 if ( hold ) { 19746 jQuery.readyWait++; 19747 } else { 19748 jQuery.ready( true ); 19749 } 19750}; 19751jQuery.isArray = Array.isArray; 19752jQuery.parseJSON = JSON.parse; 19753jQuery.nodeName = nodeName; 19754jQuery.isFunction = isFunction; 19755jQuery.isWindow = isWindow; 19756jQuery.camelCase = camelCase; 19757jQuery.type = toType; 19758 19759jQuery.now = Date.now; 19760 19761jQuery.isNumeric = function( obj ) { 19762 19763 // As of jQuery 3.0, isNumeric is limited to 19764 // strings and numbers (primitives or objects) 19765 // that can be coerced to finite numbers (gh-2662) 19766 var type = jQuery.type( obj ); 19767 return ( type === "number" || type === "string" ) && 19768 19769 // parseFloat NaNs numeric-cast false positives ("") 19770 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 19771 // subtraction forces infinities to NaN 19772 !isNaN( obj - parseFloat( obj ) ); 19773}; 19774 19775jQuery.trim = function( text ) { 19776 return text == null ? 19777 "" : 19778 ( text + "" ).replace( rtrim, "$1" ); 19779}; 19780 19781 19782 19783// Register as a named AMD module, since jQuery can be concatenated with other 19784// files that may use define, but not via a proper concatenation script that 19785// understands anonymous AMD modules. A named AMD is safest and most robust 19786// way to register. Lowercase jquery is used because AMD module names are 19787// derived from file names, and jQuery is normally delivered in a lowercase 19788// file name. Do this after creating the global so that if an AMD module wants 19789// to call noConflict to hide this version of jQuery, it will work. 19790 19791// Note that for maximum portability, libraries that are not jQuery should 19792// declare themselves as anonymous modules, and avoid setting a global if an 19793// AMD loader is present. jQuery is a special case. For more information, see 19794// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 19795 19796if ( true ) { 19797 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 19798 return jQuery; 19799 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 19800 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 19801} 19802 19803 19804 19805 19806var 19807 19808 // Map over jQuery in case of overwrite 19809 _jQuery = window.jQuery, 19810 19811 // Map over the $ in case of overwrite 19812 _$ = window.$; 19813 19814jQuery.noConflict = function( deep ) { 19815 if ( window.$ === jQuery ) { 19816 window.$ = _$; 19817 } 19818 19819 if ( deep && window.jQuery === jQuery ) { 19820 window.jQuery = _jQuery; 19821 } 19822 19823 return jQuery; 19824}; 19825 19826// Expose jQuery and $ identifiers, even in AMD 19827// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 19828// and CommonJS for browser emulators (trac-13566) 19829if ( typeof noGlobal === "undefined" ) { 19830 window.jQuery = window.$ = jQuery; 19831} 19832 19833 19834 19835 19836return jQuery; 19837} ); 19838 19839 19840/***/ }), 19841
vendor: 141,088 bytes, lines 19842-19865
19842/***/ "../FigureBaseResources/node_modules/offset-analytics/dist/offset-analytics.umd.cjs": 19843/*!******************************************************************************************!*\ 19844 !*** ../FigureBaseResources/node_modules/offset-analytics/dist/offset-analytics.umd.cjs ***! 19845 \******************************************************************************************/ 19846/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 19847 19848(function(q,x){ true?x(exports):0})(this,function(q){"use strict";var Pu=Object.defineProperty;var oi=Object.getOwnPropertySymbols;var Cu=Object.prototype.hasOwnProperty,Ru=Object.prototype.propertyIsEnumerable;var rn=(q,x,F)=>x in q?Pu(q,x,{enumerable:!0,configurable:!0,writable:!0,value:F}):q[x]=F,on=(q,x)=>{for(var F in x||(x={}))Cu.call(x,F)&&rn(q,F,x[F]);if(oi)for(var F of oi(x))Ru.call(x,F)&&rn(q,F,x[F]);return q};var z=(q,x,F)=>rn(q,typeof x!="symbol"?x+"":x,F);var lt=(q,x,F)=>new Promise((he,Pe)=>{var ft=ae=>{try{ee(F.next(ae))}catch(Ce){Pe(Ce)}},$e=ae=>{try{ee(F.throw(ae))}catch(Ce){Pe(Ce)}},ee=ae=>ae.done?he(ae.value):Promise.resolve(ae.value).then(ft,$e);ee((F=F.apply(q,x)).next())});function x(e,t){return!e||Array.isArray(e)||typeof e!="object"||Object.keys(t).forEach(n=>{const r=t[n];r&&n in e&&(e[r]=e[n],delete e[n])}),e}const F="https://cantina.clientdev.io/api/";function he(e,t=null){if(t===null){if(typeof window!="undefined"){const n=window.localStorage.getItem(`offset-${e}`);if(n)return JSON.parse(n)}return null}else typeof window!="undefined"&&window.localStorage.setItem(`offset-${e}`,JSON.stringify(t))}function Pe(e){return["config"].some(t=>e.startsWith(t))}function ft(e){var n,r;const t=(n=window.OFFSET)==null?void 0:n.offsetLocalCantina;return V(t)?null:typeof t=="object"&&!Array.isArray(t)&&t!==null?e in t?t[e]:null:((r=window.OFFSET)==null?void 0:r.offsetLocalCantina)+e}let $e=!1,ee="";function ae(n){return lt(this,arguments,function*(e,t={}){V(ee)&&(ee=he("session-id"),V(ee)&&(ee=window.crypto.randomUUID(),he("session-id",ee)));function r(){return lt(this,null,function*(){var c;const i=on({Accept:"application/json","Content-Type":"application/json"},(t==null?void 0:t.headers)||{}),o=ft(e),a=!V(o)&&!$e,u=a?o:F+e;if(a||(i["X-API-Key"]=(c=window.OFFSET)==null?void 0:c.apiKey,V(ee)||(i["X-Session-Id"]=ee)),a){const l=Ce(e);if(l)return se(`Using inline data for endpoint ${e}`),l}const s=yield fetch(u,on({mode:a?"no-cors":"cors",credentials:"include",headers:i},t));if(s.status===404&&a)return $e=!0,r();if(s.status===200){const l=yield s.json();if(l!=null&&!V(l.error)&&l.error==="Authentication Required")throw he("session-id",""),ee="",new Error("Authentication Required");return l!=null&&V(l.error)&&Pe(e)&&he(e,l),l}throw new Error(`Request failed with status ${s.status} for endpoint ${e}`)})}if(Pe(e)){const i=he(e);if(i)return r(),i}return yield r()})}function Ce(e){const t=document.querySelector(`[data-offset-inline="${e}"]`);if(t)try{const n=t.content?t.content.textContent:t.textContent&&t.textContent!=""?t.textContent:"{}";return JSON.parse(n)}catch(n){se(`Error parsing inline data for endpoint ${e}:`,n)}return null}function V(e){return!e||e==null||e===""}function se(...e){var n;((n=window.OFFSET)==null?void 0:n.debug)&&console.log(...e)}const an={PageView:"pageview",CompleteRegistration:"sign_up",ViewCart:"view_cart",ViewItemList:"view_item_list",ViewItem:"view_item",AddToCart:"add_to_cart",RemoveFromCart:"remove_from_cart",InitiateCheckout:"begin_checkout",Purchase:"purchase"};function ai(e,t={}){let n=t?t.items||[]:[];return Array.isArray(n)||(n=Object.values(n)),e==="ViewItem"||e==="ViewCart"?t.items=n.map(r=>(r=x(r,{id:"item_id",name:"item_name",producer:"item_brand",blends:"item_variant",country:"item_category",region:"item_category2"}),"producer"in r&&(r.item_category3=r.producer),r)):(e==="AddToCart"||e==="RemoveFromCart"||e==="InitiateCheckout"||e==="Purchase")&&(t.items=n.map(r=>(r=x(r,{id:"item_id",name:"item_name"}),r))),t}class si{constructor(t=null,n=null){this.trackingId=t,this.offsetTrackingId=n,this.hasGtag()||this.loadGtag()}trackEvent(t,n){n=ai(t,n),an[t]&&(t=an[t]),V(t)?window.dataLayer.push(n):window.gtag("event",t,n)}hasGtag(){return typeof window.gtag=="function"}loadGtag(){const t=document.createElement("script");t.src=`https://www.googletagmanager.com/gtag/js?id=${this.trackingId}`,t.async=!0,document.head.appendChild(t),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)},window.gtag("js",new Date),this.trackingId&&window.gtag("config",this.trackingId),this.offsetTrackingId&&window.gtag("config",this.offsetTrackingId)}}const sn={ViewItem:"ViewContent"};function ui(e,t={}){return(e==="AddToCart"||e==="InitiateCheckout"||e==="Purchase")&&(t=x(t,{items:"contents"})),t}const ci=["AddPaymentInfo","AddToCart","AddToWishlist","CompleteRegistration","Contact","CustomizeProduct","Donate","FindLocation","InitiateCheckout","Lead","Purchase","Schedule","Search","StartTrial","SubmitApplication","Subscribe","ViewContent"];class li{constructor(t=null,n=null){this.trackingId=t,this.offsetTrackingId=n,this.hasFacebookPixel()||this.loadFacebookPixel()}trackEvent(t,n){n=ui(t,n),sn[t]&&(t=sn[t]),ci.includes(t)?window.fbq("track",t,n):window.fbq("trackCustom",t,n)}hasFacebookPixel(){var n;if(typeof window.fbq=="function")return!0;const t=document.getElementsByTagName("script");for(let r=0;r<t.length;r++)if((n=t[r])!=null&&n.src.includes("connect.facebook.net"))return!0;return!1}loadFacebookPixel(){const t=document.createElement("script");t.src=`https://connect.facebook.net/en_US/sdk.js?id=${this.trackingId}`,t.async=!0,document.head.appendChild(t),window.fbq=function(){window.fbq.callMethod?window.fbq.callMethod.apply(window.fbq,arguments):window.fbq.queue.push(arguments)},window.fbq.push=window.fbq,window.fbq.loaded=!0,window.fbq.version="2.0",window.fbq.queue=[],this.trackingId&&window.fbq("init",this.trackingId),this.offsetTrackingId&&window.fbq("init",this.offsetTrackingId)}}var dt=function(e,t){return dt=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},dt(e,t)};function B(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");dt(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var I=function(){return I=Object.assign||function(t){for(var n,r=1,i=arguments.length;r<i;r++){n=arguments[r];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},I.apply(this,arguments)};function vt(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function w(e,t,n,r){function i(o){return o instanceof n?o:new n(function(a){a(o)})}return new(n||(n=Promise))(function(o,a){function u(l){try{c(r.next(l))}catch(f){a(f)}}function s(l){try{c(r.throw(l))}catch(f){a(f)}}function c(l){l.done?o(l.value):i(l.value).then(u,s)}c((r=r.apply(e,t||[])).next())})}function b(e,t){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,a;return a={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function u(c){return function(l){return s([c,l])}}function s(c){if(r)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(n=0)),n;)try{if(r=1,i&&(o=c[0]&2?i.return:c[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,c[1])).done)return o;switch(i=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return n.label++,{value:c[1],done:!1};case 5:n.label++,i=c[1],c=[0];continue;case 7:c=n.ops.pop(),n.trys.pop();continue;default:if(o=n.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){n=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){n.label=c[1];break}if(c[0]===6&&n.label<o[1]){n.label=o[1],o=c;break}if(o&&n.label<o[2]){n.label=o[2],n.ops.push(c);break}o[2]&&n.ops.pop(),n.trys.pop();continue}c=t.call(e,n)}catch(l){c=[6,l],i=0}finally{r=o=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}function $(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function O(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)o.push(i.value)}catch(u){a={error:u}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(a)throw a.error}}return o}function K(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,o;r<i;r++)(o||!(r in t))&&(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))}function we(e){return this instanceof we?(this.v=e,this):new we(e)}function fi(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=n.apply(e,t||[]),i,o=[];return i={},u("next"),u("throw"),u("return",a),i[Symbol.asyncIterator]=function(){return this},i;function a(d){return function(m){return Promise.resolve(m).then(d,f)}}function u(d,m){r[d]&&(i[d]=function(y){return new Promise(function(_,v){o.push([d,y,_,v])>1||s(d,y)})},m&&(i[d]=m(i[d])))}function s(d,m){try{c(r[d](m))}catch(y){p(o[0][3],y)}}function c(d){d.value instanceof we?Promise.resolve(d.value.v).then(l,f):p(o[0][2],d)}function l(d){s("next",d)}function f(d){s("throw",d)}function p(d,m){d(m),o.shift(),o.length&&s(o[0][0],o[0][1])}}function di(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof $=="function"?$(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(o){n[o]=e[o]&&function(a){return new Promise(function(u,s){a=e[o](a),i(u,s,a.done,a.value)})}}function i(o,a,u,s){Promise.resolve(s).then(function(c){o({value:c,done:u})},a)}}typeof SuppressedError=="function"&&SuppressedError;var vi="Event tracked successfully",hi="Unexpected error occurred",pi="Event rejected due to exceeded retry count",gi="Event skipped due to optOut config",mi="Event rejected due to missing API key",yi="Invalid API key",bi="Client not initialized",U;(function(e){e.Unknown="unknown",e.Skipped="skipped",e.Success="success",e.RateLimit="rate_limit",e.PayloadTooLarge="payload_too_large",e.Invalid="invalid",e.Failed="failed",e.Timeout="Timeout",e.SystemError="SystemError"})(U||(U={}));var _e=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=U.Unknown),{event:e,code:t,message:n}},Ie=function(e){return e?(e^Math.random()*16>>e/4).toString(16):(String(1e7)+String(-1e3)+String(-4e3)+String(-8e3)+String(-1e11)).replace(/[018]/g,Ie)},Ei=function(){function e(t){this.client=t,this.queue=[],this.applying=!1,this.plugins=[]}return e.prototype.register=function(t,n){var r,i;return w(this,void 0,void 0,function(){return b(this,function(o){switch(o.label){case 0:return this.plugins.some(function(a){return a.name===t.name})?(n.loggerProvider.warn("Plugin with name ".concat(t.name," already exists, skipping registration")),[2]):(t.name===void 0&&(t.name=Ie(),n.loggerProvider.warn(`Plugin name is undefined. 19849 Generating a random UUID for plugin name: `.concat(t.name,`. 19850 Set a name for the plugin to prevent it from being added multiple times.`))),t.type=(r=t.type)!==null&&r!==void 0?r:"enrichment",[4,(i=t.setup)===null||i===void 0?void 0:i.call(t,n,this.client)]);case 1:return o.sent(),this.plugins.push(t),[2]}})})},e.prototype.deregister=function(t,n){var r;return w(this,void 0,void 0,function(){var i,o;return b(this,function(a){switch(a.label){case 0:return i=this.plugins.findIndex(function(u){return u.name===t}),i===-1?(n.loggerProvider.warn("Plugin with name ".concat(t," does not exist, skipping deregistration")),[2]):(o=this.plugins[i],this.plugins.splice(i,1),[4,(r=o.teardown)===null||r===void 0?void 0:r.call(o)]);case 1:return a.sent(),[2]}})})},e.prototype.reset=function(t){this.applying=!1;var n=this.plugins;n.map(function(r){var i;return(i=r.teardown)===null||i===void 0?void 0:i.call(r)}),this.plugins=[],this.client=t},e.prototype.push=function(t){var n=this;return new Promise(function(r){n.queue.push([t,r]),n.scheduleApply(0)})},e.prototype.scheduleApply=function(t){var n=this;this.applying||(this.applying=!0,setTimeout(function(){n.apply(n.queue.shift()).then(function(){n.applying=!1,n.queue.length>0&&n.scheduleApply(0)})},t))},e.prototype.apply=function(t){return w(this,void 0,void 0,function(){var n,r,i,o,a,u,s,d,m,c,l,f,p,d,m,y,_,v,h,g,E,T;return b(this,function(S){switch(S.label){case 0:if(!t)return[2];n=O(t,1),r=n[0],i=O(t,2),o=i[1],a=this.plugins.filter(function(k){return k.type==="before"}),S.label=1;case 1:S.trys.push([1,6,7,8]),u=$(a),s=u.next(),S.label=2;case 2:return s.done?[3,5]:(d=s.value,d.execute?[4,d.execute(I({},r))]:[3,4]);case 3:if(m=S.sent(),m===null)return o({event:r,code:0,message:""}),[2];r=m,S.label=4;case 4:return s=u.next(),[3,2];case 5:return[3,8];case 6:return c=S.sent(),h={error:c},[3,8];case 7:try{s&&!s.done&&(g=u.return)&&g.call(u)}finally{if(h)throw h.error}return[7];case 8:l=this.plugins.filter(function(k){return k.type==="enrichment"||k.type===void 0}),S.label=9;case 9:S.trys.push([9,14,15,16]),f=$(l),p=f.next(),S.label=10;case 10:return p.done?[3,13]:(d=p.value,d.execute?[4,d.execute(I({},r))]:[3,12]);case 11:if(m=S.sent(),m===null)return o({event:r,code:0,message:""}),[2];r=m,S.label=12;case 12:return p=f.next(),[3,10];case 13:return[3,16];case 14:return y=S.sent(),E={error:y},[3,16];case 15:try{p&&!p.done&&(T=f.return)&&T.call(f)}finally{if(E)throw E.error}return[7];case 16:return _=this.plugins.filter(function(k){return k.type==="destination"}),v=_.map(function(k){var P=I({},r);return k.execute(P).catch(function(R){return _e(P,0,String(R))})}),Promise.all(v).then(function(k){var P=O(k,1),R=P[0],W=R||_e(r,100,"Event not tracked, no destination plugins on the instance");o(W)}),[2]}})})},e.prototype.flush=function(){return w(this,void 0,void 0,function(){var t,n,r,i=this;return b(this,function(o){switch(o.label){case 0:return t=this.queue,this.queue=[],[4,Promise.all(t.map(function(a){return i.apply(a)}))];case 1:return o.sent(),n=this.plugins.filter(function(a){return a.type==="destination"}),r=n.map(function(a){return a.flush&&a.flush()}),[4,Promise.all(r)];case 2:return o.sent(),[2]}})})},e}(),un="-",je="AMP",wi="".concat(je,"_unsent"),cn="https://api2.amplitude.com/2/httpapi",_i="https://api.eu.amplitude.com/2/httpapi",Ii="https://api2.amplitude.com/batch",Ti="https://api.eu.amplitude.com/batch",Si=1e3,ht=function(e){if(Object.keys(e).length>Si)return!1;for(var t in e){var n=e[t];if(!ln(t,n))return!1}return!0},ln=function(e,t){var n,r;if(typeof e!="string")return!1;if(Array.isArray(t)){var i=!0;try{for(var o=$(t),a=o.next();!a.done;a=o.next()){var u=a.value;if(Array.isArray(u))return!1;if(typeof u=="object")i=i&&ht(u);else if(!["number","string"].includes(typeof u))return!1;if(!i)return!1}}catch(s){n={error:s}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}}else{if(t==null)return!1;if(typeof t=="object")return ht(t);if(!["number","string","boolean"].includes(typeof t))return!1}return!0},Re=function(){function e(){this._propertySet=new Set,this._properties={}}return e.prototype.getUserProperties=function(){return I({},this._properties)},e.prototype.set=function(t,n){return this._safeSet(j.SET,t,n),this},e.prototype.setOnce=function(t,n){return this._safeSet(j.SET_ONCE,t,n),this},e.prototype.append=function(t,n){return this._safeSet(j.APPEND,t,n),this},e.prototype.prepend=function(t,n){return this._safeSet(j.PREPEND,t,n),this},e.prototype.postInsert=function(t,n){return this._safeSet(j.POSTINSERT,t,n),this},e.prototype.preInsert=function(t,n){return this._safeSet(j.PREINSERT,t,n),this},e.prototype.remove=function(t,n){return this._safeSet(j.REMOVE,t,n),this},e.prototype.add=function(t,n){return this._safeSet(j.ADD,t,n),this},e.prototype.unset=function(t){return this._safeSet(j.UNSET,t,un),this},e.prototype.clearAll=function(){return this._properties={},this._properties[j.CLEAR_ALL]=un,this},e.prototype._safeSet=function(t,n,r){if(this._validate(t,n,r)){var i=this._properties[t];return i===void 0&&(i={},this._properties[t]=i),i[n]=r,this._propertySet.add(n),!0}return!1},e.prototype._validate=function(t,n,r){return this._properties[j.CLEAR_ALL]!==void 0||this._propertySet.has(n)?!1:t===j.ADD?typeof r=="number":t!==j.UNSET&&t!==j.REMOVE?ln(n,r):!0},e}(),j;(function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"})(j||(j={}));var fn;(function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"})(fn||(fn={}));var Te;(function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"})(Te||(Te={}));var Ai=function(e,t,n){var r=typeof e=="string"?{event_type:e}:e;return I(I(I({},r),n),t&&{event_properties:t})},dn=function(e,t){var n=I(I({},t),{event_type:Te.IDENTIFY,user_properties:e.getUserProperties()});return n},ki=function(e,t,n,r){var i,o=I(I({},r),{event_type:Te.GROUP_IDENTIFY,group_properties:n.getUserProperties(),groups:(i={},i[e]=t,i)});return o},Pi=function(e,t,n){var r,i=new Re;i.set(e,t);var o=I(I({},n),{event_type:Te.IDENTIFY,user_properties:i.getUserProperties(),groups:(r={},r[e]=t,r)});return o},Ci=function(e,t){return I(I({},t),{event_type:Te.REVENUE,event_properties:e.getEventProperties()})},Y=function(e){return{promise:e||Promise.resolve()}},Ri=function(){function e(t){t===void 0&&(t="$default"),this.initializing=!1,this.isReady=!1,this.q=[],this.dispatchQ=[],this.logEvent=this.track.bind(this),this.timeline=new Ei(this),this.name=t}return e.prototype._init=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){switch(n.label){case 0:return this.config=t,this.timeline.reset(this),[4,this.runQueuedFunctions("q")];case 1:return n.sent(),this.isReady=!0,[2]}})})},e.prototype.runQueuedFunctions=function(t){return w(this,void 0,void 0,function(){var n,r,i,o,a,u,s,c;return b(this,function(l){switch(l.label){case 0:n=this[t],this[t]=[],l.label=1;case 1:l.trys.push([1,8,9,10]),r=$(n),i=r.next(),l.label=2;case 2:return i.done?[3,7]:(o=i.value,a=o(),a&&"promise"in a?[4,a.promise]:[3,4]);case 3:return l.sent(),[3,6];case 4:return[4,a];case 5:l.sent(),l.label=6;case 6:return i=r.next(),[3,2];case 7:return[3,10];case 8:return u=l.sent(),s={error:u},[3,10];case 9:try{i&&!i.done&&(c=r.return)&&c.call(r)}finally{if(s)throw s.error}return[7];case 10:return this[t].length?[4,this.runQueuedFunctions(t)]:[3,12];case 11:l.sent(),l.label=12;case 12:return[2]}})})},e.prototype.track=function(t,n,r){var i=Ai(t,n,r);return Y(this.dispatch(i))},e.prototype.identify=function(t,n){var r=dn(t,n);return Y(this.dispatch(r))},e.prototype.groupIdentify=function(t,n,r,i){var o=ki(t,n,r,i);return Y(this.dispatch(o))},e.prototype.setGroup=function(t,n,r){var i=Pi(t,n,r);return Y(this.dispatch(i))},e.prototype.revenue=function(t,n){var r=Ci(t,n);return Y(this.dispatch(r))},e.prototype.add=function(t){return this.isReady?this._addPlugin(t):(this.q.push(this._addPlugin.bind(this,t)),Y())},e.prototype._addPlugin=function(t){return Y(this.timeline.register(t,this.config))},e.prototype.remove=function(t){return this.isReady?this._removePlugin(t):(this.q.push(this._removePlugin.bind(this,t)),Y())},e.prototype._removePlugin=function(t){return Y(this.timeline.deregister(t,this.config))},e.prototype.dispatchWithCallback=function(t,n){if(!this.isReady)return n(_e(t,0,bi));this.process(t).then(n)},e.prototype.dispatch=function(t){return w(this,void 0,void 0,function(){var n=this;return b(this,function(r){return this.isReady?[2,this.process(t)]:[2,new Promise(function(i){n.dispatchQ.push(n.dispatchWithCallback.bind(n,t,i))})]})})},e.prototype.process=function(t){return w(this,void 0,void 0,function(){var i,n,r,i;return b(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),this.config.optOut?[2,_e(t,0,gi)]:[4,this.timeline.push(t)];case 1:return i=o.sent(),i.code===200?this.config.loggerProvider.log(i.message):i.code===100?this.config.loggerProvider.warn(i.message):this.config.loggerProvider.error(i.message),[2,i];case 2:return n=o.sent(),r=String(n),this.config.loggerProvider.error(r),i=_e(t,0,r),[2,i];case 3:return[2]}})})},e.prototype.setOptOut=function(t){if(!this.isReady){this.q.push(this._setOptOut.bind(this,!!t));return}this._setOptOut(t)},e.prototype._setOptOut=function(t){this.config.optOut=!!t},e.prototype.flush=function(){return Y(this.timeline.flush())},e}(),Oi=function(){function e(){this.productId="",this.quantity=1,this.price=0}return e.prototype.setProductId=function(t){return this.productId=t,this},e.prototype.setQuantity=function(t){return t>0&&(this.quantity=t),this},e.prototype.setPrice=function(t){return this.price=t,this},e.prototype.setRevenueType=function(t){return this.revenueType=t,this},e.prototype.setCurrency=function(t){return this.currency=t,this},e.prototype.setRevenue=function(t){return this.revenue=t,this},e.prototype.setReceipt=function(t){return this.receipt=t,this},e.prototype.setReceiptSig=function(t){return this.receiptSig=t,this},e.prototype.setEventProperties=function(t){return ht(t)&&(this.properties=t),this},e.prototype.getEventProperties=function(){var t=this.properties?I({},this.properties):{};return t[re.REVENUE_PRODUCT_ID]=this.productId,t[re.REVENUE_QUANTITY]=this.quantity,t[re.REVENUE_PRICE]=this.price,t[re.REVENUE_TYPE]=this.revenueType,t[re.REVENUE_CURRENCY]=this.currency,t[re.REVENUE]=this.revenue,t[re.RECEIPT]=this.receipt,t[re.RECEIPT_SIG]=this.receiptSig,t},e}(),re;(function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE_CURRENCY="$currency",e.REVENUE="$revenue",e.RECEIPT="$receipt",e.RECEIPT_SIG="$receiptSig"})(re||(re={}));var Li=function(e,t){var n=Math.max(t,1);return e.reduce(function(r,i,o){var a=Math.floor(o/n);return r[a]||(r[a]=[]),r[a].push(i),r},[])},Q;(function(e){e[e.None=0]="None",e[e.Error=1]="Error",e[e.Warn=2]="Warn",e[e.Verbose=3]="Verbose",e[e.Debug=4]="Debug"})(Q||(Q={}));var Ge="Amplitude Logger ",vn=function(){function e(){this.logLevel=Q.None}return e.prototype.disable=function(){this.logLevel=Q.None},e.prototype.enable=function(t){t===void 0&&(t=Q.Warn),this.logLevel=t},e.prototype.log=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.logLevel<Q.Verbose||console.log("".concat(Ge,"[Log]: ").concat(t.join(" ")))},e.prototype.warn=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.logLevel<Q.Warn||console.warn("".concat(Ge,"[Warn]: ").concat(t.join(" ")))},e.prototype.error=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.logLevel<Q.Error||console.error("".concat(Ge,"[Error]: ").concat(t.join(" ")))},e.prototype.debug=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.logLevel<Q.Debug||console.log("".concat(Ge,"[Debug]: ").concat(t.join(" ")))},e}(),Be=function(){return{flushMaxRetries:12,flushQueueSize:200,flushIntervalMillis:1e4,instanceName:"$default_instance",logLevel:Q.Warn,loggerProvider:new vn,offline:!1,optOut:!1,serverUrl:cn,serverZone:"US",useBatch:!1}},xi=function(){function e(t){var n,r,i,o;this._optOut=!1;var a=Be();this.apiKey=t.apiKey,this.flushIntervalMillis=(n=t.flushIntervalMillis)!==null&&n!==void 0?n:a.flushIntervalMillis,this.flushMaxRetries=t.flushMaxRetries||a.flushMaxRetries,this.flushQueueSize=t.flushQueueSize||a.flushQueueSize,this.instanceName=t.instanceName||a.instanceName,this.loggerProvider=t.loggerProvider||a.loggerProvider,this.logLevel=(r=t.logLevel)!==null&&r!==void 0?r:a.logLevel,this.minIdLength=t.minIdLength,this.plan=t.plan,this.ingestionMetadata=t.ingestionMetadata,this.offline=t.offline!==void 0?t.offline:a.offline,this.optOut=(i=t.optOut)!==null&&i!==void 0?i:a.optOut,this.serverUrl=t.serverUrl,this.serverZone=t.serverZone||a.serverZone,this.storageProvider=t.storageProvider,this.transportProvider=t.transportProvider,this.useBatch=(o=t.useBatch)!==null&&o!==void 0?o:a.useBatch,this.loggerProvider.enable(this.logLevel);var u=hn(t.serverUrl,t.serverZone,t.useBatch);this.serverZone=u.serverZone,this.serverUrl=u.serverUrl}return Object.defineProperty(e.prototype,"optOut",{get:function(){return this._optOut},set:function(t){this._optOut=t},enumerable:!1,configurable:!0}),e}(),Ui=function(e,t){return e==="EU"?t?Ti:_i:t?Ii:cn},hn=function(e,t,n){if(e===void 0&&(e=""),t===void 0&&(t=Be().serverZone),n===void 0&&(n=Be().useBatch),e)return{serverUrl:e,serverZone:void 0};var r=["US","EU"].includes(t)?t:Be().serverZone;return{serverZone:r,serverUrl:Ui(r,n)}},pn=function(){function e(){this.sdk={metrics:{histogram:{}}}}return e.prototype.recordHistogram=function(t,n){this.sdk.metrics.histogram[t]=n},e}();function Di(e){return e instanceof Error?e.message:String(e)}function Ke(e){var t="";try{"body"in e&&(t=JSON.stringify(e.body,null,2))}catch(n){}return t}var Ni=function(){function e(){this.name="amplitude",this.type="destination",this.retryTimeout=1e3,this.throttleTimeout=3e4,this.storageKey="",this.scheduleId=null,this.scheduledTimeout=0,this.flushId=null,this.queue=[]}return e.prototype.setup=function(t){var n;return w(this,void 0,void 0,function(){var r,i=this;return b(this,function(o){switch(o.label){case 0:return this.config=t,this.storageKey="".concat(wi,"_").concat(this.config.apiKey.substring(0,10)),[4,(n=this.config.storageProvider)===null||n===void 0?void 0:n.get(this.storageKey)];case 1:return r=o.sent(),r&&r.length>0&&Promise.all(r.map(function(a){return i.execute(a)})).catch(),[2,Promise.resolve(void 0)]}})})},e.prototype.execute=function(t){var n=this;return t.insert_id||(t.insert_id=Ie()),new Promise(function(r){var i={event:t,attempts:0,callback:function(o){return r(o)},timeout:0};n.queue.push(i),n.schedule(n.config.flushIntervalMillis),n.saveEvents()})},e.prototype.removeEventsExceedFlushMaxRetries=function(t){var n=this;return t.filter(function(r){return r.attempts+=1,r.attempts<n.config.flushMaxRetries?!0:(n.fulfillRequest([r],500,pi),!1)})},e.prototype.scheduleEvents=function(t){var n=this;t.forEach(function(r){n.schedule(r.timeout===0?n.config.flushIntervalMillis:r.timeout)})},e.prototype.schedule=function(t){var n=this;if(!this.config.offline&&(this.scheduleId===null||this.scheduleId&&t>this.scheduledTimeout)){this.scheduleId&&clearTimeout(this.scheduleId),this.scheduledTimeout=t,this.scheduleId=setTimeout(function(){n.queue=n.queue.map(function(r){return r.timeout=0,r}),n.flush(!0)},t);return}},e.prototype.resetSchedule=function(){this.scheduleId=null,this.scheduledTimeout=0},e.prototype.flush=function(t){return t===void 0&&(t=!1),w(this,void 0,void 0,function(){var n,r,i,o=this;return b(this,function(a){switch(a.label){case 0:return this.config.offline?(this.resetSchedule(),this.config.loggerProvider.debug("Skipping flush while offline."),[2]):this.flushId?(this.resetSchedule(),this.config.loggerProvider.debug("Skipping flush because previous flush has not resolved."),[2]):(this.flushId=this.scheduleId,this.resetSchedule(),n=[],r=[],this.queue.forEach(function(u){return u.timeout===0?n.push(u):r.push(u)}),i=Li(n,this.config.flushQueueSize),[4,i.reduce(function(u,s){return w(o,void 0,void 0,function(){return b(this,function(c){switch(c.label){case 0:return[4,u];case 1:return c.sent(),[4,this.send(s,t)];case 2:return[2,c.sent()]}})})},Promise.resolve())]);case 1:return a.sent(),this.flushId=null,this.scheduleEvents(this.queue),[2]}})})},e.prototype.send=function(t,n){return n===void 0&&(n=!0),w(this,void 0,void 0,function(){var r,i,o,a,u;return b(this,function(s){switch(s.label){case 0:if(!this.config.apiKey)return[2,this.fulfillRequest(t,400,mi)];r={api_key:this.config.apiKey,events:t.map(function(c){var l=c.event;l.extra;var f=vt(l,["extra"]);return f}),options:{min_id_length:this.config.minIdLength},client_upload_time:new Date().toISOString(),request_metadata:this.config.requestMetadata},this.config.requestMetadata=new pn,s.label=1;case 1:return s.trys.push([1,3,,4]),i=hn(this.config.serverUrl,this.config.serverZone,this.config.useBatch).serverUrl,[4,this.config.transportProvider.send(i,r)];case 2:return o=s.sent(),o===null?(this.fulfillRequest(t,0,hi),[2]):n?(this.handleResponse(o,t),[3,4]):("body"in o?this.fulfillRequest(t,o.statusCode,"".concat(o.status,": ").concat(Ke(o))):this.fulfillRequest(t,o.statusCode,o.status),[2]);case 3:return a=s.sent(),u=Di(a),this.config.loggerProvider.error(u),this.handleResponse({status:U.Failed,statusCode:0},t),[3,4];case 4:return[2]}})})},e.prototype.handleResponse=function(t,n){var r=t.status;switch(r){case U.Success:{this.handleSuccessResponse(t,n);break}case U.Invalid:{this.handleInvalidResponse(t,n);break}case U.PayloadTooLarge:{this.handlePayloadTooLargeResponse(t,n);break}case U.RateLimit:{this.handleRateLimitResponse(t,n);break}default:{this.config.loggerProvider.warn(`{code: 0, error: "Status '`.concat(r,"' provided for ").concat(n.length,' events"}')),this.handleOtherResponse(n);break}}},e.prototype.handleSuccessResponse=function(t,n){this.fulfillRequest(n,t.statusCode,vi)},e.prototype.handleInvalidResponse=function(t,n){var r=this;if(t.body.missingField||t.body.error.startsWith(yi)){this.fulfillRequest(n,t.statusCode,t.body.error);return}var i=K(K(K(K([],O(Object.values(t.body.eventsWithInvalidFields)),!1),O(Object.values(t.body.eventsWithMissingFields)),!1),O(Object.values(t.body.eventsWithInvalidIdLengths)),!1),O(t.body.silencedEvents),!1).flat(),o=new Set(i),a=n.filter(function(s,c){if(o.has(c)){r.fulfillRequest([s],t.statusCode,t.body.error);return}return!0});a.length>0&&this.config.loggerProvider.warn(Ke(t));var u=this.removeEventsExceedFlushMaxRetries(a);this.scheduleEvents(u)},e.prototype.handlePayloadTooLargeResponse=function(t,n){if(n.length===1){this.fulfillRequest(n,t.statusCode,t.body.error);return}this.config.loggerProvider.warn(Ke(t)),this.config.flushQueueSize/=2;var r=this.removeEventsExceedFlushMaxRetries(n);this.scheduleEvents(r)},e.prototype.handleRateLimitResponse=function(t,n){var r=this,i=Object.keys(t.body.exceededDailyQuotaUsers),o=Object.keys(t.body.exceededDailyQuotaDevices),a=t.body.throttledEvents,u=new Set(i),s=new Set(o),c=new Set(a),l=n.filter(function(p,d){if(p.event.user_id&&u.has(p.event.user_id)||p.event.device_id&&s.has(p.event.device_id)){r.fulfillRequest([p],t.statusCode,t.body.error);return}return c.has(d)&&(p.timeout=r.throttleTimeout),!0});l.length>0&&this.config.loggerProvider.warn(Ke(t));var f=this.removeEventsExceedFlushMaxRetries(l);this.scheduleEvents(f)},e.prototype.handleOtherResponse=function(t){var n=this,r=t.map(function(o){return o.timeout=o.attempts*n.retryTimeout,o}),i=this.removeEventsExceedFlushMaxRetries(r);this.scheduleEvents(i)},e.prototype.fulfillRequest=function(t,n,r){this.removeEvents(t),t.forEach(function(i){return i.callback(_e(i.event,n,r))})},e.prototype.saveEvents=function(){if(this.config.storageProvider){var t=this.queue.map(function(n){return n.event});this.config.storageProvider.set(this.storageKey,t)}},e.prototype.removeEvents=function(t){this.queue=this.queue.filter(function(n){return!t.some(function(r){return r.event.insert_id===n.event.insert_id})}),this.saveEvents()},e}(),Mi=function(){function e(){}return e.prototype.getApplicationContext=function(){return{versionName:this.versionName,language:Fi(),platform:"Web",os:void 0,deviceModel:void 0}},e}(),Fi=function(){return typeof navigator!="undefined"&&(navigator.languages&&navigator.languages[0]||navigator.language)||""},qi=function(){function e(){this.queue=[]}return e.prototype.logEvent=function(t){this.receiver?this.receiver(t):this.queue.length<512&&this.queue.push(t)},e.prototype.setEventReceiver=function(t){this.receiver=t,this.queue.length>0&&(this.queue.forEach(function(n){t(n)}),this.queue=[])},e}(),ue=function(){return ue=Object.assign||function(t){for(var n,r=1,i=arguments.length;r<i;r++){n=arguments[r];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},ue.apply(this,arguments)};function He(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function gn(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)o.push(i.value)}catch(u){a={error:u}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(a)throw a.error}}return o}typeof SuppressedError=="function"&&SuppressedError;var We=function(e,t){var n,r,i=["string","number","boolean","undefined"],o=typeof e,a=typeof t;if(o!==a)return!1;try{for(var u=He(i),s=u.next();!s.done;s=u.next()){var c=s.value;if(c===o)return e===t}}catch(_){n={error:_}}finally{try{s&&!s.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}if(e==null&&t==null)return!0;if(e==null||t==null||e.length!==t.length)return!1;var l=Array.isArray(e),f=Array.isArray(t);if(l!==f)return!1;if(l&&f){for(var p=0;p<e.length;p++)if(!We(e[p],t[p]))return!1}else{var d=Object.keys(e).sort(),m=Object.keys(t).sort();if(!We(d,m))return!1;var y=!0;return Object.keys(e).forEach(function(_){We(e[_],t[_])||(y=!1)}),y}return!0},Vi="$set",$i="$unset",ji="$clearAll";Object.entries||(Object.entries=function(e){for(var t=Object.keys(e),n=t.length,r=new Array(n);n--;)r[n]=[t[n],e[t[n]]];return r});var Gi=function(){function e(){this.identity={userProperties:{}},this.listeners=new Set}return e.prototype.editIdentity=function(){var t=this,n=ue({},this.identity.userProperties),r=ue(ue({},this.identity),{userProperties:n});return{setUserId:function(i){return r.userId=i,this},setDeviceId:function(i){return r.deviceId=i,this},setUserProperties:function(i){return r.userProperties=i,this},setOptOut:function(i){return r.optOut=i,this},updateUserProperties:function(i){var o,a,u,s,c,l,f=r.userProperties||{};try{for(var p=He(Object.entries(i)),d=p.next();!d.done;d=p.next()){var m=gn(d.value,2),y=m[0],_=m[1];switch(y){case Vi:try{for(var v=(u=void 0,He(Object.entries(_))),h=v.next();!h.done;h=v.next()){var g=gn(h.value,2),E=g[0],T=g[1];f[E]=T}}catch(P){u={error:P}}finally{try{h&&!h.done&&(s=v.return)&&s.call(v)}finally{if(u)throw u.error}}break;case $i:try{for(var S=(c=void 0,He(Object.keys(_))),k=S.next();!k.done;k=S.next()){var E=k.value;delete f[E]}}catch(P){c={error:P}}finally{try{k&&!k.done&&(l=S.return)&&l.call(S)}finally{if(c)throw c.error}}break;case ji:f={};break}}}catch(P){o={error:P}}finally{try{d&&!d.done&&(a=p.return)&&a.call(p)}finally{if(o)throw o.error}}return r.userProperties=f,this},commit:function(){return t.setIdentity(r),this}}},e.prototype.getIdentity=function(){return ue({},this.identity)},e.prototype.setIdentity=function(t){var n=ue({},this.identity);this.identity=ue({},t),We(n,this.identity)||this.listeners.forEach(function(r){r(t)})},e.prototype.addIdentityListener=function(t){this.listeners.add(t)},e.prototype.removeIdentityListener=function(t){this.listeners.delete(t)},e}(),Oe=typeof globalThis!="undefined"?globalThis:typeof __webpack_require__.g!="undefined"?__webpack_require__.g:self,Bi=function(){function e(){this.identityStore=new Gi,this.eventBridge=new qi,this.applicationContextProvider=new Mi}return e.getInstance=function(t){return Oe.analyticsConnectorInstances||(Oe.analyticsConnectorInstances={}),Oe.analyticsConnectorInstances[t]||(Oe.analyticsConnectorInstances[t]=new e),Oe.analyticsConnectorInstances[t]},e}(),Le=function(e){return e===void 0&&(e="$default_instance"),Bi.getInstance(e)},Ki=function(e,t){Le(t).identityStore.editIdentity().setUserId(e).commit()},Hi=function(e,t){Le(t).identityStore.editIdentity().setDeviceId(e).commit()},Wi=function(){function e(){this.name="identity",this.type="before",this.identityStore=Le().identityStore}return e.prototype.execute=function(t){return w(this,void 0,void 0,function(){var n;return b(this,function(r){return n=t.user_properties,n&&this.identityStore.editIdentity().updateUserProperties(n).commit(),[2,t]})})},e.prototype.setup=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){return t.instanceName&&(this.identityStore=Le(t.instanceName).identityStore),[2]})})},e}(),ie=function(){var e="ampIntegrationContext";if(typeof globalThis!="undefined"&&typeof globalThis[e]!="undefined")return globalThis[e];if(typeof globalThis!="undefined")return globalThis;if(typeof window!="undefined")return window;if(typeof self!="undefined")return self;if(typeof __webpack_require__.g!="undefined")return __webpack_require__.g},mn=function(e,t){t===void 0&&(t=Date.now());var n=Date.now(),r=n-t;return r>e},yn=function(e,t,n){return t===void 0&&(t=""),n===void 0&&(n=10),[je,t,e.substring(0,n)].filter(Boolean).join("_")},zi=function(e){return"".concat(je.toLowerCase(),"_").concat(e.substring(0,6))},Yi=function(){var e,t,n,r;if(typeof navigator=="undefined")return"";var i=navigator.userLanguage;return(r=(n=(t=(e=navigator.languages)===null||e===void 0?void 0:e[0])!==null&&t!==void 0?t:navigator.language)!==null&&n!==void 0?n:i)!==null&&r!==void 0?r:""},ze=function(){var e,t=ie();if(!(!((e=t==null?void 0:t.location)===null||e===void 0)&&e.search))return{};var n=t.location.search.substring(1).split("&").filter(Boolean),r=n.reduce(function(i,o){var a=o.split("=",2),u=bn(a[0]),s=bn(a[1]);return s&&(i[u]=s),i},{});return r},bn=function(e){e===void 0&&(e="");try{return decodeURIComponent(e)}catch(t){return""}},Xi=function(e){var t=new Error().stack||"";return t.split(` 19851`).slice(2+e).map(function(n){return n.trim()})},D=function(e){return function(){var t=I({},e.config),n=t.loggerProvider,r=t.logLevel;return{logger:n,logLevel:r}}},Qi=function(e,t){var n,r;t=t.replace(/\[(\w+)\]/g,".$1"),t=t.replace(/^\./,"");try{for(var i=$(t.split(".")),o=i.next();!o.done;o=i.next()){var a=o.value;if(a in e)e=e[a];else return}}catch(u){n={error:u}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return e},N=function(e,t){return function(){var n,r,i={};try{for(var o=$(t),a=o.next();!a.done;a=o.next()){var u=a.value;i[u]=Qi(e,u)}}catch(s){n={error:s}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i}},M=function(e,t,n,r,i){return i===void 0&&(i=null),function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var u=n(),s=u.logger,c=u.logLevel;if(c&&c<Q.Debug||!c||!s)return e.apply(i,o);var l={type:"invoke public method",name:t,args:o,stacktrace:Xi(1),time:{start:new Date().toISOString()},states:{}};r&&l.states&&(l.states.before=r());var f=e.apply(i,o);return f&&f.promise?f.promise.then(function(){r&&l.states&&(l.states.after=r()),l.time&&(l.time.end=new Date().toISOString()),s.debug(JSON.stringify(l,null,2))}):(r&&l.states&&(l.states.after=r()),l.time&&(l.time.end=new Date().toISOString()),s.debug(JSON.stringify(l,null,2))),f}},pt=function(){function e(){this.memoryStorage=new Map}return e.prototype.isEnabled=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return[2,!0]})})},e.prototype.get=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){return[2,this.memoryStorage.get(t)]})})},e.prototype.getRaw=function(t){return w(this,void 0,void 0,function(){var n;return b(this,function(r){switch(r.label){case 0:return[4,this.get(t)];case 1:return n=r.sent(),[2,n?JSON.stringify(n):void 0]}})})},e.prototype.set=function(t,n){return w(this,void 0,void 0,function(){return b(this,function(r){return this.memoryStorage.set(t,n),[2]})})},e.prototype.remove=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){return this.memoryStorage.delete(t),[2]})})},e.prototype.reset=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return this.memoryStorage.clear(),[2]})})},e}(),gt=function(){function e(t){this.options=I({},t)}return e.prototype.isEnabled=function(){return w(this,void 0,void 0,function(){var t,n,r;return b(this,function(i){switch(i.label){case 0:if(!ie())return[2,!1];e.testValue=String(Date.now()),t=new e(this.options),n="AMP_TEST",i.label=1;case 1:return i.trys.push([1,4,5,7]),[4,t.set(n,e.testValue)];case 2:return i.sent(),[4,t.get(n)];case 3:return r=i.sent(),[2,r===e.testValue];case 4:return i.sent(),[2,!1];case 5:return[4,t.remove(n)];case 6:return i.sent(),[7];case 7:return[2]}})})},e.prototype.get=function(t){var n;return w(this,void 0,void 0,function(){var r,i;return b(this,function(o){switch(o.label){case 0:return[4,this.getRaw(t)];case 1:if(r=o.sent(),!r)return[2,void 0];try{return i=(n=Zi(r))!==null&&n!==void 0?n:Ji(r),i===void 0?(console.error("Amplitude Logger [Error]: Failed to decode cookie value for key: ".concat(t,", value: ").concat(r)),[2,void 0]):[2,JSON.parse(i)]}catch(a){return console.error("Amplitude Logger [Error]: Failed to parse cookie value for key: ".concat(t,", value: ").concat(r)),[2,void 0]}// removed by dead control flow 19852}})})},e.prototype.getRaw=function(t){var n,r;return w(this,void 0,void 0,function(){var i,o,a;return b(this,function(u){return i=ie(),o=(r=(n=i==null?void 0:i.document)===null||n===void 0?void 0:n.cookie.split("; "))!==null&&r!==void 0?r:[],a=o.find(function(s){return s.indexOf(t+"=")===0}),a?[2,a.substring(t.length+1)]:[2,void 0]})})},e.prototype.set=function(t,n){var r;return w(this,void 0,void 0,function(){var i,o,a,u,s,c,l;return b(this,function(f){try{i=(r=this.options.expirationDays)!==null&&r!==void 0?r:0,o=n!==null?i:-1,a=void 0,o&&(u=new Date,u.setTime(u.getTime()+o*24*60*60*1e3),a=u),s="".concat(t,"=").concat(btoa(encodeURIComponent(JSON.stringify(n)))),a&&(s+="; expires=".concat(a.toUTCString())),s+="; path=/",this.options.domain&&(s+="; domain=".concat(this.options.domain)),this.options.secure&&(s+="; Secure"),this.options.sameSite&&(s+="; SameSite=".concat(this.options.sameSite)),c=ie(),c&&(c.document.cookie=s)}catch(p){l=p instanceof Error?p.message:String(p),console.error("Amplitude Logger [Error]: Failed to set cookie for key: ".concat(t,". Error: ").concat(l))}return[2]})})},e.prototype.remove=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){switch(n.label){case 0:return[4,this.set(t,null)];case 1:return n.sent(),[2]}})})},e.prototype.reset=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return[2]})})},e}(),Zi=function(e){try{return decodeURIComponent(atob(e))}catch(t){return}},Ji=function(e){try{return decodeURIComponent(atob(decodeURIComponent(e)))}catch(t){return}},eo=function(e,t,n){return n===void 0&&(n=10),[je,t,e.substring(0,n)].filter(Boolean).join("_")},Ye=function(){function e(){}return e.prototype.send=function(t,n){return Promise.resolve(null)},e.prototype.buildResponse=function(t){var n,r,i,o,a,u,s,c,l,f,p,d,m,y,_,v,h,g,E,T,S,k;if(typeof t!="object")return null;var P=t.code||0,R=this.buildStatus(P);switch(R){case U.Success:return{status:R,statusCode:P,body:{eventsIngested:(n=t.events_ingested)!==null&&n!==void 0?n:0,payloadSizeBytes:(r=t.payload_size_bytes)!==null&&r!==void 0?r:0,serverUploadTime:(i=t.server_upload_time)!==null&&i!==void 0?i:0}};case U.Invalid:return{status:R,statusCode:P,body:{error:(o=t.error)!==null&&o!==void 0?o:"",missingField:(a=t.missing_field)!==null&&a!==void 0?a:"",eventsWithInvalidFields:(u=t.events_with_invalid_fields)!==null&&u!==void 0?u:{},eventsWithMissingFields:(s=t.events_with_missing_fields)!==null&&s!==void 0?s:{},eventsWithInvalidIdLengths:(c=t.events_with_invalid_id_lengths)!==null&&c!==void 0?c:{},epsThreshold:(l=t.eps_threshold)!==null&&l!==void 0?l:0,exceededDailyQuotaDevices:(f=t.exceeded_daily_quota_devices)!==null&&f!==void 0?f:{},silencedDevices:(p=t.silenced_devices)!==null&&p!==void 0?p:[],silencedEvents:(d=t.silenced_events)!==null&&d!==void 0?d:[],throttledDevices:(m=t.throttled_devices)!==null&&m!==void 0?m:{},throttledEvents:(y=t.throttled_events)!==null&&y!==void 0?y:[]}};case U.PayloadTooLarge:return{status:R,statusCode:P,body:{error:(_=t.error)!==null&&_!==void 0?_:""}};case U.RateLimit:return{status:R,statusCode:P,body:{error:(v=t.error)!==null&&v!==void 0?v:"",epsThreshold:(h=t.eps_threshold)!==null&&h!==void 0?h:0,throttledDevices:(g=t.throttled_devices)!==null&&g!==void 0?g:{},throttledUsers:(E=t.throttled_users)!==null&&E!==void 0?E:{},exceededDailyQuotaDevices:(T=t.exceeded_daily_quota_devices)!==null&&T!==void 0?T:{},exceededDailyQuotaUsers:(S=t.exceeded_daily_quota_users)!==null&&S!==void 0?S:{},throttledEvents:(k=t.throttled_events)!==null&&k!==void 0?k:[]}};case U.Timeout:default:return{status:R,statusCode:P}}},e.prototype.buildStatus=function(t){return t>=200&&t<300?U.Success:t===429?U.RateLimit:t===413?U.PayloadTooLarge:t===408?U.Timeout:t>=400&&t<500?U.Invalid:t>=500?U.Failed:U.Unknown},e}(),to=function(e){B(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.send=function(n,r){return w(this,void 0,void 0,function(){var i,o,a;return b(this,function(u){switch(u.label){case 0:if(typeof fetch=="undefined")throw new Error("FetchTransport is not supported");return i={headers:{"Content-Type":"application/json",Accept:"*/*"},body:JSON.stringify(r),method:"POST"},[4,fetch(n,i)];case 1:return o=u.sent(),[4,o.text()];case 2:a=u.sent();try{return[2,this.buildResponse(JSON.parse(a))]}catch(s){return[2,this.buildResponse({code:o.status})]}// removed by dead control flow 19853}})})},t}(Ye),no=null,ro=["a","button","input","select","textarea","label","video","audio",'[contenteditable="true" i]',"[data-amp-default-track]",".amp-default-track"],io="data-amp-track-",oo=["div","span","h1","h2","h3","h4","h5","h6"],xe=function(e,t){return typeof e=="boolean"?e:(e==null?void 0:e[t])!==!1},En=function(e){return xe(e,"attribution")},ao=function(e){return xe(e,"fileDownloads")},so=function(e){return xe(e,"formInteractions")},wn=function(e){return xe(e,"pageViews")},_n=function(e){return xe(e,"sessions")},In=function(e){return typeof e=="boolean"?e:typeof e=="object"&&(e.elementInteractions===!0||typeof e.elementInteractions=="object")},uo=function(e){if(In(e.autocapture)&&typeof e.autocapture=="object"&&typeof e.autocapture.elementInteractions=="object")return e.autocapture.elementInteractions},co=function(e){var t=function(){return!1},n=void 0,r,i=e.pageCounter,o=wn(e.defaultTracking);return o&&(t=void 0,r=void 0,e.defaultTracking&&typeof e.defaultTracking=="object"&&e.defaultTracking.pageViews&&typeof e.defaultTracking.pageViews=="object"&&("trackOn"in e.defaultTracking.pageViews&&(t=e.defaultTracking.pageViews.trackOn),"trackHistoryChanges"in e.defaultTracking.pageViews&&(n=e.defaultTracking.pageViews.trackHistoryChanges),"eventType"in e.defaultTracking.pageViews&&e.defaultTracking.pageViews.eventType&&(r=e.defaultTracking.pageViews.eventType))),{trackOn:t,trackHistoryChanges:n,eventType:r,pageCounter:i}},lo=function(e){return En(e.defaultTracking)&&e.defaultTracking&&typeof e.defaultTracking=="object"&&e.defaultTracking.attribution&&typeof e.defaultTracking.attribution=="object"?I({},e.defaultTracking.attribution):{}},mt=function(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.name,o=r.args,a=r.resolve,u=e&&e[i];if(typeof u=="function"){var s=u.apply(e,o);typeof a=="function"&&a(s==null?void 0:s.promise)}}return e},yt=function(e){var t=e;return t&&t._q!==void 0},Tn="2.12.2",fo="amplitude-ts",vo="Web",ho="$remote",po=function(){function e(){this.name="@amplitude/plugin-context-browser",this.type="before",this.library="".concat(fo,"/").concat(Tn),typeof navigator!="undefined"&&(this.userAgent=navigator.userAgent)}return e.prototype.setup=function(t){return this.config=t,Promise.resolve(void 0)},e.prototype.execute=function(t){var n,r;return w(this,void 0,void 0,function(){var i,o,a,u;return b(this,function(s){return i=new Date().getTime(),o=(n=this.config.lastEventId)!==null&&n!==void 0?n:-1,a=(r=t.event_id)!==null&&r!==void 0?r:o+1,this.config.lastEventId=a,t.time||(this.config.lastEventTime=i),u=I(I(I(I(I(I(I(I({user_id:this.config.userId,device_id:this.config.deviceId,session_id:this.config.sessionId,time:i},this.config.appVersion&&{app_version:this.config.appVersion}),this.config.trackingOptions.platform&&{platform:vo}),this.config.trackingOptions.language&&{language:Yi()}),this.config.trackingOptions.ipAddress&&{ip:ho}),{insert_id:Ie(),partner_id:this.config.partnerId,plan:this.config.plan}),this.config.ingestionMetadata&&{ingestion_metadata:{source_name:this.config.ingestionMetadata.sourceName,source_version:this.config.ingestionMetadata.sourceVersion}}),t),{event_id:a,library:this.library,user_agent:this.userAgent}),[2,u]})})},e}(),Sn=function(){function e(t){this.storage=t}return e.prototype.isEnabled=function(){return w(this,void 0,void 0,function(){var t,n,r,i;return b(this,function(o){switch(o.label){case 0:if(!this.storage)return[2,!1];t=String(Date.now()),n=new e(this.storage),r="AMP_TEST",o.label=1;case 1:return o.trys.push([1,4,5,7]),[4,n.set(r,t)];case 2:return o.sent(),[4,n.get(r)];case 3:return i=o.sent(),[2,i===t];case 4:return o.sent(),[2,!1];case 5:return[4,n.remove(r)];case 6:return o.sent(),[7];case 7:return[2]}})})},e.prototype.get=function(t){return w(this,void 0,void 0,function(){var n;return b(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this.getRaw(t)];case 1:return n=r.sent(),n?[2,JSON.parse(n)]:[2,void 0];case 2:return r.sent(),console.error("[Amplitude] Error: Could not get value from storage"),[2,void 0];case 3:return[2]}})})},e.prototype.getRaw=function(t){var n;return w(this,void 0,void 0,function(){return b(this,function(r){return[2,((n=this.storage)===null||n===void 0?void 0:n.getItem(t))||void 0]})})},e.prototype.set=function(t,n){var r;return w(this,void 0,void 0,function(){return b(this,function(i){try{(r=this.storage)===null||r===void 0||r.setItem(t,JSON.stringify(n))}catch(o){}return[2]})})},e.prototype.remove=function(t){var n;return w(this,void 0,void 0,function(){return b(this,function(r){try{(n=this.storage)===null||n===void 0||n.removeItem(t)}catch(i){}return[2]})})},e.prototype.reset=function(){var t;return w(this,void 0,void 0,function(){return b(this,function(n){try{(t=this.storage)===null||t===void 0||t.clear()}catch(r){}return[2]})})},e}(),Xe=1e3,An=function(e){B(t,e);function t(n){var r=this,i;return r=e.call(this,(i=ie())===null||i===void 0?void 0:i.localStorage)||this,r.loggerProvider=n==null?void 0:n.loggerProvider,r}return t.prototype.set=function(n,r){var i;return w(this,void 0,void 0,function(){var o;return b(this,function(a){switch(a.label){case 0:return Array.isArray(r)&&r.length>Xe?(o=r.length-Xe,[4,e.prototype.set.call(this,n,r.slice(0,Xe))]):[3,2];case 1:return a.sent(),(i=this.loggerProvider)===null||i===void 0||i.error("Failed to save ".concat(o," events because the queue length exceeded ").concat(Xe,".")),[3,4];case 2:return[4,e.prototype.set.call(this,n,r)];case 3:a.sent(),a.label=4;case 4:return[2]}})})},t}(Sn),go=function(e){B(t,e);function t(){var n;return e.call(this,(n=ie())===null||n===void 0?void 0:n.sessionStorage)||this}return t}(Sn),mo=function(e){B(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.state={done:4},n}return t.prototype.send=function(n,r){return w(this,void 0,void 0,function(){var i=this;return b(this,function(o){return[2,new Promise(function(a,u){typeof XMLHttpRequest=="undefined"&&u(new Error("XHRTransport is not supported."));var s=new XMLHttpRequest;s.open("POST",n,!0),s.onreadystatechange=function(){if(s.readyState===i.state.done){var c=s.responseText;try{a(i.buildResponse(JSON.parse(c)))}catch(l){a(i.buildResponse({code:s.status}))}}},s.setRequestHeader("Content-Type","application/json"),s.setRequestHeader("Accept","*/*"),s.send(JSON.stringify(r))})]})})},t}(Ye),yo=function(e){B(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.send=function(n,r){return w(this,void 0,void 0,function(){var i=this;return b(this,function(o){return[2,new Promise(function(a,u){var s=ie();if(!(s!=null&&s.navigator.sendBeacon))throw new Error("SendBeaconTransport is not supported");try{var c=JSON.stringify(r),l=s.navigator.sendBeacon(n,JSON.stringify(r));return a(l?i.buildResponse({code:200,events_ingested:r.events.length,payload_size_bytes:c.length,server_upload_time:Date.now()}):i.buildResponse({code:500}))}catch(f){u(f)}})]})})},t}(Ye),bo=function(e,t,n){return n===void 0&&(n=!0),w(void 0,void 0,void 0,function(){var r,i,o,a,u,s,c,l,f;return b(this,function(p){switch(p.label){case 0:return r=zi(e),[4,t.getRaw(r)];case 1:return i=p.sent(),i?n?[4,t.remove(r)]:[3,3]:[2,{optOut:!1}];case 2:p.sent(),p.label=3;case 3:return o=O(i.split("."),6),a=o[0],u=o[1],s=o[2],c=o[3],l=o[4],f=o[5],[2,{deviceId:a,userId:Eo(u),sessionId:bt(c),lastEventId:bt(f),lastEventTime:bt(l),optOut:!!s}]}})})},bt=function(e){var t=parseInt(e,32);if(!isNaN(t))return t},Eo=function(e){if(!(!atob||!escape||!e))try{return decodeURIComponent(escape(atob(e)))}catch(t){return}},ne="[Amplitude]",kn="".concat(ne," Form Started"),wo="".concat(ne," Form Submitted"),_o="".concat(ne," File Downloaded"),Pn="session_start",Cn="session_end",Io="".concat(ne," File Extension"),To="".concat(ne," File Name"),So="".concat(ne," Link ID"),Ao="".concat(ne," Link Text"),ko="".concat(ne," Link URL"),Et="".concat(ne," Form ID"),wt="".concat(ne," Form Name"),_t="".concat(ne," Form Destination"),Qe="cookie",Po="US",Co=function(e){B(t,e);function t(n,r,i,o,a,u,s,c,l,f,p,d,m,y,_,v,h,g,E,T,S,k,P,R,W,G,X,de,ve,ye,be,qe,Ve,ke){i===void 0&&(i=new pt),o===void 0&&(o={domain:"",expiration:365,sameSite:"Lax",secure:!1,upgrade:!0}),c===void 0&&(c=1e3),l===void 0&&(l=5),f===void 0&&(f=30),p===void 0&&(p=Qe),v===void 0&&(v=new vn),h===void 0&&(h=Q.Warn),E===void 0&&(E=!1),T===void 0&&(T=!1),P===void 0&&(P=""),R===void 0&&(R=Po),G===void 0&&(G=30*60*1e3),X===void 0&&(X=new An({loggerProvider:v})),de===void 0&&(de={ipAddress:!0,language:!0,platform:!0}),ve===void 0&&(ve="fetch"),ye===void 0&&(ye=!1),be===void 0&&(be=!1);var A=e.call(this,{apiKey:n,storageProvider:X,transportProvider:Rn(ve)})||this;return A.apiKey=n,A.appVersion=r,A.cookieOptions=o,A.defaultTracking=a,A.autocapture=u,A.flushIntervalMillis=c,A.flushMaxRetries=l,A.flushQueueSize=f,A.identityStorage=p,A.ingestionMetadata=d,A.instanceName=m,A.loggerProvider=v,A.logLevel=h,A.minIdLength=g,A.offline=E,A.partnerId=S,A.plan=k,A.serverUrl=P,A.serverZone=R,A.sessionTimeout=G,A.storageProvider=X,A.trackingOptions=de,A.transport=ve,A.useBatch=ye,A.fetchRemoteConfig=be,A.version=Tn,A._optOut=!1,A._cookieStorage=i,A.deviceId=s,A.lastEventId=y,A.lastEventTime=_,A.optOut=T,A.sessionId=W,A.pageCounter=Ve,A.userId=qe,A.debugLogsEnabled=ke,A.loggerProvider.enable(ke?Q.Debug:A.logLevel),A}return Object.defineProperty(t.prototype,"cookieStorage",{get:function(){return this._cookieStorage},set:function(n){this._cookieStorage!==n&&(this._cookieStorage=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"deviceId",{get:function(){return this._deviceId},set:function(n){this._deviceId!==n&&(this._deviceId=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"userId",{get:function(){return this._userId},set:function(n){this._userId!==n&&(this._userId=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"sessionId",{get:function(){return this._sessionId},set:function(n){this._sessionId!==n&&(this._sessionId=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"optOut",{get:function(){return this._optOut},set:function(n){this._optOut!==n&&(this._optOut=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastEventTime",{get:function(){return this._lastEventTime},set:function(n){this._lastEventTime!==n&&(this._lastEventTime=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastEventId",{get:function(){return this._lastEventId},set:function(n){this._lastEventId!==n&&(this._lastEventId=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"pageCounter",{get:function(){return this._pageCounter},set:function(n){this._pageCounter!==n&&(this._pageCounter=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"debugLogsEnabled",{set:function(n){this._debugLogsEnabled!==n&&(this._debugLogsEnabled=n,this.updateStorage())},enumerable:!1,configurable:!0}),t.prototype.updateStorage=function(){var n={deviceId:this._deviceId,userId:this._userId,sessionId:this._sessionId,optOut:this._optOut,lastEventTime:this._lastEventTime,lastEventId:this._lastEventId,pageCounter:this._pageCounter,debugLogsEnabled:this._debugLogsEnabled};this.cookieStorage.set(yn(this.apiKey),n)},t}(xi),Ro=function(e,t,n){return t===void 0&&(t={}),w(void 0,void 0,void 0,function(){var r,i,o,a,u,s,c,l,f,p,d,m,y,_,v,h,g,E,T,S,k,P,R,W,G,X,de,ve,ye,be,qe,Ve,ke,A,zt,Yt,Xt,Qt,Zt,Jt,en,tn,nn;return b(this,function(Ee){switch(Ee.label){case 0:return r=t.identityStorage||Qe,T={},r===Qe?[3,1]:(o="",[3,5]);case 1:return(k=(S=t.cookieOptions)===null||S===void 0?void 0:S.domain)!==null&&k!==void 0?(a=k,[3,4]):[3,2];case 2:return[4,Lo()];case 3:a=Ee.sent(),Ee.label=4;case 4:o=a,Ee.label=5;case 5:return i=I.apply(void 0,[(T.domain=o,T.expiration=365,T.sameSite="Lax",T.secure=!1,T.upgrade=!0,T),t.cookieOptions]),u=Oo(t.identityStorage,i),[4,bo(e,u,(R=(P=t.cookieOptions)===null||P===void 0?void 0:P.upgrade)!==null&&R!==void 0?R:!0)];case 6:return s=Ee.sent(),[4,u.get(yn(e))];case 7:return c=Ee.sent(),l=ze(),f=(ve=(de=(X=(G=(W=t.deviceId)!==null&&W!==void 0?W:l.ampDeviceId)!==null&&G!==void 0?G:l.deviceId)!==null&&X!==void 0?X:c==null?void 0:c.deviceId)!==null&&de!==void 0?de:s.deviceId)!==null&&ve!==void 0?ve:Ie(),p=(ye=c==null?void 0:c.lastEventId)!==null&&ye!==void 0?ye:s.lastEventId,d=(be=c==null?void 0:c.lastEventTime)!==null&&be!==void 0?be:s.lastEventTime,m=(Ve=(qe=t.optOut)!==null&&qe!==void 0?qe:c==null?void 0:c.optOut)!==null&&Ve!==void 0?Ve:s.optOut,y=(ke=c==null?void 0:c.sessionId)!==null&&ke!==void 0?ke:s.sessionId,_=(zt=(A=t.userId)!==null&&A!==void 0?A:c==null?void 0:c.userId)!==null&&zt!==void 0?zt:s.userId,n.previousSessionDeviceId=(Yt=c==null?void 0:c.deviceId)!==null&&Yt!==void 0?Yt:s.deviceId,n.previousSessionUserId=(Xt=c==null?void 0:c.userId)!==null&&Xt!==void 0?Xt:s.userId,v={ipAddress:(Zt=(Qt=t.trackingOptions)===null||Qt===void 0?void 0:Qt.ipAddress)!==null&&Zt!==void 0?Zt:!0,language:(en=(Jt=t.trackingOptions)===null||Jt===void 0?void 0:Jt.language)!==null&&en!==void 0?en:!0,platform:(nn=(tn=t.trackingOptions)===null||tn===void 0?void 0:tn.platform)!==null&&nn!==void 0?nn:!0},h=c==null?void 0:c.pageCounter,g=c==null?void 0:c.debugLogsEnabled,t.autocapture!==void 0&&(t.defaultTracking=t.autocapture),E=new Co(e,t.appVersion,u,i,t.defaultTracking,t.autocapture,f,t.flushIntervalMillis,t.flushMaxRetries,t.flushQueueSize,r,t.ingestionMetadata,t.instanceName,p,d,t.loggerProvider,t.logLevel,t.minIdLength,t.offline,m,t.partnerId,t.plan,t.serverUrl,t.serverZone,y,t.sessionTimeout,t.storageProvider,v,t.transport,t.useBatch,t.fetchRemoteConfig,_,h,g),[4,E.storageProvider.isEnabled()];case 8:return Ee.sent()||(E.loggerProvider.warn("Storage provider ".concat(E.storageProvider.constructor.name," is not enabled. Falling back to MemoryStorage.")),E.storageProvider=new pt),[2,E]}})})},Oo=function(e,t){switch(e===void 0&&(e=Qe),t===void 0&&(t={}),e){case"localStorage":return new An;case"sessionStorage":return new go;case"none":return new pt;case"cookie":default:return new gt(I(I({},t),{expirationDays:t.expiration}))}},Rn=function(e){return e==="xhr"?new mo:e==="beacon"?new yo:new to},Lo=function(e){return w(void 0,void 0,void 0,function(){var t,n,r,i,o,o,a,u,s,c;return b(this,function(l){switch(l.label){case 0:return[4,new gt().isEnabled()];case 1:if(!l.sent()||typeof location=="undefined"||!location.hostname)return[2,""];for(t=location.hostname,n=t.split("."),r=[],i="AMP_TLDTEST",o=n.length-2;o>=0;--o)r.push(n.slice(o).join("."));o=0,l.label=2;case 2:return o<r.length?(a=r[o],u={domain:"."+a},s=new gt(u),[4,s.set(i,1)]):[3,7];case 3:return l.sent(),[4,s.get(i)];case 4:return c=l.sent(),c?[4,s.remove(i)]:[3,6];case 5:return l.sent(),[2,"."+a];case 6:return o++,[3,2];case 7:return[2,""]}})})},On=function(){var e="ampIntegrationContext";if(typeof globalThis!="undefined"&&typeof globalThis[e]!="undefined")return globalThis[e];if(typeof globalThis!="undefined")return globalThis;if(typeof window!="undefined")return window;if(typeof self!="undefined")return self;if(typeof __webpack_require__.g!="undefined")return __webpack_require__.g},Ln=function(){var e,t=On();if(!(!((e=t==null?void 0:t.location)===null||e===void 0)&&e.search))return{};var n=t.location.search.substring(1).split("&").filter(Boolean),r=n.reduce(function(i,o){var a=o.split("=",2),u=xn(a[0]),s=xn(a[1]);return s&&(i[u]=s),i},{});return r},xn=function(e){e===void 0&&(e="");try{return decodeURIComponent(e)}catch(t){return""}},xo="utm_campaign",Uo="utm_content",Do="utm_id",No="utm_medium",Mo="utm_source",Fo="utm_term",Un="dclid",Dn="fbclid",Nn="gbraid",Mn="gclid",Fn="ko_click_id",qn="li_fat_id",Vn="msclkid",$n="rtd_cid",jn="ttclid",Gn="twclid",Bn="wbraid",Kn={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},qo=function(){function e(){}return e.prototype.parse=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return[2,I(I(I(I({},Kn),this.getUtmParam()),this.getReferrer()),this.getClickIds())]})})},e.prototype.getUtmParam=function(){var t=Ln(),n=t[xo],r=t[Uo],i=t[Do],o=t[No],a=t[Mo],u=t[Fo];return{utm_campaign:n,utm_content:r,utm_id:i,utm_medium:o,utm_source:a,utm_term:u}},e.prototype.getReferrer=function(){var t,n,r={referrer:void 0,referring_domain:void 0};try{r.referrer=document.referrer||void 0,r.referring_domain=(n=(t=r.referrer)===null||t===void 0?void 0:t.split("/")[2])!==null&&n!==void 0?n:void 0}catch(i){}return r},e.prototype.getClickIds=function(){var t,n=Ln();return t={},t[Un]=n[Un],t[Dn]=n[Dn],t[Nn]=n[Nn],t[Mn]=n[Mn],t[Fn]=n[Fn],t[qn]=n[qn],t[Vn]=n[Vn],t[$n]=n[$n],t[jn]=n[jn],t[Gn]=n[Gn],t[Bn]=n[Bn],t},e}(),Ze;(function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"})(Ze||(Ze={}));var Hn;(function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE_CURRENCY="$currency",e.REVENUE="$revenue"})(Hn||(Hn={}));var Wn;(function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"})(Wn||(Wn={}));var Je;(function(e){e.US="US",e.EU="EU"})(Je||(Je={}));var et;(function(e){e.Unknown="unknown",e.Skipped="skipped",e.Success="success",e.RateLimit="rate_limit",e.PayloadTooLarge="payload_too_large",e.Invalid="invalid",e.Failed="failed",e.Timeout="Timeout",e.SystemError="SystemError"})(et||(et={}));var Vo=function(e){var t={};for(var n in e){var r=e[n];r&&(t[n]=r)}return t},$o="[Amplitude] Page Viewed",jo=function(e){e===void 0&&(e={});var t,n=On(),r=void 0,i,o,a=e.trackOn,u=e.trackHistoryChanges,s=e.eventType,c=s===void 0?$o:s,l=function(v){var h=v;try{h=decodeURI(v)}catch(g){r==null||r.error("Malformed URI sequence: ",g)}return h},f=function(){return w(void 0,void 0,void 0,function(){var v,h,g;return b(this,function(E){switch(E.label){case 0:return v=l(typeof location!="undefined"&&location.href||""),g={event_type:c},h=[{}],[4,Go()];case 1:return[2,(g.event_properties=I.apply(void 0,[I.apply(void 0,h.concat([E.sent()])),{"[Amplitude] Page Domain":typeof location!="undefined"&&location.hostname||"","[Amplitude] Page Location":v,"[Amplitude] Page Path":typeof location!="undefined"&&l(location.pathname)||"","[Amplitude] Page Title":typeof document!="undefined"&&document.title||"","[Amplitude] Page URL":v.split("?")[0]}]),g)]}})})},p=function(){return typeof a=="undefined"||typeof a=="function"&&a()},d=typeof location!="undefined"?location.href:null,m=function(){return w(void 0,void 0,void 0,function(){var v,h,g,E;return b(this,function(T){switch(T.label){case 0:return v=location.href,h=Ko(u,v,d||"")&&p(),d=v,h?(r==null||r.log("Tracking page view event"),t!=null?[3,1]:[3,3]):[3,4];case 1:return E=(g=t).track,[4,f()];case 2:E.apply(g,[T.sent()]),T.label=3;case 3:T.label=4;case 4:return[2]}})})},y=function(){m()},_={name:"@amplitude/plugin-page-view-tracking-browser",type:"enrichment",setup:function(v,h){return w(void 0,void 0,void 0,function(){var g,E;return b(this,function(T){switch(T.label){case 0:return t=h,o=v,r=v.loggerProvider,r.log("Installing @amplitude/plugin-page-view-tracking-browser"),n&&(n.addEventListener("popstate",y),i=n.history.pushState,n.history.pushState=new Proxy(n.history.pushState,{apply:function(S,k,P){var R=O(P,3),W=R[0],G=R[1],X=R[2];S.apply(k,[W,G,X]),m()}})),p()?(r.log("Tracking page view event"),E=(g=t).track,[4,f()]):[3,2];case 1:E.apply(g,[T.sent()]),T.label=2;case 2:return[2]}})})},execute:function(v){return w(void 0,void 0,void 0,function(){var h;return b(this,function(g){switch(g.label){case 0:return a==="attribution"&&Bo(v)?(r==null||r.log("Enriching campaign event to page view event with campaign parameters"),[4,f()]):[3,2];case 1:h=g.sent(),v.event_type=h.event_type,v.event_properties=I(I({},v.event_properties),h.event_properties),g.label=2;case 2:return o&&v.event_type===c&&(o.pageCounter=o.pageCounter?o.pageCounter+1:1,v.event_properties=I(I({},v.event_properties),{"[Amplitude] Page Counter":o.pageCounter})),[2,v]}})})},teardown:function(){return w(void 0,void 0,void 0,function(){return b(this,function(v){return n&&(n.removeEventListener("popstate",y),i&&(n.history.pushState=i)),[2]})})}};return _},Go=function(){return w(void 0,void 0,void 0,function(){var e;return b(this,function(t){switch(t.label){case 0:return e=Vo,[4,new qo().parse()];case 1:return[2,e.apply(void 0,[t.sent()])]}})})},Bo=function(e){if(e.event_type==="$identify"&&e.user_properties){var t=e.user_properties,n=t[Ze.SET]||{},r=t[Ze.UNSET]||{},i=K(K([],O(Object.keys(n)),!1),O(Object.keys(r)),!1);return Object.keys(Kn).every(function(o){return i.includes(o)})}return!1},Ko=function(e,t,n){switch(e){case"pathOnly":{if(n=="")return!0;var r=new URL(t),i=new URL(n),o=r.origin+r.pathname,a=i.origin+i.pathname;return o!==a}default:return t!==n}},Ho=function(){var e,t=[],n=function(c,l,f){c.addEventListener(l,f),t.push({element:c,type:l,handler:f})},r=function(){t.forEach(function(c){var l=c.element,f=c.type,p=c.handler;l==null||l.removeEventListener(f,p)}),t=[]},i="@amplitude/plugin-form-interaction-tracking-browser",o="enrichment",a=function(c,l){return w(void 0,void 0,void 0,function(){var f,p;return b(this,function(d){return f=function(){if(!l){c.loggerProvider.warn("Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.");return}if(typeof document!="undefined"){var m=function(_){var v=!1;n(_,"change",function(){var h,g=zn(_);v||l.track(kn,(h={},h[Et]=Se(_.id),h[wt]=Se(_.name),h[_t]=g,h)),v=!0}),n(_,"submit",function(){var h,g,E=zn(_);v||l.track(kn,(h={},h[Et]=Se(_.id),h[wt]=Se(_.name),h[_t]=E,h)),l.track(wo,(g={},g[Et]=Se(_.id),g[wt]=Se(_.name),g[_t]=E,g)),v=!1})},y=Array.from(document.getElementsByTagName("form"));y.forEach(m),typeof MutationObserver!="undefined"&&(e=new MutationObserver(function(_){_.forEach(function(v){v.addedNodes.forEach(function(h){h.nodeName==="FORM"&&m(h),"querySelectorAll"in h&&typeof h.querySelectorAll=="function"&&Array.from(h.querySelectorAll("form")).map(m)})})}),e.observe(document.body,{subtree:!0,childList:!0}))}},document.readyState==="complete"?f():(p=ie(),p?p.addEventListener("load",f):c.loggerProvider.debug("Form interaction tracking is not installed because global is undefined.")),[2]})})},u=function(c){return w(void 0,void 0,void 0,function(){return b(this,function(l){return[2,c]})})},s=function(){return w(void 0,void 0,void 0,function(){return b(this,function(c){return e==null||e.disconnect(),r(),[2]})})};return{name:i,type:o,setup:a,execute:u,teardown:s}},Se=function(e){if(typeof e=="string")return e},zn=function(e){var t=e.getAttribute("action");try{t=new URL(encodeURI(t!=null?t:""),window.location.href).href}catch(n){}return t},Wo=function(){var e,t=[],n=function(c,l,f){c.addEventListener(l,f),t.push({element:c,type:l,handler:f})},r=function(){t.forEach(function(c){var l=c.element,f=c.type,p=c.handler;l==null||l.removeEventListener(f,p)}),t=[]},i="@amplitude/plugin-file-download-tracking-browser",o="enrichment",a=function(c,l){return w(void 0,void 0,void 0,function(){var f,p;return b(this,function(d){return f=function(){if(!l){c.loggerProvider.warn("File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.");return}if(typeof document!="undefined"){var m=function(v){var h;try{h=new URL(v.href,window.location.href)}catch(T){return}var g=y.exec(h.href),E=g==null?void 0:g[1];E&&n(v,"click",function(){var T;E&&l.track(_o,(T={},T[Io]=E,T[To]=h.pathname,T[So]=v.id,T[Ao]=v.text,T[ko]=v.href,T))})},y=/\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)(\?.+)?$/,_=Array.from(document.getElementsByTagName("a"));_.forEach(m),typeof MutationObserver!="undefined"&&(e=new MutationObserver(function(v){v.forEach(function(h){h.addedNodes.forEach(function(g){g.nodeName==="A"&&m(g),"querySelectorAll"in g&&typeof g.querySelectorAll=="function"&&Array.from(g.querySelectorAll("a")).map(m)})})}),e.observe(document.body,{subtree:!0,childList:!0}))}},document.readyState==="complete"?f():(p=ie(),p?p.addEventListener("load",f):c.loggerProvider.debug("File download tracking is not installed because global is undefined.")),[2]})})},u=function(c){return w(void 0,void 0,void 0,function(){return b(this,function(l){return[2,c]})})},s=function(){return w(void 0,void 0,void 0,function(){return b(this,function(c){return e==null||e.disconnect(),r(),[2]})})};return{name:i,type:o,setup:a,execute:u,teardown:s}},Yn=!1,zo=function(e){if(!(Yn||e.defaultTracking!==void 0)){var t=`\`options.defaultTracking\` is set to undefined. This implicitly configures your Amplitude instance to track Page Views, Sessions, File Downloads, and Form Interactions. You can suppress this warning by explicitly setting a value to \`options.defaultTracking\`. The value must either be a boolean, to enable and disable all default events, or an object, for advanced configuration. For example: 19854 19855amplitude.init(<YOUR_API_KEY>, { 19856 defaultTracking: true, 19857}); 19858 19859Visit https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events for more details.`;e.loggerProvider.warn(t),Yn=!0}},Yo=function(){var e="@amplitude/plugin-network-checker-browser",t="before",n=ie(),r=[],i=function(s,c){n&&(n.addEventListener(s,c),r.push({type:s,handler:c}))},o=function(){r.forEach(function(s){var c=s.type,l=s.handler;n&&n.removeEventListener(c,l)}),r=[]},a=function(s,c){return w(void 0,void 0,void 0,function(){return b(this,function(l){return typeof navigator=="undefined"?(s.loggerProvider.debug("Network connectivity checker plugin is disabled because navigator is not available."),s.offline=!1,[2]):(s.offline=!navigator.onLine,i("online",function(){s.loggerProvider.debug("Network connectivity changed to online."),s.offline=!1,setTimeout(function(){c.flush()},s.flushIntervalMillis)}),i("offline",function(){s.loggerProvider.debug("Network connectivity changed to offline."),s.offline=!0}),[2])})})},u=function(){return w(void 0,void 0,void 0,function(){return b(this,function(s){return o(),[2]})})};return{name:e,type:t,setup:a,teardown:u}},Xo="Network error occurred, remote config fetch failed",Qo="Remote config successfully fetched",Zo="Remote config fetch rejected due to exceeded retry count",Xn="Remote config fetch rejected due to timeout after 5 seconds",Qn="Unexpected error occurred",Jo="https://sr-client-cfg.amplitude.com/config",ea="https://sr-client-cfg.stag2.amplitude.com/config",ta="https://sr-client-cfg.eu.amplitude.com/config",na=function(){function e(t){var n=t.localConfig,r=t.configKeys,i=this;this.retryTimeout=1e3,this.attempts=0,this.sessionTargetingMatch=!1,this.metrics={},this.getRemoteConfig=function(o,a,u){return w(i,void 0,void 0,function(){var s,c,l;return b(this,function(f){switch(f.label){case 0:return s=Date.now(),[4,this.fetchWithTimeout(u)];case 1:return c=f.sent(),c&&(l=c.configs&&c.configs[o],l)?(this.metrics.fetchTimeAPISuccess=Date.now()-s,[2,l[a]]):(this.metrics.fetchTimeAPIFail=Date.now()-s,[2,void 0])}})})},this.fetchWithTimeout=function(o){return w(i,void 0,void 0,function(){var a,u,s;return b(this,function(c){switch(c.label){case 0:return a=new AbortController,u=setTimeout(function(){return a.abort()},5e3),[4,this.fetchRemoteConfig(a.signal,o)];case 1:return s=c.sent(),clearTimeout(u),[2,s]}})})},this.fetchRemoteConfig=function(o,a){return w(i,void 0,void 0,function(){var u,s,c,l,f,p,d,m,y,_,v,h,g;return b(this,function(E){switch(E.label){case 0:if(a===this.lastFetchedSessionId&&this.attempts>=this.localConfig.flushMaxRetries)return[2,this.completeRequest({err:Zo})];if(o.aborted)return[2,this.completeRequest({err:Xn})];a!==this.lastFetchedSessionId&&(this.lastFetchedSessionId=a,this.attempts=0),E.label=1;case 1:E.trys.push([1,3,,4]),u=new URLSearchParams({api_key:this.localConfig.apiKey});try{for(s=$(this.configKeys),c=s.next();!c.done;c=s.next())l=c.value,u.append("config_keys",l)}catch(T){v={error:T}}finally{try{c&&!c.done&&(h=s.return)&&h.call(s)}finally{if(v)throw v.error}}return a&&u.set("session_id",String(a)),f={headers:{Accept:"*/*"},method:"GET"},p="".concat(this.getServerUrl(),"?").concat(u.toString()),this.attempts+=1,[4,fetch(p,I(I({},f),{signal:o}))];case 2:if(d=E.sent(),d===null)return[2,this.completeRequest({err:Qn})];switch(m=new Ye().buildStatus(d.status),m){case et.Success:return this.attempts=0,[2,this.parseAndStoreConfig(d)];case et.Failed:return[2,this.retryFetch(o,a)];default:return[2,this.completeRequest({err:Xo})]}case 3:return y=E.sent(),_=y,o.aborted?[2,this.completeRequest({err:Xn})]:[2,this.completeRequest({err:(g=_.message)!==null&&g!==void 0?g:Qn})];case 4:return[2]}})})},this.retryFetch=function(o,a){return w(i,void 0,void 0,function(){var u=this;return b(this,function(s){switch(s.label){case 0:return[4,new Promise(function(c){return setTimeout(c,u.attempts*u.retryTimeout)})];case 1:return s.sent(),[2,this.fetchRemoteConfig(o,a)]}})})},this.parseAndStoreConfig=function(o){return w(i,void 0,void 0,function(){var a;return b(this,function(u){switch(u.label){case 0:return[4,o.json()];case 1:return a=u.sent(),this.completeRequest({success:Qo}),[2,a]}})})},this.localConfig=n,this.configKeys=r}return e.prototype.getServerUrl=function(){return this.localConfig.serverZone===Je.STAGING?ea:this.localConfig.serverZone===Je.EU?ta:Jo},e.prototype.completeRequest=function(t){var n=t.err,r=t.success;if(n)throw new Error(n);r&&this.localConfig.loggerProvider.log(r)},e}(),ra=function(e){var t=e.localConfig,n=e.configKeys;return w(void 0,void 0,void 0,function(){return b(this,function(r){return[2,new na({localConfig:t,configKeys:n})]})})},ia=ra,oa=function(){function e(t){this.config=t,this.config.loggerProvider.debug("Local configuration before merging with remote config",JSON.stringify(this.config,null,2))}return e.prototype.initialize=function(){return w(this,void 0,void 0,function(){var t;return b(this,function(n){switch(n.label){case 0:return t=this,[4,ia({localConfig:this.config,configKeys:["analyticsSDK"]})];case 1:return t.remoteConfigFetch=n.sent(),[2]}})})},e.prototype.generateJoinedConfig=function(){var t,n,r,i;return w(this,void 0,void 0,function(){var o,a,u;return b(this,function(s){switch(s.label){case 0:return s.trys.push([0,3,,4]),a=this.remoteConfigFetch,a?[4,this.remoteConfigFetch.getRemoteConfig("analyticsSDK","browserSDK",this.config.sessionId)]:[3,2];case 1:a=s.sent(),s.label=2;case 2:return o=a,this.config.loggerProvider.debug("Remote configuration:",JSON.stringify(o,null,2)),o&&"autocapture"in o&&(typeof o.autocapture=="boolean"&&(this.config.autocapture=o.autocapture),typeof o.autocapture=="object"&&(this.config.autocapture===void 0&&(this.config.autocapture=o.autocapture),typeof this.config.autocapture=="boolean"&&(this.config.autocapture=I({attribution:this.config.autocapture,fileDownloads:this.config.autocapture,formInteractions:this.config.autocapture,pageViews:this.config.autocapture,sessions:this.config.autocapture,elementInteractions:this.config.autocapture},o.autocapture)),typeof this.config.autocapture=="object"&&(this.config.autocapture=I(I({},this.config.autocapture),o.autocapture))),this.config.defaultTracking=this.config.autocapture),this.config.loggerProvider.debug("Joined configuration: ",JSON.stringify(this.config,null,2)),(t=(i=this.config).requestMetadata)!==null&&t!==void 0||(i.requestMetadata=new pn),!((n=this.remoteConfigFetch)===null||n===void 0)&&n.metrics.fetchTimeAPISuccess&&this.config.requestMetadata.recordHistogram("remote_config_fetch_time_API_success",this.remoteConfigFetch.metrics.fetchTimeAPISuccess),!((r=this.remoteConfigFetch)===null||r===void 0)&&r.metrics.fetchTimeAPIFail&&this.config.requestMetadata.recordHistogram("remote_config_fetch_time_API_fail",this.remoteConfigFetch.metrics.fetchTimeAPIFail),[3,4];case 3:return u=s.sent(),this.config.loggerProvider.error("Failed to fetch remote configuration because of error: ",u),[3,4];case 4:return[2,this.config]}})})},e}(),aa=function(e){return w(void 0,void 0,void 0,function(){var t;return b(this,function(n){switch(n.label){case 0:return t=new oa(e),[4,t.initialize()];case 1:return n.sent(),[2,t]}})})},sa="@amplitude/plugin-autocapture-browser",It="[Amplitude] Element Clicked",ua="[Amplitude] Element Changed",ca="[Amplitude] Element ID",la="[Amplitude] Element Class",Zn="[Amplitude] Element Tag",Jn="[Amplitude] Element Text",fa="[Amplitude] Element Hierarchy",da="[Amplitude] Element Href",va="[Amplitude] Element Position Left",ha="[Amplitude] Element Position Top",pa="[Amplitude] Element Aria Label",ga="[Amplitude] Element Attributes",ma="[Amplitude] Element Parent Label",er="[Amplitude] Page URL",ya="[Amplitude] Page Title",ba="[Amplitude] Viewport Height",Ea="[Amplitude] Viewport Width",tt="https://app.amplitude.com",wa="https://app.eu.amplitude.com",_a="https://apps.stag2.amplitude.com",Ia={US:tt,EU:wa,STAGING:_a},Ta="https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz",Sa="amp-visual-tagging-selector-highlight";function L(e){return typeof e=="function"}function Tt(e){var t=function(r){Error.call(r),r.stack=new Error().stack},n=e(t);return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var St=Tt(function(e){return function(n){e(this),this.message=n?n.length+` errors occurred during unsubscription: 19860`+n.map(function(r,i){return i+1+") "+r.toString()}).join(` 19861 `):"",this.name="UnsubscriptionError",this.errors=n}});function nt(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var Ue=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,n,r,i,o;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var u=$(a),s=u.next();!s.done;s=u.next()){var c=s.value;c.remove(this)}}catch(y){t={error:y}}finally{try{s&&!s.done&&(n=u.return)&&n.call(u)}finally{if(t)throw t.error}}else a.remove(this);var l=this.initialTeardown;if(L(l))try{l()}catch(y){o=y instanceof St?y.errors:[y]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var p=$(f),d=p.next();!d.done;d=p.next()){var m=d.value;try{rr(m)}catch(y){o=o!=null?o:[],y instanceof St?o=K(K([],O(o)),O(y.errors)):o.push(y)}}}catch(y){r={error:y}}finally{try{d&&!d.done&&(i=p.return)&&i.call(p)}finally{if(r)throw r.error}}}if(o)throw new St(o)}},e.prototype.add=function(t){var n;if(t&&t!==this)if(this.closed)rr(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(t)}},e.prototype._hasParent=function(t){var n=this._parentage;return n===t||Array.isArray(n)&&n.includes(t)},e.prototype._addParent=function(t){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t},e.prototype._removeParent=function(t){var n=this._parentage;n===t?this._parentage=null:Array.isArray(n)&&nt(n,t)},e.prototype.remove=function(t){var n=this._finalizers;n&&nt(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}(),tr=Ue.EMPTY;function nr(e){return e instanceof Ue||e&&"closed"in e&&L(e.remove)&&L(e.add)&&L(e.unsubscribe)}function rr(e){L(e)?e():e.unsubscribe()}var ir={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},or={setTimeout:function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return setTimeout.apply(void 0,K([e,t],O(n)))},clearTimeout:function(e){var t=or.delegate;return((t==null?void 0:t.clearTimeout)||clearTimeout)(e)},delegate:void 0};function ar(e){or.setTimeout(function(){throw e})}function At(){}function rt(e){e()}var kt=function(e){B(t,e);function t(n){var r=e.call(this)||this;return r.isStopped=!1,n?(r.destination=n,nr(n)&&n.add(r)):r.destination=Ca,r}return t.create=function(n,r,i){return new De(n,r,i)},t.prototype.next=function(n){this.isStopped||this._next(n)},t.prototype.error=function(n){this.isStopped||(this.isStopped=!0,this._error(n))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(n){this.destination.next(n)},t.prototype._error=function(n){try{this.destination.error(n)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t}(Ue),Aa=Function.prototype.bind;function Pt(e,t){return Aa.call(e,t)}var ka=function(){function e(t){this.partialObserver=t}return e.prototype.next=function(t){var n=this.partialObserver;if(n.next)try{n.next(t)}catch(r){it(r)}},e.prototype.error=function(t){var n=this.partialObserver;if(n.error)try{n.error(t)}catch(r){it(r)}else it(t)},e.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(n){it(n)}},e}(),De=function(e){B(t,e);function t(n,r,i){var o=e.call(this)||this,a;if(L(n)||!n)a={next:n!=null?n:void 0,error:r!=null?r:void 0,complete:i!=null?i:void 0};else{var u;o&&ir.useDeprecatedNextContext?(u=Object.create(n),u.unsubscribe=function(){return o.unsubscribe()},a={next:n.next&&Pt(n.next,u),error:n.error&&Pt(n.error,u),complete:n.complete&&Pt(n.complete,u)}):a=n}return o.destination=new ka(a),o}return t}(kt);function it(e){ar(e)}function Pa(e){throw e}var Ca={closed:!0,next:At,error:Pa,complete:At},Ct=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}();function sr(e){return e}function Ra(e){return e.length===0?sr:e.length===1?e[0]:function(n){return e.reduce(function(r,i){return i(r)},n)}}var H=function(){function e(t){t&&(this._subscribe=t)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(t,n,r){var i=this,o=La(t)?t:new De(t,n,r);return rt(function(){var a=i,u=a.operator,s=a.source;o.add(u?u.call(o,s):s?i._subscribe(o):i._trySubscribe(o))}),o},e.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(n){t.error(n)}},e.prototype.forEach=function(t,n){var r=this;return n=ur(n),new n(function(i,o){var a=new De({next:function(u){try{t(u)}catch(s){o(s),a.unsubscribe()}},error:o,complete:i});r.subscribe(a)})},e.prototype._subscribe=function(t){var n;return(n=this.source)===null||n===void 0?void 0:n.subscribe(t)},e.prototype[Ct]=function(){return this},e.prototype.pipe=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return Ra(t)(this)},e.prototype.toPromise=function(t){var n=this;return t=ur(t),new t(function(r,i){var o;n.subscribe(function(a){return o=a},function(a){return i(a)},function(){return r(o)})})},e.create=function(t){return new e(t)},e}();function ur(e){var t;return(t=e!=null?e:ir.Promise)!==null&&t!==void 0?t:Promise}function Oa(e){return e&&L(e.next)&&L(e.error)&&L(e.complete)}function La(e){return e&&e instanceof kt||Oa(e)&&nr(e)}function xa(e){return L(e==null?void 0:e.lift)}function te(e){return function(t){if(xa(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function Z(e,t,n,r,i){return new Ua(e,t,n,r,i)}var Ua=function(e){B(t,e);function t(n,r,i,o,a,u){var s=e.call(this,n)||this;return s.onFinalize=a,s.shouldUnsubscribe=u,s._next=r?function(c){try{r(c)}catch(l){n.error(l)}}:e.prototype._next,s._error=o?function(c){try{o(c)}catch(l){n.error(l)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=i?function(){try{i()}catch(c){n.error(c)}finally{this.unsubscribe()}}:e.prototype._complete,s}return t.prototype.unsubscribe=function(){var n;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var r=this.closed;e.prototype.unsubscribe.call(this),!r&&((n=this.onFinalize)===null||n===void 0||n.call(this))}},t}(kt),Da=Tt(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),cr=function(e){B(t,e);function t(){var n=e.call(this)||this;return n.closed=!1,n.currentObservers=null,n.observers=[],n.isStopped=!1,n.hasError=!1,n.thrownError=null,n}return t.prototype.lift=function(n){var r=new lr(this,this);return r.operator=n,r},t.prototype._throwIfClosed=function(){if(this.closed)throw new Da},t.prototype.next=function(n){var r=this;rt(function(){var i,o;if(r._throwIfClosed(),!r.isStopped){r.currentObservers||(r.currentObservers=Array.from(r.observers));try{for(var a=$(r.currentObservers),u=a.next();!u.done;u=a.next()){var s=u.value;s.next(n)}}catch(c){i={error:c}}finally{try{u&&!u.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}}})},t.prototype.error=function(n){var r=this;rt(function(){if(r._throwIfClosed(),!r.isStopped){r.hasError=r.isStopped=!0,r.thrownError=n;for(var i=r.observers;i.length;)i.shift().error(n)}})},t.prototype.complete=function(){var n=this;rt(function(){if(n._throwIfClosed(),!n.isStopped){n.isStopped=!0;for(var r=n.observers;r.length;)r.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var n;return((n=this.observers)===null||n===void 0?void 0:n.length)>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(n){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,n)},t.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},t.prototype._innerSubscribe=function(n){var r=this,i=this,o=i.hasError,a=i.isStopped,u=i.observers;return o||a?tr:(this.currentObservers=null,u.push(n),new Ue(function(){r.currentObservers=null,nt(u,n)}))},t.prototype._checkFinalizedStatuses=function(n){var r=this,i=r.hasError,o=r.thrownError,a=r.isStopped;i?n.error(o):a&&n.complete()},t.prototype.asObservable=function(){var n=new H;return n.source=this,n},t.create=function(n,r){return new lr(n,r)},t}(H),lr=function(e){B(t,e);function t(n,r){var i=e.call(this)||this;return i.destination=n,i.source=r,i}return t.prototype.next=function(n){var r,i;(i=(r=this.destination)===null||r===void 0?void 0:r.next)===null||i===void 0||i.call(r,n)},t.prototype.error=function(n){var r,i;(i=(r=this.destination)===null||r===void 0?void 0:r.error)===null||i===void 0||i.call(r,n)},t.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},t.prototype._subscribe=function(n){var r,i;return(i=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&i!==void 0?i:tr},t}(cr),Na={now:function(){return Date.now()},delegate:void 0},Ma=function(e){B(t,e);function t(n,r){return e.call(this)||this}return t.prototype.schedule=function(n,r){return this},t}(Ue),Rt={setInterval:function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return setInterval.apply(void 0,K([e,t],O(n)))},clearInterval:function(e){var t=Rt.delegate;return((t==null?void 0:t.clearInterval)||clearInterval)(e)},delegate:void 0},Fa=function(e){B(t,e);function t(n,r){var i=e.call(this,n,r)||this;return i.scheduler=n,i.work=r,i.pending=!1,i}return t.prototype.schedule=function(n,r){var i;if(r===void 0&&(r=0),this.closed)return this;this.state=n;var o=this.id,a=this.scheduler;return o!=null&&(this.id=this.recycleAsyncId(a,o,r)),this.pending=!0,this.delay=r,this.id=(i=this.id)!==null&&i!==void 0?i:this.requestAsyncId(a,this.id,r),this},t.prototype.requestAsyncId=function(n,r,i){return i===void 0&&(i=0),Rt.setInterval(n.flush.bind(n,this),i)},t.prototype.recycleAsyncId=function(n,r,i){if(i===void 0&&(i=0),i!=null&&this.delay===i&&this.pending===!1)return r;r!=null&&Rt.clearInterval(r)},t.prototype.execute=function(n,r){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var i=this._execute(n,r);if(i)return i;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(n,r){var i=!1,o;try{this.work(n)}catch(a){i=!0,o=a||new Error("Scheduled action threw falsy error")}if(i)return this.unsubscribe(),o},t.prototype.unsubscribe=function(){if(!this.closed){var n=this,r=n.id,i=n.scheduler,o=i.actions;this.work=this.state=this.scheduler=null,this.pending=!1,nt(o,this),r!=null&&(this.id=this.recycleAsyncId(i,r,null)),this.delay=null,e.prototype.unsubscribe.call(this)}},t}(Ma),fr=function(){function e(t,n){n===void 0&&(n=e.now),this.schedulerActionCtor=t,this.now=n}return e.prototype.schedule=function(t,n,r){return n===void 0&&(n=0),new this.schedulerActionCtor(this,t).schedule(r,n)},e.now=Na.now,e}(),qa=function(e){B(t,e);function t(n,r){r===void 0&&(r=fr.now);var i=e.call(this,n,r)||this;return i.actions=[],i._active=!1,i}return t.prototype.flush=function(n){var r=this.actions;if(this._active){r.push(n);return}var i;this._active=!0;do if(i=n.execute(n.state,n.delay))break;while(n=r.shift());if(this._active=!1,i){for(;n=r.shift();)n.unsubscribe();throw i}},t}(fr),ot=new qa(Fa),Va=ot,Ot=new H(function(e){return e.complete()});function dr(e){return e&&L(e.schedule)}function vr(e){return e[e.length-1]}function $a(e){return dr(vr(e))?e.pop():void 0}function ja(e,t){return typeof vr(e)=="number"?e.pop():t}var Lt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function hr(e){return L(e==null?void 0:e.then)}function pr(e){return L(e[Ct])}function gr(e){return Symbol.asyncIterator&&L(e==null?void 0:e[Symbol.asyncIterator])}function mr(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ga(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var yr=Ga();function br(e){return L(e==null?void 0:e[yr])}function Er(e){return fi(this,arguments,function(){var n,r,i,o;return b(this,function(a){switch(a.label){case 0:n=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,we(n.read())];case 3:return r=a.sent(),i=r.value,o=r.done,o?[4,we(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,we(i)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return n.releaseLock(),[7];case 10:return[2]}})})}function wr(e){return L(e==null?void 0:e.getReader)}function J(e){if(e instanceof H)return e;if(e!=null){if(pr(e))return Ba(e);if(Lt(e))return Ka(e);if(hr(e))return Ha(e);if(gr(e))return _r(e);if(br(e))return Wa(e);if(wr(e))return za(e)}throw mr(e)}function Ba(e){return new H(function(t){var n=e[Ct]();if(L(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ka(e){return new H(function(t){for(var n=0;n<e.length&&!t.closed;n++)t.next(e[n]);t.complete()})}function Ha(e){return new H(function(t){e.then(function(n){t.closed||(t.next(n),t.complete())},function(n){return t.error(n)}).then(null,ar)})}function Wa(e){return new H(function(t){var n,r;try{for(var i=$(e),o=i.next();!o.done;o=i.next()){var a=o.value;if(t.next(a),t.closed)return}}catch(u){n={error:u}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}t.complete()})}function _r(e){return new H(function(t){Ya(e,t).catch(function(n){return t.error(n)})})}function za(e){return _r(Er(e))}function Ya(e,t){var n,r,i,o;return w(this,void 0,void 0,function(){var a,u;return b(this,function(s){switch(s.label){case 0:s.trys.push([0,5,6,11]),n=di(e),s.label=1;case 1:return[4,n.next()];case 2:if(r=s.sent(),!!r.done)return[3,4];if(a=r.value,t.next(a),t.closed)return[2];s.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return u=s.sent(),i={error:u},[3,11];case 6:return s.trys.push([6,,9,10]),r&&!r.done&&(o=n.return)?[4,o.call(n)]:[3,8];case 7:s.sent(),s.label=8;case 8:return[3,10];case 9:if(i)throw i.error;return[7];case 10:return[7];case 11:return t.complete(),[2]}})})}function ce(e,t,n,r,i){r===void 0&&(r=0),i===void 0&&(i=!1);var o=t.schedule(function(){n(),i?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(o),!i)return o}function Ir(e,t){return t===void 0&&(t=0),te(function(n,r){n.subscribe(Z(r,function(i){return ce(r,e,function(){return r.next(i)},t)},function(){return ce(r,e,function(){return r.complete()},t)},function(i){return ce(r,e,function(){return r.error(i)},t)}))})}function Tr(e,t){return t===void 0&&(t=0),te(function(n,r){r.add(e.schedule(function(){return n.subscribe(r)},t))})}function Xa(e,t){return J(e).pipe(Tr(t),Ir(t))}function Qa(e,t){return J(e).pipe(Tr(t),Ir(t))}function Za(e,t){return new H(function(n){var r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}function Ja(e,t){return new H(function(n){var r;return ce(n,t,function(){r=e[yr](),ce(n,t,function(){var i,o,a;try{i=r.next(),o=i.value,a=i.done}catch(u){n.error(u);return}a?n.complete():n.next(o)},0,!0)}),function(){return L(r==null?void 0:r.return)&&r.return()}})}function Sr(e,t){if(!e)throw new Error("Iterable cannot be null");return new H(function(n){ce(n,t,function(){var r=e[Symbol.asyncIterator]();ce(n,t,function(){r.next().then(function(i){i.done?n.complete():n.next(i.value)})},0,!0)})})}function es(e,t){return Sr(Er(e),t)}function ts(e,t){if(e!=null){if(pr(e))return Xa(e,t);if(Lt(e))return Za(e,t);if(hr(e))return Qa(e,t);if(gr(e))return Sr(e,t);if(br(e))return Ja(e,t);if(wr(e))return es(e,t)}throw mr(e)}function ns(e,t){return t?ts(e,t):J(e)}function Ar(e){return e instanceof Date&&!isNaN(e)}var rs=Tt(function(e){return function(n){n===void 0&&(n=null),e(this),this.message="Timeout has occurred",this.name="TimeoutError",this.info=n}});function is(e,t){var n=Ar(e)?{first:e}:typeof e=="number"?{each:e}:e,r=n.first,i=n.each,o=n.with,a=o===void 0?os:o,u=n.scheduler,s=u===void 0?ot:u,c=n.meta,l=c===void 0?null:c;if(r==null&&i==null)throw new TypeError("No timeout provided.");return te(function(f,p){var d,m,y=null,_=0,v=function(h){m=ce(p,s,function(){try{d.unsubscribe(),J(a({meta:l,lastValue:y,seen:_})).subscribe(p)}catch(g){p.error(g)}},h)};d=f.subscribe(Z(p,function(h){m==null||m.unsubscribe(),_++,p.next(y=h),i>0&&v(i)},void 0,void 0,function(){m!=null&&m.closed||m==null||m.unsubscribe(),y=null})),!_&&v(r!=null?typeof r=="number"?r:+r-s.now():i)})}function os(e){throw new rs(e)}function oe(e,t){return te(function(n,r){var i=0;n.subscribe(Z(r,function(o){r.next(e.call(t,o,i++))}))})}var as=Array.isArray;function ss(e,t){return as(t)?e.apply(void 0,K([],O(t))):e(t)}function us(e){return oe(function(t){return ss(e,t)})}function cs(e,t,n,r,i,o,a,u){var s=[],c=0,l=0,f=!1,p=function(){f&&!s.length&&!c&&t.complete()},d=function(y){return c<r?m(y):s.push(y)},m=function(y){c++;var _=!1;J(n(y,l++)).subscribe(Z(t,function(v){t.next(v)},function(){_=!0},void 0,function(){if(_)try{c--;for(var v=function(){var h=s.shift();a||m(h)};s.length&&c<r;)v();p()}catch(h){t.error(h)}}))};return e.subscribe(Z(t,d,function(){f=!0,p()})),function(){}}function at(e,t,n){return n===void 0&&(n=1/0),L(t)?at(function(r,i){return oe(function(o,a){return t(r,o,i,a)})(J(e(r,i)))},n):(typeof t=="number"&&(n=t),te(function(r,i){return cs(r,i,e,n)}))}function ls(e){return e===void 0&&(e=1/0),at(sr,e)}var fs=["addListener","removeListener"],ds=["addEventListener","removeEventListener"],vs=["on","off"];function Ne(e,t,n,r){if(L(n)&&(r=n,n=void 0),r)return Ne(e,t,n).pipe(us(r));var i=O(gs(e)?ds.map(function(u){return function(s){return e[u](t,s,n)}}):hs(e)?fs.map(kr(e,t)):ps(e)?vs.map(kr(e,t)):[],2),o=i[0],a=i[1];if(!o&&Lt(e))return at(function(u){return Ne(u,t,n)})(J(e));if(!o)throw new TypeError("Invalid event target");return new H(function(u){var s=function(){for(var c=[],l=0;l<arguments.length;l++)c[l]=arguments[l];return u.next(1<c.length?c:c[0])};return o(s),function(){return a(s)}})}function kr(e,t){return function(n){return function(r){return e[n](t,r)}}}function hs(e){return L(e.addListener)&&L(e.removeListener)}function ps(e){return L(e.on)&&L(e.off)}function gs(e){return L(e.addEventListener)&&L(e.removeEventListener)}function ms(e,t,n){n===void 0&&(n=Va);var r=-1;return t!=null&&(dr(t)?n=t:r=t),new H(function(i){var o=Ar(e)?+e-n.now():e;o<0&&(o=0);var a=0;return n.schedule(function(){i.closed||(i.next(a++),0<=r?this.schedule(void 0,r):i.complete())},o)})}function Pr(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=$a(e),r=ja(e,1/0),i=e;return i.length?i.length===1?J(i[0]):ls(r)(ns(i,n)):Ot}function le(e,t){return te(function(n,r){var i=0;n.subscribe(Z(r,function(o){return e.call(t,o,i++)&&r.next(o)}))})}function ys(e){return te(function(t,n){var r=[];return t.subscribe(Z(n,function(i){return r.push(i)},function(){n.next(r),n.complete()})),J(e).subscribe(Z(n,function(){var i=r;r=[],n.next(i)},At)),function(){r=null}})}function bs(e,t){return t===void 0&&(t=ot),te(function(n,r){var i=null,o=null,a=null,u=function(){if(i){i.unsubscribe(),i=null;var c=o;o=null,r.next(c)}};function s(){var c=a+e,l=t.now();if(l<c){i=this.schedule(void 0,c-l),r.add(i);return}u()}n.subscribe(Z(r,function(c){o=c,a=t.now(),i||(i=t.schedule(s,e),r.add(i))},function(){u(),r.complete()},void 0,function(){o=i=null}))})}function Cr(e){return e<=0?function(){return Ot}:te(function(t,n){var r=0;t.subscribe(Z(n,function(i){++r<=e&&(n.next(i),e<=r&&n.complete())}))})}function Es(e){return oe(function(){return e})}function ws(e,t){return at(function(n,r){return J(e(n,r)).pipe(Cr(1),Es(n))})}function _s(e,t){t===void 0&&(t=ot);var n=ms(e,t);return ws(function(){return n})}function Is(){return te(function(e,t){var n,r=!1;e.subscribe(Z(t,function(i){var o=n;n=i,r&&t.next([o,i]),r=!0}))})}function st(e){e===void 0&&(e={});var t=e.connector,n=t===void 0?function(){return new cr}:t,r=e.resetOnError,i=r===void 0?!0:r,o=e.resetOnComplete,a=o===void 0?!0:o,u=e.resetOnRefCountZero,s=u===void 0?!0:u;return function(c){var l,f,p,d=0,m=!1,y=!1,_=function(){f==null||f.unsubscribe(),f=void 0},v=function(){_(),l=p=void 0,m=y=!1},h=function(){var g=l;v(),g==null||g.unsubscribe()};return te(function(g,E){d++,!y&&!m&&_();var T=p=p!=null?p:n();E.add(function(){d--,d===0&&!y&&!m&&(f=xt(h,s))}),T.subscribe(E),!l&&d>0&&(l=new De({next:function(S){return T.next(S)},error:function(S){y=!0,_(),f=xt(v,i,S),T.error(S)},complete:function(){m=!0,_(),f=xt(v,a),T.complete()}}),J(g).subscribe(l))})(c)}}function xt(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];if(t===!0){e();return}if(t!==!1){var i=new De({next:function(){i.unsubscribe(),e()}});return J(t.apply(void 0,K([],O(n)))).subscribe(i)}}function Ts(e,t){return te(function(n,r){var i=null,o=0,a=!1,u=function(){return a&&!i&&r.complete()};n.subscribe(Z(r,function(s){i==null||i.unsubscribe();var c=0,l=o++;J(e(s,l)).subscribe(i=Z(r,function(f){return r.next(t?t(s,f,l,c++):f)},function(){i=null,u()}))},function(){a=!0,u()}))})}var Ss=["input","select","textarea"],Ut=function(e,t){return function(n,r){var i,o,a,u=e.pageUrlAllowlist,s=e.shouldTrackEventResolver,c=(o=(i=r==null?void 0:r.tagName)===null||i===void 0?void 0:i.toLowerCase)===null||o===void 0?void 0:o.call(i);if(!c)return!1;if(s)return s(n,r);if(!ks(window.location.href,u))return!1;var l=String(r==null?void 0:r.getAttribute("type"))||"";if(typeof l=="string")switch(l.toLowerCase()){case"hidden":return!1;case"password":return!1}if(t){var f=t.some(function(d){var m;return!!(!((m=r==null?void 0:r.matches)===null||m===void 0)&&m.call(r,d))});if(!f)return!1}switch(c){case"input":case"select":case"textarea":return n==="change"||n==="click";default:{var p=(a=window==null?void 0:window.getComputedStyle)===null||a===void 0?void 0:a.call(window,r);return p&&p.getPropertyValue("cursor")==="pointer"&&n==="click"?!0:n==="click"}}}},Rr=function(e){if(e==null)return!1;if(typeof e=="string"){var t=/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;if(t.test((e||"").replace(/[- ]/g,"")))return!1;var n=/(^\d{3}-?\d{2}-?\d{4}$)/;if(n.test(e))return!1}return!0},As=function(e){return!!e&&e.nodeType===3},Or=function(e){var t,n,r,i=(n=(t=e==null?void 0:e.tagName)===null||t===void 0?void 0:t.toLowerCase)===null||n===void 0?void 0:n.call(t),o=e instanceof HTMLElement?((r=e.getAttribute("contenteditable"))===null||r===void 0?void 0:r.toLowerCase())==="true":!1;return!Ss.includes(i)&&!o},Dt=function(e){var t="";return Or(e)&&e.childNodes&&e.childNodes.length&&e.childNodes.forEach(function(n){var r="";As(n)?n.textContent&&(r=n.textContent):r=Dt(n),t+=r.split(/(\s+)/).filter(Rr).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}),t},ks=function(e,t){return!t||!t.length?!0:t.some(function(n){return typeof n=="string"?e===n:e.match(n)})},Ps=function(e,t){return e.getAttributeNames().reduce(function(n,r){if(r.startsWith(t)){var i=r.replace(t,""),o=e.getAttribute(r);i&&(n[i]=o||"")}return n},{})},Cs=function(e){return e==null||typeof e=="object"&&Object.keys(e).length===0||typeof e=="string"&&e.trim().length===0},Lr=function(e){return Object.keys(e).reduce(function(t,n){var r=e[n];return Cs(r)||(t[n]=r),t},{})},xr=function(e){var t=e.parentElement;if(!t)return"";var n;try{n=t.querySelector(":scope>span,h1,h2,h3,h4,h5,h6")}catch(i){n=null}if(n){var r=n.textContent||"";return Rr(r)?r:""}return xr(t)},Nt=function(e,t){return e?t.some(function(n){var r;return(r=e==null?void 0:e.matches)===null||r===void 0?void 0:r.call(e,n)})?e:Nt(e==null?void 0:e.parentElement,t):null},Rs=function(e){var t,n,r;if(!e)return{};var i=(r=(n=e==null?void 0:e.tagName)===null||n===void 0?void 0:n.toLowerCase)===null||r===void 0?void 0:r.call(n),o=(t={},t[Zn]=i,t[Jn]=Dt(e),t[er]=window.location.href.split("?")[0],t);return Lr(o)},Os=function(e){return new Promise(function(t,n){var r;try{var i=document.createElement("script");i.type="text/javascript",i.async=!0,i.src=e,i.addEventListener("load",function(){t({status:!0})},{once:!0}),i.addEventListener("error",function(){n({status:!1,message:"Failed to load the script ".concat(e)})}),(r=document.head)===null||r===void 0||r.appendChild(i)}catch(o){n(o)}})};function Ls(){return"".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9))}var Mt=function(e){return!(e.event.target===null||!e.closestTrackedAncestor)},xs=function(){function e(t){var n=t===void 0?{}:t,r=n.origin,i=r===void 0?tt:r,o=this;this.endpoint=tt,this.requestCallbacks={},this.onSelect=function(a){o.notify({action:"element-selected",data:a})},this.onTrack=function(a,u){a==="selector-mode-changed"?o.notify({action:"track-selector-mode-changed",data:u}):a==="selector-moved"&&o.notify({action:"track-selector-moved",data:u})},this.endpoint=i}return e.prototype.notify=function(t){var n,r,i,o;(r=(n=this.logger)===null||n===void 0?void 0:n.debug)===null||r===void 0||r.call(n,"Message sent: ",JSON.stringify(t)),(o=(i=window.opener)===null||i===void 0?void 0:i.postMessage)===null||o===void 0||o.call(i,t,this.endpoint)},e.prototype.sendRequest=function(t,n,r){var i=this;r===void 0&&(r={timeout:15e3});var o=Ls(),a={id:o,action:t,args:n},u=new Promise(function(s,c){i.requestCallbacks[o]={resolve:s,reject:c},i.notify(a),(r==null?void 0:r.timeout)>0&&setTimeout(function(){c(new Error("".concat(t," timed out (id: ").concat(o,")"))),delete i.requestCallbacks[o]},r.timeout)});return u},e.prototype.handleResponse=function(t){var n;if(!this.requestCallbacks[t.id]){(n=this.logger)===null||n===void 0||n.warn("No callback found for request id: ".concat(t.id));return}this.requestCallbacks[t.id].resolve(t.responseData),delete this.requestCallbacks[t.id]},e.prototype.setup=function(t){var n=this,r=t===void 0?{}:t,i=r.logger,o=r.endpoint,a=r.isElementSelectable,u=r.cssSelectorAllowlist,s=r.actionClickAllowlist;this.logger=i,o&&this.endpoint===tt&&(this.endpoint=o);var c=null;window.addEventListener("message",function(l){var f,p,d,m,y;if((p=(f=n.logger)===null||f===void 0?void 0:f.debug)===null||p===void 0||p.call(f,"Message received: ",JSON.stringify(l)),n.endpoint===l.origin){var _=l==null?void 0:l.data,v=_==null?void 0:_.action;if(v)if("id"in _)(m=(d=n.logger)===null||d===void 0?void 0:d.debug)===null||m===void 0||m.call(d,"Received Response to previous request: ",JSON.stringify(l)),n.handleResponse(_);else if(v==="ping")n.notify({action:"pong"});else if(v==="initialize-visual-tagging-selector"){var h=_==null?void 0:_.data;Os(Ta).then(function(){var g;c=(g=window==null?void 0:window.amplitudeVisualTaggingSelector)===null||g===void 0?void 0:g.call(window,{getEventTagProps:Rs,isElementSelectable:function(E){return a?a((h==null?void 0:h.actionType)||"click",E):!0},onTrack:n.onTrack,onSelect:n.onSelect,visualHighlightClass:Sa,messenger:n,cssSelectorAllowlist:u,actionClickAllowlist:s}),n.notify({action:"selector-loaded"})}).catch(function(){var g;(g=n.logger)===null||g===void 0||g.warn("Failed to initialize visual tagging selector")})}else v==="close-visual-tagging-selector"&&((y=c==null?void 0:c.close)===null||y===void 0||y.call(c))}}),this.notify({action:"page-loaded"})},e}(),Us=["id","class","style","value","onclick","onchange","oninput","onblur","onsubmit","onfocus","onkeydown","onkeyup","onkeypress","data-reactid","data-react-checksum","data-reactroot"],Ds=["type"],Ns=["svg","path","g"],Ms=["password","hidden"],Fs=128,qs=1024;function Vs(e){var t,n,r,i,o,a;if(e===null)return null;var u=String(e.tagName).toLowerCase(),s={tag:u},c=Array.from((i=(r=e.parentElement)===null||r===void 0?void 0:r.children)!==null&&i!==void 0?i:[]);c.length&&(s.index=c.indexOf(e),s.indexOfType=c.filter(function(E){return E.tagName===e.tagName}).indexOf(e));var l=(a=(o=e.previousElementSibling)===null||o===void 0?void 0:o.tagName)===null||a===void 0?void 0:a.toLowerCase();l&&(s.prevSib=String(l));var f=e.getAttribute("id");f&&(s.id=String(f));var p=Array.from(e.classList);p.length&&(s.classes=p);var d={},m=Array.from(e.attributes),y=m.filter(function(E){return!Us.includes(E.name)}),_=!Or(e);if(!Ms.includes(String(e.getAttribute("type")))&&!Ns.includes(u))try{for(var v=$(y),h=v.next();!h.done;h=v.next()){var g=h.value;_&&!Ds.includes(g.name)||(d[g.name]=String(g.value).substring(0,Fs))}}catch(E){t={error:E}}finally{try{h&&!h.done&&(n=v.return)&&n.call(v)}finally{if(t)throw t.error}}return Object.keys(d).length&&(s.attrs=d),s}function $s(e){var t=[];if(!e)return t;t.push(e);for(var n=e.parentElement;n&&n.tagName!=="HTML";)t.push(n),n=n.parentElement;return t}var js=function(e){var t=[];if(!e)return[];var n=$s(e);return t=Gs(n.map(function(r){return Vs(r)}),qs),t};function Gs(e,t){for(var n=0,r=0;r<e.length;r++){var i=e[r];if(i===null)n+=4;else{var o=ut(i);n+=o?Array.from(o).length:4}if(n>t)return e.slice(0,r)}return e}function ut(e,t){t===void 0&&(t=!1);try{if(e==null)return t?"None":null;if(typeof e=="string")return t?(e=e.replace(/\\/g,"\\\\").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r"),e.includes('"')?"'".concat(e,"'"):e.includes("'")?'"'.concat(e.replace(/'/g,"\\'"),'"'):"'".concat(e,"'")):e;if(typeof e=="boolean")return e?"True":"False";if(Array.isArray(e)){var n=e.map(function(o){return ut(o,!0)});return"[".concat(n.join(", "),"]")}else if(typeof e=="object"){var r=Object.entries(e).filter(function(o){var a=O(o,1),u=a[0];return u!=null}).map(function(o){var a=O(o,2),u=a[0],s=a[1];return"".concat(String(ut(u,!0)),": ").concat(String(ut(s,!0)))}),i="{".concat(r.join(", "),"}");return i.includes("\\'")&&(i=i.replace(/'/g,"'").replace(/'/g,"\\'")),i}return e.toString()}catch(o){return null}}var Bs=5;function Ks(e){var t=e.amplitude,n=e.allObservables,r=e.options,i=e.shouldTrackEvent,o=n.clickObservable,a=o.pipe(Is(),le(function(l){var f=O(l,2),p=f[0],d=f[1],m=p.event.target!==d.event.target,y=Math.abs(d.event.screenX-p.event.screenX)<=20&&Math.abs(d.event.screenY-p.event.screenY)<=20;return m&&!y})),u=o.pipe(bs(r.debounceTime),oe(function(){return"timeout"})),s=Pr(a,u),c=o.pipe(_s(0),le(Mt),le(function(l){return i("click",l.closestTrackedAncestor)}),ys(s));return c.subscribe(function(l){var f,p,d=(l.length>=Bs,It);try{for(var m=$(l),y=m.next();!y.done;y=m.next()){var _=y.value;t==null||t.track(d,_.targetElementProperties)}}catch(v){f={error:v}}finally{try{y&&!y.done&&(p=m.return)&&p.call(m)}finally{if(f)throw f.error}}})}function Hs(e){var t=e.amplitude,n=e.allObservables,r=e.getEventProperties,i=e.shouldTrackEvent,o=n.changeObservable,a=o.pipe(le(Mt),le(function(u){return i("change",u.closestTrackedAncestor)}));return a.subscribe(function(u){t==null||t.track(ua,r("change",u.closestTrackedAncestor))})}function Ws(e){var t=e.amplitude,n=e.allObservables,r=e.options,i=e.getEventProperties,o=e.shouldTrackEvent,a=e.shouldTrackActionClick,u=n.clickObservable,s=n.mutationObservable,c=n.navigateObservable,l=u.pipe(le(function(m){return!o("click",m.closestTrackedAncestor)}),oe(function(m){var y=Nt(m.event.target,r.actionClickAllowlist);return m.closestTrackedAncestor=y,m.closestTrackedAncestor!==null&&(m.targetElementProperties=i(m.type,m.closestTrackedAncestor)),m}),le(Mt),le(function(m){return a("click",m.closestTrackedAncestor)})),f=[s];c&&f.push(c);var p=Pr.apply(void 0,K([],O(f),!1)),d=l.pipe(Ts(function(m){return p.pipe(Cr(1),is({first:500,with:function(){return Ot}}),oe(function(){return m}))}));return d.subscribe(function(m){t==null||t.track(It,i("click",m.closestTrackedAncestor))})}var Ae;(function(e){e.ClickObservable="clickObservable",e.ChangeObservable="changeObservable",e.NavigateObservable="navigateObservable",e.MutationObservable="mutationObservable"})(Ae||(Ae={}));function zs(e){return e.type==="click"||e.type==="change"}var Ys=function(e){var t,n,r;e===void 0&&(e={});var i=e.dataAttributePrefix,o=i===void 0?io:i,a=e.visualTaggingOptions,u=a===void 0?{enabled:!0,messenger:new xs}:a;e.cssSelectorAllowlist=(t=e.cssSelectorAllowlist)!==null&&t!==void 0?t:ro,e.actionClickAllowlist=(n=e.actionClickAllowlist)!==null&&n!==void 0?n:oo,e.debounceTime=(r=e.debounceTime)!==null&&r!==void 0?r:0;var s=sa,c="enrichment",l=[],f=function(){var v,h=Ne(document,"click",{capture:!0}).pipe(oe(function(S){return d(S,"click")}),st()),g=Ne(document,"change",{capture:!0}).pipe(oe(function(S){return d(S,"change")}),st()),E;window.navigation&&(E=Ne(window.navigation,"navigate").pipe(oe(function(S){return d(S,"navigate")}),st()));var T=new H(function(S){var k=new MutationObserver(function(P){S.next(P)});return k.observe(document.body,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),function(){return k.disconnect()}}).pipe(oe(function(S){return d(S,"mutation")}),st());return v={},v[Ae.ClickObservable]=h,v[Ae.ChangeObservable]=g,v[Ae.NavigateObservable]=E,v[Ae.MutationObservable]=T,v},p=function(v,h){var g,E,T,S=(T=(E=h==null?void 0:h.tagName)===null||E===void 0?void 0:E.toLowerCase)===null||T===void 0?void 0:T.call(E),k=typeof h.getBoundingClientRect=="function"?h.getBoundingClientRect():{left:null,top:null},P=h.getAttribute("aria-label"),R=Ps(h,o),W=xr(h),G=(g={},g[ca]=h.getAttribute("id")||"",g[la]=h.getAttribute("class"),g[fa]=js(h),g[Zn]=S,g[Jn]=Dt(h),g[va]=k.left==null?null:Math.round(k.left),g[ha]=k.top==null?null:Math.round(k.top),g[pa]=P,g[ga]=R,g[ma]=W,g[er]=window.location.href.split("?")[0],g[ya]=typeof document!="undefined"&&document.title||"",g[ba]=window.innerHeight,g[Ea]=window.innerWidth,g);return S==="a"&&v==="click"&&h instanceof HTMLAnchorElement&&(G[da]=h.href),Lr(G)},d=function(v,h){var g={event:v,timestamp:Date.now(),type:h};if(zs(g)&&g.event.target!==null){var E=Nt(g.event.target,e.cssSelectorAllowlist);return E&&(g.closestTrackedAncestor=E,g.targetElementProperties=p(g.type,E)),g}return g},m=function(v,h){return w(void 0,void 0,void 0,function(){var g,E,T,S,k,P,R,W,G,X;return b(this,function(de){return typeof document=="undefined"?[2]:(g=Ut(e,e.cssSelectorAllowlist),E=Ut(e,e.actionClickAllowlist),T=f(),S=Ks({allObservables:T,options:e,amplitude:h,shouldTrackEvent:g}),l.push(S),k=Hs({allObservables:T,getEventProperties:p,amplitude:h,shouldTrackEvent:g}),l.push(k),P=Ws({allObservables:T,options:e,getEventProperties:p,amplitude:h,shouldTrackEvent:g,shouldTrackActionClick:E}),l.push(P),(G=v==null?void 0:v.loggerProvider)===null||G===void 0||G.log("".concat(s," has been successfully added.")),window.opener&&u.enabled&&(R=e.cssSelectorAllowlist,W=e.actionClickAllowlist,(X=u.messenger)===null||X===void 0||X.setup(I(I({logger:v==null?void 0:v.loggerProvider},(v==null?void 0:v.serverZone)&&{endpoint:Ia[v.serverZone]}),{isElementSelectable:Ut(e,K(K([],O(R),!1),O(W),!1)),cssSelectorAllowlist:R,actionClickAllowlist:W}))),[2])})})},y=function(v){return w(void 0,void 0,void 0,function(){return b(this,function(h){return[2,v]})})},_=function(){return w(void 0,void 0,void 0,function(){var v,h,g,E,T;return b(this,function(S){try{for(v=$(l),h=v.next();!h.done;h=v.next())g=h.value,g.unsubscribe()}catch(k){E={error:k}}finally{try{h&&!h.done&&(T=v.return)&&T.call(v)}finally{if(E)throw E.error}}return[2]})})};return{name:s,type:c,setup:m,execute:y,teardown:_}},Xs="utm_campaign",Qs="utm_content",Zs="utm_id",Js="utm_medium",eu="utm_source",tu="utm_term",Ur="dclid",Dr="fbclid",Nr="gbraid",Mr="gclid",Fr="ko_click_id",qr="li_fat_id",Vr="msclkid",$r="rtd_cid",jr="ttclid",Gr="twclid",Br="wbraid",Ft={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},Kr=function(e){var t=e.split(".");return t.length<=2?e:t.slice(t.length-2,t.length).join(".")},nu=function(e){return Object.values(e).every(function(t){return!t})},ru=function(e,t,n,r,i){i===void 0&&(i=!0),e.referrer;var o=e.referring_domain,a=vt(e,["referrer","referring_domain"]),u=t||{};u.referrer;var s=u.referring_domain,c=vt(u,["referrer","referring_domain"]);if(iu(n.excludeReferrers,e.referring_domain))return r.debug("This is not a new campaign because ".concat(e.referring_domain," is in the exclude referrer list.")),!1;if(!i&&nu(e)&&t)return r.debug("This is not a new campaign because this is a direct traffic in the same session."),!1;var l=JSON.stringify(a)!==JSON.stringify(c),f=Kr(o||"")!==Kr(s||""),p=!t||l||f;return p?r.debug("This is a new campaign. An $identify event will be sent."):r.debug("This is not a new campaign because it's the same as the previous one."),p},iu=function(e,t){return e===void 0&&(e=[]),t===void 0&&(t=""),e.some(function(n){return n instanceof RegExp?n.test(t):n===t})},ou=function(e,t){var n=I(I({},Ft),e),r=Object.entries(n).reduce(function(i,o){var a,u=O(o,2),s=u[0],c=u[1];return i.setOnce("initial_".concat(s),(a=c!=null?c:t.initialEmptyValue)!==null&&a!==void 0?a:"EMPTY"),c?i.set(s,c):i.unset(s)},new Re);return dn(r)},au=function(e){var t=e;return t?(t.startsWith(".")&&(t=t.substring(1)),[new RegExp("".concat(t.replace(".","\\."),"$"))]):[]},su=function(){function e(){}return e.prototype.parse=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return[2,I(I(I(I({},Ft),this.getUtmParam()),this.getReferrer()),this.getClickIds())]})})},e.prototype.getUtmParam=function(){var t=ze(),n=t[Xs],r=t[Qs],i=t[Zs],o=t[Js],a=t[eu],u=t[tu];return{utm_campaign:n,utm_content:r,utm_id:i,utm_medium:o,utm_source:a,utm_term:u}},e.prototype.getReferrer=function(){var t,n,r={referrer:void 0,referring_domain:void 0};try{r.referrer=document.referrer||void 0,r.referring_domain=(n=(t=r.referrer)===null||t===void 0?void 0:t.split("/")[2])!==null&&n!==void 0?n:void 0}catch(i){}return r},e.prototype.getClickIds=function(){var t,n=ze();return t={},t[Ur]=n[Ur],t[Dr]=n[Dr],t[Nr]=n[Nr],t[Mr]=n[Mr],t[Fr]=n[Fr],t[qr]=n[qr],t[Vr]=n[Vr],t[$r]=n[$r],t[jr]=n[jr],t[Gr]=n[Gr],t[Br]=n[Br],t},e}(),uu=function(){function e(t,n){var r;this.shouldTrackNewCampaign=!1,this.options=I({initialEmptyValue:"EMPTY",resetSessionOnNewCampaign:!1,excludeReferrers:au((r=n.cookieOptions)===null||r===void 0?void 0:r.domain)},t),this.storage=n.cookieStorage,this.storageKey=eo(n.apiKey,"MKTG"),this.currentCampaign=Ft,this.sessionTimeout=n.sessionTimeout,this.lastEventTime=n.lastEventTime,this.logger=n.loggerProvider,n.loggerProvider.log("Installing web attribution tracking.")}return e.prototype.init=function(){return w(this,void 0,void 0,function(){var t,n;return b(this,function(r){switch(r.label){case 0:return[4,this.fetchCampaign()];case 1:return n=O.apply(void 0,[r.sent(),2]),this.currentCampaign=n[0],this.previousCampaign=n[1],t=this.lastEventTime?mn(this.sessionTimeout,this.lastEventTime):!0,ru(this.currentCampaign,this.previousCampaign,this.options,this.logger,t)?(this.shouldTrackNewCampaign=!0,[4,this.storage.set(this.storageKey,this.currentCampaign)]):[3,3];case 2:r.sent(),r.label=3;case 3:return[2]}})})},e.prototype.fetchCampaign=function(){return w(this,void 0,void 0,function(){return b(this,function(t){switch(t.label){case 0:return[4,Promise.all([new su().parse(),this.storage.get(this.storageKey)])];case 1:return[2,t.sent()]}})})},e.prototype.generateCampaignEvent=function(t){this.shouldTrackNewCampaign=!1;var n=ou(this.currentCampaign,this.options);return t&&(n.event_id=t),n},e.prototype.shouldSetSessionIdOnNewCampaign=function(){return this.shouldTrackNewCampaign&&!!this.options.resetSessionOnNewCampaign},e}(),cu=function(e){B(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.init=function(n,r,i){n===void 0&&(n="");var o,a;return arguments.length>2?(o=r,a=i):typeof r=="string"?(o=r,a=void 0):(o=r==null?void 0:r.userId,a=r),Y(this._init(I(I({},a),{userId:o,apiKey:n})))},t.prototype._init=function(n){var r,i,o;return w(this,void 0,void 0,function(){var a,u,s,c,l,f,p=this;return b(this,function(d){switch(d.label){case 0:return this.initializing?[2]:(this.initializing=!0,[4,Ro(n.apiKey,n,this)]);case 1:return a=d.sent(),n.fetchRemoteConfig?[4,aa(a)]:[3,4];case 2:return u=d.sent(),[4,u.generateJoinedConfig()];case 3:a=d.sent(),d.label=4;case 4:return[4,e.prototype._init.call(this,a)];case 5:return d.sent(),this.logBrowserOptions(a),En(this.config.defaultTracking)?(s=lo(this.config),this.webAttribution=new uu(s,this.config),[4,this.webAttribution.init()]):[3,7];case 6:d.sent(),d.label=7;case 7:return c=ze(),l=Number.isNaN(Number(c.ampSessionId))?void 0:Number(c.ampSessionId),this.setSessionId((o=(i=(r=n.sessionId)!==null&&r!==void 0?r:l)!==null&&i!==void 0?i:this.config.sessionId)!==null&&o!==void 0?o:Date.now()),f=Le(n.instanceName),f.identityStore.setIdentity({userId:this.config.userId,deviceId:this.config.deviceId}),this.config.offline===no?[3,9]:[4,this.add(Yo()).promise];case 8:d.sent(),d.label=9;case 9:return[4,this.add(new Ni).promise];case 10:return d.sent(),[4,this.add(new po).promise];case 11:return d.sent(),[4,this.add(new Wi).promise];case 12:return d.sent(),zo(this.config),ao(this.config.defaultTracking)?(this.config.loggerProvider.debug("Adding file download tracking plugin"),[4,this.add(Wo()).promise]):[3,14];case 13:d.sent(),d.label=14;case 14:return so(this.config.defaultTracking)?(this.config.loggerProvider.debug("Adding form interaction plugin"),[4,this.add(Ho()).promise]):[3,16];case 15:d.sent(),d.label=16;case 16:return wn(this.config.defaultTracking)?(this.config.loggerProvider.debug("Adding page view tracking plugin"),[4,this.add(jo(co(this.config))).promise]):[3,18];case 17:d.sent(),d.label=18;case 18:return In(this.config.autocapture)?(this.config.loggerProvider.debug("Adding user interactions plugin (autocapture plugin)"),[4,this.add(Ys(uo(this.config))).promise]):[3,20];case 19:d.sent(),d.label=20;case 20:return this.initializing=!1,[4,this.runQueuedFunctions("dispatchQ")];case 21:return d.sent(),f.eventBridge.setEventReceiver(function(m){p.track(m.eventType,m.eventProperties)}),[2]}})})},t.prototype.getUserId=function(){var n;return(n=this.config)===null||n===void 0?void 0:n.userId},t.prototype.setUserId=function(n){if(!this.config){this.q.push(this.setUserId.bind(this,n));return}this.config.loggerProvider.debug("function setUserId: ",n),(n!==this.config.userId||n===void 0)&&(this.config.userId=n,Ki(n,this.config.instanceName))},t.prototype.getDeviceId=function(){var n;return(n=this.config)===null||n===void 0?void 0:n.deviceId},t.prototype.setDeviceId=function(n){if(!this.config){this.q.push(this.setDeviceId.bind(this,n));return}this.config.loggerProvider.debug("function setDeviceId: ",n),this.config.deviceId=n,Hi(n,this.config.instanceName)},t.prototype.reset=function(){this.setDeviceId(Ie()),this.setUserId(void 0)},t.prototype.getSessionId=function(){var n;return(n=this.config)===null||n===void 0?void 0:n.sessionId},t.prototype.setSessionId=function(n){var r,i=[];if(!this.config)return this.q.push(this.setSessionId.bind(this,n)),Y(Promise.resolve());if(n===this.config.sessionId)return Y(Promise.resolve());this.config.loggerProvider.debug("function setSessionId: ",n);var o=this.getSessionId(),a=this.config.lastEventTime,u=(r=this.config.lastEventId)!==null&&r!==void 0?r:-1;this.config.sessionId=n,this.config.lastEventTime=void 0,this.config.pageCounter=0,_n(this.config.defaultTracking)&&(o&&a&&i.push(this.track(Cn,void 0,{device_id:this.previousSessionDeviceId,event_id:++u,session_id:o,time:a+1,user_id:this.previousSessionUserId}).promise),this.config.lastEventTime=this.config.sessionId);var s=this.trackCampaignEventIfNeeded(++u,i);return _n(this.config.defaultTracking)&&i.push(this.track(Pn,void 0,{event_id:s?++u:u,session_id:this.config.sessionId,time:this.config.lastEventTime}).promise),this.previousSessionDeviceId=this.config.deviceId,this.previousSessionUserId=this.config.userId,Y(Promise.all(i))},t.prototype.extendSession=function(){if(!this.config){this.q.push(this.extendSession.bind(this));return}this.config.lastEventTime=Date.now()},t.prototype.setTransport=function(n){if(!this.config){this.q.push(this.setTransport.bind(this,n));return}this.config.transportProvider=Rn(n)},t.prototype.identify=function(n,r){if(yt(n)){var i=n._q;n._q=[],n=mt(new Re,i)}return r!=null&&r.user_id&&this.setUserId(r.user_id),r!=null&&r.device_id&&this.setDeviceId(r.device_id),e.prototype.identify.call(this,n,r)},t.prototype.groupIdentify=function(n,r,i,o){if(yt(i)){var a=i._q;i._q=[],i=mt(new Re,a)}return e.prototype.groupIdentify.call(this,n,r,i,o)},t.prototype.revenue=function(n,r){if(yt(n)){var i=n._q;n._q=[],n=mt(new Oi,i)}return e.prototype.revenue.call(this,n,r)},t.prototype.trackCampaignEventIfNeeded=function(n,r){if(!this.webAttribution||!this.webAttribution.shouldTrackNewCampaign)return!1;var i=this.webAttribution.generateCampaignEvent(n);return r?r.push(this.track(i).promise):this.track(i),this.config.loggerProvider.log("Tracking attribution."),!0},t.prototype.process=function(n){return w(this,void 0,void 0,function(){var r,i,o;return b(this,function(a){return r=Date.now(),i=mn(this.config.sessionTimeout,this.config.lastEventTime),o=this.webAttribution&&this.webAttribution.shouldSetSessionIdOnNewCampaign(),n.event_type!==Pn&&n.event_type!==Cn&&(!n.session_id||n.session_id===this.getSessionId())&&(i||o?(this.setSessionId(r),o&&this.config.loggerProvider.log("Created a new session for new campaign.")):i||this.trackCampaignEventIfNeeded()),[2,e.prototype.process.call(this,n)]})})},t.prototype.logBrowserOptions=function(n){try{var r=I(I({},n),{apiKey:n.apiKey.substring(0,10)+"********"});this.config.loggerProvider.debug("Initialized Amplitude with BrowserConfig:",JSON.stringify(r))}catch(i){this.config.loggerProvider.error("Error logging browser config",i)}},t}(Ri),qt=function(){var e=new cu;return{init:M(e.init.bind(e),"init",D(e),N(e,["config"])),add:M(e.add.bind(e),"add",D(e),N(e,["config.apiKey","timeline.plugins"])),remove:M(e.remove.bind(e),"remove",D(e),N(e,["config.apiKey","timeline.plugins"])),track:M(e.track.bind(e),"track",D(e),N(e,["config.apiKey","timeline.queue.length"])),logEvent:M(e.logEvent.bind(e),"logEvent",D(e),N(e,["config.apiKey","timeline.queue.length"])),identify:M(e.identify.bind(e),"identify",D(e),N(e,["config.apiKey","timeline.queue.length"])),groupIdentify:M(e.groupIdentify.bind(e),"groupIdentify",D(e),N(e,["config.apiKey","timeline.queue.length"])),setGroup:M(e.setGroup.bind(e),"setGroup",D(e),N(e,["config.apiKey","timeline.queue.length"])),revenue:M(e.revenue.bind(e),"revenue",D(e),N(e,["config.apiKey","timeline.queue.length"])),flush:M(e.flush.bind(e),"flush",D(e),N(e,["config.apiKey","timeline.queue.length"])),getUserId:M(e.getUserId.bind(e),"getUserId",D(e),N(e,["config","config.userId"])),setUserId:M(e.setUserId.bind(e),"setUserId",D(e),N(e,["config","config.userId"])),getDeviceId:M(e.getDeviceId.bind(e),"getDeviceId",D(e),N(e,["config","config.deviceId"])),setDeviceId:M(e.setDeviceId.bind(e),"setDeviceId",D(e),N(e,["config","config.deviceId"])),reset:M(e.reset.bind(e),"reset",D(e),N(e,["config","config.userId","config.deviceId"])),getSessionId:M(e.getSessionId.bind(e),"getSessionId",D(e),N(e,["config"])),setSessionId:M(e.setSessionId.bind(e),"setSessionId",D(e),N(e,["config"])),extendSession:M(e.extendSession.bind(e),"extendSession",D(e),N(e,["config"])),setOptOut:M(e.setOptOut.bind(e),"setOptOut",D(e),N(e,["config"])),setTransport:M(e.setTransport.bind(e),"setTransport",D(e),N(e,["config"]))}};qt();const Hr={PageView:"Page View",CompleteRegistration:"Register",ViewCart:"View Cart",ViewItemList:"View Item List",AddToCart:"Add To Cart",RemoveFromCart:"Remove From Cart",InitiateCheckout:"Initiate Checkout",Purchase:"Order Placed"};class lu{constructor(t=null,n=null){z(this,"amplitude",null);z(this,"amplitudeOffset",null);this.trackingId=t,this.offsetTrackingId=n,this.trackingId&&(this.amplitude=qt(),this.amplitude.init(this.trackingId,{autocapture:!0})),this.offsetTrackingId&&(this.amplitudeOffset=qt(),this.amplitudeOffset.init(this.offsetTrackingId,{autocapture:!0}))}trackEvent(t,n){if(!(!this.trackingId&&!this.offsetTrackingId)){if(Hr[t]&&(t=Hr[t]),t==="userId"){this.amplitude&&this.amplitude.setUserId(n||""),this.amplitudeOffset&&this.amplitudeOffset.setUserId(n||"");return}if(t==="User"){const r=new Re;r.set("Name",n.Name),r.set("Email",n.Email),this.amplitude&&this.amplitude.identify(r),this.amplitudeOffset&&this.amplitudeOffset.identify(r)}else this.amplitude&&this.amplitude.track(t,n),this.amplitudeOffset&&this.amplitudeOffset.track(t,n)}}}var Vt,fe,pe,C={};function fu(e){return Object.assign(e,{autoCapturePageviews:e.autoCapturePageviews!==!1,logging:e.logging!==!1,bindToWindow:e.bindToWindow!==!1})}function du(e){if(C.isInitialized)throw Error("plausible.init() can only be called once");if(!e||!e.domain)throw Error("plausible.init(): domain argument is required");e.endpoint||(e.endpoint="https://plausible.io/api/event"),Object.assign(C,e),C.isInitialized=!0}function Wr(e,t,n){window.fetch&&fetch(e,{method:"POST",headers:{"Content-Type":"text/plain"},keepalive:!0,body:JSON.stringify(t)}).then(function(r){n&&n.callback&&n.callback({status:r.status})}).catch(function(r){n&&n.callback&&n.callback({error:r})})}var $t=!1,zr=location.href,Yr={},jt=-1,ge=0,Me=0;function vu(){$t&&(Xr(),fe=Fe(),pe=Bt())}function hu(e){Vt=!1,zr=e.u,Yr=e.p,jt=-1,Me=0,ge=Date.now(),gu()}function pu(){Vt=!0}function Xr(){var e=Qr();if(!Vt&&(jt<pe||e>=3e3)){jt=pe;var t={n:"engagement",sd:Math.round(pe/fe*100),d:C.domain,u:zr,p:Yr,e,v:31};ge=0,Me=0,C.hashBasedRouting&&(t.h=1),Wr(C.endpoint,t)}}function Gt(){document.visibilityState==="visible"&&document.hasFocus()&&ge===0?ge=Date.now():document.visibilityState!=="hidden"&&document.hasFocus()||(Me=Qr(),ge=0,Xr())}function gu(){$t||(document.addEventListener("visibilitychange",Gt),window.addEventListener("blur",Gt),window.addEventListener("focus",Gt),$t=!0)}function Qr(){return ge?Me+(Date.now()-ge):Me}function Fe(){var e=document.body||{},t=document.documentElement||{};return Math.max(e.scrollHeight||0,e.offsetHeight||0,e.clientHeight||0,t.scrollHeight||0,t.offsetHeight||0,t.clientHeight||0)}function Bt(){var e=document.body||{},t=document.documentElement||{},n=window.innerHeight||t.clientHeight||0,r=window.scrollY||t.scrollTop||e.scrollTop||0;return fe<=n?fe:r+n}function mu(){fe=Fe(),pe=Bt(),window.addEventListener("load",function(){fe=Fe();var e=0,t=setInterval(function(){fe=Fe(),++e==15&&clearInterval(t)},200)}),document.addEventListener("scroll",function(){fe=Fe();var e=Bt();e>pe&&(pe=e)})}function me(e,t){if(!C.isInitialized)throw Error("plausible.track() can only be called after plausible.init()");var n,r=e==="pageview";if(r&&vu(),!C.captureOnLocalhost){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(location.hostname)||location.protocol==="file:")return ct(e,t,"localhost");if((window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)&&!window.__plausible)return ct(e,t)}try{if(window.localStorage.plausible_ignore==="true")return ct(e,t,"localStorage flag")}catch(a){}var i={};i.n=e,i.v=31;var o=t&&(t.u||t.url);if(i.u=o||location.href,i.d=C.domain,i.r=document.referrer||null,t&&t.props&&(i.p=t.props),t&&t.interactive===!1&&(i.i=!1),t&&t.revenue&&(i.$=t.revenue),C.customProperties){var n=C.customProperties;typeof n=="function"&&(n=C.customProperties(e)),typeof n=="object"&&(i.p=Object.assign({},n,i.p))}if(C.hashBasedRouting&&(i.h=1),typeof C.transformRequest=="function"&&!(i=C.transformRequest(i)))return ct(e,t,"transformRequest");r&&hu(i),Wr(C.endpoint,i,t)}function ct(e,t,n){n&&C.logging&&console.warn("Ignoring Event: "+n),t&&t.callback&&t.callback(),e==="pageview"&&pu()}var yu=["pdf","xlsx","docx","txt","rtf","csv","exe","key","pps","ppt","pptx","7z","pkg","rar","gz","zip","avi","mov","mp4","mpeg","wmv","midi","mp3","wav","wma","dmg"],Zr=1,Jr=3,ei=yu;function bu(e){for(;e&&(e.tagName===void 0||!ti(e)||!e.href);)e=e.parentNode;return e}function ti(e){return e&&e.tagName&&e.tagName.toLowerCase()==="a"}function ni(e){if(e.type!=="auxclick"||e.button===Zr){var t=bu(e.target),n=t&&typeof t.href=="string"&&t.href.split("?")[0];if(!Wt(t,0)){if(C.outboundLinks&&Eu(t))return Kt(e,t,{name:"Outbound Link: Click",props:{url:t.href}});if(C.fileDownloads&&wu(n))return Kt(e,t,{name:"File Download",props:{url:n}})}}}function Kt(e,t,n){var r;(r={props:n.props}).revenue=n.revenue,me(n.name,r)}function Eu(e){return e&&typeof e.href=="string"&&e.host&&e.host!==location.host}function wu(e){if(!e)return!1;var t=e.split(".").pop();return ei.some(function(n){return n===t})}function Ht(e){var t=e&&e.classList;if(t){for(var n=0;n<t.length;n++)if(t.item(n).match(/plausible-event-name(=|--)(.+)/))return!0}return!1}function Wt(e,t){return!!e&&!(t>Jr)&&(!!Ht(e)||Wt(e.parentNode,t+1))}function ri(e){var t=Ht(e)?e:e&&e.parentNode,n={name:null,props:{}};n.revenue={};var r=t&&t.classList;if(!r)return n;for(var i=0;i<r.length;i++){var o,a,u=r.item(i),s=u.match(/plausible-event-(.+)(=|--)(.+)/);s&&(o=s[1],a=s[3].replace(/\+/g," "),o.toLowerCase()=="name"?n.name=a:n.props[o]=a);var c=u.match(/plausible-revenue-(.+)(=|--)(.+)/);c&&(o=c[1],a=c[3],n.revenue[o]=a)}return n}function _u(){function e(t){if(t.type!=="auxclick"||t.button===Zr){for(var n,r,i,o=t.target,a=0;a<=Jr&&o;a++){if((n=o)&&n.tagName&&n.tagName.toLowerCase()==="form")return;ti(o)&&(r=o),Ht(o)&&(i=o),o=o.parentNode}if(i){var u=ri(i);if(r)u.props.url=r.href,Kt(t,r,u);else{var s={};s.props=u.props,s.revenue=u.revenue,me(u.name,s)}}}}document.addEventListener("click",ni),document.addEventListener("auxclick",ni),C.fileDownloads&&typeof C.fileDownloads=="object"&&Array.isArray(C.fileDownloads.fileExtensions)&&(ei=C.fileDownloads.fileExtensions),C.formSubmissions&&document.addEventListener("submit",function(t){(t.target.hasAttribute("novalidate")||t.target.checkValidity())&&(Wt(t.target,0)||me("Form: Submission"))},!0),document.addEventListener("submit",function(t){var n,r=ri(t.target);r.name&&((n={props:r.props}).revenue=r.revenue,me(r.name,n))}),document.addEventListener("click",e),document.addEventListener("auxclick",e)}function Iu(e){function t(a){(C.hashBasedRouting||!a||n!==location.pathname)&&(n=location.pathname,e("pageview"))}var n,r=function(){t(!0)};if(C.hashBasedRouting)window.addEventListener("hashchange",r);else{var i=window.history;if(i.pushState){var o=i.pushState;i.pushState=function(){o.apply(this,arguments),r()},window.addEventListener("popstate",r)}}document.visibilityState==="hidden"||document.visibilityState==="prerender"?document.addEventListener("visibilitychange",function(){n||document.visibilityState!=="visible"||t()}):t(),window.addEventListener("pageshow",function(a){a.persisted&&t()})}function Tu(e){du(fu(e||{})),mu(),C.autoCapturePageviews&&Iu(me),_u(),C.bindToWindow&&typeof window!="undefined"&&(window.plausible=me,window.plausible.s="npm",window.plausible.v=31,window.plausible.l=!0)}class Su{constructor(t=window.location.hostname,n=null){this.trackingId=t,this.offsetTrackingId=n,this.hasPlausible()||this.loadPlausible()}trackEvent(t,n){me(t,n)}hasPlausible(){var n;if(typeof window.plausible=="function")return!0;const t=document.getElementsByTagName("script");for(let r=0;r<t.length;r++)if((n=t[r])!=null&&n.src.includes("plausible.io"))return!0;return!1}loadPlausible(){const t=Array.isArray(this.trackingId)?this.trackingId.join(","):this.trackingId;Tu({domain:t||""})}}class Au{constructor(){z(this,"isReady",!1);z(this,"interval",null);z(this,"config",null);z(this,"events",{});z(this,"googleAnalytics",null);z(this,"facebookPixel",null);z(this,"amplitude",null);z(this,"plausible",null);z(this,"localStorageKey","offset-analytics-events");z(this,"offsetGoogleAnalyticsId");z(this,"offsetFacebookPixelId");z(this,"offsetAmplitudeId");var n,r,i;const t=window.localStorage.getItem(this.localStorageKey);if(t)try{this.events=JSON.parse(t)}catch(o){this.events={}}this.offsetGoogleAnalyticsId=((n=window.OFFSET)==null?void 0:n.offsetGoogleAnalyticsId)||void 0,this.offsetFacebookPixelId=((r=window.OFFSET)==null?void 0:r.offsetFacebookPixelId)||void 0,this.offsetAmplitudeId=((i=window.OFFSET)==null?void 0:i.offsetAmplitudeId)||void 0,this.getConfig(),this.interval=setInterval(()=>{this.processEvents()},100)}trackEvent(t,n,r=null){this.events[t]=[n,r],window.localStorage.setItem(this.localStorageKey,JSON.stringify(this.events)),this.isReady&&(clearInterval(this.interval),this.interval=null,this.processEvents())}processEvents(){if(this.config==null)return;const t=Object.keys(this.events);if(t.length===0)return;(!V(this.config.google_analytics_id)||!V(this.offsetGoogleAnalyticsId))&&this.googleAnalytics==null&&(se("Setting up Google Analytics"),this.googleAnalytics=new si(this.config.google_analytics_id,this.offsetGoogleAnalyticsId)),this.config.enable_facebook_pixel_tracking&&(!V(this.config.facebook_pixel_id)||!V(this.offsetFacebookPixelId))&&this.facebookPixel==null&&(se("Setting up Facebook Pixel"),this.facebookPixel=new li(this.config.facebook_pixel_id,this.offsetFacebookPixelId)),this.config.enable_amplitude&&(!V(this.config.amplitude_api_key)||!V(this.offsetAmplitudeId))&&this.amplitude==null&&(se("Setting up Amplitude"),this.amplitude=new lu(this.config.amplitude_api_key,this.offsetAmplitudeId)),!V(this.config.plausible_domains)&&this.plausible==null&&(se("Setting up Plausible"),this.plausible=new Su(this.config.plausible_domains)),this.isReady=!0;function n(r,i){var o;if(i!=null)try{if(typeof((o=window.OFFSET)==null?void 0:o.customizeAnalytics)=="function"){const a=window.OFFSET.customizeAnalytics(r);if(a===!1)return;a&&(r.event=a.event,r.data=a.data)}i(r.event,r.data)}catch(a){se("Offset Analytics",a)}}t.forEach(r=>{var a,u,s,c;const[i,o]=this.events[r];se(`Tracking event ${r}`,i),this.googleAnalytics&&(o==="google"||o==null)&&n({event:r,data:i,platform:"google"},(a=this.googleAnalytics)==null?void 0:a.trackEvent.bind(this.googleAnalytics)),this.facebookPixel&&(o==="facebook"||o==null)&&n({event:r,data:i,platform:"facebook"},(u=this.facebookPixel)==null?void 0:u.trackEvent.bind(this.facebookPixel)),this.amplitude&&(o==="amplitude"||o==null)&&n({event:r,data:i,platform:"amplitude"},(s=this.amplitude)==null?void 0:s.trackEvent.bind(this.amplitude)),this.plausible&&(o==="plausible"||o==null)&&n({event:r,data:i,platform:"plausible"},(c=this.plausible)==null?void 0:c.trackEvent.bind(this.plausible))}),setTimeout(()=>{window.localStorage.removeItem(this.localStorageKey)},200),this.events={}}getConfig(){return lt(this,null,function*(){this.config=yield ae("config"),this.config&&(this.config.enable_facebook_pixel_tracking=this.config.enable_facebook_pixel_tracking==="TRUE",this.config.enable_amplitude=this.config.enable_amplitude==="TRUE",V(this.config.google_analytics_id)&&!V(this.config.google_tag_manager_id)&&(this.config.google_analytics_id=this.config.google_tag_manager_id))})}}window.OFFSET=window.OFFSET||{},window.OFFSET.analytics=new Au;class ku extends HTMLElement{connectedCallback(){var o,a,u;let t=null;const n=(o=this.getAttribute("event"))!=null?o:"PageView",r=this.getAttribute("data"),i=this.getAttribute("platform");try{t=JSON.parse(r!=null?r:"{}"),Object.keys(t||{}).length===0&&(t=r)}catch(s){t=r}(u=(a=window.OFFSET)==null?void 0:a.analytics)==null||u.trackEvent(n,t,i)}}customElements.get("offset-analytics")||customElements.define("offset-analytics",ku);function ii(){var t;const e=document.querySelectorAll("[data-offset-analytics]");for(const n of e){const r=n.getAttribute("data-offset-analytics");let i="click",o=null;if(r!=null&&r.includes(":")){const a=r==null?void 0:r.split(":");i=a[0],o=a[1]}else{const a=(t=n.tagName)==null?void 0:t.toUpperCase();a==="A"||a==="BUTTON"?i="click":a==="INPUT"||a==="TEXTAREA"||a==="SELECT"?i="change":a==="FORM"&&(i="submit"),o=r}if(V(o)){console.error("Invalid data-offset-analytics attribute. Expected format: click:eventName",n);continue}n.setAttribute("data-offset-analytics-registered",r!=null?r:""),n.removeAttribute("data-offset-analytics"),n.addEventListener(i,()=>{var c;let a=null;const u=n.getAttribute("data-offset-analytics-data"),s=n.getAttribute("data-offset-analytics-platform");try{a=JSON.parse(u!=null?u:"{}"),Object.keys(a||{}).length===0&&(a=u)}catch(l){a=u}(c=window.OFFSET)==null||c.analytics.trackEvent(o,a,s)},!1)}}document.addEventListener("DOMContentLoaded",()=>{ii()}),q.registerEvents=ii,Object.defineProperty(q,Symbol.toStringTag,{value:"Module"})}); 19862 19863 19864/***/ }), 19865
vendor: 89,010 bytes, lines 19866-22493
19866/***/ "../FigureBaseResources/node_modules/popper.js/dist/esm/popper.js": 19867/*!************************************************************************!*\ 19868 !*** ../FigureBaseResources/node_modules/popper.js/dist/esm/popper.js ***! 19869 \************************************************************************/ 19870/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 19871 19872"use strict"; 19873__webpack_require__.r(__webpack_exports__); 19874/**! 19875 * @fileOverview Kickass library to create and place poppers near their reference elements. 19876 * @version 1.16.1 19877 * @license 19878 * Copyright (c) 2016 Federico Zivolo and contributors 19879 * 19880 * Permission is hereby granted, free of charge, to any person obtaining a copy 19881 * of this software and associated documentation files (the "Software"), to deal 19882 * in the Software without restriction, including without limitation the rights 19883 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 19884 * copies of the Software, and to permit persons to whom the Software is 19885 * furnished to do so, subject to the following conditions: 19886 * 19887 * The above copyright notice and this permission notice shall be included in all 19888 * copies or substantial portions of the Software. 19889 * 19890 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19891 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19892 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19893 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19894 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19895 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19896 * SOFTWARE. 19897 */ 19898var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined'; 19899 19900var timeoutDuration = function () { 19901 var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; 19902 for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { 19903 if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { 19904 return 1; 19905 } 19906 } 19907 return 0; 19908}(); 19909 19910function microtaskDebounce(fn) { 19911 var called = false; 19912 return function () { 19913 if (called) { 19914 return; 19915 } 19916 called = true; 19917 window.Promise.resolve().then(function () { 19918 called = false; 19919 fn(); 19920 }); 19921 }; 19922} 19923 19924function taskDebounce(fn) { 19925 var scheduled = false; 19926 return function () { 19927 if (!scheduled) { 19928 scheduled = true; 19929 setTimeout(function () { 19930 scheduled = false; 19931 fn(); 19932 }, timeoutDuration); 19933 } 19934 }; 19935} 19936 19937var supportsMicroTasks = isBrowser && window.Promise; 19938 19939/** 19940* Create a debounced version of a method, that's asynchronously deferred 19941* but called in the minimum time possible. 19942* 19943* @method 19944* @memberof Popper.Utils 19945* @argument {Function} fn 19946* @returns {Function} 19947*/ 19948var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; 19949 19950/** 19951 * Check if the given variable is a function 19952 * @method 19953 * @memberof Popper.Utils 19954 * @argument {Any} functionToCheck - variable to check 19955 * @returns {Boolean} answer to: is a function? 19956 */ 19957function isFunction(functionToCheck) { 19958 var getType = {}; 19959 return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; 19960} 19961 19962/** 19963 * Get CSS computed property of the given element 19964 * @method 19965 * @memberof Popper.Utils 19966 * @argument {Eement} element 19967 * @argument {String} property 19968 */ 19969function getStyleComputedProperty(element, property) { 19970 if (element.nodeType !== 1) { 19971 return []; 19972 } 19973 // NOTE: 1 DOM access here 19974 var window = element.ownerDocument.defaultView; 19975 var css = window.getComputedStyle(element, null); 19976 return property ? css[property] : css; 19977} 19978 19979/** 19980 * Returns the parentNode or the host of the element 19981 * @method 19982 * @memberof Popper.Utils 19983 * @argument {Element} element 19984 * @returns {Element} parent 19985 */ 19986function getParentNode(element) { 19987 if (element.nodeName === 'HTML') { 19988 return element; 19989 } 19990 return element.parentNode || element.host; 19991} 19992 19993/** 19994 * Returns the scrolling parent of the given element 19995 * @method 19996 * @memberof Popper.Utils 19997 * @argument {Element} element 19998 * @returns {Element} scroll parent 19999 */ 20000function getScrollParent(element) { 20001 // Return body, `getScroll` will take care to get the correct `scrollTop` from it 20002 if (!element) { 20003 return document.body; 20004 } 20005 20006 switch (element.nodeName) { 20007 case 'HTML': 20008 case 'BODY': 20009 return element.ownerDocument.body; 20010 case '#document': 20011 return element.body; 20012 } 20013 20014 // Firefox want us to check `-x` and `-y` variations as well 20015 20016 var _getStyleComputedProp = getStyleComputedProperty(element), 20017 overflow = _getStyleComputedProp.overflow, 20018 overflowX = _getStyleComputedProp.overflowX, 20019 overflowY = _getStyleComputedProp.overflowY; 20020 20021 if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { 20022 return element; 20023 } 20024 20025 return getScrollParent(getParentNode(element)); 20026} 20027 20028/** 20029 * Returns the reference node of the reference object, or the reference object itself. 20030 * @method 20031 * @memberof Popper.Utils 20032 * @param {Element|Object} reference - the reference element (the popper will be relative to this) 20033 * @returns {Element} parent 20034 */ 20035function getReferenceNode(reference) { 20036 return reference && reference.referenceNode ? reference.referenceNode : reference; 20037} 20038 20039var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); 20040var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); 20041 20042/** 20043 * Determines if the browser is Internet Explorer 20044 * @method 20045 * @memberof Popper.Utils 20046 * @param {Number} version to check 20047 * @returns {Boolean} isIE 20048 */ 20049function isIE(version) { 20050 if (version === 11) { 20051 return isIE11; 20052 } 20053 if (version === 10) { 20054 return isIE10; 20055 } 20056 return isIE11 || isIE10; 20057} 20058 20059/** 20060 * Returns the offset parent of the given element 20061 * @method 20062 * @memberof Popper.Utils 20063 * @argument {Element} element 20064 * @returns {Element} offset parent 20065 */ 20066function getOffsetParent(element) { 20067 if (!element) { 20068 return document.documentElement; 20069 } 20070 20071 var noOffsetParent = isIE(10) ? document.body : null; 20072 20073 // NOTE: 1 DOM access here 20074 var offsetParent = element.offsetParent || null; 20075 // Skip hidden elements which don't have an offsetParent 20076 while (offsetParent === noOffsetParent && element.nextElementSibling) { 20077 offsetParent = (element = element.nextElementSibling).offsetParent; 20078 } 20079 20080 var nodeName = offsetParent && offsetParent.nodeName; 20081 20082 if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { 20083 return element ? element.ownerDocument.documentElement : document.documentElement; 20084 } 20085 20086 // .offsetParent will return the closest TH, TD or TABLE in case 20087 // no offsetParent is present, I hate this job... 20088 if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { 20089 return getOffsetParent(offsetParent); 20090 } 20091 20092 return offsetParent; 20093} 20094 20095function isOffsetContainer(element) { 20096 var nodeName = element.nodeName; 20097 20098 if (nodeName === 'BODY') { 20099 return false; 20100 } 20101 return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; 20102} 20103 20104/** 20105 * Finds the root node (document, shadowDOM root) of the given element 20106 * @method 20107 * @memberof Popper.Utils 20108 * @argument {Element} node 20109 * @returns {Element} root node 20110 */ 20111function getRoot(node) { 20112 if (node.parentNode !== null) { 20113 return getRoot(node.parentNode); 20114 } 20115 20116 return node; 20117} 20118 20119/** 20120 * Finds the offset parent common to the two provided nodes 20121 * @method 20122 * @memberof Popper.Utils 20123 * @argument {Element} element1 20124 * @argument {Element} element2 20125 * @returns {Element} common offset parent 20126 */ 20127function findCommonOffsetParent(element1, element2) { 20128 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 20129 if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { 20130 return document.documentElement; 20131 } 20132 20133 // Here we make sure to give as "start" the element that comes first in the DOM 20134 var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; 20135 var start = order ? element1 : element2; 20136 var end = order ? element2 : element1; 20137 20138 // Get common ancestor container 20139 var range = document.createRange(); 20140 range.setStart(start, 0); 20141 range.setEnd(end, 0); 20142 var commonAncestorContainer = range.commonAncestorContainer; 20143 20144 // Both nodes are inside #document 20145 20146 if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { 20147 if (isOffsetContainer(commonAncestorContainer)) { 20148 return commonAncestorContainer; 20149 } 20150 20151 return getOffsetParent(commonAncestorContainer); 20152 } 20153 20154 // one of the nodes is inside shadowDOM, find which one 20155 var element1root = getRoot(element1); 20156 if (element1root.host) { 20157 return findCommonOffsetParent(element1root.host, element2); 20158 } else { 20159 return findCommonOffsetParent(element1, getRoot(element2).host); 20160 } 20161} 20162 20163/** 20164 * Gets the scroll value of the given element in the given side (top and left) 20165 * @method 20166 * @memberof Popper.Utils 20167 * @argument {Element} element 20168 * @argument {String} side `top` or `left` 20169 * @returns {number} amount of scrolled pixels 20170 */ 20171function getScroll(element) { 20172 var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; 20173 20174 var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; 20175 var nodeName = element.nodeName; 20176 20177 if (nodeName === 'BODY' || nodeName === 'HTML') { 20178 var html = element.ownerDocument.documentElement; 20179 var scrollingElement = element.ownerDocument.scrollingElement || html; 20180 return scrollingElement[upperSide]; 20181 } 20182 20183 return element[upperSide]; 20184} 20185 20186/* 20187 * Sum or subtract the element scroll values (left and top) from a given rect object 20188 * @method 20189 * @memberof Popper.Utils 20190 * @param {Object} rect - Rect object you want to change 20191 * @param {HTMLElement} element - The element from the function reads the scroll values 20192 * @param {Boolean} subtract - set to true if you want to subtract the scroll values 20193 * @return {Object} rect - The modifier rect object 20194 */ 20195function includeScroll(rect, element) { 20196 var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 20197 20198 var scrollTop = getScroll(element, 'top'); 20199 var scrollLeft = getScroll(element, 'left'); 20200 var modifier = subtract ? -1 : 1; 20201 rect.top += scrollTop * modifier; 20202 rect.bottom += scrollTop * modifier; 20203 rect.left += scrollLeft * modifier; 20204 rect.right += scrollLeft * modifier; 20205 return rect; 20206} 20207 20208/* 20209 * Helper to detect borders of a given element 20210 * @method 20211 * @memberof Popper.Utils 20212 * @param {CSSStyleDeclaration} styles 20213 * Result of `getStyleComputedProperty` on the given element 20214 * @param {String} axis - `x` or `y` 20215 * @return {number} borders - The borders size of the given axis 20216 */ 20217 20218function getBordersSize(styles, axis) { 20219 var sideA = axis === 'x' ? 'Left' : 'Top'; 20220 var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; 20221 20222 return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']); 20223} 20224 20225function getSize(axis, body, html, computedStyle) { 20226 return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); 20227} 20228 20229function getWindowSizes(document) { 20230 var body = document.body; 20231 var html = document.documentElement; 20232 var computedStyle = isIE(10) && getComputedStyle(html); 20233 20234 return { 20235 height: getSize('Height', body, html, computedStyle), 20236 width: getSize('Width', body, html, computedStyle) 20237 }; 20238} 20239 20240var classCallCheck = function (instance, Constructor) { 20241 if (!(instance instanceof Constructor)) { 20242 throw new TypeError("Cannot call a class as a function"); 20243 } 20244}; 20245 20246var createClass = function () { 20247 function defineProperties(target, props) { 20248 for (var i = 0; i < props.length; i++) { 20249 var descriptor = props[i]; 20250 descriptor.enumerable = descriptor.enumerable || false; 20251 descriptor.configurable = true; 20252 if ("value" in descriptor) descriptor.writable = true; 20253 Object.defineProperty(target, descriptor.key, descriptor); 20254 } 20255 } 20256 20257 return function (Constructor, protoProps, staticProps) { 20258 if (protoProps) defineProperties(Constructor.prototype, protoProps); 20259 if (staticProps) defineProperties(Constructor, staticProps); 20260 return Constructor; 20261 }; 20262}(); 20263 20264 20265 20266 20267 20268var defineProperty = function (obj, key, value) { 20269 if (key in obj) { 20270 Object.defineProperty(obj, key, { 20271 value: value, 20272 enumerable: true, 20273 configurable: true, 20274 writable: true 20275 }); 20276 } else { 20277 obj[key] = value; 20278 } 20279 20280 return obj; 20281}; 20282 20283var _extends = Object.assign || function (target) { 20284 for (var i = 1; i < arguments.length; i++) { 20285 var source = arguments[i]; 20286 20287 for (var key in source) { 20288 if (Object.prototype.hasOwnProperty.call(source, key)) { 20289 target[key] = source[key]; 20290 } 20291 } 20292 } 20293 20294 return target; 20295}; 20296 20297/** 20298 * Given element offsets, generate an output similar to getBoundingClientRect 20299 * @method 20300 * @memberof Popper.Utils 20301 * @argument {Object} offsets 20302 * @returns {Object} ClientRect like output 20303 */ 20304function getClientRect(offsets) { 20305 return _extends({}, offsets, { 20306 right: offsets.left + offsets.width, 20307 bottom: offsets.top + offsets.height 20308 }); 20309} 20310 20311/** 20312 * Get bounding client rect of given element 20313 * @method 20314 * @memberof Popper.Utils 20315 * @param {HTMLElement} element 20316 * @return {Object} client rect 20317 */ 20318function getBoundingClientRect(element) { 20319 var rect = {}; 20320 20321 // IE10 10 FIX: Please, don't ask, the element isn't 20322 // considered in DOM in some circumstances... 20323 // This isn't reproducible in IE10 compatibility mode of IE11 20324 try { 20325 if (isIE(10)) { 20326 rect = element.getBoundingClientRect(); 20327 var scrollTop = getScroll(element, 'top'); 20328 var scrollLeft = getScroll(element, 'left'); 20329 rect.top += scrollTop; 20330 rect.left += scrollLeft; 20331 rect.bottom += scrollTop; 20332 rect.right += scrollLeft; 20333 } else { 20334 rect = element.getBoundingClientRect(); 20335 } 20336 } catch (e) {} 20337 20338 var result = { 20339 left: rect.left, 20340 top: rect.top, 20341 width: rect.right - rect.left, 20342 height: rect.bottom - rect.top 20343 }; 20344 20345 // subtract scrollbar size from sizes 20346 var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; 20347 var width = sizes.width || element.clientWidth || result.width; 20348 var height = sizes.height || element.clientHeight || result.height; 20349 20350 var horizScrollbar = element.offsetWidth - width; 20351 var vertScrollbar = element.offsetHeight - height; 20352 20353 // if an hypothetical scrollbar is detected, we must be sure it's not a `border` 20354 // we make this check conditional for performance reasons 20355 if (horizScrollbar || vertScrollbar) { 20356 var styles = getStyleComputedProperty(element); 20357 horizScrollbar -= getBordersSize(styles, 'x'); 20358 vertScrollbar -= getBordersSize(styles, 'y'); 20359 20360 result.width -= horizScrollbar; 20361 result.height -= vertScrollbar; 20362 } 20363 20364 return getClientRect(result); 20365} 20366 20367function getOffsetRectRelativeToArbitraryNode(children, parent) { 20368 var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 20369 20370 var isIE10 = isIE(10); 20371 var isHTML = parent.nodeName === 'HTML'; 20372 var childrenRect = getBoundingClientRect(children); 20373 var parentRect = getBoundingClientRect(parent); 20374 var scrollParent = getScrollParent(children); 20375 20376 var styles = getStyleComputedProperty(parent); 20377 var borderTopWidth = parseFloat(styles.borderTopWidth); 20378 var borderLeftWidth = parseFloat(styles.borderLeftWidth); 20379 20380 // In cases where the parent is fixed, we must ignore negative scroll in offset calc 20381 if (fixedPosition && isHTML) { 20382 parentRect.top = Math.max(parentRect.top, 0); 20383 parentRect.left = Math.max(parentRect.left, 0); 20384 } 20385 var offsets = getClientRect({ 20386 top: childrenRect.top - parentRect.top - borderTopWidth, 20387 left: childrenRect.left - parentRect.left - borderLeftWidth, 20388 width: childrenRect.width, 20389 height: childrenRect.height 20390 }); 20391 offsets.marginTop = 0; 20392 offsets.marginLeft = 0; 20393 20394 // Subtract margins of documentElement in case it's being used as parent 20395 // we do this only on HTML because it's the only element that behaves 20396 // differently when margins are applied to it. The margins are included in 20397 // the box of the documentElement, in the other cases not. 20398 if (!isIE10 && isHTML) { 20399 var marginTop = parseFloat(styles.marginTop); 20400 var marginLeft = parseFloat(styles.marginLeft); 20401 20402 offsets.top -= borderTopWidth - marginTop; 20403 offsets.bottom -= borderTopWidth - marginTop; 20404 offsets.left -= borderLeftWidth - marginLeft; 20405 offsets.right -= borderLeftWidth - marginLeft; 20406 20407 // Attach marginTop and marginLeft because in some circumstances we may need them 20408 offsets.marginTop = marginTop; 20409 offsets.marginLeft = marginLeft; 20410 } 20411 20412 if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { 20413 offsets = includeScroll(offsets, parent); 20414 } 20415 20416 return offsets; 20417} 20418 20419function getViewportOffsetRectRelativeToArtbitraryNode(element) { 20420 var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 20421 20422 var html = element.ownerDocument.documentElement; 20423 var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); 20424 var width = Math.max(html.clientWidth, window.innerWidth || 0); 20425 var height = Math.max(html.clientHeight, window.innerHeight || 0); 20426 20427 var scrollTop = !excludeScroll ? getScroll(html) : 0; 20428 var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; 20429 20430 var offset = { 20431 top: scrollTop - relativeOffset.top + relativeOffset.marginTop, 20432 left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, 20433 width: width, 20434 height: height 20435 }; 20436 20437 return getClientRect(offset); 20438} 20439 20440/** 20441 * Check if the given element is fixed or is inside a fixed parent 20442 * @method 20443 * @memberof Popper.Utils 20444 * @argument {Element} element 20445 * @argument {Element} customContainer 20446 * @returns {Boolean} answer to "isFixed?" 20447 */ 20448function isFixed(element) { 20449 var nodeName = element.nodeName; 20450 if (nodeName === 'BODY' || nodeName === 'HTML') { 20451 return false; 20452 } 20453 if (getStyleComputedProperty(element, 'position') === 'fixed') { 20454 return true; 20455 } 20456 var parentNode = getParentNode(element); 20457 if (!parentNode) { 20458 return false; 20459 } 20460 return isFixed(parentNode); 20461} 20462 20463/** 20464 * Finds the first parent of an element that has a transformed property defined 20465 * @method 20466 * @memberof Popper.Utils 20467 * @argument {Element} element 20468 * @returns {Element} first transformed parent or documentElement 20469 */ 20470 20471function getFixedPositionOffsetParent(element) { 20472 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 20473 if (!element || !element.parentElement || isIE()) { 20474 return document.documentElement; 20475 } 20476 var el = element.parentElement; 20477 while (el && getStyleComputedProperty(el, 'transform') === 'none') { 20478 el = el.parentElement; 20479 } 20480 return el || document.documentElement; 20481} 20482 20483/** 20484 * Computed the boundaries limits and return them 20485 * @method 20486 * @memberof Popper.Utils 20487 * @param {HTMLElement} popper 20488 * @param {HTMLElement} reference 20489 * @param {number} padding 20490 * @param {HTMLElement} boundariesElement - Element used to define the boundaries 20491 * @param {Boolean} fixedPosition - Is in fixed position mode 20492 * @returns {Object} Coordinates of the boundaries 20493 */ 20494function getBoundaries(popper, reference, padding, boundariesElement) { 20495 var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; 20496 20497 // NOTE: 1 DOM access here 20498 20499 var boundaries = { top: 0, left: 0 }; 20500 var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); 20501 20502 // Handle viewport case 20503 if (boundariesElement === 'viewport') { 20504 boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); 20505 } else { 20506 // Handle other cases based on DOM element used as boundaries 20507 var boundariesNode = void 0; 20508 if (boundariesElement === 'scrollParent') { 20509 boundariesNode = getScrollParent(getParentNode(reference)); 20510 if (boundariesNode.nodeName === 'BODY') { 20511 boundariesNode = popper.ownerDocument.documentElement; 20512 } 20513 } else if (boundariesElement === 'window') { 20514 boundariesNode = popper.ownerDocument.documentElement; 20515 } else { 20516 boundariesNode = boundariesElement; 20517 } 20518 20519 var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); 20520 20521 // In case of HTML, we need a different computation 20522 if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { 20523 var _getWindowSizes = getWindowSizes(popper.ownerDocument), 20524 height = _getWindowSizes.height, 20525 width = _getWindowSizes.width; 20526 20527 boundaries.top += offsets.top - offsets.marginTop; 20528 boundaries.bottom = height + offsets.top; 20529 boundaries.left += offsets.left - offsets.marginLeft; 20530 boundaries.right = width + offsets.left; 20531 } else { 20532 // for all the other DOM elements, this one is good 20533 boundaries = offsets; 20534 } 20535 } 20536 20537 // Add paddings 20538 padding = padding || 0; 20539 var isPaddingNumber = typeof padding === 'number'; 20540 boundaries.left += isPaddingNumber ? padding : padding.left || 0; 20541 boundaries.top += isPaddingNumber ? padding : padding.top || 0; 20542 boundaries.right -= isPaddingNumber ? padding : padding.right || 0; 20543 boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; 20544 20545 return boundaries; 20546} 20547 20548function getArea(_ref) { 20549 var width = _ref.width, 20550 height = _ref.height; 20551 20552 return width * height; 20553} 20554 20555/** 20556 * Utility used to transform the `auto` placement to the placement with more 20557 * available space. 20558 * @method 20559 * @memberof Popper.Utils 20560 * @argument {Object} data - The data object generated by update method 20561 * @argument {Object} options - Modifiers configuration and options 20562 * @returns {Object} The data object, properly modified 20563 */ 20564function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { 20565 var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; 20566 20567 if (placement.indexOf('auto') === -1) { 20568 return placement; 20569 } 20570 20571 var boundaries = getBoundaries(popper, reference, padding, boundariesElement); 20572 20573 var rects = { 20574 top: { 20575 width: boundaries.width, 20576 height: refRect.top - boundaries.top 20577 }, 20578 right: { 20579 width: boundaries.right - refRect.right, 20580 height: boundaries.height 20581 }, 20582 bottom: { 20583 width: boundaries.width, 20584 height: boundaries.bottom - refRect.bottom 20585 }, 20586 left: { 20587 width: refRect.left - boundaries.left, 20588 height: boundaries.height 20589 } 20590 }; 20591 20592 var sortedAreas = Object.keys(rects).map(function (key) { 20593 return _extends({ 20594 key: key 20595 }, rects[key], { 20596 area: getArea(rects[key]) 20597 }); 20598 }).sort(function (a, b) { 20599 return b.area - a.area; 20600 }); 20601 20602 var filteredAreas = sortedAreas.filter(function (_ref2) { 20603 var width = _ref2.width, 20604 height = _ref2.height; 20605 return width >= popper.clientWidth && height >= popper.clientHeight; 20606 }); 20607 20608 var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; 20609 20610 var variation = placement.split('-')[1]; 20611 20612 return computedPlacement + (variation ? '-' + variation : ''); 20613} 20614 20615/** 20616 * Get offsets to the reference element 20617 * @method 20618 * @memberof Popper.Utils 20619 * @param {Object} state 20620 * @param {Element} popper - the popper element 20621 * @param {Element} reference - the reference element (the popper will be relative to this) 20622 * @param {Element} fixedPosition - is in fixed position mode 20623 * @returns {Object} An object containing the offsets which will be applied to the popper 20624 */ 20625function getReferenceOffsets(state, popper, reference) { 20626 var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; 20627 20628 var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); 20629 return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); 20630} 20631 20632/** 20633 * Get the outer sizes of the given element (offset size + margins) 20634 * @method 20635 * @memberof Popper.Utils 20636 * @argument {Element} element 20637 * @returns {Object} object containing width and height properties 20638 */ 20639function getOuterSizes(element) { 20640 var window = element.ownerDocument.defaultView; 20641 var styles = window.getComputedStyle(element); 20642 var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); 20643 var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); 20644 var result = { 20645 width: element.offsetWidth + y, 20646 height: element.offsetHeight + x 20647 }; 20648 return result; 20649} 20650 20651/** 20652 * Get the opposite placement of the given one 20653 * @method 20654 * @memberof Popper.Utils 20655 * @argument {String} placement 20656 * @returns {String} flipped placement 20657 */ 20658function getOppositePlacement(placement) { 20659 var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; 20660 return placement.replace(/left|right|bottom|top/g, function (matched) { 20661 return hash[matched]; 20662 }); 20663} 20664 20665/** 20666 * Get offsets to the popper 20667 * @method 20668 * @memberof Popper.Utils 20669 * @param {Object} position - CSS position the Popper will get applied 20670 * @param {HTMLElement} popper - the popper element 20671 * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) 20672 * @param {String} placement - one of the valid placement options 20673 * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper 20674 */ 20675function getPopperOffsets(popper, referenceOffsets, placement) { 20676 placement = placement.split('-')[0]; 20677 20678 // Get popper node sizes 20679 var popperRect = getOuterSizes(popper); 20680 20681 // Add position, width and height to our offsets object 20682 var popperOffsets = { 20683 width: popperRect.width, 20684 height: popperRect.height 20685 }; 20686 20687 // depending by the popper placement we have to compute its offsets slightly differently 20688 var isHoriz = ['right', 'left'].indexOf(placement) !== -1; 20689 var mainSide = isHoriz ? 'top' : 'left'; 20690 var secondarySide = isHoriz ? 'left' : 'top'; 20691 var measurement = isHoriz ? 'height' : 'width'; 20692 var secondaryMeasurement = !isHoriz ? 'height' : 'width'; 20693 20694 popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; 20695 if (placement === secondarySide) { 20696 popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; 20697 } else { 20698 popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; 20699 } 20700 20701 return popperOffsets; 20702} 20703 20704/** 20705 * Mimics the `find` method of Array 20706 * @method 20707 * @memberof Popper.Utils 20708 * @argument {Array} arr 20709 * @argument prop 20710 * @argument value 20711 * @returns index or -1 20712 */ 20713function find(arr, check) { 20714 // use native find if supported 20715 if (Array.prototype.find) { 20716 return arr.find(check); 20717 } 20718 20719 // use `filter` to obtain the same behavior of `find` 20720 return arr.filter(check)[0]; 20721} 20722 20723/** 20724 * Return the index of the matching object 20725 * @method 20726 * @memberof Popper.Utils 20727 * @argument {Array} arr 20728 * @argument prop 20729 * @argument value 20730 * @returns index or -1 20731 */ 20732function findIndex(arr, prop, value) { 20733 // use native findIndex if supported 20734 if (Array.prototype.findIndex) { 20735 return arr.findIndex(function (cur) { 20736 return cur[prop] === value; 20737 }); 20738 } 20739 20740 // use `find` + `indexOf` if `findIndex` isn't supported 20741 var match = find(arr, function (obj) { 20742 return obj[prop] === value; 20743 }); 20744 return arr.indexOf(match); 20745} 20746 20747/** 20748 * Loop trough the list of modifiers and run them in order, 20749 * each of them will then edit the data object. 20750 * @method 20751 * @memberof Popper.Utils 20752 * @param {dataObject} data 20753 * @param {Array} modifiers 20754 * @param {String} ends - Optional modifier name used as stopper 20755 * @returns {dataObject} 20756 */ 20757function runModifiers(modifiers, data, ends) { 20758 var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); 20759 20760 modifiersToRun.forEach(function (modifier) { 20761 if (modifier['function']) { 20762 // eslint-disable-line dot-notation 20763 console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); 20764 } 20765 var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation 20766 if (modifier.enabled && isFunction(fn)) { 20767 // Add properties to offsets to make them a complete clientRect object 20768 // we do this before each modifier to make sure the previous one doesn't 20769 // mess with these values 20770 data.offsets.popper = getClientRect(data.offsets.popper); 20771 data.offsets.reference = getClientRect(data.offsets.reference); 20772 20773 data = fn(data, modifier); 20774 } 20775 }); 20776 20777 return data; 20778} 20779 20780/** 20781 * Updates the position of the popper, computing the new offsets and applying 20782 * the new style.<br /> 20783 * Prefer `scheduleUpdate` over `update` because of performance reasons. 20784 * @method 20785 * @memberof Popper 20786 */ 20787function update() { 20788 // if popper is destroyed, don't perform any further update 20789 if (this.state.isDestroyed) { 20790 return; 20791 } 20792 20793 var data = { 20794 instance: this, 20795 styles: {}, 20796 arrowStyles: {}, 20797 attributes: {}, 20798 flipped: false, 20799 offsets: {} 20800 }; 20801 20802 // compute reference element offsets 20803 data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); 20804 20805 // compute auto placement, store placement inside the data object, 20806 // modifiers will be able to edit `placement` if needed 20807 // and refer to originalPlacement to know the original value 20808 data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); 20809 20810 // store the computed placement inside `originalPlacement` 20811 data.originalPlacement = data.placement; 20812 20813 data.positionFixed = this.options.positionFixed; 20814 20815 // compute the popper offsets 20816 data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); 20817 20818 data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; 20819 20820 // run the modifiers 20821 data = runModifiers(this.modifiers, data); 20822 20823 // the first `update` will call `onCreate` callback 20824 // the other ones will call `onUpdate` callback 20825 if (!this.state.isCreated) { 20826 this.state.isCreated = true; 20827 this.options.onCreate(data); 20828 } else { 20829 this.options.onUpdate(data); 20830 } 20831} 20832 20833/** 20834 * Helper used to know if the given modifier is enabled. 20835 * @method 20836 * @memberof Popper.Utils 20837 * @returns {Boolean} 20838 */ 20839function isModifierEnabled(modifiers, modifierName) { 20840 return modifiers.some(function (_ref) { 20841 var name = _ref.name, 20842 enabled = _ref.enabled; 20843 return enabled && name === modifierName; 20844 }); 20845} 20846 20847/** 20848 * Get the prefixed supported property name 20849 * @method 20850 * @memberof Popper.Utils 20851 * @argument {String} property (camelCase) 20852 * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) 20853 */ 20854function getSupportedPropertyName(property) { 20855 var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; 20856 var upperProp = property.charAt(0).toUpperCase() + property.slice(1); 20857 20858 for (var i = 0; i < prefixes.length; i++) { 20859 var prefix = prefixes[i]; 20860 var toCheck = prefix ? '' + prefix + upperProp : property; 20861 if (typeof document.body.style[toCheck] !== 'undefined') { 20862 return toCheck; 20863 } 20864 } 20865 return null; 20866} 20867 20868/** 20869 * Destroys the popper. 20870 * @method 20871 * @memberof Popper 20872 */ 20873function destroy() { 20874 this.state.isDestroyed = true; 20875 20876 // touch DOM only if `applyStyle` modifier is enabled 20877 if (isModifierEnabled(this.modifiers, 'applyStyle')) { 20878 this.popper.removeAttribute('x-placement'); 20879 this.popper.style.position = ''; 20880 this.popper.style.top = ''; 20881 this.popper.style.left = ''; 20882 this.popper.style.right = ''; 20883 this.popper.style.bottom = ''; 20884 this.popper.style.willChange = ''; 20885 this.popper.style[getSupportedPropertyName('transform')] = ''; 20886 } 20887 20888 this.disableEventListeners(); 20889 20890 // remove the popper if user explicitly asked for the deletion on destroy 20891 // do not use `remove` because IE11 doesn't support it 20892 if (this.options.removeOnDestroy) { 20893 this.popper.parentNode.removeChild(this.popper); 20894 } 20895 return this; 20896} 20897 20898/** 20899 * Get the window associated with the element 20900 * @argument {Element} element 20901 * @returns {Window} 20902 */ 20903function getWindow(element) { 20904 var ownerDocument = element.ownerDocument; 20905 return ownerDocument ? ownerDocument.defaultView : window; 20906} 20907 20908function attachToScrollParents(scrollParent, event, callback, scrollParents) { 20909 var isBody = scrollParent.nodeName === 'BODY'; 20910 var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; 20911 target.addEventListener(event, callback, { passive: true }); 20912 20913 if (!isBody) { 20914 attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); 20915 } 20916 scrollParents.push(target); 20917} 20918 20919/** 20920 * Setup needed event listeners used to update the popper position 20921 * @method 20922 * @memberof Popper.Utils 20923 * @private 20924 */ 20925function setupEventListeners(reference, options, state, updateBound) { 20926 // Resize event listener on window 20927 state.updateBound = updateBound; 20928 getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); 20929 20930 // Scroll event listener on scroll parents 20931 var scrollElement = getScrollParent(reference); 20932 attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); 20933 state.scrollElement = scrollElement; 20934 state.eventsEnabled = true; 20935 20936 return state; 20937} 20938 20939/** 20940 * It will add resize/scroll events and start recalculating 20941 * position of the popper element when they are triggered. 20942 * @method 20943 * @memberof Popper 20944 */ 20945function enableEventListeners() { 20946 if (!this.state.eventsEnabled) { 20947 this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); 20948 } 20949} 20950 20951/** 20952 * Remove event listeners used to update the popper position 20953 * @method 20954 * @memberof Popper.Utils 20955 * @private 20956 */ 20957function removeEventListeners(reference, state) { 20958 // Remove resize event listener on window 20959 getWindow(reference).removeEventListener('resize', state.updateBound); 20960 20961 // Remove scroll event listener on scroll parents 20962 state.scrollParents.forEach(function (target) { 20963 target.removeEventListener('scroll', state.updateBound); 20964 }); 20965 20966 // Reset state 20967 state.updateBound = null; 20968 state.scrollParents = []; 20969 state.scrollElement = null; 20970 state.eventsEnabled = false; 20971 return state; 20972} 20973 20974/** 20975 * It will remove resize/scroll events and won't recalculate popper position 20976 * when they are triggered. It also won't trigger `onUpdate` callback anymore, 20977 * unless you call `update` method manually. 20978 * @method 20979 * @memberof Popper 20980 */ 20981function disableEventListeners() { 20982 if (this.state.eventsEnabled) { 20983 cancelAnimationFrame(this.scheduleUpdate); 20984 this.state = removeEventListeners(this.reference, this.state); 20985 } 20986} 20987 20988/** 20989 * Tells if a given input is a number 20990 * @method 20991 * @memberof Popper.Utils 20992 * @param {*} input to check 20993 * @return {Boolean} 20994 */ 20995function isNumeric(n) { 20996 return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); 20997} 20998 20999/** 21000 * Set the style to the given popper 21001 * @method 21002 * @memberof Popper.Utils 21003 * @argument {Element} element - Element to apply the style to 21004 * @argument {Object} styles 21005 * Object with a list of properties and values which will be applied to the element 21006 */ 21007function setStyles(element, styles) { 21008 Object.keys(styles).forEach(function (prop) { 21009 var unit = ''; 21010 // add unit if the value is numeric and is one of the following 21011 if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { 21012 unit = 'px'; 21013 } 21014 element.style[prop] = styles[prop] + unit; 21015 }); 21016} 21017 21018/** 21019 * Set the attributes to the given popper 21020 * @method 21021 * @memberof Popper.Utils 21022 * @argument {Element} element - Element to apply the attributes to 21023 * @argument {Object} styles 21024 * Object with a list of properties and values which will be applied to the element 21025 */ 21026function setAttributes(element, attributes) { 21027 Object.keys(attributes).forEach(function (prop) { 21028 var value = attributes[prop]; 21029 if (value !== false) { 21030 element.setAttribute(prop, attributes[prop]); 21031 } else { 21032 element.removeAttribute(prop); 21033 } 21034 }); 21035} 21036 21037/** 21038 * @function 21039 * @memberof Modifiers 21040 * @argument {Object} data - The data object generated by `update` method 21041 * @argument {Object} data.styles - List of style properties - values to apply to popper element 21042 * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element 21043 * @argument {Object} options - Modifiers configuration and options 21044 * @returns {Object} The same data object 21045 */ 21046function applyStyle(data) { 21047 // any property present in `data.styles` will be applied to the popper, 21048 // in this way we can make the 3rd party modifiers add custom styles to it 21049 // Be aware, modifiers could override the properties defined in the previous 21050 // lines of this modifier! 21051 setStyles(data.instance.popper, data.styles); 21052 21053 // any property present in `data.attributes` will be applied to the popper, 21054 // they will be set as HTML attributes of the element 21055 setAttributes(data.instance.popper, data.attributes); 21056 21057 // if arrowElement is defined and arrowStyles has some properties 21058 if (data.arrowElement && Object.keys(data.arrowStyles).length) { 21059 setStyles(data.arrowElement, data.arrowStyles); 21060 } 21061 21062 return data; 21063} 21064 21065/** 21066 * Set the x-placement attribute before everything else because it could be used 21067 * to add margins to the popper margins needs to be calculated to get the 21068 * correct popper offsets. 21069 * @method 21070 * @memberof Popper.modifiers 21071 * @param {HTMLElement} reference - The reference element used to position the popper 21072 * @param {HTMLElement} popper - The HTML element used as popper 21073 * @param {Object} options - Popper.js options 21074 */ 21075function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { 21076 // compute reference element offsets 21077 var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); 21078 21079 // compute auto placement, store placement inside the data object, 21080 // modifiers will be able to edit `placement` if needed 21081 // and refer to originalPlacement to know the original value 21082 var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); 21083 21084 popper.setAttribute('x-placement', placement); 21085 21086 // Apply `position` to popper before anything else because 21087 // without the position applied we can't guarantee correct computations 21088 setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); 21089 21090 return options; 21091} 21092 21093/** 21094 * @function 21095 * @memberof Popper.Utils 21096 * @argument {Object} data - The data object generated by `update` method 21097 * @argument {Boolean} shouldRound - If the offsets should be rounded at all 21098 * @returns {Object} The popper's position offsets rounded 21099 * 21100 * The tale of pixel-perfect positioning. It's still not 100% perfect, but as 21101 * good as it can be within reason. 21102 * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 21103 * 21104 * Low DPI screens cause a popper to be blurry if not using full pixels (Safari 21105 * as well on High DPI screens). 21106 * 21107 * Firefox prefers no rounding for positioning and does not have blurriness on 21108 * high DPI screens. 21109 * 21110 * Only horizontal placement and left/right values need to be considered. 21111 */ 21112function getRoundedOffsets(data, shouldRound) { 21113 var _data$offsets = data.offsets, 21114 popper = _data$offsets.popper, 21115 reference = _data$offsets.reference; 21116 var round = Math.round, 21117 floor = Math.floor; 21118 21119 var noRound = function noRound(v) { 21120 return v; 21121 }; 21122 21123 var referenceWidth = round(reference.width); 21124 var popperWidth = round(popper.width); 21125 21126 var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; 21127 var isVariation = data.placement.indexOf('-') !== -1; 21128 var sameWidthParity = referenceWidth % 2 === popperWidth % 2; 21129 var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; 21130 21131 var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; 21132 var verticalToInteger = !shouldRound ? noRound : round; 21133 21134 return { 21135 left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), 21136 top: verticalToInteger(popper.top), 21137 bottom: verticalToInteger(popper.bottom), 21138 right: horizontalToInteger(popper.right) 21139 }; 21140} 21141 21142var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); 21143 21144/** 21145 * @function 21146 * @memberof Modifiers 21147 * @argument {Object} data - The data object generated by `update` method 21148 * @argument {Object} options - Modifiers configuration and options 21149 * @returns {Object} The data object, properly modified 21150 */ 21151function computeStyle(data, options) { 21152 var x = options.x, 21153 y = options.y; 21154 var popper = data.offsets.popper; 21155 21156 // Remove this legacy support in Popper.js v2 21157 21158 var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { 21159 return modifier.name === 'applyStyle'; 21160 }).gpuAcceleration; 21161 if (legacyGpuAccelerationOption !== undefined) { 21162 console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); 21163 } 21164 var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; 21165 21166 var offsetParent = getOffsetParent(data.instance.popper); 21167 var offsetParentRect = getBoundingClientRect(offsetParent); 21168 21169 // Styles 21170 var styles = { 21171 position: popper.position 21172 }; 21173 21174 var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); 21175 21176 var sideA = x === 'bottom' ? 'top' : 'bottom'; 21177 var sideB = y === 'right' ? 'left' : 'right'; 21178 21179 // if gpuAcceleration is set to `true` and transform is supported, 21180 // we use `translate3d` to apply the position to the popper we 21181 // automatically use the supported prefixed version if needed 21182 var prefixedProperty = getSupportedPropertyName('transform'); 21183 21184 // now, let's make a step back and look at this code closely (wtf?) 21185 // If the content of the popper grows once it's been positioned, it 21186 // may happen that the popper gets misplaced because of the new content 21187 // overflowing its reference element 21188 // To avoid this problem, we provide two options (x and y), which allow 21189 // the consumer to define the offset origin. 21190 // If we position a popper on top of a reference element, we can set 21191 // `x` to `top` to make the popper grow towards its top instead of 21192 // its bottom. 21193 var left = void 0, 21194 top = void 0; 21195 if (sideA === 'bottom') { 21196 // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar) 21197 // and not the bottom of the html element 21198 if (offsetParent.nodeName === 'HTML') { 21199 top = -offsetParent.clientHeight + offsets.bottom; 21200 } else { 21201 top = -offsetParentRect.height + offsets.bottom; 21202 } 21203 } else { 21204 top = offsets.top; 21205 } 21206 if (sideB === 'right') { 21207 if (offsetParent.nodeName === 'HTML') { 21208 left = -offsetParent.clientWidth + offsets.right; 21209 } else { 21210 left = -offsetParentRect.width + offsets.right; 21211 } 21212 } else { 21213 left = offsets.left; 21214 } 21215 if (gpuAcceleration && prefixedProperty) { 21216 styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; 21217 styles[sideA] = 0; 21218 styles[sideB] = 0; 21219 styles.willChange = 'transform'; 21220 } else { 21221 // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties 21222 var invertTop = sideA === 'bottom' ? -1 : 1; 21223 var invertLeft = sideB === 'right' ? -1 : 1; 21224 styles[sideA] = top * invertTop; 21225 styles[sideB] = left * invertLeft; 21226 styles.willChange = sideA + ', ' + sideB; 21227 } 21228 21229 // Attributes 21230 var attributes = { 21231 'x-placement': data.placement 21232 }; 21233 21234 // Update `data` attributes, styles and arrowStyles 21235 data.attributes = _extends({}, attributes, data.attributes); 21236 data.styles = _extends({}, styles, data.styles); 21237 data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); 21238 21239 return data; 21240} 21241 21242/** 21243 * Helper used to know if the given modifier depends from another one.<br /> 21244 * It checks if the needed modifier is listed and enabled. 21245 * @method 21246 * @memberof Popper.Utils 21247 * @param {Array} modifiers - list of modifiers 21248 * @param {String} requestingName - name of requesting modifier 21249 * @param {String} requestedName - name of requested modifier 21250 * @returns {Boolean} 21251 */ 21252function isModifierRequired(modifiers, requestingName, requestedName) { 21253 var requesting = find(modifiers, function (_ref) { 21254 var name = _ref.name; 21255 return name === requestingName; 21256 }); 21257 21258 var isRequired = !!requesting && modifiers.some(function (modifier) { 21259 return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; 21260 }); 21261 21262 if (!isRequired) { 21263 var _requesting = '`' + requestingName + '`'; 21264 var requested = '`' + requestedName + '`'; 21265 console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); 21266 } 21267 return isRequired; 21268} 21269 21270/** 21271 * @function 21272 * @memberof Modifiers 21273 * @argument {Object} data - The data object generated by update method 21274 * @argument {Object} options - Modifiers configuration and options 21275 * @returns {Object} The data object, properly modified 21276 */ 21277function arrow(data, options) { 21278 var _data$offsets$arrow; 21279 21280 // arrow depends on keepTogether in order to work 21281 if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { 21282 return data; 21283 } 21284 21285 var arrowElement = options.element; 21286 21287 // if arrowElement is a string, suppose it's a CSS selector 21288 if (typeof arrowElement === 'string') { 21289 arrowElement = data.instance.popper.querySelector(arrowElement); 21290 21291 // if arrowElement is not found, don't run the modifier 21292 if (!arrowElement) { 21293 return data; 21294 } 21295 } else { 21296 // if the arrowElement isn't a query selector we must check that the 21297 // provided DOM node is child of its popper node 21298 if (!data.instance.popper.contains(arrowElement)) { 21299 console.warn('WARNING: `arrow.element` must be child of its popper element!'); 21300 return data; 21301 } 21302 } 21303 21304 var placement = data.placement.split('-')[0]; 21305 var _data$offsets = data.offsets, 21306 popper = _data$offsets.popper, 21307 reference = _data$offsets.reference; 21308 21309 var isVertical = ['left', 'right'].indexOf(placement) !== -1; 21310 21311 var len = isVertical ? 'height' : 'width'; 21312 var sideCapitalized = isVertical ? 'Top' : 'Left'; 21313 var side = sideCapitalized.toLowerCase(); 21314 var altSide = isVertical ? 'left' : 'top'; 21315 var opSide = isVertical ? 'bottom' : 'right'; 21316 var arrowElementSize = getOuterSizes(arrowElement)[len]; 21317 21318 // 21319 // extends keepTogether behavior making sure the popper and its 21320 // reference have enough pixels in conjunction 21321 // 21322 21323 // top/left side 21324 if (reference[opSide] - arrowElementSize < popper[side]) { 21325 data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); 21326 } 21327 // bottom/right side 21328 if (reference[side] + arrowElementSize > popper[opSide]) { 21329 data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; 21330 } 21331 data.offsets.popper = getClientRect(data.offsets.popper); 21332 21333 // compute center of the popper 21334 var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; 21335 21336 // Compute the sideValue using the updated popper offsets 21337 // take popper margin in account because we don't have this info available 21338 var css = getStyleComputedProperty(data.instance.popper); 21339 var popperMarginSide = parseFloat(css['margin' + sideCapitalized]); 21340 var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']); 21341 var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; 21342 21343 // prevent arrowElement from being placed not contiguously to its popper 21344 sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); 21345 21346 data.arrowElement = arrowElement; 21347 data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); 21348 21349 return data; 21350} 21351 21352/** 21353 * Get the opposite placement variation of the given one 21354 * @method 21355 * @memberof Popper.Utils 21356 * @argument {String} placement variation 21357 * @returns {String} flipped placement variation 21358 */ 21359function getOppositeVariation(variation) { 21360 if (variation === 'end') { 21361 return 'start'; 21362 } else if (variation === 'start') { 21363 return 'end'; 21364 } 21365 return variation; 21366} 21367 21368/** 21369 * List of accepted placements to use as values of the `placement` option.<br /> 21370 * Valid placements are: 21371 * - `auto` 21372 * - `top` 21373 * - `right` 21374 * - `bottom` 21375 * - `left` 21376 * 21377 * Each placement can have a variation from this list: 21378 * - `-start` 21379 * - `-end` 21380 * 21381 * Variations are interpreted easily if you think of them as the left to right 21382 * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` 21383 * is right.<br /> 21384 * Vertically (`left` and `right`), `start` is top and `end` is bottom. 21385 * 21386 * Some valid examples are: 21387 * - `top-end` (on top of reference, right aligned) 21388 * - `right-start` (on right of reference, top aligned) 21389 * - `bottom` (on bottom, centered) 21390 * - `auto-end` (on the side with more space available, alignment depends by placement) 21391 * 21392 * @static 21393 * @type {Array} 21394 * @enum {String} 21395 * @readonly 21396 * @method placements 21397 * @memberof Popper 21398 */ 21399var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; 21400 21401// Get rid of `auto` `auto-start` and `auto-end` 21402var validPlacements = placements.slice(3); 21403 21404/** 21405 * Given an initial placement, returns all the subsequent placements 21406 * clockwise (or counter-clockwise). 21407 * 21408 * @method 21409 * @memberof Popper.Utils 21410 * @argument {String} placement - A valid placement (it accepts variations) 21411 * @argument {Boolean} counter - Set to true to walk the placements counterclockwise 21412 * @returns {Array} placements including their variations 21413 */ 21414function clockwise(placement) { 21415 var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 21416 21417 var index = validPlacements.indexOf(placement); 21418 var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); 21419 return counter ? arr.reverse() : arr; 21420} 21421 21422var BEHAVIORS = { 21423 FLIP: 'flip', 21424 CLOCKWISE: 'clockwise', 21425 COUNTERCLOCKWISE: 'counterclockwise' 21426}; 21427 21428/** 21429 * @function 21430 * @memberof Modifiers 21431 * @argument {Object} data - The data object generated by update method 21432 * @argument {Object} options - Modifiers configuration and options 21433 * @returns {Object} The data object, properly modified 21434 */ 21435function flip(data, options) { 21436 // if `inner` modifier is enabled, we can't use the `flip` modifier 21437 if (isModifierEnabled(data.instance.modifiers, 'inner')) { 21438 return data; 21439 } 21440 21441 if (data.flipped && data.placement === data.originalPlacement) { 21442 // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides 21443 return data; 21444 } 21445 21446 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); 21447 21448 var placement = data.placement.split('-')[0]; 21449 var placementOpposite = getOppositePlacement(placement); 21450 var variation = data.placement.split('-')[1] || ''; 21451 21452 var flipOrder = []; 21453 21454 switch (options.behavior) { 21455 case BEHAVIORS.FLIP: 21456 flipOrder = [placement, placementOpposite]; 21457 break; 21458 case BEHAVIORS.CLOCKWISE: 21459 flipOrder = clockwise(placement); 21460 break; 21461 case BEHAVIORS.COUNTERCLOCKWISE: 21462 flipOrder = clockwise(placement, true); 21463 break; 21464 default: 21465 flipOrder = options.behavior; 21466 } 21467 21468 flipOrder.forEach(function (step, index) { 21469 if (placement !== step || flipOrder.length === index + 1) { 21470 return data; 21471 } 21472 21473 placement = data.placement.split('-')[0]; 21474 placementOpposite = getOppositePlacement(placement); 21475 21476 var popperOffsets = data.offsets.popper; 21477 var refOffsets = data.offsets.reference; 21478 21479 // using floor because the reference offsets may contain decimals we are not going to consider here 21480 var floor = Math.floor; 21481 var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); 21482 21483 var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); 21484 var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); 21485 var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); 21486 var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); 21487 21488 var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; 21489 21490 // flip the variation if required 21491 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 21492 21493 // flips variation if reference element overflows boundaries 21494 var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); 21495 21496 // flips variation if popper content overflows boundaries 21497 var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop); 21498 21499 var flippedVariation = flippedVariationByRef || flippedVariationByContent; 21500 21501 if (overlapsRef || overflowsBoundaries || flippedVariation) { 21502 // this boolean to detect any flip loop 21503 data.flipped = true; 21504 21505 if (overlapsRef || overflowsBoundaries) { 21506 placement = flipOrder[index + 1]; 21507 } 21508 21509 if (flippedVariation) { 21510 variation = getOppositeVariation(variation); 21511 } 21512 21513 data.placement = placement + (variation ? '-' + variation : ''); 21514 21515 // this object contains `position`, we want to preserve it along with 21516 // any additional property we may add in the future 21517 data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); 21518 21519 data = runModifiers(data.instance.modifiers, data, 'flip'); 21520 } 21521 }); 21522 return data; 21523} 21524 21525/** 21526 * @function 21527 * @memberof Modifiers 21528 * @argument {Object} data - The data object generated by update method 21529 * @argument {Object} options - Modifiers configuration and options 21530 * @returns {Object} The data object, properly modified 21531 */ 21532function keepTogether(data) { 21533 var _data$offsets = data.offsets, 21534 popper = _data$offsets.popper, 21535 reference = _data$offsets.reference; 21536 21537 var placement = data.placement.split('-')[0]; 21538 var floor = Math.floor; 21539 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 21540 var side = isVertical ? 'right' : 'bottom'; 21541 var opSide = isVertical ? 'left' : 'top'; 21542 var measurement = isVertical ? 'width' : 'height'; 21543 21544 if (popper[side] < floor(reference[opSide])) { 21545 data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; 21546 } 21547 if (popper[opSide] > floor(reference[side])) { 21548 data.offsets.popper[opSide] = floor(reference[side]); 21549 } 21550 21551 return data; 21552} 21553 21554/** 21555 * Converts a string containing value + unit into a px value number 21556 * @function 21557 * @memberof {modifiers~offset} 21558 * @private 21559 * @argument {String} str - Value + unit string 21560 * @argument {String} measurement - `height` or `width` 21561 * @argument {Object} popperOffsets 21562 * @argument {Object} referenceOffsets 21563 * @returns {Number|String} 21564 * Value in pixels, or original string if no values were extracted 21565 */ 21566function toValue(str, measurement, popperOffsets, referenceOffsets) { 21567 // separate value from unit 21568 var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); 21569 var value = +split[1]; 21570 var unit = split[2]; 21571 21572 // If it's not a number it's an operator, I guess 21573 if (!value) { 21574 return str; 21575 } 21576 21577 if (unit.indexOf('%') === 0) { 21578 var element = void 0; 21579 switch (unit) { 21580 case '%p': 21581 element = popperOffsets; 21582 break; 21583 case '%': 21584 case '%r': 21585 default: 21586 element = referenceOffsets; 21587 } 21588 21589 var rect = getClientRect(element); 21590 return rect[measurement] / 100 * value; 21591 } else if (unit === 'vh' || unit === 'vw') { 21592 // if is a vh or vw, we calculate the size based on the viewport 21593 var size = void 0; 21594 if (unit === 'vh') { 21595 size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 21596 } else { 21597 size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); 21598 } 21599 return size / 100 * value; 21600 } else { 21601 // if is an explicit pixel unit, we get rid of the unit and keep the value 21602 // if is an implicit unit, it's px, and we return just the value 21603 return value; 21604 } 21605} 21606 21607/** 21608 * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. 21609 * @function 21610 * @memberof {modifiers~offset} 21611 * @private 21612 * @argument {String} offset 21613 * @argument {Object} popperOffsets 21614 * @argument {Object} referenceOffsets 21615 * @argument {String} basePlacement 21616 * @returns {Array} a two cells array with x and y offsets in numbers 21617 */ 21618function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { 21619 var offsets = [0, 0]; 21620 21621 // Use height if placement is left or right and index is 0 otherwise use width 21622 // in this way the first offset will use an axis and the second one 21623 // will use the other one 21624 var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; 21625 21626 // Split the offset string to obtain a list of values and operands 21627 // The regex addresses values with the plus or minus sign in front (+10, -20, etc) 21628 var fragments = offset.split(/(\+|\-)/).map(function (frag) { 21629 return frag.trim(); 21630 }); 21631 21632 // Detect if the offset string contains a pair of values or a single one 21633 // they could be separated by comma or space 21634 var divider = fragments.indexOf(find(fragments, function (frag) { 21635 return frag.search(/,|\s/) !== -1; 21636 })); 21637 21638 if (fragments[divider] && fragments[divider].indexOf(',') === -1) { 21639 console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); 21640 } 21641 21642 // If divider is found, we divide the list of values and operands to divide 21643 // them by ofset X and Y. 21644 var splitRegex = /\s*,\s*|\s+/; 21645 var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; 21646 21647 // Convert the values with units to absolute pixels to allow our computations 21648 ops = ops.map(function (op, index) { 21649 // Most of the units rely on the orientation of the popper 21650 var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; 21651 var mergeWithPrevious = false; 21652 return op 21653 // This aggregates any `+` or `-` sign that aren't considered operators 21654 // e.g.: 10 + +5 => [10, +, +5] 21655 .reduce(function (a, b) { 21656 if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { 21657 a[a.length - 1] = b; 21658 mergeWithPrevious = true; 21659 return a; 21660 } else if (mergeWithPrevious) { 21661 a[a.length - 1] += b; 21662 mergeWithPrevious = false; 21663 return a; 21664 } else { 21665 return a.concat(b); 21666 } 21667 }, []) 21668 // Here we convert the string values into number values (in px) 21669 .map(function (str) { 21670 return toValue(str, measurement, popperOffsets, referenceOffsets); 21671 }); 21672 }); 21673 21674 // Loop trough the offsets arrays and execute the operations 21675 ops.forEach(function (op, index) { 21676 op.forEach(function (frag, index2) { 21677 if (isNumeric(frag)) { 21678 offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); 21679 } 21680 }); 21681 }); 21682 return offsets; 21683} 21684 21685/** 21686 * @function 21687 * @memberof Modifiers 21688 * @argument {Object} data - The data object generated by update method 21689 * @argument {Object} options - Modifiers configuration and options 21690 * @argument {Number|String} options.offset=0 21691 * The offset value as described in the modifier description 21692 * @returns {Object} The data object, properly modified 21693 */ 21694function offset(data, _ref) { 21695 var offset = _ref.offset; 21696 var placement = data.placement, 21697 _data$offsets = data.offsets, 21698 popper = _data$offsets.popper, 21699 reference = _data$offsets.reference; 21700 21701 var basePlacement = placement.split('-')[0]; 21702 21703 var offsets = void 0; 21704 if (isNumeric(+offset)) { 21705 offsets = [+offset, 0]; 21706 } else { 21707 offsets = parseOffset(offset, popper, reference, basePlacement); 21708 } 21709 21710 if (basePlacement === 'left') { 21711 popper.top += offsets[0]; 21712 popper.left -= offsets[1]; 21713 } else if (basePlacement === 'right') { 21714 popper.top += offsets[0]; 21715 popper.left += offsets[1]; 21716 } else if (basePlacement === 'top') { 21717 popper.left += offsets[0]; 21718 popper.top -= offsets[1]; 21719 } else if (basePlacement === 'bottom') { 21720 popper.left += offsets[0]; 21721 popper.top += offsets[1]; 21722 } 21723 21724 data.popper = popper; 21725 return data; 21726} 21727 21728/** 21729 * @function 21730 * @memberof Modifiers 21731 * @argument {Object} data - The data object generated by `update` method 21732 * @argument {Object} options - Modifiers configuration and options 21733 * @returns {Object} The data object, properly modified 21734 */ 21735function preventOverflow(data, options) { 21736 var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); 21737 21738 // If offsetParent is the reference element, we really want to 21739 // go one step up and use the next offsetParent as reference to 21740 // avoid to make this modifier completely useless and look like broken 21741 if (data.instance.reference === boundariesElement) { 21742 boundariesElement = getOffsetParent(boundariesElement); 21743 } 21744 21745 // NOTE: DOM access here 21746 // resets the popper's position so that the document size can be calculated excluding 21747 // the size of the popper element itself 21748 var transformProp = getSupportedPropertyName('transform'); 21749 var popperStyles = data.instance.popper.style; // assignment to help minification 21750 var top = popperStyles.top, 21751 left = popperStyles.left, 21752 transform = popperStyles[transformProp]; 21753 21754 popperStyles.top = ''; 21755 popperStyles.left = ''; 21756 popperStyles[transformProp] = ''; 21757 21758 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); 21759 21760 // NOTE: DOM access here 21761 // restores the original style properties after the offsets have been computed 21762 popperStyles.top = top; 21763 popperStyles.left = left; 21764 popperStyles[transformProp] = transform; 21765 21766 options.boundaries = boundaries; 21767 21768 var order = options.priority; 21769 var popper = data.offsets.popper; 21770 21771 var check = { 21772 primary: function primary(placement) { 21773 var value = popper[placement]; 21774 if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { 21775 value = Math.max(popper[placement], boundaries[placement]); 21776 } 21777 return defineProperty({}, placement, value); 21778 }, 21779 secondary: function secondary(placement) { 21780 var mainSide = placement === 'right' ? 'left' : 'top'; 21781 var value = popper[mainSide]; 21782 if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { 21783 value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); 21784 } 21785 return defineProperty({}, mainSide, value); 21786 } 21787 }; 21788 21789 order.forEach(function (placement) { 21790 var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; 21791 popper = _extends({}, popper, check[side](placement)); 21792 }); 21793 21794 data.offsets.popper = popper; 21795 21796 return data; 21797} 21798 21799/** 21800 * @function 21801 * @memberof Modifiers 21802 * @argument {Object} data - The data object generated by `update` method 21803 * @argument {Object} options - Modifiers configuration and options 21804 * @returns {Object} The data object, properly modified 21805 */ 21806function shift(data) { 21807 var placement = data.placement; 21808 var basePlacement = placement.split('-')[0]; 21809 var shiftvariation = placement.split('-')[1]; 21810 21811 // if shift shiftvariation is specified, run the modifier 21812 if (shiftvariation) { 21813 var _data$offsets = data.offsets, 21814 reference = _data$offsets.reference, 21815 popper = _data$offsets.popper; 21816 21817 var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; 21818 var side = isVertical ? 'left' : 'top'; 21819 var measurement = isVertical ? 'width' : 'height'; 21820 21821 var shiftOffsets = { 21822 start: defineProperty({}, side, reference[side]), 21823 end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) 21824 }; 21825 21826 data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); 21827 } 21828 21829 return data; 21830} 21831 21832/** 21833 * @function 21834 * @memberof Modifiers 21835 * @argument {Object} data - The data object generated by update method 21836 * @argument {Object} options - Modifiers configuration and options 21837 * @returns {Object} The data object, properly modified 21838 */ 21839function hide(data) { 21840 if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { 21841 return data; 21842 } 21843 21844 var refRect = data.offsets.reference; 21845 var bound = find(data.instance.modifiers, function (modifier) { 21846 return modifier.name === 'preventOverflow'; 21847 }).boundaries; 21848 21849 if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { 21850 // Avoid unnecessary DOM access if visibility hasn't changed 21851 if (data.hide === true) { 21852 return data; 21853 } 21854 21855 data.hide = true; 21856 data.attributes['x-out-of-boundaries'] = ''; 21857 } else { 21858 // Avoid unnecessary DOM access if visibility hasn't changed 21859 if (data.hide === false) { 21860 return data; 21861 } 21862 21863 data.hide = false; 21864 data.attributes['x-out-of-boundaries'] = false; 21865 } 21866 21867 return data; 21868} 21869 21870/** 21871 * @function 21872 * @memberof Modifiers 21873 * @argument {Object} data - The data object generated by `update` method 21874 * @argument {Object} options - Modifiers configuration and options 21875 * @returns {Object} The data object, properly modified 21876 */ 21877function inner(data) { 21878 var placement = data.placement; 21879 var basePlacement = placement.split('-')[0]; 21880 var _data$offsets = data.offsets, 21881 popper = _data$offsets.popper, 21882 reference = _data$offsets.reference; 21883 21884 var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; 21885 21886 var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; 21887 21888 popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); 21889 21890 data.placement = getOppositePlacement(placement); 21891 data.offsets.popper = getClientRect(popper); 21892 21893 return data; 21894} 21895 21896/** 21897 * Modifier function, each modifier can have a function of this type assigned 21898 * to its `fn` property.<br /> 21899 * These functions will be called on each update, this means that you must 21900 * make sure they are performant enough to avoid performance bottlenecks. 21901 * 21902 * @function ModifierFn 21903 * @argument {dataObject} data - The data object generated by `update` method 21904 * @argument {Object} options - Modifiers configuration and options 21905 * @returns {dataObject} The data object, properly modified 21906 */ 21907 21908/** 21909 * Modifiers are plugins used to alter the behavior of your poppers.<br /> 21910 * Popper.js uses a set of 9 modifiers to provide all the basic functionalities 21911 * needed by the library. 21912 * 21913 * Usually you don't want to override the `order`, `fn` and `onLoad` props. 21914 * All the other properties are configurations that could be tweaked. 21915 * @namespace modifiers 21916 */ 21917var modifiers = { 21918 /** 21919 * Modifier used to shift the popper on the start or end of its reference 21920 * element.<br /> 21921 * It will read the variation of the `placement` property.<br /> 21922 * It can be one either `-end` or `-start`. 21923 * @memberof modifiers 21924 * @inner 21925 */ 21926 shift: { 21927 /** @prop {number} order=100 - Index used to define the order of execution */ 21928 order: 100, 21929 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 21930 enabled: true, 21931 /** @prop {ModifierFn} */ 21932 fn: shift 21933 }, 21934 21935 /** 21936 * The `offset` modifier can shift your popper on both its axis. 21937 * 21938 * It accepts the following units: 21939 * - `px` or unit-less, interpreted as pixels 21940 * - `%` or `%r`, percentage relative to the length of the reference element 21941 * - `%p`, percentage relative to the length of the popper element 21942 * - `vw`, CSS viewport width unit 21943 * - `vh`, CSS viewport height unit 21944 * 21945 * For length is intended the main axis relative to the placement of the popper.<br /> 21946 * This means that if the placement is `top` or `bottom`, the length will be the 21947 * `width`. In case of `left` or `right`, it will be the `height`. 21948 * 21949 * You can provide a single value (as `Number` or `String`), or a pair of values 21950 * as `String` divided by a comma or one (or more) white spaces.<br /> 21951 * The latter is a deprecated method because it leads to confusion and will be 21952 * removed in v2.<br /> 21953 * Additionally, it accepts additions and subtractions between different units. 21954 * Note that multiplications and divisions aren't supported. 21955 * 21956 * Valid examples are: 21957 * ``` 21958 * 10 21959 * '10%' 21960 * '10, 10' 21961 * '10%, 10' 21962 * '10 + 10%' 21963 * '10 - 5vh + 3%' 21964 * '-10px + 5vh, 5px - 6%' 21965 * ``` 21966 * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap 21967 * > with their reference element, unfortunately, you will have to disable the `flip` modifier. 21968 * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). 21969 * 21970 * @memberof modifiers 21971 * @inner 21972 */ 21973 offset: { 21974 /** @prop {number} order=200 - Index used to define the order of execution */ 21975 order: 200, 21976 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 21977 enabled: true, 21978 /** @prop {ModifierFn} */ 21979 fn: offset, 21980 /** @prop {Number|String} offset=0 21981 * The offset value as described in the modifier description 21982 */ 21983 offset: 0 21984 }, 21985 21986 /** 21987 * Modifier used to prevent the popper from being positioned outside the boundary. 21988 * 21989 * A scenario exists where the reference itself is not within the boundaries.<br /> 21990 * We can say it has "escaped the boundaries" â or just "escaped".<br /> 21991 * In this case we need to decide whether the popper should either: 21992 * 21993 * - detach from the reference and remain "trapped" in the boundaries, or 21994 * - if it should ignore the boundary and "escape with its reference" 21995 * 21996 * When `escapeWithReference` is set to`true` and reference is completely 21997 * outside its boundaries, the popper will overflow (or completely leave) 21998 * the boundaries in order to remain attached to the edge of the reference. 21999 * 22000 * @memberof modifiers 22001 * @inner 22002 */ 22003 preventOverflow: { 22004 /** @prop {number} order=300 - Index used to define the order of execution */ 22005 order: 300, 22006 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 22007 enabled: true, 22008 /** @prop {ModifierFn} */ 22009 fn: preventOverflow, 22010 /** 22011 * @prop {Array} [priority=['left','right','top','bottom']] 22012 * Popper will try to prevent overflow following these priorities by default, 22013 * then, it could overflow on the left and on top of the `boundariesElement` 22014 */ 22015 priority: ['left', 'right', 'top', 'bottom'], 22016 /** 22017 * @prop {number} padding=5 22018 * Amount of pixel used to define a minimum distance between the boundaries 22019 * and the popper. This makes sure the popper always has a little padding 22020 * between the edges of its container 22021 */ 22022 padding: 5, 22023 /** 22024 * @prop {String|HTMLElement} boundariesElement='scrollParent' 22025 * Boundaries used by the modifier. Can be `scrollParent`, `window`, 22026 * `viewport` or any DOM element. 22027 */ 22028 boundariesElement: 'scrollParent' 22029 }, 22030 22031 /** 22032 * Modifier used to make sure the reference and its popper stay near each other 22033 * without leaving any gap between the two. Especially useful when the arrow is 22034 * enabled and you want to ensure that it points to its reference element. 22035 * It cares only about the first axis. You can still have poppers with margin 22036 * between the popper and its reference element. 22037 * @memberof modifiers 22038 * @inner 22039 */ 22040 keepTogether: { 22041 /** @prop {number} order=400 - Index used to define the order of execution */ 22042 order: 400, 22043 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 22044 enabled: true, 22045 /** @prop {ModifierFn} */ 22046 fn: keepTogether 22047 }, 22048 22049 /** 22050 * This modifier is used to move the `arrowElement` of the popper to make 22051 * sure it is positioned between the reference element and its popper element. 22052 * It will read the outer size of the `arrowElement` node to detect how many 22053 * pixels of conjunction are needed. 22054 * 22055 * It has no effect if no `arrowElement` is provided. 22056 * @memberof modifiers 22057 * @inner 22058 */ 22059 arrow: { 22060 /** @prop {number} order=500 - Index used to define the order of execution */ 22061 order: 500, 22062 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 22063 enabled: true, 22064 /** @prop {ModifierFn} */ 22065 fn: arrow, 22066 /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ 22067 element: '[x-arrow]' 22068 }, 22069 22070 /** 22071 * Modifier used to flip the popper's placement when it starts to overlap its 22072 * reference element. 22073 * 22074 * Requires the `preventOverflow` modifier before it in order to work. 22075 * 22076 * **NOTE:** this modifier will interrupt the current update cycle and will 22077 * restart it if it detects the need to flip the placement. 22078 * @memberof modifiers 22079 * @inner 22080 */ 22081 flip: { 22082 /** @prop {number} order=600 - Index used to define the order of execution */ 22083 order: 600, 22084 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 22085 enabled: true, 22086 /** @prop {ModifierFn} */ 22087 fn: flip, 22088 /** 22089 * @prop {String|Array} behavior='flip' 22090 * The behavior used to change the popper's placement. It can be one of 22091 * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid 22092 * placements (with optional variations) 22093 */ 22094 behavior: 'flip', 22095 /** 22096 * @prop {number} padding=5 22097 * The popper will flip if it hits the edges of the `boundariesElement` 22098 */ 22099 padding: 5, 22100 /** 22101 * @prop {String|HTMLElement} boundariesElement='viewport' 22102 * The element which will define the boundaries of the popper position. 22103 * The popper will never be placed outside of the defined boundaries 22104 * (except if `keepTogether` is enabled) 22105 */ 22106 boundariesElement: 'viewport', 22107 /** 22108 * @prop {Boolean} flipVariations=false 22109 * The popper will switch placement variation between `-start` and `-end` when 22110 * the reference element overlaps its boundaries. 22111 * 22112 * The original placement should have a set variation. 22113 */ 22114 flipVariations: false, 22115 /** 22116 * @prop {Boolean} flipVariationsByContent=false 22117 * The popper will switch placement variation between `-start` and `-end` when 22118 * the popper element overlaps its reference boundaries. 22119 * 22120 * The original placement should have a set variation. 22121 */ 22122 flipVariationsByContent: false 22123 }, 22124 22125 /** 22126 * Modifier used to make the popper flow toward the inner of the reference element. 22127 * By default, when this modifier is disabled, the popper will be placed outside 22128 * the reference element. 22129 * @memberof modifiers 22130 * @inner 22131 */ 22132 inner: { 22133 /** @prop {number} order=700 - Index used to define the order of execution */ 22134 order: 700, 22135 /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ 22136 enabled: false, 22137 /** @prop {ModifierFn} */ 22138 fn: inner 22139 }, 22140 22141 /** 22142 * Modifier used to hide the popper when its reference element is outside of the 22143 * popper boundaries. It will set a `x-out-of-boundaries` attribute which can 22144 * be used to hide with a CSS selector the popper when its reference is 22145 * out of boundaries. 22146 * 22147 * Requires the `preventOverflow` modifier before it in order to work. 22148 * @memberof modifiers 22149 * @inner 22150 */ 22151 hide: { 22152 /** @prop {number} order=800 - Index used to define the order of execution */ 22153 order: 800, 22154 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 22155 enabled: true, 22156 /** @prop {ModifierFn} */ 22157 fn: hide 22158 }, 22159 22160 /** 22161 * Computes the style that will be applied to the popper element to gets 22162 * properly positioned. 22163 * 22164 * Note that this modifier will not touch the DOM, it just prepares the styles 22165 * so that `applyStyle` modifier can apply it. This separation is useful 22166 * in case you need to replace `applyStyle` with a custom implementation. 22167 * 22168 * This modifier has `850` as `order` value to maintain backward compatibility 22169 * with previous versions of Popper.js. Expect the modifiers ordering method 22170 * to change in future major versions of the library. 22171 * 22172 * @memberof modifiers 22173 * @inner 22174 */ 22175 computeStyle: { 22176 /** @prop {number} order=850 - Index used to define the order of execution */ 22177 order: 850, 22178 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 22179 enabled: true, 22180 /** @prop {ModifierFn} */ 22181 fn: computeStyle, 22182 /** 22183 * @prop {Boolean} gpuAcceleration=true 22184 * If true, it uses the CSS 3D transformation to position the popper. 22185 * Otherwise, it will use the `top` and `left` properties 22186 */ 22187 gpuAcceleration: true, 22188 /** 22189 * @prop {string} [x='bottom'] 22190 * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. 22191 * Change this if your popper should grow in a direction different from `bottom` 22192 */ 22193 x: 'bottom', 22194 /** 22195 * @prop {string} [x='left'] 22196 * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. 22197 * Change this if your popper should grow in a direction different from `right` 22198 */ 22199 y: 'right' 22200 }, 22201 22202 /** 22203 * Applies the computed styles to the popper element. 22204 * 22205 * All the DOM manipulations are limited to this modifier. This is useful in case 22206 * you want to integrate Popper.js inside a framework or view library and you 22207 * want to delegate all the DOM manipulations to it. 22208 * 22209 * Note that if you disable this modifier, you must make sure the popper element 22210 * has its position set to `absolute` before Popper.js can do its work! 22211 * 22212 * Just disable this modifier and define your own to achieve the desired effect. 22213 * 22214 * @memberof modifiers 22215 * @inner 22216 */ 22217 applyStyle: { 22218 /** @prop {number} order=900 - Index used to define the order of execution */ 22219 order: 900, 22220 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 22221 enabled: true, 22222 /** @prop {ModifierFn} */ 22223 fn: applyStyle, 22224 /** @prop {Function} */ 22225 onLoad: applyStyleOnLoad, 22226 /** 22227 * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier 22228 * @prop {Boolean} gpuAcceleration=true 22229 * If true, it uses the CSS 3D transformation to position the popper. 22230 * Otherwise, it will use the `top` and `left` properties 22231 */ 22232 gpuAcceleration: undefined 22233 } 22234}; 22235 22236/** 22237 * The `dataObject` is an object containing all the information used by Popper.js. 22238 * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. 22239 * @name dataObject 22240 * @property {Object} data.instance The Popper.js instance 22241 * @property {String} data.placement Placement applied to popper 22242 * @property {String} data.originalPlacement Placement originally defined on init 22243 * @property {Boolean} data.flipped True if popper has been flipped by flip modifier 22244 * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper 22245 * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier 22246 * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) 22247 * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) 22248 * @property {Object} data.boundaries Offsets of the popper boundaries 22249 * @property {Object} data.offsets The measurements of popper, reference and arrow elements 22250 * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values 22251 * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values 22252 * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 22253 */ 22254 22255/** 22256 * Default options provided to Popper.js constructor.<br /> 22257 * These can be overridden using the `options` argument of Popper.js.<br /> 22258 * To override an option, simply pass an object with the same 22259 * structure of the `options` object, as the 3rd argument. For example: 22260 * ``` 22261 * new Popper(ref, pop, { 22262 * modifiers: { 22263 * preventOverflow: { enabled: false } 22264 * } 22265 * }) 22266 * ``` 22267 * @type {Object} 22268 * @static 22269 * @memberof Popper 22270 */ 22271var Defaults = { 22272 /** 22273 * Popper's placement. 22274 * @prop {Popper.placements} placement='bottom' 22275 */ 22276 placement: 'bottom', 22277 22278 /** 22279 * Set this to true if you want popper to position it self in 'fixed' mode 22280 * @prop {Boolean} positionFixed=false 22281 */ 22282 positionFixed: false, 22283 22284 /** 22285 * Whether events (resize, scroll) are initially enabled. 22286 * @prop {Boolean} eventsEnabled=true 22287 */ 22288 eventsEnabled: true, 22289 22290 /** 22291 * Set to true if you want to automatically remove the popper when 22292 * you call the `destroy` method. 22293 * @prop {Boolean} removeOnDestroy=false 22294 */ 22295 removeOnDestroy: false, 22296 22297 /** 22298 * Callback called when the popper is created.<br /> 22299 * By default, it is set to no-op.<br /> 22300 * Access Popper.js instance with `data.instance`. 22301 * @prop {onCreate} 22302 */ 22303 onCreate: function onCreate() {}, 22304 22305 /** 22306 * Callback called when the popper is updated. This callback is not called 22307 * on the initialization/creation of the popper, but only on subsequent 22308 * updates.<br /> 22309 * By default, it is set to no-op.<br /> 22310 * Access Popper.js instance with `data.instance`. 22311 * @prop {onUpdate} 22312 */ 22313 onUpdate: function onUpdate() {}, 22314 22315 /** 22316 * List of modifiers used to modify the offsets before they are applied to the popper. 22317 * They provide most of the functionalities of Popper.js. 22318 * @prop {modifiers} 22319 */ 22320 modifiers: modifiers 22321}; 22322 22323/** 22324 * @callback onCreate 22325 * @param {dataObject} data 22326 */ 22327 22328/** 22329 * @callback onUpdate 22330 * @param {dataObject} data 22331 */ 22332 22333// Utils 22334// Methods 22335var Popper = function () { 22336 /** 22337 * Creates a new Popper.js instance. 22338 * @class Popper 22339 * @param {Element|referenceObject} reference - The reference element used to position the popper 22340 * @param {Element} popper - The HTML / XML element used as the popper 22341 * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) 22342 * @return {Object} instance - The generated Popper.js instance 22343 */ 22344 function Popper(reference, popper) { 22345 var _this = this; 22346 22347 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 22348 classCallCheck(this, Popper); 22349 22350 this.scheduleUpdate = function () { 22351 return requestAnimationFrame(_this.update); 22352 }; 22353 22354 // make update() debounced, so that it only runs at most once-per-tick 22355 this.update = debounce(this.update.bind(this)); 22356 22357 // with {} we create a new object with the options inside it 22358 this.options = _extends({}, Popper.Defaults, options); 22359 22360 // init state 22361 this.state = { 22362 isDestroyed: false, 22363 isCreated: false, 22364 scrollParents: [] 22365 }; 22366 22367 // get reference and popper elements (allow jQuery wrappers) 22368 this.reference = reference && reference.jquery ? reference[0] : reference; 22369 this.popper = popper && popper.jquery ? popper[0] : popper; 22370 22371 // Deep merge modifiers options 22372 this.options.modifiers = {}; 22373 Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { 22374 _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); 22375 }); 22376 22377 // Refactoring modifiers' list (Object => Array) 22378 this.modifiers = Object.keys(this.options.modifiers).map(function (name) { 22379 return _extends({ 22380 name: name 22381 }, _this.options.modifiers[name]); 22382 }) 22383 // sort the modifiers by order 22384 .sort(function (a, b) { 22385 return a.order - b.order; 22386 }); 22387 22388 // modifiers have the ability to execute arbitrary code when Popper.js get inited 22389 // such code is executed in the same order of its modifier 22390 // they could add new properties to their options configuration 22391 // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! 22392 this.modifiers.forEach(function (modifierOptions) { 22393 if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { 22394 modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); 22395 } 22396 }); 22397 22398 // fire the first update to position the popper in the right place 22399 this.update(); 22400 22401 var eventsEnabled = this.options.eventsEnabled; 22402 if (eventsEnabled) { 22403 // setup event listeners, they will take care of update the position in specific situations 22404 this.enableEventListeners(); 22405 } 22406 22407 this.state.eventsEnabled = eventsEnabled; 22408 } 22409 22410 // We can't use class properties because they don't get listed in the 22411 // class prototype and break stuff like Sinon stubs 22412 22413 22414 createClass(Popper, [{ 22415 key: 'update', 22416 value: function update$$1() { 22417 return update.call(this); 22418 } 22419 }, { 22420 key: 'destroy', 22421 value: function destroy$$1() { 22422 return destroy.call(this); 22423 } 22424 }, { 22425 key: 'enableEventListeners', 22426 value: function enableEventListeners$$1() { 22427 return enableEventListeners.call(this); 22428 } 22429 }, { 22430 key: 'disableEventListeners', 22431 value: function disableEventListeners$$1() { 22432 return disableEventListeners.call(this); 22433 } 22434 22435 /** 22436 * Schedules an update. It will run on the next UI update available. 22437 * @method scheduleUpdate 22438 * @memberof Popper 22439 */ 22440 22441 22442 /** 22443 * Collection of utilities useful when writing custom modifiers. 22444 * Starting from version 1.7, this method is available only if you 22445 * include `popper-utils.js` before `popper.js`. 22446 * 22447 * **DEPRECATION**: This way to access PopperUtils is deprecated 22448 * and will be removed in v2! Use the PopperUtils module directly instead. 22449 * Due to the high instability of the methods contained in Utils, we can't 22450 * guarantee them to follow semver. Use them at your own risk! 22451 * @static 22452 * @private 22453 * @type {Object} 22454 * @deprecated since version 1.8 22455 * @member Utils 22456 * @memberof Popper 22457 */ 22458 22459 }]); 22460 return Popper; 22461}(); 22462 22463/** 22464 * The `referenceObject` is an object that provides an interface compatible with Popper.js 22465 * and lets you use it as replacement of a real DOM node.<br /> 22466 * You can use this method to position a popper relatively to a set of coordinates 22467 * in case you don't have a DOM node to use as reference. 22468 * 22469 * ``` 22470 * new Popper(referenceObject, popperNode); 22471 * ``` 22472 * 22473 * NB: This feature isn't supported in Internet Explorer 10. 22474 * @name referenceObject 22475 * @property {Function} data.getBoundingClientRect 22476 * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. 22477 * @property {number} data.clientWidth 22478 * An ES6 getter that will return the width of the virtual reference element. 22479 * @property {number} data.clientHeight 22480 * An ES6 getter that will return the height of the virtual reference element. 22481 */ 22482 22483 22484Popper.Utils = (typeof window !== 'undefined' ? window : __webpack_require__.g).PopperUtils; 22485Popper.placements = placements; 22486Popper.Defaults = Defaults; 22487 22488/* harmony default export */ __webpack_exports__["default"] = (Popper); 22489//# sourceMappingURL=popper.js.map 22490 22491 22492/***/ }), 22493
vendor: 24,116 bytes, lines 22494-23013
22494/***/ "../node_modules/libphonenumber-js/es6/AsYouType.js": 22495/*!**********************************************************!*\ 22496 !*** ../node_modules/libphonenumber-js/es6/AsYouType.js ***! 22497 \**********************************************************/ 22498/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22499 22500"use strict"; 22501__webpack_require__.r(__webpack_exports__); 22502/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22503/* harmony export */ "default": function() { return /* binding */ AsYouType; } 22504/* harmony export */ }); 22505/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 22506/* harmony import */ var _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PhoneNumber.js */ "../node_modules/libphonenumber-js/es6/PhoneNumber.js"); 22507/* harmony import */ var _AsYouTypeState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsYouTypeState.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeState.js"); 22508/* harmony import */ var _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AsYouTypeFormatter.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js"); 22509/* harmony import */ var _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AsYouTypeFormatter.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js"); 22510/* harmony import */ var _AsYouTypeParser_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AsYouTypeParser.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeParser.js"); 22511/* harmony import */ var _helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/getCountryByCallingCode.js */ "../node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js"); 22512/* harmony import */ var _helpers_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./helpers/getCountryByNationalNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js"); 22513/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers/isObject.js */ "../node_modules/libphonenumber-js/es6/helpers/isObject.js"); 22514function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 22515function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } 22516function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 22517function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 22518function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 22519function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } 22520function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } 22521function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 22522function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 22523function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 22524function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 22525function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 22526 22527 22528 22529 22530 22531 22532 22533 22534var USE_NON_GEOGRAPHIC_COUNTRY_CODE = false; 22535var AsYouType = /*#__PURE__*/function () { 22536 /** 22537 * @param {(string|object)?} [optionsOrDefaultCountry] - The default country used for parsing non-international phone numbers. Can also be an `options` object. 22538 * @param {Object} metadata 22539 */ 22540 function AsYouType(optionsOrDefaultCountry, metadata) { 22541 _classCallCheck(this, AsYouType); 22542 this.metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 22543 var _this$getCountryAndCa = this.getCountryAndCallingCode(optionsOrDefaultCountry), 22544 _this$getCountryAndCa2 = _slicedToArray(_this$getCountryAndCa, 2), 22545 defaultCountry = _this$getCountryAndCa2[0], 22546 defaultCallingCode = _this$getCountryAndCa2[1]; 22547 // `this.defaultCountry` and `this.defaultCallingCode` aren't required to be in sync. 22548 // For example, `this.defaultCountry` could be `"AR"` and `this.defaultCallingCode` could be `undefined`. 22549 // So `this.defaultCountry` and `this.defaultCallingCode` are totally independent. 22550 this.defaultCountry = defaultCountry; 22551 this.defaultCallingCode = defaultCallingCode; 22552 this.reset(); 22553 } 22554 return _createClass(AsYouType, [{ 22555 key: "getCountryAndCallingCode", 22556 value: function getCountryAndCallingCode(optionsOrDefaultCountry) { 22557 // Set `defaultCountry` and `defaultCallingCode` options. 22558 var defaultCountry; 22559 var defaultCallingCode; 22560 // Turns out `null` also has type "object". Weird. 22561 if (optionsOrDefaultCountry) { 22562 if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_8__["default"])(optionsOrDefaultCountry)) { 22563 defaultCountry = optionsOrDefaultCountry.defaultCountry; 22564 defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode; 22565 } else { 22566 defaultCountry = optionsOrDefaultCountry; 22567 } 22568 } 22569 if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) { 22570 defaultCountry = undefined; 22571 } 22572 if (defaultCallingCode) { 22573 /* istanbul ignore if */ 22574 if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) { 22575 if (this.metadata.isNonGeographicCallingCode(defaultCallingCode)) { 22576 defaultCountry = '001'; 22577 } 22578 } 22579 } 22580 return [defaultCountry, defaultCallingCode]; 22581 } 22582 22583 /** 22584 * Inputs "next" phone number characters. 22585 * @param {string} text 22586 * @return {string} Formatted phone number characters that have been input so far. 22587 */ 22588 }, { 22589 key: "input", 22590 value: function input(text) { 22591 var _this$parser$input = this.parser.input(text, this.state), 22592 digits = _this$parser$input.digits, 22593 justLeadingPlus = _this$parser$input.justLeadingPlus; 22594 if (justLeadingPlus) { 22595 this.formattedOutput = '+'; 22596 } else if (digits) { 22597 this.determineTheCountryIfNeeded(); 22598 // Match the available formats by the currently available leading digits. 22599 if (this.state.nationalSignificantNumber) { 22600 this.formatter.narrowDownMatchingFormats(this.state); 22601 } 22602 var formattedNationalNumber; 22603 if (this.metadata.hasSelectedNumberingPlan()) { 22604 formattedNationalNumber = this.formatter.format(digits, this.state); 22605 } 22606 if (formattedNationalNumber === undefined) { 22607 // See if another national (significant) number could be re-extracted. 22608 if (this.parser.reExtractNationalSignificantNumber(this.state)) { 22609 this.determineTheCountryIfNeeded(); 22610 // If it could, then re-try formatting the new national (significant) number. 22611 var nationalDigits = this.state.getNationalDigits(); 22612 if (nationalDigits) { 22613 formattedNationalNumber = this.formatter.format(nationalDigits, this.state); 22614 } 22615 } 22616 } 22617 this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber(); 22618 } 22619 return this.formattedOutput; 22620 } 22621 }, { 22622 key: "reset", 22623 value: function reset() { 22624 var _this = this; 22625 this.state = new _AsYouTypeState_js__WEBPACK_IMPORTED_MODULE_2__["default"]({ 22626 onCountryChange: function onCountryChange(country) { 22627 // Before version `1.6.0`, the official `AsYouType` formatter API 22628 // included a `.country` property on an `AsYouType` instance. 22629 // Since that property (along with the others) have been moved to 22630 // `this.state`, `this.country` property is emulated for compatibility 22631 // with the old versions. 22632 _this.country = country; 22633 }, 22634 onCallingCodeChange: function onCallingCodeChange(callingCode, country) { 22635 _this.metadata.selectNumberingPlan(country, callingCode); 22636 _this.formatter.reset(_this.metadata.numberingPlan, _this.state); 22637 _this.parser.reset(_this.metadata.numberingPlan); 22638 } 22639 }); 22640 this.formatter = new _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_3__["default"]({ 22641 state: this.state, 22642 metadata: this.metadata 22643 }); 22644 this.parser = new _AsYouTypeParser_js__WEBPACK_IMPORTED_MODULE_5__["default"]({ 22645 defaultCountry: this.defaultCountry, 22646 defaultCallingCode: this.defaultCallingCode, 22647 metadata: this.metadata, 22648 state: this.state, 22649 onNationalSignificantNumberChange: function onNationalSignificantNumberChange() { 22650 _this.determineTheCountryIfNeeded(); 22651 _this.formatter.reset(_this.metadata.numberingPlan, _this.state); 22652 } 22653 }); 22654 this.state.reset({ 22655 country: this.defaultCountry, 22656 callingCode: this.defaultCallingCode 22657 }); 22658 this.formattedOutput = ''; 22659 return this; 22660 } 22661 22662 /** 22663 * Returns `true` if the phone number is being input in international format. 22664 * In other words, returns `true` if and only if the parsed phone number starts with a `"+"`. 22665 * @return {boolean} 22666 */ 22667 }, { 22668 key: "isInternational", 22669 value: function isInternational() { 22670 return this.state.international; 22671 } 22672 22673 /** 22674 * Returns the "calling code" part of the phone number when it's being input 22675 * in an international format. 22676 * If no valid calling code has been entered so far, returns `undefined`. 22677 * @return {string} [callingCode] 22678 */ 22679 }, { 22680 key: "getCallingCode", 22681 value: function getCallingCode() { 22682 // If the number is being input in national format and some "default calling code" 22683 // has been passed to `AsYouType` constructor, then `this.state.callingCode` 22684 // is equal to that "default calling code". 22685 // 22686 // If the number is being input in national format and no "default calling code" 22687 // has been passed to `AsYouType` constructor, then returns `undefined`, 22688 // even if a "default country" has been passed to `AsYouType` constructor. 22689 // 22690 if (this.isInternational()) { 22691 return this.state.callingCode; 22692 } 22693 } 22694 22695 // A legacy alias. 22696 }, { 22697 key: "getCountryCallingCode", 22698 value: function getCountryCallingCode() { 22699 return this.getCallingCode(); 22700 } 22701 22702 /** 22703 * Returns a two-letter country code of the phone number. 22704 * Returns `undefined` for "non-geographic" phone numbering plans. 22705 * Returns `undefined` if no phone number has been input yet. 22706 * @return {string} [country] 22707 */ 22708 }, { 22709 key: "getCountry", 22710 value: function getCountry() { 22711 var digits = this.state.digits; 22712 // Return `undefined` if no digits have been input yet. 22713 if (digits) { 22714 return this._getCountry(); 22715 } 22716 } 22717 22718 /** 22719 * Returns a two-letter country code of the phone number. 22720 * Returns `undefined` for "non-geographic" phone numbering plans. 22721 * @return {string} [country] 22722 */ 22723 }, { 22724 key: "_getCountry", 22725 value: function _getCountry() { 22726 var country = this.state.country; 22727 /* istanbul ignore if */ 22728 if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) { 22729 // `AsYouType.getCountry()` returns `undefined` 22730 // for "non-geographic" phone numbering plans. 22731 if (country === '001') { 22732 return; 22733 } 22734 } 22735 return country; 22736 } 22737 }, { 22738 key: "determineTheCountryIfNeeded", 22739 value: function determineTheCountryIfNeeded() { 22740 // Suppose a user enters a phone number in international format, 22741 // and there're several countries corresponding to that country calling code, 22742 // and a country has been derived from the number, and then 22743 // a user enters one more digit and the number is no longer 22744 // valid for the derived country, so the country should be re-derived 22745 // on every new digit in those cases. 22746 // 22747 // If the phone number is being input in national format, 22748 // then it could be a case when `defaultCountry` wasn't specified 22749 // when creating `AsYouType` instance, and just `defaultCallingCode` was specified, 22750 // and that "calling code" could correspond to a "non-geographic entity", 22751 // or there could be several countries corresponding to that country calling code. 22752 // In those cases, `this.country` is `undefined` and should be derived 22753 // from the number. Again, if country calling code is ambiguous, then 22754 // `this.country` should be re-derived with each new digit. 22755 // 22756 if (!this.state.country || this.isCountryCallingCodeAmbiguous()) { 22757 this.determineTheCountry(); 22758 } 22759 } 22760 22761 // Prepends `+CountryCode ` in case of an international phone number 22762 }, { 22763 key: "getFullNumber", 22764 value: function getFullNumber(formattedNationalNumber) { 22765 var _this2 = this; 22766 if (this.isInternational()) { 22767 var prefix = function prefix(text) { 22768 return _this2.formatter.getInternationalPrefixBeforeCountryCallingCode(_this2.state, { 22769 spacing: text ? true : false 22770 }) + text; 22771 }; 22772 var callingCode = this.state.callingCode; 22773 if (!callingCode) { 22774 return prefix("".concat(this.state.getDigitsWithoutInternationalPrefix())); 22775 } 22776 if (!formattedNationalNumber) { 22777 return prefix(callingCode); 22778 } 22779 return prefix("".concat(callingCode, " ").concat(formattedNationalNumber)); 22780 } 22781 return formattedNationalNumber; 22782 } 22783 }, { 22784 key: "getNonFormattedNationalNumberWithPrefix", 22785 value: function getNonFormattedNationalNumberWithPrefix() { 22786 var _this$state = this.state, 22787 nationalSignificantNumber = _this$state.nationalSignificantNumber, 22788 prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _this$state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix, 22789 nationalPrefix = _this$state.nationalPrefix; 22790 var number = nationalSignificantNumber; 22791 var prefix = prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix || nationalPrefix; 22792 if (prefix) { 22793 number = prefix + number; 22794 } 22795 return number; 22796 } 22797 }, { 22798 key: "getNonFormattedNumber", 22799 value: function getNonFormattedNumber() { 22800 var nationalSignificantNumberIsModified = this.state.nationalSignificantNumberIsModified; 22801 return this.getFullNumber(nationalSignificantNumberIsModified ? this.state.getNationalDigits() : this.getNonFormattedNationalNumberWithPrefix()); 22802 } 22803 }, { 22804 key: "getNonFormattedTemplate", 22805 value: function getNonFormattedTemplate() { 22806 var number = this.getNonFormattedNumber(); 22807 if (number) { 22808 return number.replace(/[\+\d]/g, _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_4__.DIGIT_PLACEHOLDER); 22809 } 22810 } 22811 }, { 22812 key: "isCountryCallingCodeAmbiguous", 22813 value: function isCountryCallingCodeAmbiguous() { 22814 var callingCode = this.state.callingCode; 22815 var countryCodes = this.metadata.getCountryCodesForCallingCode(callingCode); 22816 return countryCodes && countryCodes.length > 1; 22817 } 22818 22819 // Determines the exact country of the phone number 22820 // entered so far based on the country phone code 22821 // and the national phone number. 22822 }, { 22823 key: "determineTheCountry", 22824 value: function determineTheCountry() { 22825 this.state.setCountry((0,_helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_6__["default"])(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, { 22826 nationalNumber: this.state.nationalSignificantNumber, 22827 metadata: this.metadata 22828 })); 22829 } 22830 22831 /** 22832 * Returns a E.164 phone number value for the user's input. 22833 * 22834 * For example, for country `"US"` and input `"(222) 333-4444"` 22835 * it will return `"+12223334444"`. 22836 * 22837 * For international phone number input, it will also auto-correct 22838 * some minor errors such as using a national prefix when writing 22839 * an international phone number. For example, if the user inputs 22840 * `"+44 0 7400 000000"` then it will return an auto-corrected 22841 * `"+447400000000"` phone number value. 22842 * 22843 * Will return `undefined` if no digits have been input, 22844 * or when inputting a phone number in national format and no 22845 * default country or default "country calling code" have been set. 22846 * 22847 * @return {string} [value] 22848 */ 22849 }, { 22850 key: "getNumberValue", 22851 value: function getNumberValue() { 22852 var _this$state2 = this.state, 22853 digits = _this$state2.digits, 22854 callingCode = _this$state2.callingCode, 22855 country = _this$state2.country, 22856 nationalSignificantNumber = _this$state2.nationalSignificantNumber; 22857 22858 // Will return `undefined` if no digits have been input. 22859 if (!digits) { 22860 return; 22861 } 22862 if (this.isInternational()) { 22863 if (callingCode) { 22864 return '+' + callingCode + nationalSignificantNumber; 22865 } else { 22866 return '+' + digits; 22867 } 22868 } else { 22869 if (country || callingCode) { 22870 var callingCode_ = country ? this.metadata.countryCallingCode() : callingCode; 22871 return '+' + callingCode_ + nationalSignificantNumber; 22872 } 22873 } 22874 } 22875 22876 /** 22877 * Returns an instance of `PhoneNumber` class. 22878 * Will return `undefined` if no national (significant) number 22879 * digits have been entered so far, or if no `defaultCountry` has been 22880 * set and the user enters a phone number not in international format. 22881 */ 22882 }, { 22883 key: "getNumber", 22884 value: function getNumber() { 22885 var _this$state3 = this.state, 22886 nationalSignificantNumber = _this$state3.nationalSignificantNumber, 22887 carrierCode = _this$state3.carrierCode, 22888 callingCode = _this$state3.callingCode; 22889 22890 // `this._getCountry()` is basically same as `this.state.country` 22891 // with the only change that it return `undefined` in case of a 22892 // "non-geographic" numbering plan instead of `"001"` "internal use" value. 22893 var country = this._getCountry(); 22894 if (!nationalSignificantNumber) { 22895 return; 22896 } 22897 22898 // `state.country` and `state.callingCode` aren't required to be in sync. 22899 // For example, `country` could be `"AR"` and `callingCode` could be `undefined`. 22900 // So `country` and `callingCode` are totally independent. 22901 22902 if (!country && !callingCode) { 22903 return; 22904 } 22905 22906 // By default, if `defaultCountry` parameter was passed when 22907 // creating `AsYouType` instance, `state.country` is gonna be 22908 // that `defaultCountry`, which doesn't entirely conform with 22909 // `parsePhoneNumber()`'s behavior where it attempts to determine 22910 // the country more precisely in cases when multiple countries 22911 // could correspond to the same `countryCallingCode`. 22912 // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417192969 22913 // 22914 // Because `AsYouType.getNumber()` method is supposed to be a 1:1 22915 // equivalent for `parsePhoneNumber(AsYouType.getNumberValue())`, 22916 // then it should also behave accordingly in cases of `country` ambiguity. 22917 // That's how users of this library would expect it to behave anyway. 22918 // 22919 if (country) { 22920 if (country === this.defaultCountry) { 22921 // `state.country` and `state.callingCode` aren't required to be in sync. 22922 // For example, `state.country` could be `"AR"` and `state.callingCode` could be `undefined`. 22923 // So `state.country` and `state.callingCode` are totally independent. 22924 var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](this.metadata.metadata); 22925 metadata.selectNumberingPlan(country); 22926 var _callingCode = metadata.numberingPlan.callingCode(); 22927 var ambiguousCountries = this.metadata.getCountryCodesForCallingCode(_callingCode); 22928 if (ambiguousCountries.length > 1) { 22929 var exactCountry = (0,_helpers_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_7__["default"])(nationalSignificantNumber, { 22930 countries: ambiguousCountries, 22931 metadata: this.metadata.metadata 22932 }); 22933 if (exactCountry) { 22934 country = exactCountry; 22935 } 22936 } 22937 } 22938 } 22939 var phoneNumber = new _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_1__["default"](country || callingCode, nationalSignificantNumber, this.metadata.metadata); 22940 if (carrierCode) { 22941 phoneNumber.carrierCode = carrierCode; 22942 } 22943 // Phone number extensions are not supported by "As You Type" formatter. 22944 return phoneNumber; 22945 } 22946 22947 /** 22948 * Returns `true` if the phone number is "possible". 22949 * Is just a shortcut for `PhoneNumber.isPossible()`. 22950 * @return {boolean} 22951 */ 22952 }, { 22953 key: "isPossible", 22954 value: function isPossible() { 22955 var phoneNumber = this.getNumber(); 22956 if (!phoneNumber) { 22957 return false; 22958 } 22959 return phoneNumber.isPossible(); 22960 } 22961 22962 /** 22963 * Returns `true` if the phone number is "valid". 22964 * Is just a shortcut for `PhoneNumber.isValid()`. 22965 * @return {boolean} 22966 */ 22967 }, { 22968 key: "isValid", 22969 value: function isValid() { 22970 var phoneNumber = this.getNumber(); 22971 if (!phoneNumber) { 22972 return false; 22973 } 22974 return phoneNumber.isValid(); 22975 } 22976 22977 /** 22978 * @deprecated 22979 * This method is used in `react-phone-number-input/source/input-control.js` 22980 * in versions before `3.0.16`. 22981 */ 22982 }, { 22983 key: "getNationalNumber", 22984 value: function getNationalNumber() { 22985 return this.state.nationalSignificantNumber; 22986 } 22987 22988 /** 22989 * Returns the phone number characters entered by the user. 22990 * @return {string} 22991 */ 22992 }, { 22993 key: "getChars", 22994 value: function getChars() { 22995 return (this.state.international ? '+' : '') + this.state.digits; 22996 } 22997 22998 /** 22999 * Returns the template for the formatted phone number. 23000 * @return {string} 23001 */ 23002 }, { 23003 key: "getTemplate", 23004 value: function getTemplate() { 23005 return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || ''; 23006 } 23007 }]); 23008}(); 23009 23010//# sourceMappingURL=AsYouType.js.map 23011 23012/***/ }), 23013
vendor: 9,942 bytes, lines 23014-23238
23014/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js": 23015/*!**********************************************************************************!*\ 23016 !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js ***! 23017 \**********************************************************************************/ 23018/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 23019 23020"use strict"; 23021__webpack_require__.r(__webpack_exports__); 23022/* harmony export */ __webpack_require__.d(__webpack_exports__, { 23023/* harmony export */ "default": function() { return /* binding */ PatternMatcher; } 23024/* harmony export */ }); 23025/* harmony import */ var _AsYouTypeFormatter_PatternParser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsYouTypeFormatter.PatternParser.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js"); 23026function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 23027function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 23028function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 23029function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 23030function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 23031function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 23032function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 23033function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 23034function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 23035 23036var PatternMatcher = /*#__PURE__*/function () { 23037 function PatternMatcher(pattern) { 23038 _classCallCheck(this, PatternMatcher); 23039 this.matchTree = new _AsYouTypeFormatter_PatternParser_js__WEBPACK_IMPORTED_MODULE_0__["default"]().parse(pattern); 23040 } 23041 return _createClass(PatternMatcher, [{ 23042 key: "match", 23043 value: function match(string) { 23044 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, 23045 allowOverflow = _ref.allowOverflow; 23046 if (!string) { 23047 throw new Error('String is required'); 23048 } 23049 var result = _match(string.split(''), this.matchTree, true); 23050 if (result && result.match) { 23051 delete result.matchedChars; 23052 } 23053 if (result && result.overflow) { 23054 if (!allowOverflow) { 23055 return; 23056 } 23057 } 23058 return result; 23059 } 23060 }]); 23061}(); 23062/** 23063 * Matches `characters` against a pattern compiled into a `tree`. 23064 * @param {string[]} characters 23065 * @param {Tree} tree â A pattern compiled into a `tree`. See the `*.d.ts` file for the description of the `tree` structure. 23066 * @param {boolean} last â Whether it's the last (rightmost) subtree on its level of the match tree. 23067 * @return {object} See the `*.d.ts` file for the description of the result object. 23068 */ 23069 23070function _match(characters, tree, last) { 23071 // If `tree` is a string, then `tree` is a single character. 23072 // That's because when a pattern is parsed, multi-character-string parts 23073 // of a pattern are compiled into arrays of single characters. 23074 // I still wrote this piece of code for a "general" hypothetical case 23075 // when `tree` could be a string of several characters, even though 23076 // such case is not possible with the current implementation. 23077 if (typeof tree === 'string') { 23078 var characterString = characters.join(''); 23079 if (tree.indexOf(characterString) === 0) { 23080 // `tree` is always a single character. 23081 // If `tree.indexOf(characterString) === 0` 23082 // then `characters.length === tree.length`. 23083 /* istanbul ignore else */ 23084 if (characters.length === tree.length) { 23085 return { 23086 match: true, 23087 matchedChars: characters 23088 }; 23089 } 23090 // `tree` is always a single character. 23091 // If `tree.indexOf(characterString) === 0` 23092 // then `characters.length === tree.length`. 23093 /* istanbul ignore next */ 23094 return { 23095 partialMatch: true 23096 // matchedChars: characters 23097 }; 23098 } 23099 if (characterString.indexOf(tree) === 0) { 23100 if (last) { 23101 // The `else` path is not possible because `tree` is always a single character. 23102 // The `else` case for `characters.length > tree.length` would be 23103 // `characters.length <= tree.length` which means `characters.length <= 1`. 23104 // `characters` array can't be empty, so that means `characters === [tree]`, 23105 // which would also mean `tree.indexOf(characterString) === 0` and that'd mean 23106 // that the `if (tree.indexOf(characterString) === 0)` condition before this 23107 // `if` condition would be entered, and returned from there, not reaching this code. 23108 /* istanbul ignore else */ 23109 if (characters.length > tree.length) { 23110 return { 23111 overflow: true 23112 }; 23113 } 23114 } 23115 return { 23116 match: true, 23117 matchedChars: characters.slice(0, tree.length) 23118 }; 23119 } 23120 return; 23121 } 23122 if (Array.isArray(tree)) { 23123 var restCharacters = characters.slice(); 23124 var i = 0; 23125 while (i < tree.length) { 23126 var subtree = tree[i]; 23127 var result = _match(restCharacters, subtree, last && i === tree.length - 1); 23128 if (!result) { 23129 return; 23130 } else if (result.overflow) { 23131 return result; 23132 } else if (result.match) { 23133 // Continue with the next subtree with the rest of the characters. 23134 restCharacters = restCharacters.slice(result.matchedChars.length); 23135 if (restCharacters.length === 0) { 23136 if (i === tree.length - 1) { 23137 return { 23138 match: true, 23139 matchedChars: characters 23140 }; 23141 } else { 23142 return { 23143 partialMatch: true 23144 // matchedChars: characters 23145 }; 23146 } 23147 } 23148 } else { 23149 /* istanbul ignore else */ 23150 if (result.partialMatch) { 23151 return { 23152 partialMatch: true 23153 // matchedChars: characters 23154 }; 23155 } else { 23156 throw new Error("Unsupported match result:\n".concat(JSON.stringify(result, null, 2))); 23157 } 23158 } 23159 i++; 23160 } 23161 // If `last` then overflow has already been checked 23162 // by the last element of the `tree` array. 23163 /* istanbul ignore if */ 23164 if (last) { 23165 return { 23166 overflow: true 23167 }; 23168 } 23169 return { 23170 match: true, 23171 matchedChars: characters.slice(0, characters.length - restCharacters.length) 23172 }; 23173 } 23174 switch (tree.op) { 23175 case '|': 23176 var partialMatch; 23177 for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) { 23178 var branch = _step.value; 23179 var _result = _match(characters, branch, last); 23180 if (_result) { 23181 if (_result.overflow) { 23182 return _result; 23183 } else if (_result.match) { 23184 return { 23185 match: true, 23186 matchedChars: _result.matchedChars 23187 }; 23188 } else { 23189 /* istanbul ignore else */ 23190 if (_result.partialMatch) { 23191 partialMatch = true; 23192 } else { 23193 throw new Error("Unsupported match result:\n".concat(JSON.stringify(_result, null, 2))); 23194 } 23195 } 23196 } 23197 } 23198 if (partialMatch) { 23199 return { 23200 partialMatch: true 23201 // matchedChars: ... 23202 }; 23203 } 23204 // Not even a partial match. 23205 return; 23206 case '[]': 23207 for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) { 23208 var _char = _step2.value; 23209 if (characters[0] === _char) { 23210 if (characters.length === 1) { 23211 return { 23212 match: true, 23213 matchedChars: characters 23214 }; 23215 } 23216 if (last) { 23217 return { 23218 overflow: true 23219 }; 23220 } 23221 return { 23222 match: true, 23223 matchedChars: [_char] 23224 }; 23225 } 23226 } 23227 // No character matches. 23228 return; 23229 23230 /* istanbul ignore next */ 23231 default: 23232 throw new Error("Unsupported instruction tree: ".concat(tree)); 23233 } 23234} 23235//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map 23236 23237/***/ }), 23238
vendor: 7,520 bytes, lines 23239-23455
23239/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js": 23240/*!*********************************************************************************!*\ 23241 !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js ***! 23242 \*********************************************************************************/ 23243/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 23244 23245"use strict"; 23246__webpack_require__.r(__webpack_exports__); 23247/* harmony export */ __webpack_require__.d(__webpack_exports__, { 23248/* harmony export */ "default": function() { return /* binding */ PatternParser; } 23249/* harmony export */ }); 23250function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 23251function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 23252function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 23253function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 23254function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 23255function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 23256var PatternParser = /*#__PURE__*/function () { 23257 function PatternParser() { 23258 _classCallCheck(this, PatternParser); 23259 } 23260 return _createClass(PatternParser, [{ 23261 key: "parse", 23262 value: function parse(pattern) { 23263 this.context = [{ 23264 or: true, 23265 instructions: [] 23266 }]; 23267 this.parsePattern(pattern); 23268 if (this.context.length !== 1) { 23269 throw new Error('Non-finalized contexts left when pattern parse ended'); 23270 } 23271 var _this$context$ = this.context[0], 23272 branches = _this$context$.branches, 23273 instructions = _this$context$.instructions; 23274 if (branches) { 23275 return { 23276 op: '|', 23277 args: branches.concat([expandSingleElementArray(instructions)]) 23278 }; 23279 } 23280 23281 /* istanbul ignore if */ 23282 if (instructions.length === 0) { 23283 throw new Error('Pattern is required'); 23284 } 23285 if (instructions.length === 1) { 23286 return instructions[0]; 23287 } 23288 return instructions; 23289 } 23290 }, { 23291 key: "startContext", 23292 value: function startContext(context) { 23293 this.context.push(context); 23294 } 23295 }, { 23296 key: "endContext", 23297 value: function endContext() { 23298 this.context.pop(); 23299 } 23300 }, { 23301 key: "getContext", 23302 value: function getContext() { 23303 return this.context[this.context.length - 1]; 23304 } 23305 }, { 23306 key: "parsePattern", 23307 value: function parsePattern(pattern) { 23308 if (!pattern) { 23309 throw new Error('Pattern is required'); 23310 } 23311 var match = pattern.match(OPERATOR); 23312 if (!match) { 23313 if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) { 23314 throw new Error("Illegal characters found in a pattern: ".concat(pattern)); 23315 } 23316 this.getContext().instructions = this.getContext().instructions.concat(pattern.split('')); 23317 return; 23318 } 23319 var operator = match[1]; 23320 var before = pattern.slice(0, match.index); 23321 var rightPart = pattern.slice(match.index + operator.length); 23322 switch (operator) { 23323 case '(?:': 23324 if (before) { 23325 this.parsePattern(before); 23326 } 23327 this.startContext({ 23328 or: true, 23329 instructions: [], 23330 branches: [] 23331 }); 23332 break; 23333 case ')': 23334 if (!this.getContext().or) { 23335 throw new Error('")" operator must be preceded by "(?:" operator'); 23336 } 23337 if (before) { 23338 this.parsePattern(before); 23339 } 23340 if (this.getContext().instructions.length === 0) { 23341 throw new Error('No instructions found after "|" operator in an "or" group'); 23342 } 23343 var _this$getContext = this.getContext(), 23344 branches = _this$getContext.branches; 23345 branches.push(expandSingleElementArray(this.getContext().instructions)); 23346 this.endContext(); 23347 this.getContext().instructions.push({ 23348 op: '|', 23349 args: branches 23350 }); 23351 break; 23352 case '|': 23353 if (!this.getContext().or) { 23354 throw new Error('"|" operator can only be used inside "or" groups'); 23355 } 23356 if (before) { 23357 this.parsePattern(before); 23358 } 23359 // The top-level is an implicit "or" group, if required. 23360 if (!this.getContext().branches) { 23361 // `branches` are not defined only for the root implicit "or" operator. 23362 /* istanbul ignore else */ 23363 if (this.context.length === 1) { 23364 this.getContext().branches = []; 23365 } else { 23366 throw new Error('"branches" not found in an "or" group context'); 23367 } 23368 } 23369 this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions)); 23370 this.getContext().instructions = []; 23371 break; 23372 case '[': 23373 if (before) { 23374 this.parsePattern(before); 23375 } 23376 this.startContext({ 23377 oneOfSet: true 23378 }); 23379 break; 23380 case ']': 23381 if (!this.getContext().oneOfSet) { 23382 throw new Error('"]" operator must be preceded by "[" operator'); 23383 } 23384 this.endContext(); 23385 this.getContext().instructions.push({ 23386 op: '[]', 23387 args: parseOneOfSet(before) 23388 }); 23389 break; 23390 23391 /* istanbul ignore next */ 23392 default: 23393 throw new Error("Unknown operator: ".concat(operator)); 23394 } 23395 if (rightPart) { 23396 this.parsePattern(rightPart); 23397 } 23398 } 23399 }]); 23400}(); 23401 23402function parseOneOfSet(pattern) { 23403 var values = []; 23404 var i = 0; 23405 while (i < pattern.length) { 23406 if (pattern[i] === '-') { 23407 if (i === 0 || i === pattern.length - 1) { 23408 throw new Error("Couldn't parse a one-of set pattern: ".concat(pattern)); 23409 } 23410 var prevValue = pattern[i - 1].charCodeAt(0) + 1; 23411 var nextValue = pattern[i + 1].charCodeAt(0) - 1; 23412 var value = prevValue; 23413 while (value <= nextValue) { 23414 values.push(String.fromCharCode(value)); 23415 value++; 23416 } 23417 } else { 23418 values.push(pattern[i]); 23419 } 23420 i++; 23421 } 23422 return values; 23423} 23424var ILLEGAL_CHARACTER_REGEXP = /[\(\)\[\]\?\:\|]/; 23425var OPERATOR = new RegExp( 23426// any of: 23427'(' + 23428// or operator 23429'\\|' + 23430// or 23431'|' + 23432// or group start 23433'\\(\\?\\:' + 23434// or 23435'|' + 23436// or group end 23437'\\)' + 23438// or 23439'|' + 23440// one-of set start 23441'\\[' + 23442// or 23443'|' + 23444// one-of set end 23445'\\]' + ')'); 23446function expandSingleElementArray(array) { 23447 if (array.length === 1) { 23448 return array[0]; 23449 } 23450 return array; 23451} 23452//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map 23453 23454/***/ }), 23455
vendor: 7,328 bytes, lines 23456-23588
23456/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js": 23457/*!****************************************************************************!*\ 23458 !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js ***! 23459 \****************************************************************************/ 23460/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 23461 23462"use strict"; 23463__webpack_require__.r(__webpack_exports__); 23464/* harmony export */ __webpack_require__.d(__webpack_exports__, { 23465/* harmony export */ canFormatCompleteNumber: function() { return /* binding */ canFormatCompleteNumber; }, 23466/* harmony export */ "default": function() { return /* binding */ formatCompleteNumber; } 23467/* harmony export */ }); 23468/* harmony import */ var _helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/checkNumberLength.js */ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js"); 23469/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/parseDigits.js */ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js"); 23470/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ "../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js"); 23471 23472 23473 23474function formatCompleteNumber(state, format, _ref) { 23475 var metadata = _ref.metadata, 23476 shouldTryNationalPrefixFormattingRule = _ref.shouldTryNationalPrefixFormattingRule, 23477 getSeparatorAfterNationalPrefix = _ref.getSeparatorAfterNationalPrefix; 23478 var matcher = new RegExp("^(?:".concat(format.pattern(), ")$")); 23479 if (matcher.test(state.nationalSignificantNumber)) { 23480 return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, { 23481 metadata: metadata, 23482 shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule, 23483 getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix 23484 }); 23485 } 23486} 23487function canFormatCompleteNumber(nationalSignificantNumber, country, metadata) { 23488 return (0,_helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_0__["default"])(nationalSignificantNumber, country, metadata) === 'IS_POSSIBLE'; 23489} 23490function formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, _ref2) { 23491 var metadata = _ref2.metadata, 23492 shouldTryNationalPrefixFormattingRule = _ref2.shouldTryNationalPrefixFormattingRule, 23493 getSeparatorAfterNationalPrefix = _ref2.getSeparatorAfterNationalPrefix; 23494 // `format` has already been checked for `nationalPrefix` requirement. 23495 23496 var nationalSignificantNumber = state.nationalSignificantNumber, 23497 international = state.international, 23498 nationalPrefix = state.nationalPrefix, 23499 carrierCode = state.carrierCode; 23500 23501 // Format the number with using `national_prefix_formatting_rule`. 23502 // If the resulting formatted number is a valid formatted number, then return it. 23503 // 23504 // Google's AsYouType formatter is different in a way that it doesn't try 23505 // to format using the "national prefix formatting rule", and instead it 23506 // simply prepends a national prefix followed by a " " character. 23507 // This code does that too, but as a fallback. 23508 // The reason is that "national prefix formatting rule" may use parentheses, 23509 // which wouldn't be included has it used the simpler Google's way. 23510 // 23511 if (shouldTryNationalPrefixFormattingRule(format)) { 23512 var formattedNumber = formatNationalNumber(state, format, { 23513 useNationalPrefixFormattingRule: true, 23514 getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix, 23515 metadata: metadata 23516 }); 23517 if (formattedNumber) { 23518 return formattedNumber; 23519 } 23520 } 23521 23522 // Format the number without using `national_prefix_formatting_rule`. 23523 return formatNationalNumber(state, format, { 23524 useNationalPrefixFormattingRule: false, 23525 getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix, 23526 metadata: metadata 23527 }); 23528} 23529function formatNationalNumber(state, format, _ref3) { 23530 var metadata = _ref3.metadata, 23531 useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule, 23532 getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix; 23533 var formattedNationalNumber = (0,_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.nationalSignificantNumber, format, { 23534 carrierCode: state.carrierCode, 23535 useInternationalFormat: state.international, 23536 withNationalPrefix: useNationalPrefixFormattingRule, 23537 metadata: metadata 23538 }); 23539 if (!useNationalPrefixFormattingRule) { 23540 if (state.nationalPrefix) { 23541 // If a national prefix was extracted, then just prepend it, 23542 // followed by a " " character. 23543 formattedNationalNumber = state.nationalPrefix + getSeparatorAfterNationalPrefix(format) + formattedNationalNumber; 23544 } else if (state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) { 23545 formattedNationalNumber = state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix + ' ' + formattedNationalNumber; 23546 } 23547 } 23548 if (isValidFormattedNationalNumber(formattedNationalNumber, state)) { 23549 return formattedNationalNumber; 23550 } 23551} 23552 23553// Check that the formatted phone number contains exactly 23554// the same digits that have been input by the user. 23555// For example, when "0111523456789" is input for `AR` country, 23556// the extracted `this.nationalSignificantNumber` is "91123456789", 23557// which means that the national part of `this.digits` isn't simply equal to 23558// `this.nationalPrefix` + `this.nationalSignificantNumber`. 23559// 23560// Also, a `format` can add extra digits to the `this.nationalSignificantNumber` 23561// being formatted via `metadata[country].national_prefix_transform_rule`. 23562// For example, for `VI` country, it prepends `340` to the national number, 23563// and if this check hasn't been implemented, then there would be a bug 23564// when `340` "area coude" is "duplicated" during input for `VI` country: 23565// https://github.com/catamphetamine/libphonenumber-js/issues/318 23566// 23567// So, all these "gotchas" are filtered out. 23568// 23569// In the original Google's code, the comments say: 23570// "Check that we didn't remove nor add any extra digits when we matched 23571// this formatting pattern. This usually happens after we entered the last 23572// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when 23573// formatted but AYTF should retain all the number entered and not change 23574// in order to match a format (of same leading digits and length) display 23575// in that way." 23576// "If it's the same (i.e entered number and format is same), then it's 23577// safe to return this in formatted number as nothing is lost / added." 23578// Otherwise, don't use this format. 23579// https://github.com/google/libphonenumber/commit/3e7c1f04f5e7200f87fb131e6f85c6e99d60f510#diff-9149457fa9f5d608a11bb975c6ef4bc5 23580// https://github.com/google/libphonenumber/commit/3ac88c7106e7dcb553bcc794b15f19185928a1c6#diff-2dcb77e833422ee304da348b905cde0b 23581// 23582function isValidFormattedNationalNumber(formattedNationalNumber, state) { 23583 return (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_1__["default"])(formattedNationalNumber) === state.getNationalDigits(); 23584} 23585//# sourceMappingURL=AsYouTypeFormatter.complete.js.map 23586 23587/***/ }), 23588
vendor: 39,744 bytes, lines 23589-24333
23589/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js": 23590/*!*******************************************************************!*\ 23591 !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js ***! 23592 \*******************************************************************/ 23593/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 23594 23595"use strict"; 23596__webpack_require__.r(__webpack_exports__); 23597/* harmony export */ __webpack_require__.d(__webpack_exports__, { 23598/* harmony export */ DIGIT_PLACEHOLDER: function() { return /* reexport safe */ _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER; }, 23599/* harmony export */ "default": function() { return /* binding */ AsYouTypeFormatter; } 23600/* harmony export */ }); 23601/* harmony import */ var _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsYouTypeFormatter.util.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js"); 23602/* harmony import */ var _AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsYouTypeFormatter.complete.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js"); 23603/* harmony import */ var _AsYouTypeFormatter_PatternMatcher_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsYouTypeFormatter.PatternMatcher.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js"); 23604/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/parseDigits.js */ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js"); 23605/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ "../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js"); 23606/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ "../node_modules/libphonenumber-js/es6/constants.js"); 23607/* harmony import */ var _helpers_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/applyInternationalSeparatorStyle.js */ "../node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js"); 23608function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 23609function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 23610function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 23611function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 23612function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 23613function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 23614function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 23615function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 23616function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 23617 23618 23619 23620 23621 23622 23623 23624 23625 23626// Used in phone number format template creation. 23627// Could be any digit, I guess. 23628var DUMMY_DIGIT = '9'; 23629// I don't know why is it exactly `15` 23630var LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15; 23631// Create a phone number consisting only of the digit 9 that matches the 23632// `number_pattern` by applying the pattern to the "longest phone number" string. 23633var LONGEST_DUMMY_PHONE_NUMBER = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH); 23634 23635// A set of characters that, if found in a national prefix formatting rules, are an indicator to 23636// us that we should separate the national prefix from the number when formatting. 23637var NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/; 23638 23639// Deprecated: Google has removed some formatting pattern related code from their repo. 23640// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c 23641// "We no longer have numbers in formatting matching patterns, only \d." 23642// Because this library supports generating custom metadata 23643// some users may still be using old metadata so the relevant 23644// code seems to stay until some next major version update. 23645var SUPPORT_LEGACY_FORMATTING_PATTERNS = true; 23646 23647// A pattern that is used to match character classes in regular expressions. 23648// An example of a character class is "[1-4]". 23649var CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () { 23650 return /\[([^\[\]])*\]/g; 23651}; 23652 23653// Any digit in a regular expression that actually denotes a digit. For 23654// example, in the regular expression "80[0-2]\d{6,10}", the first 2 digits 23655// (8 and 0) are standalone digits, but the rest are not. 23656// Two look-aheads are needed because the number following \\d could be a 23657// two-digit number, since the phone number can be as long as 15 digits. 23658var CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () { 23659 return /\d(?=[^,}][^,}])/g; 23660}; 23661 23662// A regular expression that is used to determine if a `format` is 23663// suitable to be used in the "as you type formatter". 23664// A `format` is suitable when the resulting formatted number has 23665// the same digits as the user has entered. 23666// 23667// In the simplest case, that would mean that the format 23668// doesn't add any additional digits when formatting a number. 23669// Google says that it also shouldn't add "star" (`*`) characters, 23670// like it does in some Israeli formats. 23671// Such basic format would only contain "valid punctuation" 23672// and "captured group" identifiers ($1, $2, etc). 23673// 23674// An example of a format that adds additional digits: 23675// 23676// Country: `AR` (Argentina). 23677// Format: 23678// { 23679// "pattern": "(\\d)(\\d{2})(\\d{4})(\\d{4})", 23680// "leading_digits_patterns": ["91"], 23681// "national_prefix_formatting_rule": "0$1", 23682// "format": "$2 15-$3-$4", 23683// "international_format": "$1 $2 $3-$4" 23684// } 23685// 23686// In the format above, the `format` adds `15` to the digits when formatting a number. 23687// A sidenote: this format actually is suitable because `national_prefix_for_parsing` 23688// has previously removed `15` from a national number, so re-adding `15` in `format` 23689// doesn't actually result in any extra digits added to user's input. 23690// But verifying that would be a complex procedure, so the code chooses a simpler path: 23691// it simply filters out all `format`s that contain anything but "captured group" ids. 23692// 23693// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's 23694// `libphonenumber` code. 23695// 23696var NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*' + 23697// Google developers say: 23698// "We require that the first matching group is present in the 23699// output pattern to ensure no data is lost while formatting." 23700'\\$1' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*' + '(\\$\\d[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*)*' + '$'); 23701 23702// This is the minimum length of the leading digits of a phone number 23703// to guarantee the first "leading digits pattern" for a phone number format 23704// to be preemptive. 23705var MIN_LEADING_DIGITS_LENGTH = 3; 23706var AsYouTypeFormatter = /*#__PURE__*/function () { 23707 function AsYouTypeFormatter(_ref) { 23708 var state = _ref.state, 23709 metadata = _ref.metadata; 23710 _classCallCheck(this, AsYouTypeFormatter); 23711 this.metadata = metadata; 23712 this.resetFormat(); 23713 } 23714 return _createClass(AsYouTypeFormatter, [{ 23715 key: "resetFormat", 23716 value: function resetFormat() { 23717 this.chosenFormat = undefined; 23718 this.template = undefined; 23719 this.nationalNumberTemplate = undefined; 23720 this.populatedNationalNumberTemplate = undefined; 23721 this.populatedNationalNumberTemplatePosition = -1; 23722 } 23723 }, { 23724 key: "reset", 23725 value: function reset(numberingPlan, state) { 23726 this.resetFormat(); 23727 if (numberingPlan) { 23728 this.isNANP = numberingPlan.callingCode() === '1'; 23729 this.matchingFormats = numberingPlan.formats(); 23730 if (state.nationalSignificantNumber) { 23731 this.narrowDownMatchingFormats(state); 23732 } 23733 } else { 23734 this.isNANP = undefined; 23735 this.matchingFormats = []; 23736 } 23737 } 23738 23739 /** 23740 * Formats an updated phone number. 23741 * @param {string} nextDigits â Additional phone number digits. 23742 * @param {object} state â `AsYouType` state. 23743 * @return {[string]} Returns undefined if the updated phone number can't be formatted using any of the available formats. 23744 */ 23745 }, { 23746 key: "format", 23747 value: function format(nextDigits, state) { 23748 var _this = this; 23749 // See if the phone number digits can be formatted as a complete phone number. 23750 // If not, use the results from `formatNationalNumberWithNextDigits()`, 23751 // which formats based on the chosen formatting pattern. 23752 // 23753 // Attempting to format complete phone number first is how it's done 23754 // in Google's `libphonenumber`, so this library just follows it. 23755 // Google's `libphonenumber` code doesn't explain in detail why does it 23756 // attempt to format digits as a complete phone number 23757 // instead of just going with a previoulsy (or newly) chosen `format`: 23758 // 23759 // "Checks to see if there is an exact pattern match for these digits. 23760 // If so, we should use this instead of any other formatting template 23761 // whose leadingDigitsPattern also matches the input." 23762 // 23763 if ((0,_AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__.canFormatCompleteNumber)(state.nationalSignificantNumber, state.country, this.metadata)) { 23764 for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) { 23765 var _format = _step.value; 23766 var formattedCompleteNumber = (0,_AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, _format, { 23767 metadata: this.metadata, 23768 shouldTryNationalPrefixFormattingRule: function shouldTryNationalPrefixFormattingRule(format) { 23769 return _this.shouldTryNationalPrefixFormattingRule(format, { 23770 international: state.international, 23771 nationalPrefix: state.nationalPrefix 23772 }); 23773 }, 23774 getSeparatorAfterNationalPrefix: function getSeparatorAfterNationalPrefix(format) { 23775 return _this.getSeparatorAfterNationalPrefix(format); 23776 } 23777 }); 23778 if (formattedCompleteNumber) { 23779 this.resetFormat(); 23780 this.chosenFormat = _format; 23781 this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\d/g, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER), state); 23782 this.populatedNationalNumberTemplate = formattedCompleteNumber; 23783 // With a new formatting template, the matched position 23784 // using the old template needs to be reset. 23785 this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER); 23786 return formattedCompleteNumber; 23787 } 23788 } 23789 } 23790 // Format the digits as a partial (incomplete) phone number 23791 // using the previously chosen formatting pattern (or a newly chosen one). 23792 return this.formatNationalNumberWithNextDigits(nextDigits, state); 23793 } 23794 23795 // Formats the next phone number digits. 23796 }, { 23797 key: "formatNationalNumberWithNextDigits", 23798 value: function formatNationalNumberWithNextDigits(nextDigits, state) { 23799 var previouslyChosenFormat = this.chosenFormat; 23800 23801 // Choose a format from the list of matching ones. 23802 var newlyChosenFormat = this.chooseFormat(state); 23803 if (newlyChosenFormat) { 23804 if (newlyChosenFormat === previouslyChosenFormat) { 23805 // If it can format the next (current) digits 23806 // using the previously chosen phone number format 23807 // then return the updated formatted number. 23808 return this.formatNextNationalNumberDigits(nextDigits); 23809 } else { 23810 // If a more appropriate phone number format 23811 // has been chosen for these "leading digits", 23812 // then re-format the national phone number part 23813 // using the newly selected format. 23814 return this.formatNextNationalNumberDigits(state.getNationalDigits()); 23815 } 23816 } 23817 } 23818 }, { 23819 key: "narrowDownMatchingFormats", 23820 value: function narrowDownMatchingFormats(_ref2) { 23821 var _this2 = this; 23822 var nationalSignificantNumber = _ref2.nationalSignificantNumber, 23823 nationalPrefix = _ref2.nationalPrefix, 23824 international = _ref2.international; 23825 var leadingDigits = nationalSignificantNumber; 23826 23827 // "leading digits" pattern list starts with a 23828 // "leading digits" pattern fitting a maximum of 3 leading digits. 23829 // So, after a user inputs 3 digits of a national (significant) phone number 23830 // this national (significant) number can already be formatted. 23831 // The next "leading digits" pattern is for 4 leading digits max, 23832 // and the "leading digits" pattern after it is for 5 leading digits max, etc. 23833 23834 // This implementation is different from Google's 23835 // in that it searches for a fitting format 23836 // even if the user has entered less than 23837 // `MIN_LEADING_DIGITS_LENGTH` digits of a national number. 23838 // Because some leading digit patterns already match for a single first digit. 23839 var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH; 23840 if (leadingDigitsPatternIndex < 0) { 23841 leadingDigitsPatternIndex = 0; 23842 } 23843 this.matchingFormats = this.matchingFormats.filter(function (format) { 23844 return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex); 23845 }); 23846 23847 // If there was a phone number format chosen 23848 // and it no longer holds given the new leading digits then reset it. 23849 // The test for this `if` condition is marked as: 23850 // "Reset a chosen format when it no longer holds given the new leading digits". 23851 // To construct a valid test case for this one can find a country 23852 // in `PhoneNumberMetadata.xml` yielding one format for 3 `<leadingDigits>` 23853 // and yielding another format for 4 `<leadingDigits>` (Australia in this case). 23854 if (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) { 23855 this.resetFormat(); 23856 } 23857 } 23858 }, { 23859 key: "formatSuits", 23860 value: function formatSuits(format, international, nationalPrefix) { 23861 // When a prefix before a national (significant) number is 23862 // simply a national prefix, then it's parsed as `this.nationalPrefix`. 23863 // In more complex cases, a prefix before national (significant) number 23864 // could include a national prefix as well as some "capturing groups", 23865 // and in that case there's no info whether a national prefix has been parsed. 23866 // If national prefix is not used when formatting a phone number 23867 // using this format, but a national prefix has been entered by the user, 23868 // and was extracted, then discard such phone number format. 23869 // In Google's "AsYouType" formatter code, the equivalent would be this part: 23870 // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184 23871 if (nationalPrefix && !format.usesNationalPrefix() && 23872 // !format.domesticCarrierCodeFormattingRule() && 23873 !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) { 23874 return false; 23875 } 23876 // If national prefix is mandatory for this phone number format 23877 // and there're no guarantees that a national prefix is present in user input 23878 // then discard this phone number format as not suitable. 23879 // In Google's "AsYouType" formatter code, the equivalent would be this part: 23880 // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193 23881 if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) { 23882 return false; 23883 } 23884 return true; 23885 } 23886 }, { 23887 key: "formatMatches", 23888 value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) { 23889 var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length; 23890 23891 // If this format is not restricted to a certain 23892 // leading digits pattern then it fits. 23893 // The test case could be found by searching for "leadingDigitsPatternsCount === 0". 23894 if (leadingDigitsPatternsCount === 0) { 23895 return true; 23896 } 23897 23898 // Start narrowing down the list of possible formats based on the leading digits. 23899 // (only previously matched formats take part in the narrowing down process) 23900 23901 // `leading_digits_patterns` start with 3 digits min 23902 // and then go up from there one digit at a time. 23903 leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1); 23904 var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex]; 23905 23906 // Google imposes a requirement on the leading digits 23907 // to be minimum 3 digits long in order to be eligible 23908 // for checking those with a leading digits pattern. 23909 // 23910 // Since `leading_digits_patterns` start with 3 digits min, 23911 // Google's original `libphonenumber` library only starts 23912 // excluding any non-matching formats only when the 23913 // national number entered so far is at least 3 digits long, 23914 // otherwise format matching would give false negatives. 23915 // 23916 // For example, when the digits entered so far are `2` 23917 // and the leading digits pattern is `21` â 23918 // it's quite obvious in this case that the format could be the one 23919 // but due to the absence of further digits it would give false negative. 23920 // 23921 // Also, `leading_digits_patterns` doesn't always correspond to a single 23922 // digits count. For example, `60|8` pattern would already match `8` 23923 // but the `60` part would require having at least two leading digits, 23924 // so the whole pattern would require inputting two digits first in order to 23925 // decide on whether it matches the input, even when the input is "80". 23926 // 23927 // This library â `libphonenumber-js` â allows filtering by `leading_digits_patterns` 23928 // even when there's only 1 or 2 digits of the national (significant) number. 23929 // To do that, it uses a non-strict pattern matcher written specifically for that. 23930 // 23931 if (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) { 23932 // Before leading digits < 3 matching was implemented: 23933 // return true 23934 // 23935 // After leading digits < 3 matching was implemented: 23936 try { 23937 return new _AsYouTypeFormatter_PatternMatcher_js__WEBPACK_IMPORTED_MODULE_2__["default"](leadingDigitsPattern).match(leadingDigits, { 23938 allowOverflow: true 23939 }) !== undefined; 23940 } catch (error) /* istanbul ignore next */{ 23941 // There's a slight possibility that there could be some undiscovered bug 23942 // in the pattern matcher code. Since the "leading digits < 3 matching" 23943 // feature is not "essential" for operation, it can fall back to the old way 23944 // in case of any issues rather than halting the application's execution. 23945 console.error(error); 23946 return true; 23947 } 23948 } 23949 23950 // If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are 23951 // available then use the usual regular expression matching. 23952 // 23953 // The whole pattern is wrapped in round brackets (`()`) because 23954 // the pattern can use "or" operator (`|`) at the top level of the pattern. 23955 // 23956 return new RegExp("^(".concat(leadingDigitsPattern, ")")).test(leadingDigits); 23957 } 23958 }, { 23959 key: "getFormatFormat", 23960 value: function getFormatFormat(format, international) { 23961 return international ? format.internationalFormat() : format.format(); 23962 } 23963 }, { 23964 key: "chooseFormat", 23965 value: function chooseFormat(state) { 23966 var _this3 = this; 23967 var _loop = function _loop() { 23968 var format = _step2.value; 23969 // If this format is currently being used 23970 // and is still suitable, then stick to it. 23971 if (_this3.chosenFormat === format) { 23972 return 0; // break 23973 } 23974 // Sometimes, a formatting rule inserts additional digits in a phone number, 23975 // and "as you type" formatter can't do that: it should only use the digits 23976 // that the user has input. 23977 // 23978 // For example, in Argentina, there's a format for mobile phone numbers: 23979 // 23980 // { 23981 // "pattern": "(\\d)(\\d{2})(\\d{4})(\\d{4})", 23982 // "leading_digits_patterns": ["91"], 23983 // "national_prefix_formatting_rule": "0$1", 23984 // "format": "$2 15-$3-$4", 23985 // "international_format": "$1 $2 $3-$4" 23986 // } 23987 // 23988 // In that format, `international_format` is used instead of `format` 23989 // because `format` inserts `15` in the formatted number, 23990 // and `AsYouType` formatter should only use the digits 23991 // the user has actually input, without adding any extra digits. 23992 // In this case, it wouldn't make a difference, because the `15` 23993 // is first stripped when applying `national_prefix_for_parsing` 23994 // and then re-added when using `format`, so in reality it doesn't 23995 // add any new digits to the number, but to detect that, the code 23996 // would have to be more complex: it would have to try formatting 23997 // the digits using the format and then see if any digits have 23998 // actually been added or removed, and then, every time a new digit 23999 // is input, it should re-check whether the chosen format doesn't 24000 // alter the digits. 24001 // 24002 // Google's code doesn't go that far, and so does this library: 24003 // it simply requires that a `format` doesn't add any additonal 24004 // digits to user's input. 24005 // 24006 // Also, people in general should move from inputting phone numbers 24007 // in national format (possibly with national prefixes) 24008 // and use international phone number format instead: 24009 // it's a logical thing in the modern age of mobile phones, 24010 // globalization and the internet. 24011 // 24012 /* istanbul ignore if */ 24013 if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) { 24014 return 1; // continue 24015 } 24016 if (!_this3.createTemplateForFormat(format, state)) { 24017 // Remove the format if it can't generate a template. 24018 _this3.matchingFormats = _this3.matchingFormats.filter(function (_) { 24019 return _ !== format; 24020 }); 24021 return 1; // continue 24022 } 24023 _this3.chosenFormat = format; 24024 return 0; // break 24025 }, 24026 _ret; 24027 // When there are multiple available formats, the formatter uses the first 24028 // format where a formatting template could be created. 24029 // 24030 // For some weird reason, `istanbul` says "else path not taken" 24031 // for the `for of` line below. Supposedly that means that 24032 // the loop doesn't ever go over the last element in the list. 24033 // That's true because there always is `this.chosenFormat` 24034 // when `this.matchingFormats` is non-empty. 24035 // And, for some weird reason, it doesn't think that the case 24036 // with empty `this.matchingFormats` qualifies for a valid "else" path. 24037 // So simply muting this `istanbul` warning. 24038 // It doesn't skip the contents of the `for of` loop, 24039 // it just skips the `for of` line. 24040 // 24041 /* istanbul ignore next */ 24042 for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) { 24043 _ret = _loop(); 24044 if (_ret === 0) break; 24045 if (_ret === 1) continue; 24046 } 24047 if (!this.chosenFormat) { 24048 // No format matches the national (significant) phone number. 24049 this.resetFormat(); 24050 } 24051 return this.chosenFormat; 24052 } 24053 }, { 24054 key: "createTemplateForFormat", 24055 value: function createTemplateForFormat(format, state) { 24056 // The formatter doesn't format numbers when numberPattern contains '|', e.g. 24057 // (20|3)\d{4}. In those cases we quickly return. 24058 // (Though there's no such format in current metadata) 24059 /* istanbul ignore if */ 24060 if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) { 24061 return; 24062 } 24063 // Get formatting template for this phone number format 24064 var template = this.getTemplateForFormat(format, state); 24065 // If the national number entered is too long 24066 // for any phone number format, then abort. 24067 if (template) { 24068 this.setNationalNumberTemplate(template, state); 24069 return true; 24070 } 24071 } 24072 }, { 24073 key: "getSeparatorAfterNationalPrefix", 24074 value: function getSeparatorAfterNationalPrefix(format) { 24075 // `US` metadata doesn't have a `national_prefix_formatting_rule`, 24076 // so the `if` condition below doesn't apply to `US`, 24077 // but in reality there shoudl be a separator 24078 // between a national prefix and a national (significant) number. 24079 // So `US` national prefix separator is a "special" "hardcoded" case. 24080 if (this.isNANP) { 24081 return ' '; 24082 } 24083 // If a `format` has a `national_prefix_formatting_rule` 24084 // and that rule has a separator after a national prefix, 24085 // then it means that there should be a separator 24086 // between a national prefix and a national (significant) number. 24087 if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) { 24088 return ' '; 24089 } 24090 // At this point, there seems to be no clear evidence that 24091 // there should be a separator between a national prefix 24092 // and a national (significant) number. So don't insert one. 24093 return ''; 24094 } 24095 }, { 24096 key: "getInternationalPrefixBeforeCountryCallingCode", 24097 value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) { 24098 var IDDPrefix = _ref3.IDDPrefix, 24099 missingPlus = _ref3.missingPlus; 24100 if (IDDPrefix) { 24101 return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' '; 24102 } 24103 if (missingPlus) { 24104 return ''; 24105 } 24106 return '+'; 24107 } 24108 }, { 24109 key: "getTemplate", 24110 value: function getTemplate(state) { 24111 if (!this.template) { 24112 return; 24113 } 24114 // `this.template` holds the template for a "complete" phone number. 24115 // The currently entered phone number is most likely not "complete", 24116 // so trim all non-populated digits. 24117 var index = -1; 24118 var i = 0; 24119 var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, { 24120 spacing: false 24121 }) : ''; 24122 while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) { 24123 index = this.template.indexOf(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, index + 1); 24124 i++; 24125 } 24126 return (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.cutAndStripNonPairedParens)(this.template, index + 1); 24127 } 24128 }, { 24129 key: "setNationalNumberTemplate", 24130 value: function setNationalNumberTemplate(template, state) { 24131 this.nationalNumberTemplate = template; 24132 this.populatedNationalNumberTemplate = template; 24133 // With a new formatting template, the matched position 24134 // using the old template needs to be reset. 24135 this.populatedNationalNumberTemplatePosition = -1; 24136 // For convenience, the public `.template` property 24137 // contains the whole international number 24138 // if the phone number being input is international: 24139 // 'x' for the '+' sign, 'x'es for the country phone code, 24140 // a spacebar and then the template for the formatted national number. 24141 if (state.international) { 24142 this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\d\+]/g, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER) + (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template; 24143 } else { 24144 this.template = template; 24145 } 24146 } 24147 24148 /** 24149 * Generates formatting template for a national phone number, 24150 * optionally containing a national prefix, for a format. 24151 * @param {Format} format 24152 * @param {string} nationalPrefix 24153 * @return {string} 24154 */ 24155 }, { 24156 key: "getTemplateForFormat", 24157 value: function getTemplateForFormat(format, _ref4) { 24158 var nationalSignificantNumber = _ref4.nationalSignificantNumber, 24159 international = _ref4.international, 24160 nationalPrefix = _ref4.nationalPrefix, 24161 prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _ref4.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix; 24162 var pattern = format.pattern(); 24163 24164 /* istanbul ignore else */ 24165 if (SUPPORT_LEGACY_FORMATTING_PATTERNS) { 24166 pattern = pattern 24167 // Replace anything in the form of [..] with \d 24168 .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\d') 24169 // Replace any standalone digit (not the one in `{}`) with \d 24170 .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\d'); 24171 } 24172 24173 // Generate a dummy national number (consisting of `9`s) 24174 // that fits this format's `pattern`. 24175 // 24176 // This match will always succeed, 24177 // because the "longest dummy phone number" 24178 // has enough length to accomodate any possible 24179 // national phone number format pattern. 24180 // 24181 var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0]; 24182 24183 // If the national number entered is too long 24184 // for any phone number format, then abort. 24185 if (nationalSignificantNumber.length > digits.length) { 24186 return; 24187 } 24188 24189 // Get a formatting template which can be used to efficiently format 24190 // a partial number where digits are added one by one. 24191 24192 // Below `strictPattern` is used for the 24193 // regular expression (with `^` and `$`). 24194 // This wasn't originally in Google's `libphonenumber` 24195 // and I guess they don't really need it 24196 // because they're not using "templates" to format phone numbers 24197 // but I added `strictPattern` after encountering 24198 // South Korean phone number formatting bug. 24199 // 24200 // Non-strict regular expression bug demonstration: 24201 // 24202 // this.nationalSignificantNumber : `111111111` (9 digits) 24203 // 24204 // pattern : (\d{2})(\d{3,4})(\d{4}) 24205 // format : `$1 $2 $3` 24206 // digits : `9999999999` (10 digits) 24207 // 24208 // '9999999999'.replace(new RegExp(/(\d{2})(\d{3,4})(\d{4})/g), '$1 $2 $3') = "99 9999 9999" 24209 // 24210 // template : xx xxxx xxxx 24211 // 24212 // But the correct template in this case is `xx xxx xxxx`. 24213 // The template was generated incorrectly because of the 24214 // `{3,4}` variability in the `pattern`. 24215 // 24216 // The fix is, if `this.nationalSignificantNumber` has already sufficient length 24217 // to satisfy the `pattern` completely then `this.nationalSignificantNumber` 24218 // is used instead of `digits`. 24219 24220 var strictPattern = new RegExp('^' + pattern + '$'); 24221 var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\d/g, DUMMY_DIGIT); 24222 24223 // If `this.nationalSignificantNumber` has already sufficient length 24224 // to satisfy the `pattern` completely then use it 24225 // instead of `digits`. 24226 if (strictPattern.test(nationalNumberDummyDigits)) { 24227 digits = nationalNumberDummyDigits; 24228 } 24229 var numberFormat = this.getFormatFormat(format, international); 24230 var nationalPrefixIncludedInTemplate; 24231 24232 // If a user did input a national prefix (and that's guaranteed), 24233 // and if a `format` does have a national prefix formatting rule, 24234 // then see if that national prefix formatting rule 24235 // prepends exactly the same national prefix the user has input. 24236 // If that's the case, then use the `format` with the national prefix formatting rule. 24237 // Otherwise, use the `format` without the national prefix formatting rule, 24238 // and prepend a national prefix manually to it. 24239 if (this.shouldTryNationalPrefixFormattingRule(format, { 24240 international: international, 24241 nationalPrefix: nationalPrefix 24242 })) { 24243 var numberFormatWithNationalPrefix = numberFormat.replace(_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_4__.FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()); 24244 // If `national_prefix_formatting_rule` of a `format` simply prepends 24245 // national prefix at the start of a national (significant) number, 24246 // then such formatting can be used with `AsYouType` formatter. 24247 // There seems to be no `else` case: everywhere in metadata, 24248 // national prefix formatting rule is national prefix + $1, 24249 // or `($1)`, in which case such format isn't even considered 24250 // when the user has input a national prefix. 24251 /* istanbul ignore else */ 24252 if ((0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__["default"])(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__["default"])('$1')) { 24253 numberFormat = numberFormatWithNationalPrefix; 24254 nationalPrefixIncludedInTemplate = true; 24255 // Replace all digits of the national prefix in the formatting template 24256 // with `DIGIT_PLACEHOLDER`s. 24257 if (nationalPrefix) { 24258 var i = nationalPrefix.length; 24259 while (i > 0) { 24260 numberFormat = numberFormat.replace(/\d/, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER); 24261 i--; 24262 } 24263 } 24264 } 24265 } 24266 24267 // Generate formatting template for this phone number format. 24268 var template = digits 24269 // Format the dummy phone number according to the format. 24270 .replace(new RegExp(pattern), numberFormat) 24271 // Replace each dummy digit with a DIGIT_PLACEHOLDER. 24272 .replace(new RegExp(DUMMY_DIGIT, 'g'), _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER); 24273 24274 // If a prefix of a national (significant) number is not as simple 24275 // as just a basic national prefix, then just prepend such prefix 24276 // before the national (significant) number, optionally spacing 24277 // the two with a whitespace. 24278 if (!nationalPrefixIncludedInTemplate) { 24279 if (prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) { 24280 // Prepend the prefix to the template manually. 24281 template = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix.length) + ' ' + template; 24282 } else if (nationalPrefix) { 24283 // Prepend national prefix to the template manually. 24284 template = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template; 24285 } 24286 } 24287 if (international) { 24288 template = (0,_helpers_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_6__["default"])(template); 24289 } 24290 return template; 24291 } 24292 }, { 24293 key: "formatNextNationalNumberDigits", 24294 value: function formatNextNationalNumberDigits(digits) { 24295 var result = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.populateTemplateWithDigits)(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits); 24296 if (!result) { 24297 // Reset the format. 24298 this.resetFormat(); 24299 return; 24300 } 24301 this.populatedNationalNumberTemplate = result[0]; 24302 this.populatedNationalNumberTemplatePosition = result[1]; 24303 24304 // Return the formatted phone number so far. 24305 return (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.cutAndStripNonPairedParens)(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1); 24306 24307 // The old way which was good for `input-format` but is not so good 24308 // for `react-phone-number-input`'s default input (`InputBasic`). 24309 // return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1) 24310 // .replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ') 24311 } 24312 }, { 24313 key: "shouldTryNationalPrefixFormattingRule", 24314 value: function shouldTryNationalPrefixFormattingRule(format, _ref5) { 24315 var international = _ref5.international, 24316 nationalPrefix = _ref5.nationalPrefix; 24317 if (format.nationalPrefixFormattingRule()) { 24318 // In some countries, `national_prefix_formatting_rule` is `($1)`, 24319 // so it applies even if the user hasn't input a national prefix. 24320 // `format.usesNationalPrefix()` detects such cases. 24321 var usesNationalPrefix = format.usesNationalPrefix(); 24322 if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) { 24323 return true; 24324 } 24325 } 24326 } 24327 }]); 24328}(); 24329 24330//# sourceMappingURL=AsYouTypeFormatter.js.map 24331 24332/***/ }), 24333
vendor: 5,830 bytes, lines 24334-24455
24334/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js": 24335/*!************************************************************************!*\ 24336 !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js ***! 24337 \************************************************************************/ 24338/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 24339 24340"use strict"; 24341__webpack_require__.r(__webpack_exports__); 24342/* harmony export */ __webpack_require__.d(__webpack_exports__, { 24343/* harmony export */ DIGIT_PLACEHOLDER: function() { return /* binding */ DIGIT_PLACEHOLDER; }, 24344/* harmony export */ closeNonPairedParens: function() { return /* binding */ closeNonPairedParens; }, 24345/* harmony export */ countOccurences: function() { return /* binding */ countOccurences; }, 24346/* harmony export */ cutAndStripNonPairedParens: function() { return /* binding */ cutAndStripNonPairedParens; }, 24347/* harmony export */ populateTemplateWithDigits: function() { return /* binding */ populateTemplateWithDigits; }, 24348/* harmony export */ repeat: function() { return /* binding */ repeat; }, 24349/* harmony export */ stripNonPairedParens: function() { return /* binding */ stripNonPairedParens; } 24350/* harmony export */ }); 24351function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 24352function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 24353function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 24354// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`. 24355var DIGIT_PLACEHOLDER = 'x'; // '\u2008' (punctuation space) 24356var DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER); 24357 24358// Counts all occurences of a symbol in a string. 24359// Unicode-unsafe (because using `.split()`). 24360function countOccurences(symbol, string) { 24361 var count = 0; 24362 // Using `.split('')` to iterate through a string here 24363 // to avoid requiring `Symbol.iterator` polyfill. 24364 // `.split('')` is generally not safe for Unicode, 24365 // but in this particular case for counting brackets it is safe. 24366 // for (const character of string) 24367 for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) { 24368 var character = _step.value; 24369 if (character === symbol) { 24370 count++; 24371 } 24372 } 24373 return count; 24374} 24375 24376// Repeats a string (or a symbol) N times. 24377// http://stackoverflow.com/questions/202605/repeat-string-javascript 24378function repeat(string, times) { 24379 if (times < 1) { 24380 return ''; 24381 } 24382 var result = ''; 24383 while (times > 1) { 24384 if (times & 1) { 24385 result += string; 24386 } 24387 times >>= 1; 24388 string += string; 24389 } 24390 return result + string; 24391} 24392function cutAndStripNonPairedParens(string, cutBeforeIndex) { 24393 if (string[cutBeforeIndex] === ')') { 24394 cutBeforeIndex++; 24395 } 24396 return stripNonPairedParens(string.slice(0, cutBeforeIndex)); 24397} 24398function closeNonPairedParens(template, cut_before) { 24399 var retained_template = template.slice(0, cut_before); 24400 var opening_braces = countOccurences('(', retained_template); 24401 var closing_braces = countOccurences(')', retained_template); 24402 var dangling_braces = opening_braces - closing_braces; 24403 while (dangling_braces > 0 && cut_before < template.length) { 24404 if (template[cut_before] === ')') { 24405 dangling_braces--; 24406 } 24407 cut_before++; 24408 } 24409 return template.slice(0, cut_before); 24410} 24411function stripNonPairedParens(string) { 24412 var dangling_braces = []; 24413 var i = 0; 24414 while (i < string.length) { 24415 if (string[i] === '(') { 24416 dangling_braces.push(i); 24417 } else if (string[i] === ')') { 24418 dangling_braces.pop(); 24419 } 24420 i++; 24421 } 24422 var start = 0; 24423 var cleared_string = ''; 24424 dangling_braces.push(string.length); 24425 for (var _i = 0, _dangling_braces = dangling_braces; _i < _dangling_braces.length; _i++) { 24426 var index = _dangling_braces[_i]; 24427 cleared_string += string.slice(start, index); 24428 start = index + 1; 24429 } 24430 return cleared_string; 24431} 24432function populateTemplateWithDigits(template, position, digits) { 24433 // Using `.split('')` to iterate through a string here 24434 // to avoid requiring `Symbol.iterator` polyfill. 24435 // `.split('')` is generally not safe for Unicode, 24436 // but in this particular case for `digits` it is safe. 24437 // for (const digit of digits) 24438 for (var _iterator2 = _createForOfIteratorHelperLoose(digits.split('')), _step2; !(_step2 = _iterator2()).done;) { 24439 var digit = _step2.value; 24440 // If there is room for more digits in current `template`, 24441 // then set the next digit in the `template`, 24442 // and return the formatted digits so far. 24443 // If more digits are entered than the current format could handle. 24444 if (template.slice(position + 1).search(DIGIT_PLACEHOLDER_MATCHER) < 0) { 24445 return; 24446 } 24447 position = template.search(DIGIT_PLACEHOLDER_MATCHER); 24448 template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit); 24449 } 24450 return [template, position]; 24451} 24452//# sourceMappingURL=AsYouTypeFormatter.util.js.map 24453 24454/***/ }), 24455
vendor: 26,990 bytes, lines 24456-24952
24456/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeParser.js": 24457/*!****************************************************************!*\ 24458 !*** ../node_modules/libphonenumber-js/es6/AsYouTypeParser.js ***! 24459 \****************************************************************/ 24460/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 24461 24462"use strict"; 24463__webpack_require__.r(__webpack_exports__); 24464/* harmony export */ __webpack_require__.d(__webpack_exports__, { 24465/* harmony export */ "default": function() { return /* binding */ AsYouTypeParser; }, 24466/* harmony export */ extractFormattedDigitsAndPlus: function() { return /* binding */ extractFormattedDigitsAndPlus; } 24467/* harmony export */ }); 24468/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js"); 24469/* harmony import */ var _helpers_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js */ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js"); 24470/* harmony import */ var _helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/extractNationalNumberFromPossiblyIncompleteNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js"); 24471/* harmony import */ var _helpers_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/stripIddPrefix.js */ "../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js"); 24472/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/parseDigits.js */ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js"); 24473/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ "../node_modules/libphonenumber-js/es6/constants.js"); 24474function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 24475function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } 24476function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 24477function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 24478function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 24479function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } 24480function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } 24481function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 24482function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 24483function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 24484function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 24485function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 24486 24487 24488 24489 24490 24491 24492var VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+'; 24493var VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN = new RegExp('^' + VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART + '$', 'i'); 24494var VALID_FORMATTED_PHONE_NUMBER_PART = '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.PLUS_CHARS + ']' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']*' + '|' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+' + ')'; 24495var AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+' + '.*' + '$'); 24496 24497// Tests whether `national_prefix_for_parsing` could match 24498// different national prefixes. 24499// Matches anything that's not a digit or a square bracket. 24500var COMPLEX_NATIONAL_PREFIX = /[^\d\[\]]/; 24501var AsYouTypeParser = /*#__PURE__*/function () { 24502 function AsYouTypeParser(_ref) { 24503 var defaultCountry = _ref.defaultCountry, 24504 defaultCallingCode = _ref.defaultCallingCode, 24505 metadata = _ref.metadata, 24506 onNationalSignificantNumberChange = _ref.onNationalSignificantNumberChange; 24507 _classCallCheck(this, AsYouTypeParser); 24508 this.defaultCountry = defaultCountry; 24509 this.defaultCallingCode = defaultCallingCode; 24510 this.metadata = metadata; 24511 this.onNationalSignificantNumberChange = onNationalSignificantNumberChange; 24512 } 24513 return _createClass(AsYouTypeParser, [{ 24514 key: "input", 24515 value: function input(text, state) { 24516 var _extractFormattedDigi = extractFormattedDigitsAndPlus(text), 24517 _extractFormattedDigi2 = _slicedToArray(_extractFormattedDigi, 2), 24518 formattedDigits = _extractFormattedDigi2[0], 24519 hasPlus = _extractFormattedDigi2[1]; 24520 var digits = (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_4__["default"])(formattedDigits); 24521 // Checks for a special case: just a leading `+` has been entered. 24522 var justLeadingPlus; 24523 if (hasPlus) { 24524 if (!state.digits) { 24525 state.startInternationalNumber(undefined, undefined); 24526 if (!digits) { 24527 justLeadingPlus = true; 24528 } 24529 } 24530 } 24531 if (digits) { 24532 this.inputDigits(digits, state); 24533 } 24534 return { 24535 digits: digits, 24536 justLeadingPlus: justLeadingPlus 24537 }; 24538 } 24539 24540 /** 24541 * Inputs "next" phone number digits. 24542 * @param {string} digits 24543 * @return {string} [formattedNumber] Formatted national phone number (if it can be formatted at this stage). Returning `undefined` means "don't format the national phone number at this stage". 24544 */ 24545 }, { 24546 key: "inputDigits", 24547 value: function inputDigits(nextDigits, state) { 24548 var digits = state.digits; 24549 var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3; 24550 24551 // Append phone number digits. 24552 state.appendDigits(nextDigits); 24553 24554 // Attempt to extract IDD prefix: 24555 // Some users input their phone number in international format, 24556 // but in an "out-of-country" dialing format instead of using the leading `+`. 24557 // https://github.com/catamphetamine/libphonenumber-js/issues/185 24558 // Detect such numbers as soon as there're at least 3 digits. 24559 // Google's library attempts to extract IDD prefix at 3 digits, 24560 // so this library just copies that behavior. 24561 // I guess that's because the most commot IDD prefixes are 24562 // `00` (Europe) and `011` (US). 24563 // There exist really long IDD prefixes too: 24564 // for example, in Australia the default IDD prefix is `0011`, 24565 // and it could even be as long as `14880011`. 24566 // An IDD prefix is extracted here, and then every time when 24567 // there's a new digit and the number couldn't be formatted. 24568 if (hasReceivedThreeLeadingDigits) { 24569 this.extractIddPrefix(state); 24570 } 24571 if (this.isWaitingForCountryCallingCode(state)) { 24572 if (!this.extractCountryCallingCode(state)) { 24573 return; 24574 } 24575 } else { 24576 state.appendNationalSignificantNumberDigits(nextDigits); 24577 } 24578 24579 // If a phone number is being input in international format, 24580 // then it's not valid for it to have a national prefix. 24581 // Still, some people incorrectly input such numbers with a national prefix. 24582 // In such cases, only attempt to strip a national prefix if the number becomes too long. 24583 // (but that is done later, not here) 24584 if (!state.international) { 24585 if (!this.hasExtractedNationalSignificantNumber) { 24586 this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) { 24587 return state.update(stateUpdate); 24588 }); 24589 } 24590 } 24591 } 24592 }, { 24593 key: "isWaitingForCountryCallingCode", 24594 value: function isWaitingForCountryCallingCode(_ref2) { 24595 var international = _ref2.international, 24596 callingCode = _ref2.callingCode; 24597 return international && !callingCode; 24598 } 24599 24600 // Extracts a country calling code from a number 24601 // being entered in internatonal format. 24602 }, { 24603 key: "extractCountryCallingCode", 24604 value: function extractCountryCallingCode(state) { 24605 var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_0__["default"])('+' + state.getDigitsWithoutInternationalPrefix(), state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata), 24606 countryCallingCode = _extractCountryCallin.countryCallingCode, 24607 number = _extractCountryCallin.number; 24608 if (countryCallingCode) { 24609 state.setCallingCode(countryCallingCode); 24610 state.update({ 24611 nationalSignificantNumber: number 24612 }); 24613 return true; 24614 } 24615 } 24616 }, { 24617 key: "reset", 24618 value: function reset(numberingPlan) { 24619 if (numberingPlan) { 24620 this.hasSelectedNumberingPlan = true; 24621 var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing(); 24622 this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing); 24623 } else { 24624 this.hasSelectedNumberingPlan = undefined; 24625 this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined; 24626 } 24627 } 24628 24629 /** 24630 * Extracts a national (significant) number from user input. 24631 * Google's library is different in that it only applies `national_prefix_for_parsing` 24632 * and doesn't apply `national_prefix_transform_rule` after that. 24633 * https://github.com/google/libphonenumber/blob/a3d70b0487875475e6ad659af404943211d26456/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L539 24634 * @return {boolean} [extracted] 24635 */ 24636 }, { 24637 key: "extractNationalSignificantNumber", 24638 value: function extractNationalSignificantNumber(nationalDigits, setState) { 24639 if (!this.hasSelectedNumberingPlan) { 24640 return; 24641 } 24642 var _extractNationalNumbe = (0,_helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__["default"])(nationalDigits, this.metadata), 24643 nationalPrefix = _extractNationalNumbe.nationalPrefix, 24644 nationalNumber = _extractNationalNumbe.nationalNumber, 24645 carrierCode = _extractNationalNumbe.carrierCode; 24646 if (nationalNumber === nationalDigits) { 24647 return; 24648 } 24649 this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState); 24650 return true; 24651 } 24652 24653 /** 24654 * In Google's code this function is called "attempt to extract longer NDD". 24655 * "Some national prefixes are a substring of others", they say. 24656 * @return {boolean} [result] â Returns `true` if extracting a national prefix produced different results from what they were. 24657 */ 24658 }, { 24659 key: "extractAnotherNationalSignificantNumber", 24660 value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) { 24661 if (!this.hasExtractedNationalSignificantNumber) { 24662 return this.extractNationalSignificantNumber(nationalDigits, setState); 24663 } 24664 if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) { 24665 return; 24666 } 24667 var _extractNationalNumbe2 = (0,_helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__["default"])(nationalDigits, this.metadata), 24668 nationalPrefix = _extractNationalNumbe2.nationalPrefix, 24669 nationalNumber = _extractNationalNumbe2.nationalNumber, 24670 carrierCode = _extractNationalNumbe2.carrierCode; 24671 // If a national prefix has been extracted previously, 24672 // then it's always extracted as additional digits are added. 24673 // That's assuming `extractNationalNumberFromPossiblyIncompleteNumber()` 24674 // doesn't do anything different from what it currently does. 24675 // So, just in case, here's this check, though it doesn't occur. 24676 /* istanbul ignore if */ 24677 if (nationalNumber === prevNationalSignificantNumber) { 24678 return; 24679 } 24680 this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState); 24681 return true; 24682 } 24683 }, { 24684 key: "onExtractedNationalNumber", 24685 value: function onExtractedNationalNumber(nationalPrefix, carrierCode, nationalSignificantNumber, nationalDigits, setState) { 24686 // Tells if the parsed national (significant) number is present as-is in the input string. 24687 // For example, when inputting "0343515551212999" Argentinian mobile number, 24688 // the parsed national (significant) number is "93435551212999". 24689 // There, one can see how it stripped "0" national prefix and prepended a "9", 24690 // because that's how it is instructed to do in Argentina's metadata. 24691 // So in the described example, the parsed national (significant) number is not present 24692 // as-is in the input string. Instead, it's "modified" in the input string. 24693 // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule 24694 var nationalSignificantNumberIsModified = false; 24695 24696 // In some countries, a phone number could have a prefix that is not a "national prefix" 24697 // but rather some other type of "utility" prefix. 24698 // For example, when calling within Australia, one could prepend `1831` prefix to hide 24699 // caller's phone number. 24700 // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule 24701 var prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix; 24702 24703 // `nationalSignificantNumber` could be empty. In that case, `.lastIndexOf()` still works correctly. 24704 var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber); 24705 24706 // If the parsed national (significant) number is the last substring of the `nationalDigits`, 24707 // then it means that it's present as-is in the input string. 24708 // In any other case, the parsed national (significant) number is "modified" in the input string. 24709 if (nationalSignificantNumberIndex < 0 || nationalSignificantNumberIndex !== nationalDigits.length - nationalSignificantNumber.length) { 24710 nationalSignificantNumberIsModified = true; 24711 } else { 24712 var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex); 24713 // When national (significant) number is equal to the `nationalDigits`, 24714 // this `onExtractedNationalNumber()` function simply doesn't get called. 24715 // This means that at this point, `prefixBeforeNationalNumber` is always non-empty. 24716 // Still, added this `if` check just to prevent potential silly bugs. 24717 // The `!prefixBeforeNationalNumber` case is not really testable 24718 // so this line is exluded from the code coverage. 24719 /* istanbul ignore if */ 24720 if (prefixBeforeNationalNumber) { 24721 if (prefixBeforeNationalNumber !== nationalPrefix) { 24722 prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = prefixBeforeNationalNumber; 24723 } 24724 } 24725 } 24726 setState({ 24727 nationalPrefix: nationalPrefix, 24728 carrierCode: carrierCode, 24729 nationalSignificantNumber: nationalSignificantNumber, 24730 nationalSignificantNumberIsModified: nationalSignificantNumberIsModified, 24731 prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix: prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix 24732 }); 24733 // `onExtractedNationalNumber()` is only called when 24734 // the national (significant) number actually did change. 24735 this.hasExtractedNationalSignificantNumber = true; 24736 this.onNationalSignificantNumberChange(); 24737 } 24738 }, { 24739 key: "reExtractNationalSignificantNumber", 24740 value: function reExtractNationalSignificantNumber(state) { 24741 // Attempt to extract a national prefix. 24742 // 24743 // Some people incorrectly input national prefix 24744 // in an international phone number. 24745 // For example, some people write British phone numbers as `+44(0)...`. 24746 // 24747 // Also, in some rare cases, it is valid for a national prefix 24748 // to be a part of an international phone number. 24749 // For example, mobile phone numbers in Mexico are supposed to be 24750 // dialled internationally using a `1` national prefix, 24751 // so the national prefix will be part of an international number. 24752 // 24753 // Quote from: 24754 // https://www.mexperience.com/dialing-cell-phones-in-mexico/ 24755 // 24756 // "Dialing a Mexican cell phone from abroad 24757 // When you are calling a cell phone number in Mexico from outside Mexico, 24758 // itâs necessary to dial an additional â1â after Mexicoâs country code 24759 // (which is â52â) and before the area code. 24760 // You also ignore the 045, and simply dial the area code and the 24761 // cell phoneâs number. 24762 // 24763 // If you donât add the â1â, youâll receive a recorded announcement 24764 // asking you to redial using it. 24765 // 24766 // For example, if you are calling from the USA to a cell phone 24767 // in Mexico City, you would dial +52 â 1 â 55 â 1234 5678. 24768 // (Note that this is different to calling a land line in Mexico City 24769 // from abroad, where the number dialed would be +52 â 55 â 1234 5678)". 24770 // 24771 // Google's demo output: 24772 // https://libphonenumber.appspot.com/phonenumberparser?number=%2b5215512345678&country=MX 24773 // 24774 if (this.extractAnotherNationalSignificantNumber(state.getNationalDigits(), state.nationalSignificantNumber, function (stateUpdate) { 24775 return state.update(stateUpdate); 24776 })) { 24777 return true; 24778 } 24779 // If no format matches the phone number, then it could be 24780 // "a really long IDD" (quote from a comment in Google's library). 24781 // An IDD prefix is first extracted when the user has entered at least 3 digits, 24782 // and then here â every time when there's a new digit and the number 24783 // couldn't be formatted. 24784 // For example, in Australia the default IDD prefix is `0011`, 24785 // and it could even be as long as `14880011`. 24786 // 24787 // Could also check `!hasReceivedThreeLeadingDigits` here 24788 // to filter out the case when this check duplicates the one 24789 // already performed when there're 3 leading digits, 24790 // but it's not a big deal, and in most cases there 24791 // will be a suitable `format` when there're 3 leading digits. 24792 // 24793 if (this.extractIddPrefix(state)) { 24794 this.extractCallingCodeAndNationalSignificantNumber(state); 24795 return true; 24796 } 24797 // Google's AsYouType formatter supports sort of an "autocorrection" feature 24798 // when it "autocorrects" numbers that have been input for a country 24799 // with that country's calling code. 24800 // Such "autocorrection" feature looks weird, but different people have been requesting it: 24801 // https://github.com/catamphetamine/libphonenumber-js/issues/376 24802 // https://github.com/catamphetamine/libphonenumber-js/issues/375 24803 // https://github.com/catamphetamine/libphonenumber-js/issues/316 24804 if (this.fixMissingPlus(state)) { 24805 this.extractCallingCodeAndNationalSignificantNumber(state); 24806 return true; 24807 } 24808 } 24809 }, { 24810 key: "extractIddPrefix", 24811 value: function extractIddPrefix(state) { 24812 // An IDD prefix can't be present in a number written with a `+`. 24813 // Also, don't re-extract an IDD prefix if has already been extracted. 24814 var international = state.international, 24815 IDDPrefix = state.IDDPrefix, 24816 digits = state.digits, 24817 nationalSignificantNumber = state.nationalSignificantNumber; 24818 if (international || IDDPrefix) { 24819 return; 24820 } 24821 // Some users input their phone number in "out-of-country" 24822 // dialing format instead of using the leading `+`. 24823 // https://github.com/catamphetamine/libphonenumber-js/issues/185 24824 // Detect such numbers. 24825 var numberWithoutIDD = (0,_helpers_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__["default"])(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata); 24826 if (numberWithoutIDD !== undefined && numberWithoutIDD !== digits) { 24827 // If an IDD prefix was stripped then convert the IDD-prefixed number 24828 // to international number for subsequent parsing. 24829 state.update({ 24830 IDDPrefix: digits.slice(0, digits.length - numberWithoutIDD.length) 24831 }); 24832 this.startInternationalNumber(state, { 24833 country: undefined, 24834 callingCode: undefined 24835 }); 24836 return true; 24837 } 24838 } 24839 }, { 24840 key: "fixMissingPlus", 24841 value: function fixMissingPlus(state) { 24842 if (!state.international) { 24843 var _extractCountryCallin2 = (0,_helpers_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.digits, state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata), 24844 newCallingCode = _extractCountryCallin2.countryCallingCode; 24845 if (newCallingCode) { 24846 state.update({ 24847 missingPlus: true 24848 }); 24849 this.startInternationalNumber(state, { 24850 country: state.country, 24851 callingCode: newCallingCode 24852 }); 24853 return true; 24854 } 24855 } 24856 } 24857 }, { 24858 key: "startInternationalNumber", 24859 value: function startInternationalNumber(state, _ref3) { 24860 var country = _ref3.country, 24861 callingCode = _ref3.callingCode; 24862 state.startInternationalNumber(country, callingCode); 24863 // If a national (significant) number has been extracted before, reset it. 24864 if (state.nationalSignificantNumber) { 24865 state.resetNationalSignificantNumber(); 24866 this.onNationalSignificantNumberChange(); 24867 this.hasExtractedNationalSignificantNumber = undefined; 24868 } 24869 } 24870 }, { 24871 key: "extractCallingCodeAndNationalSignificantNumber", 24872 value: function extractCallingCodeAndNationalSignificantNumber(state) { 24873 if (this.extractCountryCallingCode(state)) { 24874 // `this.extractCallingCode()` is currently called when the number 24875 // couldn't be formatted during the standard procedure. 24876 // Normally, the national prefix would be re-extracted 24877 // for an international number if such number couldn't be formatted, 24878 // but since it's already not able to be formatted, 24879 // there won't be yet another retry, so also extract national prefix here. 24880 this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) { 24881 return state.update(stateUpdate); 24882 }); 24883 } 24884 } 24885 }]); 24886}(); 24887/** 24888 * Extracts formatted phone number from text (if there's any). 24889 * @param {string} text 24890 * @return {string} [formattedPhoneNumber] 24891 */ 24892 24893function extractFormattedPhoneNumber(text) { 24894 // Attempt to extract a possible number from the string passed in. 24895 var startsAt = text.search(VALID_FORMATTED_PHONE_NUMBER_PART); 24896 if (startsAt < 0) { 24897 return; 24898 } 24899 // Trim everything to the left of the phone number. 24900 text = text.slice(startsAt); 24901 // Trim the `+`. 24902 var hasPlus; 24903 if (text[0] === '+') { 24904 hasPlus = true; 24905 text = text.slice('+'.length); 24906 } 24907 // Trim everything to the right of the phone number. 24908 text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, ''); 24909 // Re-add the previously trimmed `+`. 24910 if (hasPlus) { 24911 text = '+' + text; 24912 } 24913 return text; 24914} 24915 24916/** 24917 * Extracts formatted phone number digits (and a `+`) from text (if there're any). 24918 * @param {string} text 24919 * @return {any[]} 24920 */ 24921function _extractFormattedDigitsAndPlus(text) { 24922 // Extract a formatted phone number part from text. 24923 var extractedNumber = extractFormattedPhoneNumber(text) || ''; 24924 // Trim a `+`. 24925 if (extractedNumber[0] === '+') { 24926 return [extractedNumber.slice('+'.length), true]; 24927 } 24928 return [extractedNumber]; 24929} 24930 24931/** 24932 * Extracts formatted phone number digits (and a `+`) from text (if there're any). 24933 * @param {string} text 24934 * @return {any[]} 24935 */ 24936function extractFormattedDigitsAndPlus(text) { 24937 var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text), 24938 _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2), 24939 formattedDigits = _extractFormattedDigi4[0], 24940 hasPlus = _extractFormattedDigi4[1]; 24941 // If the extracted phone number part 24942 // can possibly be a part of some valid phone number 24943 // then parse phone number characters from a formatted phone number. 24944 if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) { 24945 formattedDigits = ''; 24946 } 24947 return [formattedDigits, hasPlus]; 24948} 24949//# sourceMappingURL=AsYouTypeParser.js.map 24950 24951/***/ }), 24952
vendor: 9,303 bytes, lines 24953-25100
24953/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeState.js": 24954/*!***************************************************************!*\ 24955 !*** ../node_modules/libphonenumber-js/es6/AsYouTypeState.js ***! 24956 \***************************************************************/ 24957/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 24958 24959"use strict"; 24960__webpack_require__.r(__webpack_exports__); 24961/* harmony export */ __webpack_require__.d(__webpack_exports__, { 24962/* harmony export */ "default": function() { return /* binding */ AsYouTypeState; } 24963/* harmony export */ }); 24964function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 24965function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 24966function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 24967function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 24968function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 24969function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 24970// This "state" object simply holds the state of the "AsYouType" parser: 24971// 24972// * `country?: string` â The exact country of the phone number, if it could be determined. 24973// When inputting a phone number in "international" format, it will derive the `country` from "country calling code" and the phone number digits. 24974// When inputting a phone number in "national" format, it will derive the `country` from `defaultCountry` that was specified when creating the `AsYouType` formatter. 24975// Sidenote: If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` flag was `true`, then for "non-geographic phone numbers" `state.country` would've been "001". 24976// * `callingCode?: string` â "Country calling code" that has been extracted from the input phone number. 24977// When inputting a phone number in "international" format, it will extract the "country calling code" from the digits that follow the "+" character. 24978// When inputting a phone number in "national" format, `callingCode` will be `undefined`. 24979// Sidenote: `state.callingCode` is therefore independent from `state.country` and there could be situations when `state.country` is defined by `state.callingCode` is not â that would be when inputting a phone number not in "international" format. 24980// * `digits: string` â Phone number digits that have been input so far, including the "+" character, if present. In case of inputting non-arabic digits, those will be converted to arabic ones. 24981// * `international: boolean` â Whether the phone number is being input in "international" format, i.e. with a "+" character. 24982// * `missingPlus: boolean` â Whether it's a phone number in "international" format that is missing the leading "+" character for some reason â apparently, Google thinks that it's a common mistake when inputting a phone number. 24983// * `IDDPrefix?: string` â An "IDD prefix", when the phone number is being input in an "out-of-country dialing" format. https://wikitravel.org/en/International_dialling_prefix 24984// * `carrierCode?: string` â A "carrier code", if the phone number contains it. Normally, those can only be present in Colombia or Brazil, and only when calling from mobile phones to fixed-line numbers. 24985// * `nationalPrefix?: string` â "National prefix", if present in the phone number input. 24986// * `nationalSignificantNumber?: string` â National (significant) number digits that have been input so far. 24987// * `nationalSignificantNumberIsModified: boolean` â Tells if the parsed national (significant) number is present as-is in the input string. For example, when inputting "0343515551212999" Argentinian mobile number, the parsed national (significant) number is "93435551212999". There, one can see how it stripped "0" national prefix and prepended a "9", because that's how it is instructed to do in Argentina's metadata. So in the described example, the parsed national (significant) number is not present as-is in the input string. Instead, it's "modified" in the input string. https://gitlab.com/caamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule 24988// * `prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix?: string` â In some countries, a phone number could have a prefix that is not a "national prefix" but rather some other type of "utility" prefix. 24989// For example, when calling within Australia, one could prepend `1831` prefix to hide caller's phone number. 24990// https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule 24991// 24992var AsYouTypeState = /*#__PURE__*/function () { 24993 function AsYouTypeState(_ref) { 24994 var onCountryChange = _ref.onCountryChange, 24995 onCallingCodeChange = _ref.onCallingCodeChange; 24996 _classCallCheck(this, AsYouTypeState); 24997 this.onCountryChange = onCountryChange; 24998 this.onCallingCodeChange = onCallingCodeChange; 24999 } 25000 return _createClass(AsYouTypeState, [{ 25001 key: "reset", 25002 value: function reset(_ref2) { 25003 var country = _ref2.country, 25004 callingCode = _ref2.callingCode; 25005 this.international = false; 25006 this.missingPlus = false; 25007 this.IDDPrefix = undefined; 25008 this.callingCode = undefined; 25009 this.digits = ''; 25010 this.resetNationalSignificantNumber(); 25011 this.initCountryAndCallingCode(country, callingCode); 25012 } 25013 }, { 25014 key: "resetNationalSignificantNumber", 25015 value: function resetNationalSignificantNumber() { 25016 this.nationalSignificantNumber = this.getNationalDigits(); 25017 this.nationalSignificantNumberIsModified = false; 25018 this.nationalPrefix = undefined; 25019 this.carrierCode = undefined; 25020 this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = undefined; 25021 } 25022 }, { 25023 key: "update", 25024 value: function update(properties) { 25025 for (var _i = 0, _Object$keys = Object.keys(properties); _i < _Object$keys.length; _i++) { 25026 var key = _Object$keys[_i]; 25027 this[key] = properties[key]; 25028 } 25029 } 25030 }, { 25031 key: "initCountryAndCallingCode", 25032 value: function initCountryAndCallingCode(country, callingCode) { 25033 this.setCountry(country); 25034 this.setCallingCode(callingCode); 25035 } 25036 }, { 25037 key: "setCountry", 25038 value: function setCountry(country) { 25039 this.country = country; 25040 this.onCountryChange(country); 25041 } 25042 }, { 25043 key: "setCallingCode", 25044 value: function setCallingCode(callingCode) { 25045 this.callingCode = callingCode; 25046 this.onCallingCodeChange(callingCode, this.country); 25047 } 25048 }, { 25049 key: "startInternationalNumber", 25050 value: function startInternationalNumber(country, callingCode) { 25051 // Prepend the `+` to parsed input. 25052 this.international = true; 25053 // If a default country was set then reset it 25054 // because an explicitly international phone 25055 // number is being entered. 25056 this.initCountryAndCallingCode(country, callingCode); 25057 } 25058 }, { 25059 key: "appendDigits", 25060 value: function appendDigits(nextDigits) { 25061 this.digits += nextDigits; 25062 } 25063 }, { 25064 key: "appendNationalSignificantNumberDigits", 25065 value: function appendNationalSignificantNumberDigits(nextDigits) { 25066 this.nationalSignificantNumber += nextDigits; 25067 } 25068 25069 /** 25070 * Returns the part of `this.digits` that corresponds to the national number. 25071 * Basically, all digits that have been input by the user, except for the 25072 * international prefix and the country calling code part 25073 * (if the number is an international one). 25074 * @return {string} 25075 */ 25076 }, { 25077 key: "getNationalDigits", 25078 value: function getNationalDigits() { 25079 if (this.international) { 25080 return this.digits.slice((this.IDDPrefix ? this.IDDPrefix.length : 0) + (this.callingCode ? this.callingCode.length : 0)); 25081 } 25082 return this.digits; 25083 } 25084 }, { 25085 key: "getDigitsWithoutInternationalPrefix", 25086 value: function getDigitsWithoutInternationalPrefix() { 25087 if (this.international) { 25088 if (this.IDDPrefix) { 25089 return this.digits.slice(this.IDDPrefix.length); 25090 } 25091 } 25092 return this.digits; 25093 } 25094 }]); 25095}(); 25096 25097//# sourceMappingURL=AsYouTypeState.js.map 25098 25099/***/ }), 25100
vendor: 11,477 bytes, lines 25101-25322
25101/***/ "../node_modules/libphonenumber-js/es6/PhoneNumber.js": 25102/*!************************************************************!*\ 25103 !*** ../node_modules/libphonenumber-js/es6/PhoneNumber.js ***! 25104 \************************************************************/ 25105/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 25106 25107"use strict"; 25108__webpack_require__.r(__webpack_exports__); 25109/* harmony export */ __webpack_require__.d(__webpack_exports__, { 25110/* harmony export */ "default": function() { return /* binding */ PhoneNumber; } 25111/* harmony export */ }); 25112/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 25113/* harmony import */ var _isPossible_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isPossible.js */ "../node_modules/libphonenumber-js/es6/isPossible.js"); 25114/* harmony import */ var _isValid_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isValid.js */ "../node_modules/libphonenumber-js/es6/isValid.js"); 25115/* harmony import */ var _helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/getNumberType.js */ "../node_modules/libphonenumber-js/es6/helpers/getNumberType.js"); 25116/* harmony import */ var _helpers_getPossibleCountriesForNumber_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/getPossibleCountriesForNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js"); 25117/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js"); 25118/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/isObject.js */ "../node_modules/libphonenumber-js/es6/helpers/isObject.js"); 25119/* harmony import */ var _format_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./format.js */ "../node_modules/libphonenumber-js/es6/format.js"); 25120function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 25121function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } 25122function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } 25123function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } 25124function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 25125function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 25126function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 25127function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 25128function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 25129 25130 25131 25132 25133 25134 25135 25136 25137var USE_NON_GEOGRAPHIC_COUNTRY_CODE = false; 25138var PhoneNumber = /*#__PURE__*/function () { 25139 /** 25140 * @param {string} countryOrCountryCallingCode 25141 * @param {string} nationalNumber 25142 * @param {object} metadata â Metadata JSON 25143 * @return {PhoneNumber} 25144 */ 25145 function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) { 25146 _classCallCheck(this, PhoneNumber); 25147 // Validate `countryOrCountryCallingCode` argument. 25148 if (!countryOrCountryCallingCode) { 25149 throw new TypeError('First argument is required'); 25150 } 25151 if (typeof countryOrCountryCallingCode !== 'string') { 25152 throw new TypeError('First argument must be a string'); 25153 } 25154 25155 // In case of public API use: `constructor(number, metadata)`. 25156 // Transform the arguments from `constructor(number, metadata)` to 25157 // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`. 25158 if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) { 25159 throw new TypeError('`metadata` argument not passed'); 25160 } 25161 if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__["default"])(nationalNumber) && (0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__["default"])(nationalNumber.countries)) { 25162 metadata = nationalNumber; 25163 var e164Number = countryOrCountryCallingCode; 25164 if (!E164_NUMBER_REGEXP.test(e164Number)) { 25165 throw new Error('Invalid `number` argument passed: must consist of a "+" followed by digits'); 25166 } 25167 var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_5__["default"])(e164Number, undefined, undefined, undefined, metadata), 25168 _countryCallingCode = _extractCountryCallin.countryCallingCode, 25169 number = _extractCountryCallin.number; 25170 nationalNumber = number; 25171 countryOrCountryCallingCode = _countryCallingCode; 25172 if (!nationalNumber) { 25173 throw new Error('Invalid `number` argument passed: too short'); 25174 } 25175 } 25176 25177 // Validate `nationalNumber` argument. 25178 if (!nationalNumber) { 25179 throw new TypeError('`nationalNumber` argument is required'); 25180 } 25181 if (typeof nationalNumber !== 'string') { 25182 throw new TypeError('`nationalNumber` argument must be a string'); 25183 } 25184 25185 // Validate `metadata` argument. 25186 (0,_metadata_js__WEBPACK_IMPORTED_MODULE_0__.validateMetadata)(metadata); 25187 25188 // Initialize properties. 25189 var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata), 25190 country = _getCountryAndCountry.country, 25191 countryCallingCode = _getCountryAndCountry.countryCallingCode; 25192 this.country = country; 25193 this.countryCallingCode = countryCallingCode; 25194 this.nationalNumber = nationalNumber; 25195 this.number = '+' + this.countryCallingCode + this.nationalNumber; 25196 // Exclude `metadata` property output from `PhoneNumber.toString()` 25197 // so that it doesn't clutter the console output of Node.js. 25198 // Previously, when Node.js did `console.log(new PhoneNumber(...))`, 25199 // it would output the whole internal structure of the `metadata` object. 25200 this.getMetadata = function () { 25201 return metadata; 25202 }; 25203 } 25204 return _createClass(PhoneNumber, [{ 25205 key: "setExt", 25206 value: function setExt(ext) { 25207 this.ext = ext; 25208 } 25209 }, { 25210 key: "getPossibleCountries", 25211 value: function getPossibleCountries() { 25212 if (this.country) { 25213 return [this.country]; 25214 } 25215 return (0,_helpers_getPossibleCountriesForNumber_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this.countryCallingCode, this.nationalNumber, this.getMetadata()); 25216 } 25217 }, { 25218 key: "isPossible", 25219 value: function isPossible() { 25220 return (0,_isPossible_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this, { 25221 v2: true 25222 }, this.getMetadata()); 25223 } 25224 }, { 25225 key: "isValid", 25226 value: function isValid() { 25227 return (0,_isValid_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this, { 25228 v2: true 25229 }, this.getMetadata()); 25230 } 25231 }, { 25232 key: "isNonGeographic", 25233 value: function isNonGeographic() { 25234 var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](this.getMetadata()); 25235 return metadata.isNonGeographicCallingCode(this.countryCallingCode); 25236 } 25237 }, { 25238 key: "isEqual", 25239 value: function isEqual(phoneNumber) { 25240 return this.number === phoneNumber.number && this.ext === phoneNumber.ext; 25241 } 25242 25243 // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`, 25244 // but later it was found out that it doesn't include the possible `TOO_SHORT` result 25245 // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`, 25246 // so eventually I simply commented out this method from the `PhoneNumber` class 25247 // and just left the `validatePhoneNumberLength()` function, even though that one would require 25248 // and additional step to also validate the actual country / calling code of the phone number. 25249 // validateLength() { 25250 // const metadata = new Metadata(this.getMetadata()) 25251 // metadata.selectNumberingPlan(this.countryCallingCode) 25252 // const result = checkNumberLength(this.nationalNumber, metadata) 25253 // if (result !== 'IS_POSSIBLE') { 25254 // return result 25255 // } 25256 // } 25257 }, { 25258 key: "getType", 25259 value: function getType() { 25260 return (0,_helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this, { 25261 v2: true 25262 }, this.getMetadata()); 25263 } 25264 }, { 25265 key: "format", 25266 value: function format(_format, options) { 25267 return (0,_format_js__WEBPACK_IMPORTED_MODULE_7__["default"])(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, { 25268 v2: true 25269 }) : { 25270 v2: true 25271 }, this.getMetadata()); 25272 } 25273 }, { 25274 key: "formatNational", 25275 value: function formatNational(options) { 25276 return this.format('NATIONAL', options); 25277 } 25278 }, { 25279 key: "formatInternational", 25280 value: function formatInternational(options) { 25281 return this.format('INTERNATIONAL', options); 25282 } 25283 }, { 25284 key: "getURI", 25285 value: function getURI(options) { 25286 return this.format('RFC3966', options); 25287 } 25288 }]); 25289}(); 25290 25291var isCountryCode = function isCountryCode(value) { 25292 return /^[A-Z]{2}$/.test(value); 25293}; 25294function getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) { 25295 var country; 25296 var countryCallingCode; 25297 var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadataJson); 25298 // If country code is passed then derive `countryCallingCode` from it. 25299 // Also store the country code as `.country`. 25300 if (isCountryCode(countryOrCountryCallingCode)) { 25301 country = countryOrCountryCallingCode; 25302 metadata.selectNumberingPlan(country); 25303 countryCallingCode = metadata.countryCallingCode(); 25304 } else { 25305 countryCallingCode = countryOrCountryCallingCode; 25306 /* istanbul ignore if */ 25307 if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) { 25308 if (metadata.isNonGeographicCallingCode(countryCallingCode)) { 25309 country = '001'; 25310 } 25311 } 25312 } 25313 return { 25314 country: country, 25315 countryCallingCode: countryCallingCode 25316 }; 25317} 25318var E164_NUMBER_REGEXP = /^\+\d+$/; 25319//# sourceMappingURL=PhoneNumber.js.map 25320 25321/***/ }), 25322
vendor: 2,572 bytes, lines 25323-25373
25323/***/ "../node_modules/libphonenumber-js/es6/constants.js": 25324/*!**********************************************************!*\ 25325 !*** ../node_modules/libphonenumber-js/es6/constants.js ***! 25326 \**********************************************************/ 25327/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 25328 25329"use strict"; 25330__webpack_require__.r(__webpack_exports__); 25331/* harmony export */ __webpack_require__.d(__webpack_exports__, { 25332/* harmony export */ MAX_LENGTH_COUNTRY_CODE: function() { return /* binding */ MAX_LENGTH_COUNTRY_CODE; }, 25333/* harmony export */ MAX_LENGTH_FOR_NSN: function() { return /* binding */ MAX_LENGTH_FOR_NSN; }, 25334/* harmony export */ MIN_LENGTH_FOR_NSN: function() { return /* binding */ MIN_LENGTH_FOR_NSN; }, 25335/* harmony export */ PLUS_CHARS: function() { return /* binding */ PLUS_CHARS; }, 25336/* harmony export */ VALID_DIGITS: function() { return /* binding */ VALID_DIGITS; }, 25337/* harmony export */ VALID_PUNCTUATION: function() { return /* binding */ VALID_PUNCTUATION; }, 25338/* harmony export */ WHITESPACE: function() { return /* binding */ WHITESPACE; } 25339/* harmony export */ }); 25340// The minimum length of the national significant number. 25341var MIN_LENGTH_FOR_NSN = 2; 25342 25343// The ITU says the maximum length should be 15, 25344// but one can find longer numbers in Germany. 25345var MAX_LENGTH_FOR_NSN = 17; 25346 25347// The maximum length of the country calling code. 25348var MAX_LENGTH_COUNTRY_CODE = 3; 25349 25350// Digits accepted in phone numbers 25351// (ascii, fullwidth, arabic-indic, and eastern arabic digits). 25352var VALID_DIGITS = "0-9\uFF10-\uFF19\u0660-\u0669\u06F0-\u06F9"; 25353 25354// `DASHES` will be right after the opening square bracket of the "character class" 25355var DASHES = "-\u2010-\u2015\u2212\u30FC\uFF0D"; 25356var SLASHES = "\uFF0F/"; 25357var DOTS = "\uFF0E."; 25358var WHITESPACE = " \xA0\xAD\u200B\u2060\u3000"; 25359var BRACKETS = "()\uFF08\uFF09\uFF3B\uFF3D\\[\\]"; 25360// export const OPENING_BRACKETS = '(\uFF08\uFF3B\\\[' 25361var TILDES = "~\u2053\u223C\uFF5E"; 25362 25363// Regular expression of acceptable punctuation found in phone numbers. This 25364// excludes punctuation found as a leading character only. This consists of dash 25365// characters, white space characters, full stops, slashes, square brackets, 25366// parentheses and tildes. Full-width variants are also present. 25367var VALID_PUNCTUATION = "".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES); 25368var PLUS_CHARS = "+\uFF0B"; 25369// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+') 25370//# sourceMappingURL=constants.js.map 25371 25372/***/ }), 25373
vendor: 10,366 bytes, lines 25374-25586
25374/***/ "../node_modules/libphonenumber-js/es6/format.js": 25375/*!*******************************************************!*\ 25376 !*** ../node_modules/libphonenumber-js/es6/format.js ***! 25377 \*******************************************************/ 25378/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 25379 25380"use strict"; 25381__webpack_require__.r(__webpack_exports__); 25382/* harmony export */ __webpack_require__.d(__webpack_exports__, { 25383/* harmony export */ chooseFormatForNumber: function() { return /* binding */ chooseFormatForNumber; }, 25384/* harmony export */ "default": function() { return /* binding */ formatNumber; } 25385/* harmony export */ }); 25386/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js"); 25387/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ "../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js"); 25388/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 25389/* harmony import */ var _helpers_getIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/getIddPrefix.js */ "../node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js"); 25390/* harmony import */ var _helpers_RFC3966_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/RFC3966.js */ "../node_modules/libphonenumber-js/es6/helpers/RFC3966.js"); 25391// This is a port of Google Android `libphonenumber`'s 25392// `phonenumberutil.js` of December 31th, 2018. 25393// 25394// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js 25395 25396 25397 25398 25399 25400 25401var DEFAULT_OPTIONS = { 25402 formatExtension: function formatExtension(formattedNumber, extension, metadata) { 25403 return "".concat(formattedNumber).concat(metadata.ext()).concat(extension); 25404 } 25405}; 25406 25407/** 25408 * Formats a phone number. 25409 * 25410 * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata) 25411 * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata) 25412 * 25413 * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata) 25414 * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata) 25415 * 25416 * @param {object|PhoneNumber} input â If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`. 25417 * @param {string} format 25418 * @param {object} [options] 25419 * @param {object} metadata 25420 * @return {string} 25421 */ 25422function formatNumber(input, format, options, metadata) { 25423 // Apply default options. 25424 if (options) { 25425 // Using ES6 "rest spread" syntax here didn't work with `babel`/`istanbul` 25426 // for some weird reason: this line of code would cause the code coverage 25427 // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason, 25428 // apparently doesn't know how to properly exclude Babel polyfills from code coverage. 25429 // 25430 // options = { ...DEFAULT_OPTIONS, ...options } 25431 // 25432 options = merge({}, DEFAULT_OPTIONS, options); 25433 } else { 25434 options = DEFAULT_OPTIONS; 25435 } 25436 metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__["default"](metadata); 25437 if (input.country && input.country !== '001') { 25438 // Validate `input.country`. 25439 if (!metadata.hasCountry(input.country)) { 25440 throw new Error("Unknown country: ".concat(input.country)); 25441 } 25442 metadata.selectNumberingPlan(input.country); 25443 } else if (input.countryCallingCode) { 25444 metadata.selectNumberingPlan(input.countryCallingCode); 25445 } else return input.phone || ''; 25446 var countryCallingCode = metadata.countryCallingCode(); 25447 var nationalNumber = options.v2 ? input.nationalNumber : input.phone; 25448 25449 // This variable should have been declared inside `case`s 25450 // but Babel has a bug and it says "duplicate variable declaration". 25451 var number; 25452 switch (format) { 25453 case 'NATIONAL': 25454 // Legacy argument support. 25455 // (`{ country: ..., phone: '' }`) 25456 if (!nationalNumber) { 25457 return ''; 25458 } 25459 number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options); 25460 return addExtension(number, input.ext, metadata, options.formatExtension); 25461 case 'INTERNATIONAL': 25462 // Legacy argument support. 25463 // (`{ country: ..., phone: '' }`) 25464 if (!nationalNumber) { 25465 return "+".concat(countryCallingCode); 25466 } 25467 number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options); 25468 number = "+".concat(countryCallingCode, " ").concat(number); 25469 return addExtension(number, input.ext, metadata, options.formatExtension); 25470 case 'E.164': 25471 // `E.164` doesn't define "phone number extensions". 25472 return "+".concat(countryCallingCode).concat(nationalNumber); 25473 case 'RFC3966': 25474 return (0,_helpers_RFC3966_js__WEBPACK_IMPORTED_MODULE_4__.formatRFC3966)({ 25475 number: "+".concat(countryCallingCode).concat(nationalNumber), 25476 ext: input.ext 25477 }); 25478 25479 // For reference, here's Google's IDD formatter: 25480 // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546 25481 // Not saying that this IDD formatter replicates it 1:1, but it seems to work. 25482 // Who would even need to format phone numbers in IDD format anyway? 25483 case 'IDD': 25484 if (!options.fromCountry) { 25485 return; 25486 // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.') 25487 } 25488 var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata); 25489 return addExtension(formattedNumber, input.ext, metadata, options.formatExtension); 25490 default: 25491 throw new Error("Unknown \"format\" argument passed to \"formatNumber()\": \"".concat(format, "\"")); 25492 } 25493} 25494function formatNationalNumber(number, carrierCode, formatAs, metadata, options) { 25495 var format = chooseFormatForNumber(metadata.formats(), number); 25496 if (!format) { 25497 return number; 25498 } 25499 return (0,_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_1__["default"])(number, format, { 25500 useInternationalFormat: formatAs === 'INTERNATIONAL', 25501 withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true, 25502 carrierCode: carrierCode, 25503 metadata: metadata 25504 }); 25505} 25506function chooseFormatForNumber(availableFormats, nationalNumber) { 25507 // Using a `for ... of` loop here didn't work with `babel`/`istanbul`: 25508 // for some weird reason, it showed code coverage less than 100%. 25509 // That's because `babel`/`istanbul`, for some weird reason, 25510 // apparently doesn't know how to properly exclude Babel polyfills from code coverage. 25511 // 25512 // for (const format of availableFormats) { ... } 25513 // 25514 return pickFirstMatchingElement(availableFormats, function (format) { 25515 // Validate leading digits. 25516 // The test case for "else path" could be found by searching for 25517 // "format.leadingDigitsPatterns().length === 0". 25518 if (format.leadingDigitsPatterns().length > 0) { 25519 // The last leading_digits_pattern is used here, as it is the most detailed 25520 var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1]; 25521 // If leading digits don't match then move on to the next phone number format 25522 if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) { 25523 return false; 25524 } 25525 } 25526 // Check that the national number matches the phone number format regular expression 25527 return (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_0__["default"])(nationalNumber, format.pattern()); 25528 }); 25529} 25530function addExtension(formattedNumber, ext, metadata, formatExtension) { 25531 return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber; 25532} 25533function formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) { 25534 var fromCountryCallingCode = (0,_metadata_js__WEBPACK_IMPORTED_MODULE_2__.getCountryCallingCode)(fromCountry, metadata.metadata); 25535 // When calling within the same country calling code. 25536 if (fromCountryCallingCode === countryCallingCode) { 25537 var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata); 25538 // For NANPA regions, return the national format for these regions 25539 // but prefix it with the country calling code. 25540 if (countryCallingCode === '1') { 25541 return countryCallingCode + ' ' + formattedNumber; 25542 } 25543 // If regions share a country calling code, the country calling code need 25544 // not be dialled. This also applies when dialling within a region, so this 25545 // if clause covers both these cases. Technically this is the case for 25546 // dialling from La Reunion to other overseas departments of France (French 25547 // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover 25548 // this edge case for now and for those cases return the version including 25549 // country calling code. Details here: 25550 // http://www.petitfute.com/voyage/225-info-pratiques-reunion 25551 // 25552 return formattedNumber; 25553 } 25554 var iddPrefix = (0,_helpers_getIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__["default"])(fromCountry, undefined, metadata.metadata); 25555 if (iddPrefix) { 25556 return "".concat(iddPrefix, " ").concat(countryCallingCode, " ").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata)); 25557 } 25558} 25559function merge() { 25560 var i = 1; 25561 for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) { 25562 objects[_key] = arguments[_key]; 25563 } 25564 while (i < objects.length) { 25565 if (objects[i]) { 25566 for (var key in objects[i]) { 25567 objects[0][key] = objects[i][key]; 25568 } 25569 } 25570 i++; 25571 } 25572 return objects[0]; 25573} 25574function pickFirstMatchingElement(elements, testFunction) { 25575 var i = 0; 25576 while (i < elements.length) { 25577 if (testFunction(elements[i])) { 25578 return elements[i]; 25579 } 25580 i++; 25581 } 25582} 25583//# sourceMappingURL=format.js.map 25584 25585/***/ }), 25586
vendor: 4,585 bytes, lines 25587-25675
25587/***/ "../node_modules/libphonenumber-js/es6/helpers/RFC3966.js": 25588/*!****************************************************************!*\ 25589 !*** ../node_modules/libphonenumber-js/es6/helpers/RFC3966.js ***! 25590 \****************************************************************/ 25591/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 25592 25593"use strict"; 25594__webpack_require__.r(__webpack_exports__); 25595/* harmony export */ __webpack_require__.d(__webpack_exports__, { 25596/* harmony export */ formatRFC3966: function() { return /* binding */ formatRFC3966; }, 25597/* harmony export */ parseRFC3966: function() { return /* binding */ parseRFC3966; } 25598/* harmony export */ }); 25599/* harmony import */ var _isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isViablePhoneNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js"); 25600function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } 25601function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 25602function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } 25603function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } 25604function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 25605function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 25606function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 25607 25608 25609// https://www.ietf.org/rfc/rfc3966.txt 25610 25611/** 25612 * @param {string} text - Phone URI (RFC 3966). 25613 * @return {object} `{ ?number, ?ext }`. 25614 */ 25615function parseRFC3966(text) { 25616 var number; 25617 var ext; 25618 25619 // Replace "tel:" with "tel=" for parsing convenience. 25620 text = text.replace(/^tel:/, 'tel='); 25621 for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) { 25622 var part = _step.value; 25623 var _part$split = part.split('='), 25624 _part$split2 = _slicedToArray(_part$split, 2), 25625 name = _part$split2[0], 25626 value = _part$split2[1]; 25627 switch (name) { 25628 case 'tel': 25629 number = value; 25630 break; 25631 case 'ext': 25632 ext = value; 25633 break; 25634 case 'phone-context': 25635 // Only "country contexts" are supported. 25636 // "Domain contexts" are ignored. 25637 if (value[0] === '+') { 25638 number = value + number; 25639 } 25640 break; 25641 } 25642 } 25643 25644 // If the phone number is not viable, then abort. 25645 if (!(0,_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__["default"])(number)) { 25646 return {}; 25647 } 25648 var result = { 25649 number: number 25650 }; 25651 if (ext) { 25652 result.ext = ext; 25653 } 25654 return result; 25655} 25656 25657/** 25658 * @param {object} - `{ ?number, ?extension }`. 25659 * @return {string} Phone URI (RFC 3966). 25660 */ 25661function formatRFC3966(_ref) { 25662 var number = _ref.number, 25663 ext = _ref.ext; 25664 if (!number) { 25665 return ''; 25666 } 25667 if (number[0] !== '+') { 25668 throw new Error("\"formatRFC3966()\" expects \"number\" to be in E.164 format."); 25669 } 25670 return "tel:".concat(number).concat(ext ? ';ext=' + ext : ''); 25671} 25672//# sourceMappingURL=RFC3966.js.map 25673 25674/***/ }), 25675
vendor: 2,927 bytes, lines 25676-25726
25676/***/ "../node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js": 25677/*!*****************************************************************************************!*\ 25678 !*** ../node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js ***! 25679 \*****************************************************************************************/ 25680/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 25681 25682"use strict"; 25683__webpack_require__.r(__webpack_exports__); 25684/* harmony export */ __webpack_require__.d(__webpack_exports__, { 25685/* harmony export */ "default": function() { return /* binding */ applyInternationalSeparatorStyle; } 25686/* harmony export */ }); 25687/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js"); 25688 25689 25690// Removes brackets and replaces dashes with spaces. 25691// 25692// E.g. "(999) 111-22-33" -> "999 111 22 33" 25693// 25694// For some reason Google's metadata contains `<intlFormat/>`s with brackets and dashes. 25695// Meanwhile, there's no single opinion about using punctuation in international phone numbers. 25696// 25697// For example, Google's `<intlFormat/>` for USA is `+1 213-373-4253`. 25698// And here's a quote from WikiPedia's "North American Numbering Plan" page: 25699// https://en.wikipedia.org/wiki/North_American_Numbering_Plan 25700// 25701// "The country calling code for all countries participating in the NANP is 1. 25702// In international format, an NANP number should be listed as +1 301 555 01 00, 25703// where 301 is an area code (Maryland)." 25704// 25705// I personally prefer the international format without any punctuation. 25706// For example, brackets are remnants of the old age, meaning that the 25707// phone number part in brackets (so called "area code") can be omitted 25708// if dialing within the same "area". 25709// And hyphens were clearly introduced for splitting local numbers into memorizable groups. 25710// For example, remembering "5553535" is difficult but "555-35-35" is much simpler. 25711// Imagine a man taking a bus from home to work and seeing an ad with a phone number. 25712// He has a couple of seconds to memorize that number until it passes by. 25713// If it were spaces instead of hyphens the man wouldn't necessarily get it, 25714// but with hyphens instead of spaces the grouping is more explicit. 25715// I personally think that hyphens introduce visual clutter, 25716// so I prefer replacing them with spaces in international numbers. 25717// In the modern age all output is done on displays where spaces are clearly distinguishable 25718// so hyphens can be safely replaced with spaces without losing any legibility. 25719// 25720function applyInternationalSeparatorStyle(formattedNumber) { 25721 return formattedNumber.replace(new RegExp("[".concat(_constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION, "]+"), 'g'), ' ').trim(); 25722} 25723//# sourceMappingURL=applyInternationalSeparatorStyle.js.map 25724 25725/***/ }), 25726
vendor: 6,584 bytes, lines 25727-25855
25727/***/ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js": 25728/*!**************************************************************************!*\ 25729 !*** ../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js ***! 25730 \**************************************************************************/ 25731/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 25732 25733"use strict"; 25734__webpack_require__.r(__webpack_exports__); 25735/* harmony export */ __webpack_require__.d(__webpack_exports__, { 25736/* harmony export */ checkNumberLengthForType: function() { return /* binding */ checkNumberLengthForType; }, 25737/* harmony export */ "default": function() { return /* binding */ checkNumberLength; } 25738/* harmony export */ }); 25739/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 25740/* harmony import */ var _mergeArrays_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergeArrays.js */ "../node_modules/libphonenumber-js/es6/helpers/mergeArrays.js"); 25741 25742 25743function checkNumberLength(nationalNumber, country, metadata) { 25744 return checkNumberLengthForType(nationalNumber, country, undefined, metadata); 25745} 25746 25747// Checks whether a number is possible for a certain `country` based on the number length. 25748// 25749// This function is not supported by metadata generated with ancient versions of 25750// `libphonenumber-js` (before version `1.0.18`) which didn't include "possible lengths". 25751// 25752// There was also a known issue with `checkNumberLength()` function: 25753// if a number is possible only in a certain `country` among several `countries` 25754// that share the same "country calling code", that function would check 25755// the possibility of the phone number only in the "main" `country` for the "country calling code" 25756// and would not check if it's actually be possible in the speciifc `country`. 25757// 25758// For example, "+1310xxxx" numbers are valid in Canada. 25759// However, they are not possible in the US due to being too short. 25760// Since Canada and the US share the same country calling code â "+1" â 25761// `checkNumberLength()` function used to return not "IS_POSSIBLE" for "+1310xxxx" numbers. 25762// 25763// In such cases, when using "/max" metadata, `isValid()` could output `true` 25764// but at the same time `isPossible()` could output `false`, which was contradictory. 25765// 25766// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues. 25767// 25768// The solution suggested by Google was implemented: an optional `country` argument 25769// was added to `checkNumberLength()` function. If present, that `country` will be used 25770// to check phone number length for that specific `country` rather than the "main" country 25771// for the shared "country calling code". 25772// 25773function checkNumberLengthForType(nationalNumber, country, type, metadata) { 25774 // If the exact `country` is specified, it's no necessarily already selected in `metadata`. 25775 // Most likely, in cases when there're multiple countries corresponding to the same 25776 // "country calling code", the "main" country for that "country calling code" will be selected. 25777 if (country) { 25778 metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata.metadata); 25779 metadata.selectNumberingPlan(country); 25780 } 25781 var type_info = metadata.type(type); 25782 25783 // There should always be "<possiblePengths/>" set for every type element. 25784 // This is declared in the XML schema. 25785 // For size efficiency, where a sub-description (e.g. fixed-line) 25786 // has the same "<possiblePengths/>" as the "general description", this is missing, 25787 // so we fall back to the "general description". Where no numbers of the type 25788 // exist at all, there is one possible length (-1) which is guaranteed 25789 // not to match the length of any real phone number. 25790 var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths(); 25791 // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal() 25792 25793 // Metadata before version `1.0.18` didn't contain `possible_lengths`. 25794 if (!possible_lengths) { 25795 return 'IS_POSSIBLE'; 25796 } 25797 if (type === 'FIXED_LINE_OR_MOBILE') { 25798 // No such country in metadata. 25799 /* istanbul ignore next */ 25800 if (!metadata.type('FIXED_LINE')) { 25801 // The rare case has been encountered where no fixedLine data is available 25802 // (true for some non-geographic entities), so we just check mobile. 25803 return checkNumberLengthForType(nationalNumber, country, 'MOBILE', metadata); 25804 } 25805 var mobile_type = metadata.type('MOBILE'); 25806 if (mobile_type) { 25807 // Merge the mobile data in if there was any. "Concat" creates a new 25808 // array, it doesn't edit possible_lengths in place, so we don't need a copy. 25809 // Note that when adding the possible lengths from mobile, we have 25810 // to again check they aren't empty since if they are this indicates 25811 // they are the same as the general desc and should be obtained from there. 25812 possible_lengths = (0,_mergeArrays_js__WEBPACK_IMPORTED_MODULE_1__["default"])(possible_lengths, mobile_type.possibleLengths()); 25813 // The current list is sorted; we need to merge in the new list and 25814 // re-sort (duplicates are okay). Sorting isn't so expensive because 25815 // the lists are very small. 25816 25817 // if (local_lengths) { 25818 // local_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal()) 25819 // } else { 25820 // local_lengths = mobile_type.possibleLengthsLocal() 25821 // } 25822 } 25823 } 25824 // If the type doesn't exist then return 'INVALID_LENGTH'. 25825 else if (type && !type_info) { 25826 return 'INVALID_LENGTH'; 25827 } 25828 var actual_length = nationalNumber.length; 25829 25830 // In `libphonenumber-js` all "local-only" formats are dropped for simplicity. 25831 // // This is safe because there is never an overlap beween the possible lengths 25832 // // and the local-only lengths; this is checked at build time. 25833 // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0) 25834 // { 25835 // return 'IS_POSSIBLE_LOCAL_ONLY' 25836 // } 25837 25838 var minimum_length = possible_lengths[0]; 25839 if (minimum_length === actual_length) { 25840 return 'IS_POSSIBLE'; 25841 } 25842 if (minimum_length > actual_length) { 25843 return 'TOO_SHORT'; 25844 } 25845 if (possible_lengths[possible_lengths.length - 1] < actual_length) { 25846 return 'TOO_LONG'; 25847 } 25848 25849 // We skip the first element since we've already checked it. 25850 return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH'; 25851} 25852//# sourceMappingURL=checkNumberLength.js.map 25853 25854/***/ }), 25855
vendor: 6,226 bytes, lines 25856-25965
25856/***/ "../node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js": 25857/*!*****************************************************************************************!*\ 25858 !*** ../node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js ***! 25859 \*****************************************************************************************/ 25860/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 25861 25862"use strict"; 25863__webpack_require__.r(__webpack_exports__); 25864/* harmony export */ __webpack_require__.d(__webpack_exports__, { 25865/* harmony export */ "default": function() { return /* binding */ createExtensionPattern; } 25866/* harmony export */ }); 25867/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js"); 25868 25869 25870// The RFC 3966 format for extensions. 25871var RFC3966_EXTN_PREFIX = ';ext='; 25872 25873/** 25874 * Helper method for constructing regular expressions for parsing. Creates 25875 * an expression that captures up to max_length digits. 25876 * @return {string} RegEx pattern to capture extension digits. 25877 */ 25878var getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) { 25879 return "([".concat(_constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS, "]{1,").concat(maxLength, "})"); 25880}; 25881 25882/** 25883 * Helper initialiser method to create the regular-expression pattern to match 25884 * extensions. 25885 * Copy-pasted from Google's `libphonenumber`: 25886 * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766 25887 * @return {string} RegEx pattern to capture extensions. 25888 */ 25889function createExtensionPattern(purpose) { 25890 // We cap the maximum length of an extension based on the ambiguity of the way 25891 // the extension is prefixed. As per ITU, the officially allowed length for 25892 // extensions is actually 40, but we don't support this since we haven't seen real 25893 // examples and this introduces many false interpretations as the extension labels 25894 // are not standardized. 25895 /** @type {string} */ 25896 var extLimitAfterExplicitLabel = '20'; 25897 /** @type {string} */ 25898 var extLimitAfterLikelyLabel = '15'; 25899 /** @type {string} */ 25900 var extLimitAfterAmbiguousChar = '9'; 25901 /** @type {string} */ 25902 var extLimitWhenNotSure = '6'; 25903 25904 /** @type {string} */ 25905 var possibleSeparatorsBetweenNumberAndExtLabel = "[ \xA0\\t,]*"; 25906 // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas. 25907 /** @type {string} */ 25908 var possibleCharsAfterExtLabel = "[:\\.\uFF0E]?[ \xA0\\t,-]*"; 25909 /** @type {string} */ 25910 var optionalExtnSuffix = "#?"; 25911 25912 // Here the extension is called out in more explicit way, i.e mentioning it obvious 25913 // patterns like "ext.". 25914 /** @type {string} */ 25915 var explicitExtLabels = "(?:e?xt(?:ensi(?:o\u0301?|\xF3))?n?|\uFF45?\uFF58\uFF54\uFF4E?|\u0434\u043E\u0431|anexo)"; 25916 // One-character symbols that can be used to indicate an extension, and less 25917 // commonly used or more ambiguous extension labels. 25918 /** @type {string} */ 25919 var ambiguousExtLabels = "(?:[x\uFF58#\uFF03~\uFF5E]|int|\uFF49\uFF4E\uFF54)"; 25920 // When extension is not separated clearly. 25921 /** @type {string} */ 25922 var ambiguousSeparator = "[- ]+"; 25923 // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching 25924 // comma as extension label may have it. 25925 /** @type {string} */ 25926 var possibleSeparatorsNumberExtLabelNoComma = "[ \xA0\\t]*"; 25927 // ",," is commonly used for auto dialling the extension when connected. First 25928 // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do 25929 // not repeat it here. Semi-colon works in Iphone and Android also to pop up a 25930 // button with the extension number following. 25931 /** @type {string} */ 25932 var autoDiallingAndExtLabelsFound = "(?:,{2}|;)"; 25933 25934 /** @type {string} */ 25935 var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel); 25936 /** @type {string} */ 25937 var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix; 25938 /** @type {string} */ 25939 var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix; 25940 /** @type {string} */ 25941 var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + "#"; 25942 25943 /** @type {string} */ 25944 var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix; 25945 /** @type {string} */ 25946 var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + "(?:,)+" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix; 25947 25948 // The first regular expression covers RFC 3966 format, where the extension is added 25949 // using ";ext=". The second more generic where extension is mentioned with explicit 25950 // labels like "ext:". In both the above cases we allow more numbers in extension than 25951 // any other extension labels. The third one captures when single character extension 25952 // labels or less commonly used labels are used. In such cases we capture fewer 25953 // extension digits in order to reduce the chance of falsely interpreting two 25954 // numbers beside each other as a number + extension. The fourth one covers the 25955 // special case of American numbers where the extension is written with a hash 25956 // at the end, such as "- 503#". The fifth one is exclusively for extension 25957 // autodialling formats which are used when dialling and in this case we accept longer 25958 // extensions. The last one is more liberal on the number of commas that acts as 25959 // extension labels, so we have a strict cap on the number of digits in such extensions. 25960 return rfcExtn + "|" + explicitExtn + "|" + ambiguousExtn + "|" + americanStyleExtnWithSuffix + "|" + autoDiallingExtn + "|" + onlyCommasExtn; 25961} 25962//# sourceMappingURL=createExtensionPattern.js.map 25963 25964/***/ }), 25965
vendor: 7,691 bytes, lines 25966-26124
25966/***/ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js": 25967/*!**********************************************************************************!*\ 25968 !*** ../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js ***! 25969 \**********************************************************************************/ 25970/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 25971 25972"use strict"; 25973__webpack_require__.r(__webpack_exports__); 25974/* harmony export */ __webpack_require__.d(__webpack_exports__, { 25975/* harmony export */ "default": function() { return /* binding */ extractCountryCallingCode; } 25976/* harmony export */ }); 25977/* harmony import */ var _stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stripIddPrefix.js */ "../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js"); 25978/* harmony import */ var _extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js */ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js"); 25979/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 25980/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js"); 25981 25982 25983 25984 25985 25986/** 25987 * Converts a phone number digits (possibly with a `+`) 25988 * into a calling code and the rest phone number digits. 25989 * The "rest phone number digits" could include 25990 * a national prefix, carrier code, and national 25991 * (significant) number. 25992 * @param {string} number â Phone number digits (possibly with a `+`). 25993 * @param {string} [country] â Country. 25994 * @param {string} [defaultCountry] â Default country. 25995 * @param {string} [defaultCallingCode] â Default calling code (some phone numbering plans are non-geographic). 25996 * @param {object} metadata 25997 * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }` 25998 * @example 25999 * // Returns `{ countryCallingCode: "1", number: "2133734253" }`. 26000 * extractCountryCallingCode('2133734253', null, 'US', null, metadata) 26001 * extractCountryCallingCode('2133734253', null, null, '1', metadata) 26002 * extractCountryCallingCode('+12133734253', null, null, null, metadata) 26003 * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata) 26004 */ 26005function extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) { 26006 if (!number) { 26007 return {}; 26008 } 26009 var isNumberWithIddPrefix; 26010 26011 // If this is not an international phone number, 26012 // then either extract an "IDD" prefix, or extract a 26013 // country calling code from a number by autocorrecting it 26014 // by prepending a leading `+` in cases when it starts 26015 // with the country calling code. 26016 // https://wikitravel.org/en/International_dialling_prefix 26017 // https://github.com/catamphetamine/libphonenumber-js/issues/376 26018 if (number[0] !== '+') { 26019 // Convert an "out-of-country" dialing phone number 26020 // to a proper international phone number. 26021 var numberWithoutIDD = (0,_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_0__["default"])(number, country || defaultCountry, defaultCallingCode, metadata); 26022 // If an IDD prefix was stripped then 26023 // convert the number to international one 26024 // for subsequent parsing. 26025 if (numberWithoutIDD && numberWithoutIDD !== number) { 26026 isNumberWithIddPrefix = true; 26027 number = '+' + numberWithoutIDD; 26028 } else { 26029 // Check to see if the number starts with the country calling code 26030 // for the default country. If so, we remove the country calling code, 26031 // and do some checks on the validity of the number before and after. 26032 // https://github.com/catamphetamine/libphonenumber-js/issues/376 26033 if (country || defaultCountry || defaultCallingCode) { 26034 var _extractCountryCallin = (0,_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__["default"])(number, country, defaultCountry, defaultCallingCode, metadata), 26035 countryCallingCode = _extractCountryCallin.countryCallingCode, 26036 shorterNumber = _extractCountryCallin.number; 26037 if (countryCallingCode) { 26038 return { 26039 countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN', 26040 countryCallingCode: countryCallingCode, 26041 number: shorterNumber 26042 }; 26043 } 26044 } 26045 return { 26046 // No need to set it to `UNSPECIFIED`. It can be just `undefined`. 26047 // countryCallingCodeSource: 'UNSPECIFIED', 26048 number: number 26049 }; 26050 } 26051 } 26052 26053 // `number` can only be international at this point. 26054 26055 // Fast abortion: country codes do not begin with a '0' 26056 if (number[1] === '0') { 26057 return {}; 26058 } 26059 metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__["default"](metadata); 26060 26061 // The thing with country phone codes 26062 // is that they are orthogonal to each other 26063 // i.e. there's no such country phone code A 26064 // for which country phone code B exists 26065 // where B starts with A. 26066 // Therefore, while scanning digits, 26067 // if a valid country code is found, 26068 // that means that it is the country code. 26069 // 26070 var i = 2; 26071 while (i - 1 <= _constants_js__WEBPACK_IMPORTED_MODULE_3__.MAX_LENGTH_COUNTRY_CODE && i <= number.length) { 26072 var _countryCallingCode = number.slice(1, i); 26073 if (metadata.hasCallingCode(_countryCallingCode)) { 26074 metadata.selectNumberingPlan(_countryCallingCode); 26075 return { 26076 countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN', 26077 countryCallingCode: _countryCallingCode, 26078 number: number.slice(i) 26079 }; 26080 } 26081 i++; 26082 } 26083 return {}; 26084} 26085 26086// The possible values for the returned `countryCallingCodeSource` are: 26087// 26088// Copy-pasted from: 26089// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto 26090// 26091// // The source from which the country_code is derived. This is not set in the 26092// // general parsing method, but in the method that parses and keeps raw_input. 26093// // New fields could be added upon request. 26094// enum CountryCodeSource { 26095// // Default value returned if this is not set, because the phone number was 26096// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will 26097// // return false if this is the case. 26098// UNSPECIFIED = 0; 26099// 26100// // The country_code is derived based on a phone number with a leading "+", 26101// // e.g. the French number "+33 1 42 68 53 00". 26102// FROM_NUMBER_WITH_PLUS_SIGN = 1; 26103// 26104// // The country_code is derived based on a phone number with a leading IDD, 26105// // e.g. the French number "011 33 1 42 68 53 00", as it is dialled from US. 26106// FROM_NUMBER_WITH_IDD = 5; 26107// 26108// // The country_code is derived based on a phone number without a leading 26109// // "+", e.g. the French number "33 1 42 68 53 00" when defaultCountry is 26110// // supplied as France. 26111// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10; 26112// 26113// // The country_code is derived NOT based on the phone number itself, but 26114// // from the defaultCountry parameter provided in the parsing function by the 26115// // clients. This happens mostly for numbers written in the national format 26116// // (without country code). For example, this would be set when parsing the 26117// // French number "01 42 68 53 00", when defaultCountry is supplied as 26118// // France. 26119// FROM_DEFAULT_COUNTRY = 20; 26120// } 26121//# sourceMappingURL=extractCountryCallingCode.js.map 26122 26123/***/ }), 26124
vendor: 4,214 bytes, lines 26125-26189
26125/***/ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js": 26126/*!************************************************************************************************************************!*\ 26127 !*** ../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js ***! 26128 \************************************************************************************************************************/ 26129/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26130 26131"use strict"; 26132__webpack_require__.r(__webpack_exports__); 26133/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26134/* harmony export */ "default": function() { return /* binding */ extractCountryCallingCodeFromInternationalNumberWithoutPlusSign; } 26135/* harmony export */ }); 26136/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../getCountryCallingCode.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 26137/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js"); 26138/* harmony import */ var _extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./extractNationalNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js"); 26139/* harmony import */ var _checkNumberLength_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./checkNumberLength.js */ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js"); 26140 26141 26142 26143 26144 26145 26146/** 26147 * Sometimes some people incorrectly input international phone numbers 26148 * without the leading `+`. This function corrects such input. 26149 * @param {string} number â Phone number digits. 26150 * @param {string} [country] â Exact country of the phone number. 26151 * @param {string} [defaultCountry] 26152 * @param {string} [defaultCallingCode] 26153 * @param {object} metadata 26154 * @return {object} `{ countryCallingCode: string?, number: string }`. 26155 */ 26156function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) { 26157 var countryCallingCode = country || defaultCountry ? (0,_metadata_js__WEBPACK_IMPORTED_MODULE_0__.getCountryCallingCode)(country || defaultCountry, metadata) : defaultCallingCode; 26158 if (number.indexOf(countryCallingCode) === 0) { 26159 metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 26160 metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode); 26161 var possibleShorterNumber = number.slice(countryCallingCode.length); 26162 var _extractNationalNumbe = (0,_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__["default"])(possibleShorterNumber, country, metadata), 26163 possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber; 26164 var _extractNationalNumbe2 = (0,_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__["default"])(number, country, metadata), 26165 nationalNumber = _extractNationalNumbe2.nationalNumber; 26166 26167 // If the number was not valid before but is valid now, 26168 // or if it was too long before, we consider the number 26169 // with the country calling code stripped to be a better result 26170 // and keep that instead. 26171 // For example, in Germany (+49), `49` is a valid area code, 26172 // so if a number starts with `49`, it could be both a valid 26173 // national German number or an international number without 26174 // a leading `+`. 26175 if (!(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, metadata.nationalNumberPattern()) && (0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || (0,_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_3__["default"])(nationalNumber, country, metadata) === 'TOO_LONG') { 26176 return { 26177 countryCallingCode: countryCallingCode, 26178 number: possibleShorterNumber 26179 }; 26180 } 26181 } 26182 return { 26183 number: number 26184 }; 26185} 26186//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map 26187 26188/***/ }), 26189
vendor: 7,540 bytes, lines 26190-26323
26190/***/ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js": 26191/*!******************************************************************************!*\ 26192 !*** ../node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js ***! 26193 \******************************************************************************/ 26194/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26195 26196"use strict"; 26197__webpack_require__.r(__webpack_exports__); 26198/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26199/* harmony export */ "default": function() { return /* binding */ extractNationalNumber; } 26200/* harmony export */ }); 26201/* harmony import */ var _extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extractNationalNumberFromPossiblyIncompleteNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js"); 26202/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js"); 26203/* harmony import */ var _checkNumberLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./checkNumberLength.js */ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js"); 26204/* harmony import */ var _getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getCountryByCallingCode.js */ "../node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js"); 26205 26206 26207 26208 26209 26210/** 26211 * Strips national prefix and carrier code from a complete phone number. 26212 * The difference from the non-"FromCompleteNumber" function is that 26213 * it won't extract national prefix if the resultant number is too short 26214 * to be a complete number for the selected phone numbering plan. 26215 * @param {string} number â Complete phone number digits. 26216 * @param {string?} country â Country, if known. 26217 * @param {Metadata} metadata â Metadata with a phone numbering plan selected. 26218 * @return {object} `{ nationalNumber: string, carrierCode: string? }`. 26219 */ 26220function extractNationalNumber(number, country, metadata) { 26221 // Parsing national prefixes and carrier codes 26222 // is only required for local phone numbers 26223 // but some people don't understand that 26224 // and sometimes write international phone numbers 26225 // with national prefixes (or maybe even carrier codes). 26226 // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html 26227 // Google's original library forgives such mistakes 26228 // and so does this library, because it has been requested: 26229 // https://github.com/catamphetamine/libphonenumber-js/issues/127 26230 var _extractNationalNumbe = (0,_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_0__["default"])(number, metadata), 26231 carrierCode = _extractNationalNumbe.carrierCode, 26232 nationalNumber = _extractNationalNumbe.nationalNumber; 26233 if (nationalNumber !== number) { 26234 if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) { 26235 // Don't strip the national prefix. 26236 return { 26237 nationalNumber: number 26238 }; 26239 } 26240 // Check the national (significant) number length after extracting national prefix and carrier code. 26241 // Legacy generated metadata (before `1.0.18`) didn't support the "possible lengths" feature. 26242 if (metadata.numberingPlan.possibleLengths()) { 26243 // If an exact `country` is not specified, attempt to detect it from the assumed national number. 26244 if (!country) { 26245 country = (0,_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metadata.numberingPlan.callingCode(), { 26246 nationalNumber: nationalNumber, 26247 metadata: metadata 26248 }); 26249 } 26250 26251 // The number remaining after stripping the national prefix and carrier code 26252 // should be long enough to have a possible length for the country. 26253 // Otherwise, don't strip the national prefix and carrier code, 26254 // since the original number could be a valid number. 26255 // This check has been copy-pasted "as is" from Google's original library: 26256 // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250 26257 // It doesn't check for the "possibility" of the original `number`. 26258 // I guess it's fine not checking that one. It works as is anyway. 26259 if (!isPossibleIncompleteNationalNumber(nationalNumber, country, metadata)) { 26260 // Don't strip the national prefix. 26261 return { 26262 nationalNumber: number 26263 }; 26264 } 26265 } 26266 } 26267 return { 26268 nationalNumber: nationalNumber, 26269 carrierCode: carrierCode 26270 }; 26271} 26272 26273// In some countries, the same digit could be a national prefix 26274// or a leading digit of a valid phone number. 26275// For example, in Russia, national prefix is `8`, 26276// and also `800 555 35 35` is a valid number 26277// in which `8` is not a national prefix, but the first digit 26278// of a national (significant) number. 26279// Same's with Belarus: 26280// `82004910060` is a valid national (significant) number, 26281// but `2004910060` is not. 26282// To support such cases (to prevent the code from always stripping 26283// national prefix), a condition is imposed: a national prefix 26284// is not extracted when the original number is "viable" and the 26285// resultant number is not, a "viable" national number being the one 26286// that matches `national_number_pattern`. 26287function shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) { 26288 // The equivalent in Google's code is: 26289 // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004 26290 if ((0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumberBefore, metadata.nationalNumberPattern()) && !(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumberAfter, metadata.nationalNumberPattern())) { 26291 return false; 26292 } 26293 // This "is possible" national number (length) check has been commented out 26294 // because it's superceded by the (effectively) same check done in the 26295 // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`. 26296 // In other words, why run the same check twice if it could only be run once. 26297 // // Check the national (significant) number length after extracting national prefix and carrier code. 26298 // // Fixes a minor "weird behavior" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57 26299 // // (Legacy generated metadata (before `1.0.18`) didn't support the "possible lengths" feature). 26300 // if (metadata.possibleLengths()) { 26301 // if (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) && 26302 // !isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) { 26303 // return false 26304 // } 26305 // } 26306 return true; 26307} 26308function isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) { 26309 switch ((0,_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_2__["default"])(nationalNumber, country, metadata)) { 26310 case 'TOO_SHORT': 26311 case 'INVALID_LENGTH': 26312 // This library ignores "local-only" phone numbers (for simplicity). 26313 // See the readme for more info on what are "local-only" phone numbers. 26314 // case 'IS_POSSIBLE_LOCAL_ONLY': 26315 return false; 26316 default: 26317 return true; 26318 } 26319} 26320//# sourceMappingURL=extractNationalNumber.js.map 26321 26322/***/ }), 26323
vendor: 6,495 bytes, lines 26324-26439
26324/***/ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js": 26325/*!**********************************************************************************************************!*\ 26326 !*** ../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js ***! 26327 \**********************************************************************************************************/ 26328/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26329 26330"use strict"; 26331__webpack_require__.r(__webpack_exports__); 26332/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26333/* harmony export */ "default": function() { return /* binding */ extractNationalNumberFromPossiblyIncompleteNumber; } 26334/* harmony export */ }); 26335/** 26336 * Strips any national prefix (such as 0, 1) present in a 26337 * (possibly incomplete) number provided. 26338 * "Carrier codes" are only used in Colombia and Brazil, 26339 * and only when dialing within those countries from a mobile phone to a fixed line number. 26340 * Sometimes it won't actually strip national prefix 26341 * and will instead prepend some digits to the `number`: 26342 * for example, when number `2345678` is passed with `VI` country selected, 26343 * it will return `{ number: "3402345678" }`, because `340` area code is prepended. 26344 * @param {string} number â National number digits. 26345 * @param {object} metadata â Metadata with country selected. 26346 * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not. 26347 */ 26348function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) { 26349 if (number && metadata.numberingPlan.nationalPrefixForParsing()) { 26350 // See METADATA.md for the description of 26351 // `national_prefix_for_parsing` and `national_prefix_transform_rule`. 26352 // Attempt to parse the first digits as a national prefix. 26353 var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')'); 26354 var prefixMatch = prefixPattern.exec(number); 26355 if (prefixMatch) { 26356 var nationalNumber; 26357 var carrierCode; 26358 // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule 26359 // If a `national_prefix_for_parsing` has any "capturing groups" 26360 // then it means that the national (significant) number is equal to 26361 // those "capturing groups" transformed via `national_prefix_transform_rule`, 26362 // and nothing could be said about the actual national prefix: 26363 // what is it and was it even there. 26364 // If a `national_prefix_for_parsing` doesn't have any "capturing groups", 26365 // then everything it matches is a national prefix. 26366 // To determine whether `national_prefix_for_parsing` matched any 26367 // "capturing groups", the value of the result of calling `.exec()` 26368 // is looked at, and if it has non-undefined values where there're 26369 // "capturing groups" in the regular expression, then it means 26370 // that "capturing groups" have been matched. 26371 // It's not possible to tell whether there'll be any "capturing gropus" 26372 // before the matching process, because a `national_prefix_for_parsing` 26373 // could exhibit both behaviors. 26374 var capturedGroupsCount = prefixMatch.length - 1; 26375 var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount]; 26376 if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) { 26377 nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule()); 26378 // If there's more than one captured group, 26379 // then carrier code is the second one. 26380 if (capturedGroupsCount > 1) { 26381 carrierCode = prefixMatch[1]; 26382 } 26383 } 26384 // If there're no "capturing groups", 26385 // or if there're "capturing groups" but no 26386 // `national_prefix_transform_rule`, 26387 // then just strip the national prefix from the number, 26388 // and possibly a carrier code. 26389 // Seems like there could be more. 26390 else { 26391 // `prefixBeforeNationalNumber` is the whole substring matched by 26392 // the `national_prefix_for_parsing` regular expression. 26393 // There seem to be no guarantees that it's just a national prefix. 26394 // For example, if there's a carrier code, it's gonna be a 26395 // part of `prefixBeforeNationalNumber` too. 26396 var prefixBeforeNationalNumber = prefixMatch[0]; 26397 nationalNumber = number.slice(prefixBeforeNationalNumber.length); 26398 // If there's at least one captured group, 26399 // then carrier code is the first one. 26400 if (hasCapturedGroups) { 26401 carrierCode = prefixMatch[1]; 26402 } 26403 } 26404 // Tries to guess whether a national prefix was present in the input. 26405 // This is not something copy-pasted from Google's library: 26406 // they don't seem to have an equivalent for that. 26407 // So this isn't an "officially approved" way of doing something like that. 26408 // But since there seems no other existing method, this library uses it. 26409 var nationalPrefix; 26410 if (hasCapturedGroups) { 26411 var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]); 26412 var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup); 26413 // Example: an Argentinian (AR) phone number `0111523456789`. 26414 // `prefixMatch[0]` is `01115`, and `$1` is `11`, 26415 // and the rest of the phone number is `23456789`. 26416 // The national number is transformed via `9$1` to `91123456789`. 26417 // National prefix `0` is detected being present at the start. 26418 // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) { 26419 if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) { 26420 nationalPrefix = metadata.numberingPlan.nationalPrefix(); 26421 } 26422 } else { 26423 nationalPrefix = prefixMatch[0]; 26424 } 26425 return { 26426 nationalNumber: nationalNumber, 26427 nationalPrefix: nationalPrefix, 26428 carrierCode: carrierCode 26429 }; 26430 } 26431 } 26432 return { 26433 nationalNumber: number 26434 }; 26435} 26436//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map 26437 26438/***/ }), 26439
vendor: 2,997 bytes, lines 26440-26488
26440/***/ "../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js": 26441/*!****************************************************************************************!*\ 26442 !*** ../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js ***! 26443 \****************************************************************************************/ 26444/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26445 26446"use strict"; 26447__webpack_require__.r(__webpack_exports__); 26448/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26449/* harmony export */ FIRST_GROUP_PATTERN: function() { return /* binding */ FIRST_GROUP_PATTERN; }, 26450/* harmony export */ "default": function() { return /* binding */ formatNationalNumberUsingFormat; } 26451/* harmony export */ }); 26452/* harmony import */ var _applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyInternationalSeparatorStyle.js */ "../node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js"); 26453 26454 26455// This was originally set to $1 but there are some countries for which the 26456// first group is not used in the national pattern (e.g. Argentina) so the $1 26457// group does not match correctly. Therefore, we use `\d`, so that the first 26458// group actually used in the pattern will be matched. 26459var FIRST_GROUP_PATTERN = /(\$\d)/; 26460function formatNationalNumberUsingFormat(number, format, _ref) { 26461 var useInternationalFormat = _ref.useInternationalFormat, 26462 withNationalPrefix = _ref.withNationalPrefix, 26463 carrierCode = _ref.carrierCode, 26464 metadata = _ref.metadata; 26465 var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() : 26466 // This library doesn't use `domestic_carrier_code_formatting_rule`, 26467 // because that one is only used when formatting phone numbers 26468 // for dialing from a mobile phone, and this is not a dialing library. 26469 // carrierCode && format.domesticCarrierCodeFormattingRule() 26470 // // First, replace the $CC in the formatting rule with the desired carrier code. 26471 // // Then, replace the $FG in the formatting rule with the first group 26472 // // and the carrier code combined in the appropriate way. 26473 // ? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode)) 26474 // : ( 26475 // withNationalPrefix && format.nationalPrefixFormattingRule() 26476 // ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) 26477 // : format.format() 26478 // ) 26479 withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format()); 26480 if (useInternationalFormat) { 26481 return (0,_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(formattedNumber); 26482 } 26483 return formattedNumber; 26484} 26485//# sourceMappingURL=formatNationalNumberUsingFormat.js.map 26486 26487/***/ }), 26488
vendor: 1,943 bytes, lines 26489-26532
26489/***/ "../node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js": 26490/*!********************************************************************************!*\ 26491 !*** ../node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js ***! 26492 \********************************************************************************/ 26493/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26494 26495"use strict"; 26496__webpack_require__.r(__webpack_exports__); 26497/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26498/* harmony export */ "default": function() { return /* binding */ getCountryByCallingCode; } 26499/* harmony export */ }); 26500/* harmony import */ var _getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCountryByNationalNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js"); 26501 26502var USE_NON_GEOGRAPHIC_COUNTRY_CODE = false; 26503 26504// Returns the exact country for the `nationalNumber` 26505// that belongs to the specified "country calling code". 26506function getCountryByCallingCode(callingCode, _ref) { 26507 var nationalPhoneNumber = _ref.nationalNumber, 26508 metadata = _ref.metadata; 26509 /* istanbul ignore if */ 26510 if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) { 26511 if (metadata.isNonGeographicCallingCode(callingCode)) { 26512 return '001'; 26513 } 26514 } 26515 var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode); 26516 if (!possibleCountries) { 26517 return; 26518 } 26519 // If there's just one country corresponding to the country code, 26520 // then just return it, without further phone number digits validation. 26521 if (possibleCountries.length === 1) { 26522 return possibleCountries[0]; 26523 } 26524 return (0,_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_0__["default"])(nationalPhoneNumber, { 26525 countries: possibleCountries, 26526 metadata: metadata.metadata 26527 }); 26528} 26529//# sourceMappingURL=getCountryByCallingCode.js.map 26530 26531/***/ }), 26532
vendor: 5,692 bytes, lines 26533-26627
26533/***/ "../node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js": 26534/*!***********************************************************************************!*\ 26535 !*** ../node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js ***! 26536 \***********************************************************************************/ 26537/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26538 26539"use strict"; 26540__webpack_require__.r(__webpack_exports__); 26541/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26542/* harmony export */ "default": function() { return /* binding */ getCountryByNationalNumber; } 26543/* harmony export */ }); 26544/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 26545/* harmony import */ var _getNumberType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNumberType.js */ "../node_modules/libphonenumber-js/es6/helpers/getNumberType.js"); 26546function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 26547function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 26548function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 26549 26550 26551 26552// Returns the exact country that the `nationalPhoneNumber` belongs to 26553// in cases of ambiguity, i.e. when multiple countries share the same "country calling code". 26554function getCountryByNationalNumber(nationalPhoneNumber, _ref) { 26555 var countries = _ref.countries, 26556 metadata = _ref.metadata; 26557 // Re-create `metadata` because it will be selecting a `country`. 26558 metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 26559 26560 // const matchingCountries = [] 26561 26562 for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) { 26563 var country = _step.value; 26564 metadata.selectNumberingPlan(country); 26565 // "Leading digits" patterns are only defined for about 20% of all countries. 26566 // By definition, matching "leading digits" is a sufficient but not a necessary 26567 // condition for a phone number to belong to a country. 26568 // The point of "leading digits" check is that it's the fastest one to get a match. 26569 // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits 26570 // I'd suppose that "leading digits" patterns are mutually exclusive for different countries 26571 // because of the intended use of that feature. 26572 if (metadata.leadingDigits()) { 26573 if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) { 26574 return country; 26575 } 26576 } 26577 // Else perform full validation with all of those 26578 // fixed-line/mobile/etc regular expressions. 26579 else if ((0,_getNumberType_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 26580 phone: nationalPhoneNumber, 26581 country: country 26582 }, undefined, metadata.metadata)) { 26583 // When multiple countries share the same "country calling code", 26584 // type patterns aren't guaranteed to be unique among them. 26585 // For example, both `US` and `CA` have the same pattern for `toll_free` numbers. 26586 // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572 26587 // 26588 // That means that this `if` condition could be `true` for multiple countries from the list. 26589 // Currently, it just returns the first one, which is also the "main" country for the "country calling code". 26590 // In an example with `toll_free` numbers above, `"US"` would be returned even though 26591 // it could as well be `"CA"`. 26592 // 26593 // There was also a time when this attempted to be overly smart 26594 // and kept track of all such multiple matching countries 26595 // and then picked the one that matched the `defaultCountry`, if provided. 26596 // For example, with `toll_free` numbers above, and with `defaultCountry: "CA"`, 26597 // it would've returned `"CA"` instead of `"US"`. 26598 // Later it turned out that such "overly smart" behavior turned out to be just confusing, 26599 // so this "overly smart" country detection was reverted to returning the "main" country 26600 // for the "country calling code". 26601 // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154 26602 // 26603 return country; 26604 // 26605 // The "overly smart" behavior code: 26606 // 26607 // if (defaultCountry) { 26608 // if (country === defaultCountry) { 26609 // return country 26610 // } else { 26611 // matchingCountries.push(country) 26612 // } 26613 // } else { 26614 // return country 26615 // } 26616 } 26617 } 26618 26619 // // Return the first ("main") one of the `matchingCountries`. 26620 // if (matchingCountries.length > 0) { 26621 // return matchingCountries[0] 26622 // } 26623} 26624//# sourceMappingURL=getCountryByNationalNumber.js.map 26625 26626/***/ }), 26627
vendor: 1,965 bytes, lines 26628-26668
26628/***/ "../node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js": 26629/*!*********************************************************************!*\ 26630 !*** ../node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js ***! 26631 \*********************************************************************/ 26632/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26633 26634"use strict"; 26635__webpack_require__.r(__webpack_exports__); 26636/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26637/* harmony export */ "default": function() { return /* binding */ getIddPrefix; } 26638/* harmony export */ }); 26639/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 26640 26641 26642/** 26643 * Pattern that makes it easy to distinguish whether a region has a single 26644 * international dialing prefix or not. If a region has a single international 26645 * prefix (e.g. 011 in USA), it will be represented as a string that contains 26646 * a sequence of ASCII digits, and possibly a tilde, which signals waiting for 26647 * the tone. If there are multiple available international prefixes in a 26648 * region, they will be represented as a regex string that always contains one 26649 * or more characters that are not ASCII digits or a tilde. 26650 */ 26651var SINGLE_IDD_PREFIX_REG_EXP = /^[\d]+(?:[~\u2053\u223C\uFF5E][\d]+)?$/; 26652 26653// For regions that have multiple IDD prefixes 26654// a preferred IDD prefix is returned. 26655function getIddPrefix(country, callingCode, metadata) { 26656 var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 26657 countryMetadata.selectNumberingPlan(country, callingCode); 26658 if (countryMetadata.defaultIDDPrefix()) { 26659 return countryMetadata.defaultIDDPrefix(); 26660 } 26661 if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) { 26662 return countryMetadata.IDDPrefix(); 26663 } 26664} 26665//# sourceMappingURL=getIddPrefix.js.map 26666 26667/***/ }), 26668
vendor: 5,693 bytes, lines 26669-26769
26669/***/ "../node_modules/libphonenumber-js/es6/helpers/getNumberType.js": 26670/*!**********************************************************************!*\ 26671 !*** ../node_modules/libphonenumber-js/es6/helpers/getNumberType.js ***! 26672 \**********************************************************************/ 26673/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26674 26675"use strict"; 26676__webpack_require__.r(__webpack_exports__); 26677/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26678/* harmony export */ "default": function() { return /* binding */ getNumberType; }, 26679/* harmony export */ isNumberTypeEqualTo: function() { return /* binding */ isNumberTypeEqualTo; } 26680/* harmony export */ }); 26681/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 26682/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js"); 26683function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 26684function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 26685function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 26686 26687 26688var NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL']; 26689 26690// Finds out national phone number type (fixed line, mobile, etc) 26691function getNumberType(input, options, metadata) { 26692 // If assigning the `{}` default value is moved to the arguments above, 26693 // code coverage would decrease for some weird reason. 26694 options = options || {}; 26695 26696 // When `parse()` returns an empty object â `{}` â 26697 // that means that the phone number is malformed, 26698 // so it can't possibly be valid. 26699 if (!input.country && !input.countryCallingCode) { 26700 return; 26701 } 26702 metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 26703 metadata.selectNumberingPlan(input.country, input.countryCallingCode); 26704 var nationalNumber = options.v2 ? input.nationalNumber : input.phone; 26705 26706 // The following is copy-pasted from the original function: 26707 // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835 26708 26709 // Is this national number even valid for this country 26710 if (!(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, metadata.nationalNumberPattern())) { 26711 return; 26712 } 26713 26714 // Is it fixed line number 26715 if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) { 26716 // Because duplicate regular expressions are removed 26717 // to reduce metadata size, if "mobile" pattern is "" 26718 // then it means it was removed due to being a duplicate of the fixed-line pattern. 26719 // 26720 if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') { 26721 return 'FIXED_LINE_OR_MOBILE'; 26722 } 26723 26724 // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one. 26725 // For example, for "US" country. 26726 // Old metadata (< `1.0.18`) had a specific "types" data structure 26727 // that happened to be `undefined` for `MOBILE` in that case. 26728 // Newer metadata (>= `1.0.18`) has another data structure that is 26729 // not `undefined` for `MOBILE` in that case (it's just an empty array). 26730 // So this `if` is just for backwards compatibility with old metadata. 26731 if (!metadata.type('MOBILE')) { 26732 return 'FIXED_LINE_OR_MOBILE'; 26733 } 26734 26735 // Check if the number happens to qualify as both fixed line and mobile. 26736 // (no such country in the minimal metadata set) 26737 /* istanbul ignore if */ 26738 if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) { 26739 return 'FIXED_LINE_OR_MOBILE'; 26740 } 26741 return 'FIXED_LINE'; 26742 } 26743 for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) { 26744 var type = _step.value; 26745 if (isNumberTypeEqualTo(nationalNumber, type, metadata)) { 26746 return type; 26747 } 26748 } 26749} 26750function isNumberTypeEqualTo(nationalNumber, type, metadata) { 26751 type = metadata.type(type); 26752 if (!type || !type.pattern()) { 26753 return false; 26754 } 26755 // Check if any possible number lengths are present; 26756 // if so, we use them to avoid checking 26757 // the validation pattern if they don't match. 26758 // If they are absent, this means they match 26759 // the general description, which we have 26760 // already checked before a specific number type. 26761 if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) { 26762 return false; 26763 } 26764 return (0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, type.pattern()); 26765} 26766//# sourceMappingURL=getNumberType.js.map 26767 26768/***/ }), 26769
vendor: 2,032 bytes, lines 26770-26812
26770/***/ "../node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js": 26771/*!**************************************************************************************!*\ 26772 !*** ../node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js ***! 26773 \**************************************************************************************/ 26774/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26775 26776"use strict"; 26777__webpack_require__.r(__webpack_exports__); 26778/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26779/* harmony export */ "default": function() { return /* binding */ getPossibleCountriesForNumber; } 26780/* harmony export */ }); 26781/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 26782 26783 26784/** 26785 * Returns a list of countries that the phone number could potentially belong to. 26786 * @param {string} callingCode â Calling code. 26787 * @param {string} nationalNumber â National (significant) number. 26788 * @param {object} metadata â Metadata. 26789 * @return {string[]} A list of possible countries. 26790 */ 26791function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) { 26792 var _metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 26793 var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode); 26794 if (!possibleCountries) { 26795 return []; 26796 } 26797 return possibleCountries.filter(function (country) { 26798 return couldNationalNumberBelongToCountry(nationalNumber, country, metadata); 26799 }); 26800} 26801function couldNationalNumberBelongToCountry(nationalNumber, country, metadata) { 26802 var _metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 26803 _metadata.selectNumberingPlan(country); 26804 if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) { 26805 return true; 26806 } 26807 return false; 26808} 26809//# sourceMappingURL=getPossibleCountriesForNumber.js.map 26810 26811/***/ }), 26812
vendor: 819 bytes, lines 26813-26831
26813/***/ "../node_modules/libphonenumber-js/es6/helpers/isObject.js": 26814/*!*****************************************************************!*\ 26815 !*** ../node_modules/libphonenumber-js/es6/helpers/isObject.js ***! 26816 \*****************************************************************/ 26817/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26818 26819"use strict"; 26820__webpack_require__.r(__webpack_exports__); 26821/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26822/* harmony export */ "default": function() { return /* binding */ isObject; } 26823/* harmony export */ }); 26824var objectConstructor = {}.constructor; 26825function isObject(object) { 26826 return object !== undefined && object !== null && object.constructor === objectConstructor; 26827} 26828//# sourceMappingURL=isObject.js.map 26829 26830/***/ }), 26831
vendor: 6,019 bytes, lines 26832-26927
26832/***/ "../node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js": 26833/*!****************************************************************************!*\ 26834 !*** ../node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js ***! 26835 \****************************************************************************/ 26836/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26837 26838"use strict"; 26839__webpack_require__.r(__webpack_exports__); 26840/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26841/* harmony export */ VALID_PHONE_NUMBER: function() { return /* binding */ VALID_PHONE_NUMBER; }, 26842/* harmony export */ VALID_PHONE_NUMBER_WITH_EXTENSION: function() { return /* binding */ VALID_PHONE_NUMBER_WITH_EXTENSION; }, 26843/* harmony export */ "default": function() { return /* binding */ isViablePhoneNumber; }, 26844/* harmony export */ isViablePhoneNumberStart: function() { return /* binding */ isViablePhoneNumberStart; } 26845/* harmony export */ }); 26846/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js"); 26847/* harmony import */ var _extension_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extension/createExtensionPattern.js */ "../node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js"); 26848 26849 26850 26851// Regular expression of viable phone numbers. This is location independent. 26852// Checks we have at least three leading digits, and only valid punctuation, 26853// alpha characters and digits in the phone number. Does not include extension 26854// data. The symbol 'x' is allowed here as valid punctuation since it is often 26855// used as a placeholder for carrier codes, for example in Brazilian phone 26856// numbers. We also allow multiple '+' characters at the start. 26857// 26858// Corresponds to the following: 26859// [digits]{minLengthNsn}| 26860// plus_sign* 26861// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])* 26862// 26863// The first reg-ex is to allow short numbers (two digits long) to be parsed if 26864// they are entered as "15" etc, but only if there is no punctuation in them. 26865// The second expression restricts the number of digits to three or more, but 26866// then allows them to be in international form, and to have alpha-characters 26867// and punctuation. We split up the two reg-exes here and combine them when 26868// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it 26869// with ^ and append $ to each branch. 26870// 26871// "Note VALID_PUNCTUATION starts with a -, 26872// so must be the first in the range" (c) Google devs. 26873// (wtf did they mean by saying that; probably nothing) 26874// 26875var MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']{' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN + '}'; 26876// 26877// And this is the second reg-exp: 26878// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp) 26879// 26880var VALID_PHONE_NUMBER = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + ']*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '){3,}' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']*'; 26881 26882// This regular expression isn't present in Google's `libphonenumber` 26883// and is only used to determine whether the phone number being input 26884// is too short for it to even consider it a "valid" number. 26885// This is just a way to differentiate between a really invalid phone 26886// number like "abcde" and a valid phone number that a user has just 26887// started inputting, like "+1" or "1": both these cases would be 26888// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this 26889// library can provide a more detailed error message â whether it's 26890// really "not a number", or is it just a start of a valid phone number. 26891var VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + ']*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '){1,2}' + '$', 'i'); 26892var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER + 26893// Phone number extensions 26894'(?:' + (0,_extension_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_1__["default"])() + ')?'; 26895 26896// The combined regular expression for valid phone numbers: 26897// 26898var VALID_PHONE_NUMBER_PATTERN = new RegExp( 26899// Either a short two-digit-only phone number 26900'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' + 26901// Or a longer fully parsed phone number (min 3 characters) 26902'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i'); 26903 26904// Checks to see if the string of characters could possibly be a phone number at 26905// all. At the moment, checks to see that the string begins with at least 2 26906// digits, ignoring any punctuation commonly found in phone numbers. This method 26907// does not require the number to be normalized in advance - but does assume 26908// that leading non-number symbols have been removed, such as by the method 26909// `extract_possible_number`. 26910// 26911function isViablePhoneNumber(number) { 26912 return number.length >= _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number); 26913} 26914 26915// This is just a way to differentiate between a really invalid phone 26916// number like "abcde" and a valid phone number that a user has just 26917// started inputting, like "+1" or "1": both these cases would be 26918// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this 26919// library can provide a more detailed error message â whether it's 26920// really "not a number", or is it just a start of a valid phone number. 26921function isViablePhoneNumberStart(number) { 26922 return VALID_PHONE_NUMBER_START_REG_EXP.test(number); 26923} 26924//# sourceMappingURL=isViablePhoneNumber.js.map 26925 26926/***/ }), 26927
vendor: 1,116 bytes, lines 26928-26953
26928/***/ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js": 26929/*!************************************************************************!*\ 26930 !*** ../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js ***! 26931 \************************************************************************/ 26932/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26933 26934"use strict"; 26935__webpack_require__.r(__webpack_exports__); 26936/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26937/* harmony export */ "default": function() { return /* binding */ matchesEntirely; } 26938/* harmony export */ }); 26939/** 26940 * Checks whether the entire input sequence can be matched 26941 * against the regular expression. 26942 * @return {boolean} 26943 */ 26944function matchesEntirely(text, regularExpressionText) { 26945 // If the assigning of the `''` default value is moved to the arguments above, 26946 // the code coverage would decrease for some weird reason. 26947 text = text || ''; 26948 return new RegExp('^(?:' + regularExpressionText + ')$').test(text); 26949} 26950//# sourceMappingURL=matchesEntirely.js.map 26951 26952/***/ }), 26953
vendor: 2,344 bytes, lines 26954-26996
26954/***/ "../node_modules/libphonenumber-js/es6/helpers/mergeArrays.js": 26955/*!********************************************************************!*\ 26956 !*** ../node_modules/libphonenumber-js/es6/helpers/mergeArrays.js ***! 26957 \********************************************************************/ 26958/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 26959 26960"use strict"; 26961__webpack_require__.r(__webpack_exports__); 26962/* harmony export */ __webpack_require__.d(__webpack_exports__, { 26963/* harmony export */ "default": function() { return /* binding */ mergeArrays; } 26964/* harmony export */ }); 26965function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 26966function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 26967function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 26968/** 26969 * Merges two arrays. 26970 * @param {*} a 26971 * @param {*} b 26972 * @return {*} 26973 */ 26974function mergeArrays(a, b) { 26975 var merged = a.slice(); 26976 for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) { 26977 var element = _step.value; 26978 if (a.indexOf(element) < 0) { 26979 merged.push(element); 26980 } 26981 } 26982 return merged.sort(function (a, b) { 26983 return a - b; 26984 }); 26985 26986 // ES6 version, requires Set polyfill. 26987 // let merged = new Set(a) 26988 // for (const element of b) { 26989 // merged.add(i) 26990 // } 26991 // return Array.from(merged).sort((a, b) => a - b) 26992} 26993//# sourceMappingURL=mergeArrays.js.map 26994 26995/***/ }), 26996
vendor: 4,779 bytes, lines 26997-27127
26997/***/ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js": 26998/*!********************************************************************!*\ 26999 !*** ../node_modules/libphonenumber-js/es6/helpers/parseDigits.js ***! 27000 \********************************************************************/ 27001/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 27002 27003"use strict"; 27004__webpack_require__.r(__webpack_exports__); 27005/* harmony export */ __webpack_require__.d(__webpack_exports__, { 27006/* harmony export */ DIGITS: function() { return /* binding */ DIGITS; }, 27007/* harmony export */ "default": function() { return /* binding */ parseDigits; }, 27008/* harmony export */ parseDigit: function() { return /* binding */ parseDigit; } 27009/* harmony export */ }); 27010function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 27011function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 27012function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 27013// These mappings map a character (key) to a specific digit that should 27014// replace it for normalization purposes. Non-European digits that 27015// may be used in phone numbers are mapped to a European equivalent. 27016// 27017// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`. 27018// 27019var DIGITS = { 27020 '0': '0', 27021 '1': '1', 27022 '2': '2', 27023 '3': '3', 27024 '4': '4', 27025 '5': '5', 27026 '6': '6', 27027 '7': '7', 27028 '8': '8', 27029 '9': '9', 27030 "\uFF10": '0', 27031 // Fullwidth digit 0 27032 "\uFF11": '1', 27033 // Fullwidth digit 1 27034 "\uFF12": '2', 27035 // Fullwidth digit 2 27036 "\uFF13": '3', 27037 // Fullwidth digit 3 27038 "\uFF14": '4', 27039 // Fullwidth digit 4 27040 "\uFF15": '5', 27041 // Fullwidth digit 5 27042 "\uFF16": '6', 27043 // Fullwidth digit 6 27044 "\uFF17": '7', 27045 // Fullwidth digit 7 27046 "\uFF18": '8', 27047 // Fullwidth digit 8 27048 "\uFF19": '9', 27049 // Fullwidth digit 9 27050 "\u0660": '0', 27051 // Arabic-indic digit 0 27052 "\u0661": '1', 27053 // Arabic-indic digit 1 27054 "\u0662": '2', 27055 // Arabic-indic digit 2 27056 "\u0663": '3', 27057 // Arabic-indic digit 3 27058 "\u0664": '4', 27059 // Arabic-indic digit 4 27060 "\u0665": '5', 27061 // Arabic-indic digit 5 27062 "\u0666": '6', 27063 // Arabic-indic digit 6 27064 "\u0667": '7', 27065 // Arabic-indic digit 7 27066 "\u0668": '8', 27067 // Arabic-indic digit 8 27068 "\u0669": '9', 27069 // Arabic-indic digit 9 27070 "\u06F0": '0', 27071 // Eastern-Arabic digit 0 27072 "\u06F1": '1', 27073 // Eastern-Arabic digit 1 27074 "\u06F2": '2', 27075 // Eastern-Arabic digit 2 27076 "\u06F3": '3', 27077 // Eastern-Arabic digit 3 27078 "\u06F4": '4', 27079 // Eastern-Arabic digit 4 27080 "\u06F5": '5', 27081 // Eastern-Arabic digit 5 27082 "\u06F6": '6', 27083 // Eastern-Arabic digit 6 27084 "\u06F7": '7', 27085 // Eastern-Arabic digit 7 27086 "\u06F8": '8', 27087 // Eastern-Arabic digit 8 27088 "\u06F9": '9' // Eastern-Arabic digit 9 27089}; 27090function parseDigit(character) { 27091 return DIGITS[character]; 27092} 27093 27094/** 27095 * Parses phone number digits from a string. 27096 * Drops all punctuation leaving only digits. 27097 * Also converts wide-ascii and arabic-indic numerals to conventional numerals. 27098 * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`. 27099 * @param {string} string 27100 * @return {string} 27101 * @example 27102 * ```js 27103 * parseDigits('8 (800) 555') 27104 * // Outputs '8800555'. 27105 * ``` 27106 */ 27107function parseDigits(string) { 27108 var result = ''; 27109 // Using `.split('')` here instead of normal `for ... of` 27110 // because the importing application doesn't neccessarily include an ES6 polyfill. 27111 // The `.split('')` approach discards "exotic" UTF-8 characters 27112 // (the ones consisting of four bytes) but digits 27113 // (including non-European ones) don't fall into that range 27114 // so such "exotic" characters would be discarded anyway. 27115 for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) { 27116 var character = _step.value; 27117 var digit = parseDigit(character); 27118 if (digit) { 27119 result += digit; 27120 } 27121 } 27122 return result; 27123} 27124//# sourceMappingURL=parseDigits.js.map 27125 27126/***/ }), 27127
vendor: 2,096 bytes, lines 27128-27172
27128/***/ "../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js": 27129/*!***********************************************************************!*\ 27130 !*** ../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js ***! 27131 \***********************************************************************/ 27132/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 27133 27134"use strict"; 27135__webpack_require__.r(__webpack_exports__); 27136/* harmony export */ __webpack_require__.d(__webpack_exports__, { 27137/* harmony export */ "default": function() { return /* binding */ stripIddPrefix; } 27138/* harmony export */ }); 27139/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 27140/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js"); 27141 27142 27143var CAPTURING_DIGIT_PATTERN = new RegExp('([' + _constants_js__WEBPACK_IMPORTED_MODULE_1__.VALID_DIGITS + '])'); 27144function stripIddPrefix(number, country, callingCode, metadata) { 27145 if (!country) { 27146 return; 27147 } 27148 // Check if the number is IDD-prefixed. 27149 var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 27150 countryMetadata.selectNumberingPlan(country, callingCode); 27151 var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix()); 27152 if (number.search(IDDPrefixPattern) !== 0) { 27153 return; 27154 } 27155 // Strip IDD prefix. 27156 number = number.slice(number.match(IDDPrefixPattern)[0].length); 27157 // If there're any digits after an IDD prefix, 27158 // then those digits are a country calling code. 27159 // Since no country code starts with a `0`, 27160 // the code below validates that the next digit (if present) is not `0`. 27161 var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN); 27162 if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) { 27163 if (matchedGroups[1] === '0') { 27164 return; 27165 } 27166 } 27167 return number; 27168} 27169//# sourceMappingURL=stripIddPrefix.js.map 27170 27171/***/ }), 27172
vendor: 4,060 bytes, lines 27173-27266
27173/***/ "../node_modules/libphonenumber-js/es6/isPossible.js": 27174/*!***********************************************************!*\ 27175 !*** ../node_modules/libphonenumber-js/es6/isPossible.js ***! 27176 \***********************************************************/ 27177/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 27178 27179"use strict"; 27180__webpack_require__.r(__webpack_exports__); 27181/* harmony export */ __webpack_require__.d(__webpack_exports__, { 27182/* harmony export */ "default": function() { return /* binding */ isPossiblePhoneNumber; }, 27183/* harmony export */ isPossibleNumber: function() { return /* binding */ isPossibleNumber; } 27184/* harmony export */ }); 27185/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 27186/* harmony import */ var _helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/checkNumberLength.js */ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js"); 27187 27188 27189 27190/** 27191 * Checks if a phone number is "possible" (basically just checks its length). 27192 * 27193 * isPossible(phoneNumberInstance, { ..., v2: true }, metadata) 27194 * 27195 * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata) 27196 * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata) 27197 * 27198 * @param {object|PhoneNumber} input â If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`. 27199 * @param {object} [options] 27200 * @param {object} metadata 27201 * @return {string} 27202 */ 27203function isPossiblePhoneNumber(input, options, metadata) { 27204 /* istanbul ignore if */ 27205 if (options === undefined) { 27206 options = {}; 27207 } 27208 metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 27209 if (options.v2) { 27210 if (!input.countryCallingCode) { 27211 throw new Error('Invalid phone number object passed'); 27212 } 27213 metadata.selectNumberingPlan(input.countryCallingCode); 27214 } else { 27215 if (!input.phone) { 27216 return false; 27217 } 27218 if (input.country) { 27219 if (!metadata.hasCountry(input.country)) { 27220 throw new Error("Unknown country: ".concat(input.country)); 27221 } 27222 metadata.selectNumberingPlan(input.country); 27223 } else { 27224 if (!input.countryCallingCode) { 27225 throw new Error('Invalid phone number object passed'); 27226 } 27227 metadata.selectNumberingPlan(input.countryCallingCode); 27228 } 27229 } 27230 27231 // Old metadata (< 1.0.18) had no "possible length" data. 27232 if (metadata.possibleLengths()) { 27233 return isPossibleNumber(input.phone || input.nationalNumber, input.country, metadata); 27234 } else { 27235 // There was a bug between `1.7.35` and `1.7.37` where "possible_lengths" 27236 // were missing for "non-geographical" numbering plans. 27237 // Just assume the number is possible in such cases: 27238 // it's unlikely that anyone generated their custom metadata 27239 // in that short period of time (one day). 27240 // This code can be removed in some future major version update. 27241 if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) { 27242 // "Non-geographic entities" did't have `possibleLengths` 27243 // due to a bug in metadata generation process. 27244 return true; 27245 } else { 27246 throw new Error('Missing "possibleLengths" in metadata. Perhaps the metadata has been generated before v1.0.18.'); 27247 } 27248 } 27249} 27250function isPossibleNumber(nationalNumber, country, metadata) { 27251 //, isInternational) { 27252 switch ((0,_helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, country, metadata)) { 27253 case 'IS_POSSIBLE': 27254 return true; 27255 // This library ignores "local-only" phone numbers (for simplicity). 27256 // See the readme for more info on what are "local-only" phone numbers. 27257 // case 'IS_POSSIBLE_LOCAL_ONLY': 27258 // return !isInternational 27259 default: 27260 return false; 27261 } 27262} 27263//# sourceMappingURL=isPossible.js.map 27264 27265/***/ }), 27266
vendor: 3,739 bytes, lines 27267-27340
27267/***/ "../node_modules/libphonenumber-js/es6/isValid.js": 27268/*!********************************************************!*\ 27269 !*** ../node_modules/libphonenumber-js/es6/isValid.js ***! 27270 \********************************************************/ 27271/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 27272 27273"use strict"; 27274__webpack_require__.r(__webpack_exports__); 27275/* harmony export */ __webpack_require__.d(__webpack_exports__, { 27276/* harmony export */ "default": function() { return /* binding */ isValidNumber; } 27277/* harmony export */ }); 27278/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js"); 27279/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js"); 27280/* harmony import */ var _helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/getNumberType.js */ "../node_modules/libphonenumber-js/es6/helpers/getNumberType.js"); 27281 27282 27283 27284 27285/** 27286 * Checks if a given phone number is valid. 27287 * 27288 * isValid(phoneNumberInstance, { ..., v2: true }, metadata) 27289 * 27290 * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata) 27291 * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata) 27292 * 27293 * If the `number` is a string, it will be parsed to an object, 27294 * but only if it contains only valid phone number characters (including punctuation). 27295 * If the `number` is an object, it is used as is. 27296 * 27297 * The optional `defaultCountry` argument is the default country. 27298 * I.e. it does not restrict to just that country, 27299 * e.g. in those cases where several countries share 27300 * the same phone numbering rules (NANPA, Britain, etc). 27301 * For example, even though the number `07624 369230` 27302 * belongs to the Isle of Man ("IM" country code) 27303 * calling `isValidNumber('07624369230', 'GB', metadata)` 27304 * still returns `true` because the country is not restricted to `GB`, 27305 * it's just that `GB` is the default one for the phone numbering rules. 27306 * For restricting the country see `isValidNumberForRegion()` 27307 * though restricting a country might not be a good idea. 27308 * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion 27309 * 27310 * Examples: 27311 * 27312 * ```js 27313 * isValidNumber('+78005553535', metadata) 27314 * isValidNumber('8005553535', 'RU', metadata) 27315 * isValidNumber('88005553535', 'RU', metadata) 27316 * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata) 27317 * ``` 27318 */ 27319function isValidNumber(input, options, metadata) { 27320 // If assigning the `{}` default value is moved to the arguments above, 27321 // code coverage would decrease for some weird reason. 27322 options = options || {}; 27323 metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); 27324 metadata.selectNumberingPlan(input.country, input.countryCallingCode); 27325 27326 // By default, countries only have type regexps when it's required for 27327 // distinguishing different countries having the same `countryCallingCode`. 27328 if (metadata.hasTypes()) { 27329 return (0,_helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_2__["default"])(input, options, metadata.metadata) !== undefined; 27330 } 27331 27332 // If there are no type regexps for this country in metadata then use 27333 // `nationalNumberPattern` as a "better than nothing" replacement. 27334 var nationalNumber = options.v2 ? input.nationalNumber : input.phone; 27335 return (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, metadata.nationalNumberPattern()); 27336} 27337//# sourceMappingURL=isValid.js.map 27338 27339/***/ }), 27340
vendor: 22,969 bytes, lines 27341-27988
27341/***/ "../node_modules/libphonenumber-js/es6/metadata.js": 27342/*!*********************************************************!*\ 27343 !*** ../node_modules/libphonenumber-js/es6/metadata.js ***! 27344 \*********************************************************/ 27345/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 27346 27347"use strict"; 27348__webpack_require__.r(__webpack_exports__); 27349/* harmony export */ __webpack_require__.d(__webpack_exports__, { 27350/* harmony export */ "default": function() { return /* binding */ Metadata; }, 27351/* harmony export */ getCountryCallingCode: function() { return /* binding */ getCountryCallingCode; }, 27352/* harmony export */ getExtPrefix: function() { return /* binding */ getExtPrefix; }, 27353/* harmony export */ isSupportedCountry: function() { return /* binding */ isSupportedCountry; }, 27354/* harmony export */ validateMetadata: function() { return /* binding */ validateMetadata; } 27355/* harmony export */ }); 27356/* harmony import */ var _tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/semver-compare.js */ "../node_modules/libphonenumber-js/es6/tools/semver-compare.js"); 27357/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/isObject.js */ "../node_modules/libphonenumber-js/es6/helpers/isObject.js"); 27358function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); } 27359function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 27360function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 27361function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 27362function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 27363function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 27364function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 27365 27366 27367 27368// Added "possibleLengths" and renamed 27369// "country_phone_code_to_countries" to "country_calling_codes". 27370var V2 = '1.0.18'; 27371 27372// Added "idd_prefix" and "default_idd_prefix". 27373var V3 = '1.2.0'; 27374 27375// Moved `001` country code to "nonGeographic" section of metadata. 27376var V4 = '1.7.35'; 27377var DEFAULT_EXT_PREFIX = ' ext. '; 27378var CALLING_CODE_REG_EXP = /^\d+$/; 27379 27380/** 27381 * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md 27382 */ 27383var Metadata = /*#__PURE__*/function () { 27384 function Metadata(metadata) { 27385 _classCallCheck(this, Metadata); 27386 validateMetadata(metadata); 27387 this.metadata = metadata; 27388 setVersion.call(this, metadata); 27389 } 27390 return _createClass(Metadata, [{ 27391 key: "getCountries", 27392 value: function getCountries() { 27393 return Object.keys(this.metadata.countries).filter(function (_) { 27394 return _ !== '001'; 27395 }); 27396 } 27397 }, { 27398 key: "getCountryMetadata", 27399 value: function getCountryMetadata(countryCode) { 27400 return this.metadata.countries[countryCode]; 27401 } 27402 }, { 27403 key: "nonGeographic", 27404 value: function nonGeographic() { 27405 if (this.v1 || this.v2 || this.v3) return; 27406 // `nonGeographical` was a typo. 27407 // It's present in metadata generated from `1.7.35` to `1.7.37`. 27408 // The test case could be found by searching for "nonGeographical". 27409 return this.metadata.nonGeographic || this.metadata.nonGeographical; 27410 } 27411 }, { 27412 key: "hasCountry", 27413 value: function hasCountry(country) { 27414 return this.getCountryMetadata(country) !== undefined; 27415 } 27416 }, { 27417 key: "hasCallingCode", 27418 value: function hasCallingCode(callingCode) { 27419 if (this.getCountryCodesForCallingCode(callingCode)) { 27420 return true; 27421 } 27422 if (this.nonGeographic()) { 27423 if (this.nonGeographic()[callingCode]) { 27424 return true; 27425 } 27426 } else { 27427 // A hacky workaround for old custom metadata (generated before V4). 27428 var countryCodes = this.countryCallingCodes()[callingCode]; 27429 if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') { 27430 return true; 27431 } 27432 } 27433 } 27434 }, { 27435 key: "isNonGeographicCallingCode", 27436 value: function isNonGeographicCallingCode(callingCode) { 27437 if (this.nonGeographic()) { 27438 return this.nonGeographic()[callingCode] ? true : false; 27439 } else { 27440 return this.getCountryCodesForCallingCode(callingCode) ? false : true; 27441 } 27442 } 27443 27444 // Deprecated. 27445 }, { 27446 key: "country", 27447 value: function country(countryCode) { 27448 return this.selectNumberingPlan(countryCode); 27449 } 27450 }, { 27451 key: "selectNumberingPlan", 27452 value: function selectNumberingPlan(countryCode, callingCode) { 27453 // Supports just passing `callingCode` as the first argument. 27454 if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) { 27455 callingCode = countryCode; 27456 countryCode = null; 27457 } 27458 if (countryCode && countryCode !== '001') { 27459 if (!this.hasCountry(countryCode)) { 27460 throw new Error("Unknown country: ".concat(countryCode)); 27461 } 27462 this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this); 27463 } else if (callingCode) { 27464 if (!this.hasCallingCode(callingCode)) { 27465 throw new Error("Unknown calling code: ".concat(callingCode)); 27466 } 27467 this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this); 27468 } else { 27469 this.numberingPlan = undefined; 27470 } 27471 return this; 27472 } 27473 }, { 27474 key: "getCountryCodesForCallingCode", 27475 value: function getCountryCodesForCallingCode(callingCode) { 27476 var countryCodes = this.countryCallingCodes()[callingCode]; 27477 if (countryCodes) { 27478 // Metadata before V4 included "non-geographic entity" calling codes 27479 // inside `country_calling_codes` (for example, `"881":["001"]`). 27480 // Now the semantics of `country_calling_codes` has changed: 27481 // it's specifically for "countries" now. 27482 // Older versions of custom metadata will simply skip parsing 27483 // "non-geographic entity" phone numbers with new versions 27484 // of this library: it's not considered a bug, 27485 // because such numbers are extremely rare, 27486 // and developers extremely rarely use custom metadata. 27487 if (countryCodes.length === 1 && countryCodes[0].length === 3) { 27488 return; 27489 } 27490 return countryCodes; 27491 } 27492 } 27493 }, { 27494 key: "getCountryCodeForCallingCode", 27495 value: function getCountryCodeForCallingCode(callingCode) { 27496 var countryCodes = this.getCountryCodesForCallingCode(callingCode); 27497 if (countryCodes) { 27498 return countryCodes[0]; 27499 } 27500 } 27501 }, { 27502 key: "getNumberingPlanMetadata", 27503 value: function getNumberingPlanMetadata(callingCode) { 27504 var countryCode = this.getCountryCodeForCallingCode(callingCode); 27505 if (countryCode) { 27506 return this.getCountryMetadata(countryCode); 27507 } 27508 if (this.nonGeographic()) { 27509 var metadata = this.nonGeographic()[callingCode]; 27510 if (metadata) { 27511 return metadata; 27512 } 27513 } else { 27514 // A hacky workaround for old custom metadata (generated before V4). 27515 // In that metadata, there was no concept of "non-geographic" metadata 27516 // so metadata for `001` country code was stored along with other countries. 27517 // The test case can be found by searching for: 27518 // "should work around `nonGeographic` metadata not existing". 27519 var countryCodes = this.countryCallingCodes()[callingCode]; 27520 if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') { 27521 return this.metadata.countries['001']; 27522 } 27523 } 27524 } 27525 27526 // Deprecated. 27527 }, { 27528 key: "countryCallingCode", 27529 value: function countryCallingCode() { 27530 return this.numberingPlan.callingCode(); 27531 } 27532 27533 // Deprecated. 27534 }, { 27535 key: "IDDPrefix", 27536 value: function IDDPrefix() { 27537 return this.numberingPlan.IDDPrefix(); 27538 } 27539 27540 // Deprecated. 27541 }, { 27542 key: "defaultIDDPrefix", 27543 value: function defaultIDDPrefix() { 27544 return this.numberingPlan.defaultIDDPrefix(); 27545 } 27546 27547 // Deprecated. 27548 }, { 27549 key: "nationalNumberPattern", 27550 value: function nationalNumberPattern() { 27551 return this.numberingPlan.nationalNumberPattern(); 27552 } 27553 27554 // Deprecated. 27555 }, { 27556 key: "possibleLengths", 27557 value: function possibleLengths() { 27558 return this.numberingPlan.possibleLengths(); 27559 } 27560 27561 // Deprecated. 27562 }, { 27563 key: "formats", 27564 value: function formats() { 27565 return this.numberingPlan.formats(); 27566 } 27567 27568 // Deprecated. 27569 }, { 27570 key: "nationalPrefixForParsing", 27571 value: function nationalPrefixForParsing() { 27572 return this.numberingPlan.nationalPrefixForParsing(); 27573 } 27574 27575 // Deprecated. 27576 }, { 27577 key: "nationalPrefixTransformRule", 27578 value: function nationalPrefixTransformRule() { 27579 return this.numberingPlan.nationalPrefixTransformRule(); 27580 } 27581 27582 // Deprecated. 27583 }, { 27584 key: "leadingDigits", 27585 value: function leadingDigits() { 27586 return this.numberingPlan.leadingDigits(); 27587 } 27588 27589 // Deprecated. 27590 }, { 27591 key: "hasTypes", 27592 value: function hasTypes() { 27593 return this.numberingPlan.hasTypes(); 27594 } 27595 27596 // Deprecated. 27597 }, { 27598 key: "type", 27599 value: function type(_type) { 27600 return this.numberingPlan.type(_type); 27601 } 27602 27603 // Deprecated. 27604 }, { 27605 key: "ext", 27606 value: function ext() { 27607 return this.numberingPlan.ext(); 27608 } 27609 }, { 27610 key: "countryCallingCodes", 27611 value: function countryCallingCodes() { 27612 if (this.v1) return this.metadata.country_phone_code_to_countries; 27613 return this.metadata.country_calling_codes; 27614 } 27615 27616 // Deprecated. 27617 }, { 27618 key: "chooseCountryByCountryCallingCode", 27619 value: function chooseCountryByCountryCallingCode(callingCode) { 27620 return this.selectNumberingPlan(callingCode); 27621 } 27622 }, { 27623 key: "hasSelectedNumberingPlan", 27624 value: function hasSelectedNumberingPlan() { 27625 return this.numberingPlan !== undefined; 27626 } 27627 }]); 27628}(); 27629 27630var NumberingPlan = /*#__PURE__*/function () { 27631 function NumberingPlan(metadata, globalMetadataObject) { 27632 _classCallCheck(this, NumberingPlan); 27633 this.globalMetadataObject = globalMetadataObject; 27634 this.metadata = metadata; 27635 setVersion.call(this, globalMetadataObject.metadata); 27636 } 27637 return _createClass(NumberingPlan, [{ 27638 key: "callingCode", 27639 value: function callingCode() { 27640 return this.metadata[0]; 27641 } 27642 27643 // Formatting information for regions which share 27644 // a country calling code is contained by only one region 27645 // for performance reasons. For example, for NANPA region 27646 // ("North American Numbering Plan Administration", 27647 // which includes USA, Canada, Cayman Islands, Bahamas, etc) 27648 // it will be contained in the metadata for `US`. 27649 }, { 27650 key: "getDefaultCountryMetadataForRegion", 27651 value: function getDefaultCountryMetadataForRegion() { 27652 return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode()); 27653 } 27654 27655 // Is always present. 27656 }, { 27657 key: "IDDPrefix", 27658 value: function IDDPrefix() { 27659 if (this.v1 || this.v2) return; 27660 return this.metadata[1]; 27661 } 27662 27663 // Is only present when a country supports multiple IDD prefixes. 27664 }, { 27665 key: "defaultIDDPrefix", 27666 value: function defaultIDDPrefix() { 27667 if (this.v1 || this.v2) return; 27668 return this.metadata[12]; 27669 } 27670 }, { 27671 key: "nationalNumberPattern", 27672 value: function nationalNumberPattern() { 27673 if (this.v1 || this.v2) return this.metadata[1]; 27674 return this.metadata[2]; 27675 } 27676 27677 // "possible length" data is always present in Google's metadata. 27678 }, { 27679 key: "possibleLengths", 27680 value: function possibleLengths() { 27681 if (this.v1) return; 27682 return this.metadata[this.v2 ? 2 : 3]; 27683 } 27684 }, { 27685 key: "_getFormats", 27686 value: function _getFormats(metadata) { 27687 return metadata[this.v1 ? 2 : this.v2 ? 3 : 4]; 27688 } 27689 27690 // For countries of the same region (e.g. NANPA) 27691 // formats are all stored in the "main" country for that region. 27692 // E.g. "RU" and "KZ", "US" and "CA". 27693 }, { 27694 key: "formats", 27695 value: function formats() { 27696 var _this = this; 27697 var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || []; 27698 return formats.map(function (_) { 27699 return new Format(_, _this); 27700 }); 27701 } 27702 }, { 27703 key: "nationalPrefix", 27704 value: function nationalPrefix() { 27705 return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5]; 27706 } 27707 }, { 27708 key: "_getNationalPrefixFormattingRule", 27709 value: function _getNationalPrefixFormattingRule(metadata) { 27710 return metadata[this.v1 ? 4 : this.v2 ? 5 : 6]; 27711 } 27712 27713 // For countries of the same region (e.g. NANPA) 27714 // national prefix formatting rule is stored in the "main" country for that region. 27715 // E.g. "RU" and "KZ", "US" and "CA". 27716 }, { 27717 key: "nationalPrefixFormattingRule", 27718 value: function nationalPrefixFormattingRule() { 27719 return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion()); 27720 } 27721 }, { 27722 key: "_nationalPrefixForParsing", 27723 value: function _nationalPrefixForParsing() { 27724 return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7]; 27725 } 27726 }, { 27727 key: "nationalPrefixForParsing", 27728 value: function nationalPrefixForParsing() { 27729 // If `national_prefix_for_parsing` is not set explicitly, 27730 // then infer it from `national_prefix` (if any) 27731 return this._nationalPrefixForParsing() || this.nationalPrefix(); 27732 } 27733 }, { 27734 key: "nationalPrefixTransformRule", 27735 value: function nationalPrefixTransformRule() { 27736 return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8]; 27737 } 27738 }, { 27739 key: "_getNationalPrefixIsOptionalWhenFormatting", 27740 value: function _getNationalPrefixIsOptionalWhenFormatting() { 27741 return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9]; 27742 } 27743 27744 // For countries of the same region (e.g. NANPA) 27745 // "national prefix is optional when formatting" flag is 27746 // stored in the "main" country for that region. 27747 // E.g. "RU" and "KZ", "US" and "CA". 27748 }, { 27749 key: "nationalPrefixIsOptionalWhenFormattingInNationalFormat", 27750 value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() { 27751 return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion()); 27752 } 27753 }, { 27754 key: "leadingDigits", 27755 value: function leadingDigits() { 27756 return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10]; 27757 } 27758 }, { 27759 key: "types", 27760 value: function types() { 27761 return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11]; 27762 } 27763 }, { 27764 key: "hasTypes", 27765 value: function hasTypes() { 27766 // Versions 1.2.0 - 1.2.4: can be `[]`. 27767 /* istanbul ignore next */ 27768 if (this.types() && this.types().length === 0) { 27769 return false; 27770 } 27771 // Versions <= 1.2.4: can be `undefined`. 27772 // Version >= 1.2.5: can be `0`. 27773 return !!this.types(); 27774 } 27775 }, { 27776 key: "type", 27777 value: function type(_type2) { 27778 if (this.hasTypes() && getType(this.types(), _type2)) { 27779 return new Type(getType(this.types(), _type2), this); 27780 } 27781 } 27782 }, { 27783 key: "ext", 27784 value: function ext() { 27785 if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX; 27786 return this.metadata[13] || DEFAULT_EXT_PREFIX; 27787 } 27788 }]); 27789}(); 27790var Format = /*#__PURE__*/function () { 27791 function Format(format, metadata) { 27792 _classCallCheck(this, Format); 27793 this._format = format; 27794 this.metadata = metadata; 27795 } 27796 return _createClass(Format, [{ 27797 key: "pattern", 27798 value: function pattern() { 27799 return this._format[0]; 27800 } 27801 }, { 27802 key: "format", 27803 value: function format() { 27804 return this._format[1]; 27805 } 27806 }, { 27807 key: "leadingDigitsPatterns", 27808 value: function leadingDigitsPatterns() { 27809 return this._format[2] || []; 27810 } 27811 }, { 27812 key: "nationalPrefixFormattingRule", 27813 value: function nationalPrefixFormattingRule() { 27814 return this._format[3] || this.metadata.nationalPrefixFormattingRule(); 27815 } 27816 }, { 27817 key: "nationalPrefixIsOptionalWhenFormattingInNationalFormat", 27818 value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() { 27819 return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat(); 27820 } 27821 }, { 27822 key: "nationalPrefixIsMandatoryWhenFormattingInNationalFormat", 27823 value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() { 27824 // National prefix is omitted if there's no national prefix formatting rule 27825 // set for this country, or when the national prefix formatting rule 27826 // contains no national prefix itself, or when this rule is set but 27827 // national prefix is optional for this phone number format 27828 // (and it is not enforced explicitly) 27829 return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat(); 27830 } 27831 27832 // Checks whether national prefix formatting rule contains national prefix. 27833 }, { 27834 key: "usesNationalPrefix", 27835 value: function usesNationalPrefix() { 27836 return this.nationalPrefixFormattingRule() && 27837 // Check that national prefix formatting rule is not a "dummy" one. 27838 !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule()) 27839 // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0` 27840 // when `national_prefix_formatting_rule` is not present. 27841 // So, `true` or `false` are returned explicitly here, so that 27842 // `0` number isn't returned. 27843 ? true : false; 27844 } 27845 }, { 27846 key: "internationalFormat", 27847 value: function internationalFormat() { 27848 return this._format[5] || this.format(); 27849 } 27850 }]); 27851}(); 27852/** 27853 * A pattern that is used to determine if the national prefix formatting rule 27854 * has the first group only, i.e., does not start with the national prefix. 27855 * Note that the pattern explicitly allows for unbalanced parentheses. 27856 */ 27857var FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\(?\$1\)?$/; 27858var Type = /*#__PURE__*/function () { 27859 function Type(type, metadata) { 27860 _classCallCheck(this, Type); 27861 this.type = type; 27862 this.metadata = metadata; 27863 } 27864 return _createClass(Type, [{ 27865 key: "pattern", 27866 value: function pattern() { 27867 if (this.metadata.v1) return this.type; 27868 return this.type[0]; 27869 } 27870 }, { 27871 key: "possibleLengths", 27872 value: function possibleLengths() { 27873 if (this.metadata.v1) return; 27874 return this.type[1] || this.metadata.possibleLengths(); 27875 } 27876 }]); 27877}(); 27878function getType(types, type) { 27879 switch (type) { 27880 case 'FIXED_LINE': 27881 return types[0]; 27882 case 'MOBILE': 27883 return types[1]; 27884 case 'TOLL_FREE': 27885 return types[2]; 27886 case 'PREMIUM_RATE': 27887 return types[3]; 27888 case 'PERSONAL_NUMBER': 27889 return types[4]; 27890 case 'VOICEMAIL': 27891 return types[5]; 27892 case 'UAN': 27893 return types[6]; 27894 case 'PAGER': 27895 return types[7]; 27896 case 'VOIP': 27897 return types[8]; 27898 case 'SHARED_COST': 27899 return types[9]; 27900 } 27901} 27902function validateMetadata(metadata) { 27903 if (!metadata) { 27904 throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.'); 27905 } 27906 27907 // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`. 27908 // For that reason, it's not used in this detection algorithm. 27909 // Instead, it detects by `countries: {}` property existence. 27910 if (!(0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metadata) || !(0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metadata.countries)) { 27911 throw new Error("[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got ".concat((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, ".")); 27912 } 27913} 27914 27915// Babel transforms `typeof` into some "branches" 27916// so istanbul will show this as "branch not covered". 27917/* istanbul ignore next */ 27918var typeOf = function typeOf(_) { 27919 return _typeof(_); 27920}; 27921 27922/** 27923 * Returns extension prefix for a country. 27924 * @param {string} country 27925 * @param {object} metadata 27926 * @return {string?} 27927 * @example 27928 * // Returns " ext. " 27929 * getExtPrefix("US") 27930 */ 27931function getExtPrefix(country, metadata) { 27932 metadata = new Metadata(metadata); 27933 if (metadata.hasCountry(country)) { 27934 return metadata.selectNumberingPlan(country).ext(); 27935 } 27936 return DEFAULT_EXT_PREFIX; 27937} 27938 27939/** 27940 * Returns "country calling code" for a country. 27941 * Throws an error if the country doesn't exist or isn't supported by this library. 27942 * @param {string} country 27943 * @param {object} metadata 27944 * @return {string} 27945 * @example 27946 * // Returns "44" 27947 * getCountryCallingCode("GB") 27948 */ 27949function getCountryCallingCode(country, metadata) { 27950 metadata = new Metadata(metadata); 27951 if (metadata.hasCountry(country)) { 27952 return metadata.selectNumberingPlan(country).countryCallingCode(); 27953 } 27954 throw new Error("Unknown country: ".concat(country)); 27955} 27956function isSupportedCountry(country, metadata) { 27957 // metadata = new Metadata(metadata) 27958 // return metadata.hasCountry(country) 27959 return metadata.countries.hasOwnProperty(country); 27960} 27961function setVersion(metadata) { 27962 var version = metadata.version; 27963 if (typeof version === 'number') { 27964 this.v1 = version === 1; 27965 this.v2 = version === 2; 27966 this.v3 = version === 3; 27967 this.v4 = version === 4; 27968 } else { 27969 if (!version) { 27970 this.v1 = true; 27971 } else if ((0,_tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__["default"])(version, V3) === -1) { 27972 this.v2 = true; 27973 } else if ((0,_tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__["default"])(version, V4) === -1) { 27974 this.v3 = true; 27975 } else { 27976 this.v4 = true; 27977 } 27978 } 27979} 27980 27981// const ISO_COUNTRY_CODE = /^[A-Z]{2}$/ 27982// function isCountryCode(countryCode) { 27983// return ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode) 27984// } 27985//# sourceMappingURL=metadata.js.map 27986 27987/***/ }), 27988
vendor: 1,635 bytes, lines 27989-28029
27989/***/ "../node_modules/libphonenumber-js/es6/tools/semver-compare.js": 27990/*!*********************************************************************!*\ 27991 !*** ../node_modules/libphonenumber-js/es6/tools/semver-compare.js ***! 27992 \*********************************************************************/ 27993/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 27994 27995"use strict"; 27996__webpack_require__.r(__webpack_exports__); 27997/* harmony export */ __webpack_require__.d(__webpack_exports__, { 27998/* harmony export */ "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; } 27999/* harmony export */ }); 28000// Copy-pasted from: 28001// https://github.com/substack/semver-compare/blob/master/index.js 28002// 28003// Inlining this function because some users reported issues with 28004// importing from `semver-compare` in a browser with ES6 "native" modules. 28005// 28006// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc "tags". 28007// https://github.com/catamphetamine/libphonenumber-js/issues/381 28008/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { 28009 a = a.split('-'); 28010 b = b.split('-'); 28011 var pa = a[0].split('.'); 28012 var pb = b[0].split('.'); 28013 for (var i = 0; i < 3; i++) { 28014 var na = Number(pa[i]); 28015 var nb = Number(pb[i]); 28016 if (na > nb) return 1; 28017 if (nb > na) return -1; 28018 if (!isNaN(na) && isNaN(nb)) return 1; 28019 if (isNaN(na) && !isNaN(nb)) return -1; 28020 } 28021 if (a[1] && b[1]) { 28022 return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0; 28023 } 28024 return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0; 28025} 28026//# sourceMappingURL=semver-compare.js.map 28027 28028/***/ }), 28029
vendor: 85,655 bytes, lines 28030-28044
28030/***/ "../node_modules/libphonenumber-js/metadata.min.json.js": 28031/*!**************************************************************!*\ 28032 !*** ../node_modules/libphonenumber-js/metadata.min.json.js ***! 28033 \**************************************************************/ 28034/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 28035 28036"use strict"; 28037__webpack_require__.r(__webpack_exports__); 28038// This file is a workaround for a bug in web browsers' "native" 28039// ES6 importing system which is uncapable of importing "*.json" files. 28040// https://github.com/catamphetamine/libphonenumber-js/issues/239 28041/* harmony default export */ __webpack_exports__["default"] = ({"version":4,"country_calling_codes":{"1":["US","AG","AI","AS","BB","BM","BS","CA","DM","DO","GD","GU","JM","KN","KY","LC","MP","MS","PR","SX","TC","TT","VC","VG","VI"],"7":["RU","KZ"],"20":["EG"],"27":["ZA"],"30":["GR"],"31":["NL"],"32":["BE"],"33":["FR"],"34":["ES"],"36":["HU"],"39":["IT","VA"],"40":["RO"],"41":["CH"],"43":["AT"],"44":["GB","GG","IM","JE"],"45":["DK"],"46":["SE"],"47":["NO","SJ"],"48":["PL"],"49":["DE"],"51":["PE"],"52":["MX"],"53":["CU"],"54":["AR"],"55":["BR"],"56":["CL"],"57":["CO"],"58":["VE"],"60":["MY"],"61":["AU","CC","CX"],"62":["ID"],"63":["PH"],"64":["NZ"],"65":["SG"],"66":["TH"],"81":["JP"],"82":["KR"],"84":["VN"],"86":["CN"],"90":["TR"],"91":["IN"],"92":["PK"],"93":["AF"],"94":["LK"],"95":["MM"],"98":["IR"],"211":["SS"],"212":["MA","EH"],"213":["DZ"],"216":["TN"],"218":["LY"],"220":["GM"],"221":["SN"],"222":["MR"],"223":["ML"],"224":["GN"],"225":["CI"],"226":["BF"],"227":["NE"],"228":["TG"],"229":["BJ"],"230":["MU"],"231":["LR"],"232":["SL"],"233":["GH"],"234":["NG"],"235":["TD"],"236":["CF"],"237":["CM"],"238":["CV"],"239":["ST"],"240":["GQ"],"241":["GA"],"242":["CG"],"243":["CD"],"244":["AO"],"245":["GW"],"246":["IO"],"247":["AC"],"248":["SC"],"249":["SD"],"250":["RW"],"251":["ET"],"252":["SO"],"253":["DJ"],"254":["KE"],"255":["TZ"],"256":["UG"],"257":["BI"],"258":["MZ"],"260":["ZM"],"261":["MG"],"262":["RE","YT"],"263":["ZW"],"264":["NA"],"265":["MW"],"266":["LS"],"267":["BW"],"268":["SZ"],"269":["KM"],"290":["SH","TA"],"291":["ER"],"297":["AW"],"298":["FO"],"299":["GL"],"350":["GI"],"351":["PT"],"352":["LU"],"353":["IE"],"354":["IS"],"355":["AL"],"356":["MT"],"357":["CY"],"358":["FI","AX"],"359":["BG"],"370":["LT"],"371":["LV"],"372":["EE"],"373":["MD"],"374":["AM"],"375":["BY"],"376":["AD"],"377":["MC"],"378":["SM"],"380":["UA"],"381":["RS"],"382":["ME"],"383":["XK"],"385":["HR"],"386":["SI"],"387":["BA"],"389":["MK"],"420":["CZ"],"421":["SK"],"423":["LI"],"500":["FK"],"501":["BZ"],"502":["GT"],"503":["SV"],"504":["HN"],"505":["NI"],"506":["CR"],"507":["PA"],"508":["PM"],"509":["HT"],"590":["GP","BL","MF"],"591":["BO"],"592":["GY"],"593":["EC"],"594":["GF"],"595":["PY"],"596":["MQ"],"597":["SR"],"598":["UY"],"599":["CW","BQ"],"670":["TL"],"672":["NF"],"673":["BN"],"674":["NR"],"675":["PG"],"676":["TO"],"677":["SB"],"678":["VU"],"679":["FJ"],"680":["PW"],"681":["WF"],"682":["CK"],"683":["NU"],"685":["WS"],"686":["KI"],"687":["NC"],"688":["TV"],"689":["PF"],"690":["TK"],"691":["FM"],"692":["MH"],"850":["KP"],"852":["HK"],"853":["MO"],"855":["KH"],"856":["LA"],"880":["BD"],"886":["TW"],"960":["MV"],"961":["LB"],"962":["JO"],"963":["SY"],"964":["IQ"],"965":["KW"],"966":["SA"],"967":["YE"],"968":["OM"],"970":["PS"],"971":["AE"],"972":["IL"],"973":["BH"],"974":["QA"],"975":["BT"],"976":["MN"],"977":["NP"],"992":["TJ"],"993":["TM"],"994":["AZ"],"995":["GE"],"996":["KG"],"998":["UZ"]},"countries":{"AC":["247","00","(?:[01589]\\d|[46])\\d{4}",[5,6]],"AD":["376","00","(?:1|6\\d)\\d{7}|[135-9]\\d{5}",[6,8,9],[["(\\d{3})(\\d{3})","$1 $2",["[135-9]"]],["(\\d{4})(\\d{4})","$1 $2",["1"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]]]],"AE":["971","00","(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}",[5,6,7,8,9,10,11,12],[["(\\d{3})(\\d{2,9})","$1 $2",["60|8"]],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[236]|[479][2-8]"],"0$1"],["(\\d{3})(\\d)(\\d{5})","$1 $2 $3",["[479]"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1"]],"0"],"AF":["93","00","[2-7]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[2-7]"],"0$1"]],"0"],"AG":["1","011","(?:268|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([457]\\d{6})$|1","268$1",0,"268"],"AI":["1","011","(?:264|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2457]\\d{6})$|1","264$1",0,"264"],"AL":["355","00","(?:700\\d\\d|900)\\d{3}|8\\d{5,7}|(?:[2-5]|6\\d)\\d{7}",[6,7,8,9],[["(\\d{3})(\\d{3,4})","$1 $2",["80|9"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["4[2-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2358][2-5]|4"],"0$1"],["(\\d{3})(\\d{5})","$1 $2",["[23578]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["6"],"0$1"]],"0"],"AM":["374","00","(?:[1-489]\\d|55|60|77)\\d{6}",[8],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[89]0"],"0 $1"],["(\\d{3})(\\d{5})","$1 $2",["2|3[12]"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["1|47"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["[3-9]"],"0$1"]],"0"],"AO":["244","00","[29]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[29]"]]]],"AR":["54","00","(?:11|[89]\\d\\d)\\d{8}|[2368]\\d{9}",[10,11],[["(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])","2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)","2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]","2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]"],"0$1",1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["1"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["[23]"],"0$1",1],["(\\d)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))","9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)","9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]","9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]"],"0$1",0,"$1 $2 $3-$4"],["(\\d)(\\d{2})(\\d{4})(\\d{4})","$2 15-$3-$4",["91"],"0$1",0,"$1 $2 $3-$4"],["(\\d{3})(\\d{3})(\\d{5})","$1-$2-$3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9"],"0$1",0,"$1 $2 $3-$4"]],"0",0,"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?","9$1"],"AS":["1","011","(?:[58]\\d\\d|684|900)\\d{7}",[10],0,"1",0,"([267]\\d{6})$|1","684$1",0,"684"],"AT":["43","00","1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}",[4,5,6,7,8,9,10,11,12,13],[["(\\d)(\\d{3,12})","$1 $2",["1(?:11|[2-9])"],"0$1"],["(\\d{3})(\\d{2})","$1 $2",["517"],"0$1"],["(\\d{2})(\\d{3,5})","$1 $2",["5[079]"],"0$1"],["(\\d{3})(\\d{3,10})","$1 $2",["(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]","(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]"],"0$1"],["(\\d{4})(\\d{3,9})","$1 $2",["[2-467]|5[2-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["5"],"0$1"],["(\\d{2})(\\d{4})(\\d{4,7})","$1 $2 $3",["5"],"0$1"]],"0"],"AU":["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}",[5,6,7,8,9,10,12],[["(\\d{2})(\\d{3,4})","$1 $2",["16"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,4})","$1 $2 $3",["16"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["14|4"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[2378]"],"(0$1)"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:30|[89])"]]],"0",0,"(183[12])|0",0,0,0,[["(?:(?:2(?:(?:[0-26-9]\\d|3[0-8]|5[0135-9])\\d|4(?:[02-9]\\d|10))|3(?:(?:[0-3589]\\d|6[1-9]|7[0-35-9])\\d|4(?:[0-578]\\d|90))|7(?:[013-57-9]\\d|2[0-8])\\d)\\d\\d|8(?:51(?:0(?:0[03-9]|[12479]\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\d|7[89]|9[0-4])|[34]\\d\\d)|(?:6[0-8]|[78]\\d)\\d{3}|9(?:[02-9]\\d{3}|1(?:(?:[0-58]\\d|6[0135-9])\\d|7(?:0[0-24-9]|[1-9]\\d)|9(?:[0-46-9]\\d|5[0-79])))))\\d{3}",[9]],["4(?:79[01]|83[0-389]|94[0-478])\\d{5}|4(?:[0-36]\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-37-9])\\d{6}",[9]],["180(?:0\\d{3}|2)\\d{3}",[7,10]],["190[0-26]\\d{6}",[10]],0,0,0,["163\\d{2,6}",[5,6,7,8,9]],["14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}",[9]],["13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}",[6,8,10,12]]],"0011"],"AW":["297","00","(?:[25-79]\\d\\d|800)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[25-9]"]]]],"AX":["358","00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))","2\\d{4,9}|35\\d{4,5}|(?:60\\d\\d|800)\\d{4,6}|7\\d{5,11}|(?:[14]\\d|3[0-46-9]|50)\\d{4,8}",[5,6,7,8,9,10,11,12],0,"0",0,0,0,0,"18",0,"00"],"AZ":["994","00","365\\d{6}|(?:[124579]\\d|60|88)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["90"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[28]|2|365|46","1[28]|2|365[45]|46","1[28]|2|365(?:4|5[02])|46"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[13-9]"],"0$1"]],"0"],"BA":["387","00","6\\d{8}|(?:[35689]\\d|49|70)\\d{6}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["6[1-3]|[7-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2-$3",["[3-5]|6[56]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["6"],"0$1"]],"0"],"BB":["1","011","(?:246|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","246$1",0,"246"],"BD":["880","00","[1-469]\\d{9}|8[0-79]\\d{7,8}|[2-79]\\d{8}|[2-9]\\d{7}|[3-9]\\d{6}|[57-9]\\d{5}",[6,7,8,9,10],[["(\\d{2})(\\d{4,6})","$1-$2",["31[5-8]|[459]1"],"0$1"],["(\\d{3})(\\d{3,7})","$1-$2",["3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]"],"0$1"],["(\\d{4})(\\d{3,6})","$1-$2",["[13-9]|2[23]"],"0$1"],["(\\d)(\\d{7,8})","$1-$2",["2"],"0$1"]],"0"],"BE":["32","00","4\\d{8}|[1-9]\\d{7}",[8,9],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["(?:80|9)0"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[239]|4[23]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[15-8]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4"],"0$1"]],"0"],"BF":["226","00","(?:[025-7]\\d|44)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[024-7]"]]]],"BG":["359","00","00800\\d{7}|[2-7]\\d{6,7}|[89]\\d{6,8}|2\\d{5}",[6,7,8,9,12],[["(\\d)(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["2"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["43[1-6]|70[1-9]"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["(?:70|8)0"],"0$1"],["(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3",["43[1-7]|7"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[48]|9[08]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1"]],"0"],"BH":["973","00","[136-9]\\d{7}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[13679]|8[02-4679]"]]]],"BI":["257","00","(?:[267]\\d|31)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2367]"]]]],"BJ":["229","00","(?:01\\d|[24-689])\\d{7}",[8,10],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24-689]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["0"]]]],"BL":["590","00","(?:590\\d|7090)\\d{5}|(?:69|80|9\\d)\\d{7}",[9],0,"0",0,0,0,0,0,[["590(?:2[7-9]|3[3-7]|5[12]|87)\\d{4}"],["(?:69(?:0\\d\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\d)|6(?:1[016-9]|5[0-4]|[67]\\d))|7090[0-4])\\d{4}"],["80[0-5]\\d{6}"],0,0,0,0,0,["9(?:(?:39[5-7]|76[018])\\d|475[0-6])\\d{4}"]]],"BM":["1","011","(?:441|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","441$1",0,"441"],"BN":["673","00","[2-578]\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-578]"]]]],"BO":["591","00(?:1\\d)?","8001\\d{5}|(?:[2-467]\\d|50)\\d{6}",[8,9],[["(\\d)(\\d{7})","$1 $2",["[235]|4[46]"]],["(\\d{8})","$1",["[67]"]],["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["8"]]],"0",0,"0(1\\d)?"],"BQ":["599","00","(?:[34]1|7\\d)\\d{5}",[7],0,0,0,0,0,0,"[347]"],"BR":["55","00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)","[1-467]\\d{9,10}|55[0-46-9]\\d{8}|[34]\\d{7}|55\\d{7,8}|(?:5[0-46-9]|[89]\\d)\\d{7,9}",[8,9,10,11],[["(\\d{4})(\\d{4})","$1-$2",["300|4(?:0[02]|37|86)","300|4(?:0(?:0|20)|370|864)"]],["(\\d{3})(\\d{2,3})(\\d{4})","$1 $2 $3",["(?:[358]|90)0"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]"],"($1)"],["(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3",["[16][1-9]|[2-57-9]"],"($1)"]],"0",0,"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\d{10,11}))?","$2"],"BS":["1","011","(?:242|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([3-8]\\d{6})$|1","242$1",0,"242"],"BT":["975","00","[178]\\d{7}|[2-8]\\d{6}",[7,8],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-6]|7[246]|8[2-4]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[67]|[78]"]]]],"BW":["267","00","(?:0800|(?:[37]|800)\\d)\\d{6}|(?:[2-6]\\d|90)\\d{5}",[7,8,10],[["(\\d{2})(\\d{5})","$1 $2",["90"]],["(\\d{3})(\\d{4})","$1 $2",["[24-6]|3[15-9]"]],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[37]"]],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["0"]],["(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3",["8"]]]],"BY":["375","810","(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}",[6,7,8,9,10,11],[["(\\d{3})(\\d{3})","$1 $2",["800"],"8 $1"],["(\\d{3})(\\d{2})(\\d{2,4})","$1 $2 $3",["800"],"8 $1"],["(\\d{4})(\\d{2})(\\d{3})","$1 $2-$3",["1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])","1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])"],"8 0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["1(?:[56]|7[467])|2[1-3]"],"8 0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[1-4]"],"8 0$1"],["(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["[89]"],"8 $1"]],"8",0,"0|80?",0,0,0,0,"8~10"],"BZ":["501","00","(?:0800\\d|[2-8])\\d{6}",[7,11],[["(\\d{3})(\\d{4})","$1-$2",["[2-8]"]],["(\\d)(\\d{3})(\\d{4})(\\d{3})","$1-$2-$3-$4",["0"]]]],"CA":["1","011","[2-9]\\d{9}|3\\d{6}",[7,10],0,"1",0,0,0,0,0,[["(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\d{6}",[10]],["",[10]],["8(?:00|33|44|55|66|77|88)[2-9]\\d{6}",[10]],["900[2-9]\\d{6}",[10]],["52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|(?:5(?:2[125-9]|33|44|66|77|88)|6(?:22|33))[2-9]\\d{6}",[10]],0,["310\\d{4}",[7]],0,["600[2-9]\\d{6}",[10]]]],"CC":["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}",[6,7,8,9,10,12],0,"0",0,"([59]\\d{7})$|0","8$1",0,0,[["8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\d|70[23]|959))\\d{3}",[9]],["4(?:79[01]|83[0-389]|94[0-478])\\d{5}|4(?:[0-36]\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-37-9])\\d{6}",[9]],["180(?:0\\d{3}|2)\\d{3}",[7,10]],["190[0-26]\\d{6}",[10]],0,0,0,0,["14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}",[9]],["13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}",[6,8,10,12]]],"0011"],"CD":["243","00","(?:(?:[189]|5\\d)\\d|2)\\d{7}|[1-68]\\d{6}",[7,8,9,10],[["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["88"],"0$1"],["(\\d{2})(\\d{5})","$1 $2",["[1-6]"],"0$1"],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["5"],"0$1"]],"0"],"CF":["236","00","(?:[27]\\d{3}|8776)\\d{4}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[278]"]]]],"CG":["242","00","222\\d{6}|(?:0\\d|80)\\d{7}",[9],[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["8"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[02]"]]]],"CH":["41","00","8\\d{11}|[2-9]\\d{8}",[9,12],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-79]|81"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["8"],"0$1"]],"0"],"CI":["225","00","[02]\\d{9}",[10],[["(\\d{2})(\\d{2})(\\d)(\\d{5})","$1 $2 $3 $4",["2"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3 $4",["0"]]]],"CK":["682","00","[2-578]\\d{4}",[5],[["(\\d{2})(\\d{3})","$1 $2",["[2-578]"]]]],"CL":["56","(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0","12300\\d{6}|6\\d{9,10}|[2-9]\\d{8}",[9,10,11],[["(\\d{5})(\\d{4})","$1 $2",["219","2196"],"($1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["60|809"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["44"]],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2[1-36]"],"($1)"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["9(?:10|[2-9])"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])"],"($1)"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]],["(\\d{3})(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4",["60"]]]],"CM":["237","00","[26]\\d{8}|88\\d{6,7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["88"]],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[26]|88"]]]],"CN":["86","00|1(?:[12]\\d|79)\\d\\d00","(?:(?:1[03-689]|2\\d)\\d\\d|6)\\d{8}|1\\d{10}|[126]\\d{6}(?:\\d(?:\\d{2})?)?|86\\d{5,6}|(?:[3-579]\\d|8[0-57-9])\\d{5,9}",[7,8,9,10,11,12],[["(\\d{2})(\\d{5,6})","$1 $2",["(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]","(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\d|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1","10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\d|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12","10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\d|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123","10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\d|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123"],"0$1"],["(\\d{3})(\\d{5,6})","$1 $2",["3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]","(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))[19]","85[23](?:10|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:10|9[56])","85[23](?:100|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:100|9[56])"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["(?:4|80)0"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["10|2(?:[02-57-9]|1[1-9])","10|2(?:[02-57-9]|1[1-9])","10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]"],"0$1",1],["(\\d{3})(\\d{7,8})","$1 $2",["9"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["80"],"0$1",1],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["[3-578]"],"0$1",1],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["1[3-9]"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["[12]"],"0$1",1]],"0",0,"(1(?:[12]\\d|79)\\d\\d)|0",0,0,0,0,"00"],"CO":["57","00(?:4(?:[14]4|56)|[579])","(?:46|60\\d\\d)\\d{6}|(?:1\\d|[39])\\d{9}",[8,10,11],[["(\\d{4})(\\d{4})","$1 $2",["46"]],["(\\d{3})(\\d{7})","$1 $2",["6|90"],"($1)"],["(\\d{3})(\\d{7})","$1 $2",["3[0-357]|9[14]"]],["(\\d)(\\d{3})(\\d{7})","$1-$2-$3",["1"],"0$1",0,"$1 $2 $3"]],"0",0,"0([3579]|4(?:[14]4|56))?"],"CR":["506","00","(?:8\\d|90)\\d{8}|(?:[24-8]\\d{3}|3005)\\d{4}",[8,10],[["(\\d{4})(\\d{4})","$1 $2",["[2-7]|8[3-9]"]],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[89]"]]],0,0,"(19(?:0[0-2468]|1[09]|20|66|77|99))"],"CU":["53","119","(?:[2-7]|8\\d\\d)\\d{7}|[2-47]\\d{6}|[34]\\d{5}",[6,7,8,10],[["(\\d{2})(\\d{4,6})","$1 $2",["2[1-4]|[34]"],"(0$1)"],["(\\d)(\\d{6,7})","$1 $2",["7"],"(0$1)"],["(\\d)(\\d{7})","$1 $2",["[56]"],"0$1"],["(\\d{3})(\\d{7})","$1 $2",["8"],"0$1"]],"0"],"CV":["238","0","(?:[2-59]\\d\\d|800)\\d{4}",[7],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[2-589]"]]]],"CW":["599","00","(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["[3467]"]],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["9[4-8]"]]],0,0,0,0,0,"[69]"],"CX":["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}",[6,7,8,9,10,12],0,"0",0,"([59]\\d{7})$|0","8$1",0,0,[["8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\d|7(?:0[01]|1[0-2])|958))\\d{3}",[9]],["4(?:79[01]|83[0-389]|94[0-478])\\d{5}|4(?:[0-36]\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-37-9])\\d{6}",[9]],["180(?:0\\d{3}|2)\\d{3}",[7,10]],["190[0-26]\\d{6}",[10]],0,0,0,0,["14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}",[9]],["13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}",[6,8,10,12]]],"0011"],"CY":["357","00","(?:[279]\\d|[58]0)\\d{6}",[8],[["(\\d{2})(\\d{6})","$1 $2",["[257-9]"]]]],"CZ":["420","00","(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}",[9,10,11,12],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]|9[015-7]"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3 $4",["96"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]]]],"DE":["49","00","[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[015]\\d|2[13]|31|[46][1-8])\\d{1,9}",[4,5,6,7,8,9,10,11,12,13,14,15],[["(\\d{2})(\\d{3,13})","$1 $2",["3[02]|40|[68]9"],"0$1"],["(\\d{3})(\\d{3,12})","$1 $2",["2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1","2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1"],"0$1"],["(\\d{4})(\\d{2,11})","$1 $2",["[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]","[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["138"],"0$1"],["(\\d{5})(\\d{2,10})","$1 $2",["3"],"0$1"],["(\\d{3})(\\d{5,11})","$1 $2",["181"],"0$1"],["(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3",["1(?:3|80)|9"],"0$1"],["(\\d{3})(\\d{7,8})","$1 $2",["1[67]"],"0$1"],["(\\d{3})(\\d{7,12})","$1 $2",["8"],"0$1"],["(\\d{5})(\\d{6})","$1 $2",["185","1850","18500"],"0$1"],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{4})(\\d{7})","$1 $2",["18[68]"],"0$1"],["(\\d{4})(\\d{7})","$1 $2",["15[1279]"],"0$1"],["(\\d{5})(\\d{6})","$1 $2",["15[03568]","15(?:[0568]|3[13])"],"0$1"],["(\\d{3})(\\d{8})","$1 $2",["18"],"0$1"],["(\\d{3})(\\d{2})(\\d{7,8})","$1 $2 $3",["1(?:6[023]|7)"],"0$1"],["(\\d{4})(\\d{2})(\\d{7})","$1 $2 $3",["15[279]"],"0$1"],["(\\d{3})(\\d{2})(\\d{8})","$1 $2 $3",["15"],"0$1"]],"0"],"DJ":["253","00","(?:2\\d|77)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[27]"]]]],"DK":["45","00","[2-9]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-9]"]]]],"DM":["1","011","(?:[58]\\d\\d|767|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","767$1",0,"767"],"DO":["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,0,0,0,"8001|8[024]9"],"DZ":["213","00","(?:[1-4]|[5-79]\\d|80)\\d{7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-4]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-8]"],"0$1"]],"0"],"EC":["593","00","1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}",[8,9,10,11],[["(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[2-7]"],"(0$1)",0,"$1-$2-$3"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["9"],"0$1"],["(\\d{4})(\\d{3})(\\d{3,4})","$1 $2 $3",["1"]]],"0"],"EE":["372","00","8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}",[7,8,10],[["(\\d{3})(\\d{4})","$1 $2",["[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88","[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88"]],["(\\d{4})(\\d{3,4})","$1 $2",["[45]|8(?:00|[1-49])","[45]|8(?:00[1-9]|[1-49])"]],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["7"]],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["8"]]]],"EG":["20","00","[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}",[8,9,10],[["(\\d)(\\d{7,8})","$1 $2",["[23]"],"0$1"],["(\\d{2})(\\d{6,7})","$1 $2",["1[35]|[4-6]|8[2468]|9[235-7]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{2})(\\d{8})","$1 $2",["1"],"0$1"]],"0"],"EH":["212","00","[5-8]\\d{8}",[9],0,"0",0,0,0,0,"528[89]"],"ER":["291","00","[178]\\d{6}",[7],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[178]"],"0$1"]],"0"],"ES":["34","00","[5-9]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[89]00"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-9]"]]]],"ET":["251","00","(?:11|[2-579]\\d)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-579]"],"0$1"]],"0"],"FI":["358","00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))","[1-35689]\\d{4}|7\\d{10,11}|(?:[124-7]\\d|3[0-46-9])\\d{8}|[1-9]\\d{5,8}",[5,6,7,8,9,10,11,12],[["(\\d{5})","$1",["20[2-59]"],"0$1"],["(\\d{3})(\\d{3,7})","$1 $2",["(?:[1-3]0|[68])0|70[07-9]"],"0$1"],["(\\d{2})(\\d{4,8})","$1 $2",["[14]|2[09]|50|7[135]"],"0$1"],["(\\d{2})(\\d{6,10})","$1 $2",["7"],"0$1"],["(\\d)(\\d{4,9})","$1 $2",["(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9"],"0$1"]],"0",0,0,0,0,"1[03-79]|[2-9]",0,"00"],"FJ":["679","0(?:0|52)","45\\d{5}|(?:0800\\d|[235-9])\\d{6}",[7,11],[["(\\d{3})(\\d{4})","$1 $2",["[235-9]|45"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"]]],0,0,0,0,0,0,0,"00"],"FK":["500","00","[2-7]\\d{4}",[5]],"FM":["691","00","(?:[39]\\d\\d|820)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[389]"]]]],"FO":["298","00","[2-9]\\d{5}",[6],[["(\\d{6})","$1",["[2-9]"]]],0,0,"(10(?:01|[12]0|88))"],"FR":["33","00","[1-9]\\d{8}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0 $1"],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"],"0$1"]],"0"],"GA":["241","00","(?:[067]\\d|11)\\d{6}|[2-7]\\d{6}",[7,8],[["(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["11|[67]"],"0$1"]],0,0,"0(11\\d{6}|60\\d{6}|61\\d{6}|6[256]\\d{6}|7[467]\\d{6})","$1"],"GB":["44","00","[1-357-9]\\d{9}|[18]\\d{8}|8\\d{6}",[7,9,10],[["(\\d{3})(\\d{4})","$1 $2",["800","8001","80011","800111","8001111"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["845","8454","84546","845464"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["800"],"0$1"],["(\\d{5})(\\d{4,5})","$1 $2",["1(?:38|5[23]|69|76|94)","1(?:(?:38|69)7|5(?:24|39)|768|946)","1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)"],"0$1"],["(\\d{4})(\\d{5,6})","$1 $2",["1(?:[2-69][02-9]|[78])"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[25]|7(?:0|6[02-9])","[25]|7(?:0|6(?:[03-9]|2[356]))"],"0$1"],["(\\d{4})(\\d{6})","$1 $2",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[1389]"],"0$1"]],"0",0,"0|180020",0,0,0,[["(?:1(?:1(?:3(?:[0-58]\\d\\d|73[0-35])|4(?:(?:[0-5]\\d|70)\\d|69[7-9])|(?:(?:5[0-26-9]|[78][0-49])\\d|6(?:[0-4]\\d|50))\\d)|(?:2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\d)\\d|1(?:[0-7]\\d|8[0-3]))|(?:3(?:0\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\d)\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\d{3})\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\d)|76\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\d|7[4-79])|295[5-7]|35[34]\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\d{3}",[9,10]],["7(?:457[0-57-9]|700[01]|911[028])\\d{5}|7(?:[1-3]\\d\\d|4(?:[0-46-9]\\d|5[0-689])|5(?:0[0-8]|[13-9]\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\d|8[02-9]|9[0-689])|8(?:[014-9]\\d|[23][0-8])|9(?:[024-9]\\d|1[02-9]|3[0-689]))\\d{6}",[10]],["80[08]\\d{7}|800\\d{6}|8001111"],["(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\d|8[2-49]))\\d{7}|845464\\d",[7,10]],["70\\d{8}",[10]],0,["(?:3[0347]|55)\\d{8}",[10]],["76(?:464|652)\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\d{6}",[10]],["56\\d{8}",[10]]],0," x"],"GD":["1","011","(?:473|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","473$1",0,"473"],"GE":["995","00","(?:[3-57]\\d\\d|800)\\d{6}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["32"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[57]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[348]"],"0$1"]],"0"],"GF":["594","00","(?:[56]94\\d|7093)\\d{5}|(?:80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]|9[47]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[89]"],"0$1"]],"0"],"GG":["44","00","(?:1481|[357-9]\\d{3})\\d{6}|8\\d{6}(?:\\d{2})?",[7,9,10],0,"0",0,"([25-9]\\d{5})$|0|180020","1481$1",0,0,[["1481[25-9]\\d{5}",[10]],["7(?:(?:781|839)\\d|911[17])\\d{5}",[10]],["80[08]\\d{7}|800\\d{6}|8001111"],["(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\d|8[0-3]))\\d{7}|845464\\d",[7,10]],["70\\d{8}",[10]],0,["(?:3[0347]|55)\\d{8}",[10]],["76(?:464|652)\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\d{6}",[10]],["56\\d{8}",[10]]]],"GH":["233","00","(?:[235]\\d{3}|800)\\d{5}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["8"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[235]"],"0$1"]],"0"],"GI":["350","00","(?:[25]\\d|60)\\d{6}",[8],[["(\\d{3})(\\d{5})","$1 $2",["2"]]]],"GL":["299","00","(?:19|[2-689]\\d|70)\\d{4}",[6],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["19|[2-9]"]]]],"GM":["220","00","[2-9]\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]]],"GN":["224","00","722\\d{6}|(?:3|6\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["3"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[67]"]]]],"GP":["590","00","(?:590\\d|7090)\\d{5}|(?:69|80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-79]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[["590(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1-9]|5[3-579]|[68][0-689]|7[08]|9\\d)\\d{4}"],["(?:69(?:0\\d\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\d)|6(?:1[016-9]|5[0-4]|[67]\\d))|7090[0-4])\\d{4}"],["80[0-5]\\d{6}"],0,0,0,0,0,["9(?:(?:39[5-7]|76[018])\\d|475[0-6])\\d{4}"]]],"GQ":["240","00","222\\d{6}|(?:3\\d|55|[89]0)\\d{7}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235]"]],["(\\d{3})(\\d{6})","$1 $2",["[89]"]]]],"GR":["30","00","5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}",[10,11,12],[["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["21|7"]],["(\\d{4})(\\d{6})","$1 $2",["2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2689]"]],["(\\d{3})(\\d{3,4})(\\d{5})","$1 $2 $3",["8"]]]],"GT":["502","00","80\\d{6}|(?:1\\d{3}|[2-7])\\d{7}",[8,11],[["(\\d{4})(\\d{4})","$1 $2",["[2-8]"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]]]],"GU":["1","011","(?:[58]\\d\\d|671|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","671$1",0,"671"],"GW":["245","00","[49]\\d{8}|4\\d{6}",[7,9],[["(\\d{3})(\\d{4})","$1 $2",["40"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[49]"]]]],"GY":["592","001","(?:[2-8]\\d{3}|9008)\\d{3}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]]],"HK":["852","00(?:30|5[09]|[126-9]?)","8[0-46-9]\\d{6,7}|9\\d{4,7}|(?:[2-7]|9\\d{3})\\d{7}",[5,6,7,8,9,11],[["(\\d{3})(\\d{2,5})","$1 $2",["900","9003"]],["(\\d{4})(\\d{4})","$1 $2",["[2-7]|8[1-4]|9(?:0[1-9]|[1-8])"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]],["(\\d{3})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]]],0,0,0,0,0,0,0,"00"],"HN":["504","00","8\\d{10}|[237-9]\\d{7}",[8,11],[["(\\d{4})(\\d{4})","$1-$2",["[237-9]"]]]],"HR":["385","00","[2-69]\\d{8}|80\\d{5,7}|[1-79]\\d{7}|6\\d{6}",[7,8,9],[["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["6[01]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{4})(\\d{3})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["6|7[245]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-57]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1"]],"0"],"HT":["509","00","[2-589]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[2-589]"]]]],"HU":["36","00","[235-7]\\d{8}|[1-9]\\d{7}",[8,9],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"(06 $1)"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]"],"(06 $1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"06 $1"]],"06"],"ID":["62","00[89]","00[1-9]\\d{9,14}|(?:[1-36]|8\\d{5})\\d{6}|00\\d{9}|[1-9]\\d{8,10}|[2-9]\\d{7}",[7,8,9,10,11,12,13,14,15,16,17],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["15"]],["(\\d{2})(\\d{5,9})","$1 $2",["2[124]|[36]1"],"(0$1)"],["(\\d{3})(\\d{5,7})","$1 $2",["800"],"0$1"],["(\\d{3})(\\d{5,8})","$1 $2",["[2-79]"],"(0$1)"],["(\\d{3})(\\d{3,4})(\\d{3})","$1-$2-$3",["8[1-35-9]"],"0$1"],["(\\d{3})(\\d{6,8})","$1 $2",["1"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["804"],"0$1"],["(\\d{3})(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["80"],"0$1"],["(\\d{3})(\\d{4})(\\d{4,5})","$1-$2-$3",["8"],"0$1"]],"0"],"IE":["353","00","(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}",[7,8,9,10],[["(\\d{2})(\\d{5})","$1 $2",["2[24-9]|47|58|6[237-9]|9[35-9]"],"(0$1)"],["(\\d{3})(\\d{5})","$1 $2",["[45]0"],"(0$1)"],["(\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["1"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2569]|4[1-69]|7[14]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["81"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[78]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["4"],"(0$1)"],["(\\d{2})(\\d)(\\d{3})(\\d{4})","$1 $2 $3 $4",["8"],"0$1"]],"0"],"IL":["972","0(?:0|1[2-9])","1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}",[7,8,9,10,11,12],[["(\\d{4})(\\d{3})","$1-$2",["125"]],["(\\d{4})(\\d{2})(\\d{2})","$1-$2-$3",["121"]],["(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[2-489]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[57]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1-$2-$3",["12"]],["(\\d{4})(\\d{6})","$1-$2",["159"]],["(\\d)(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3-$4",["1[7-9]"]],["(\\d{3})(\\d{1,2})(\\d{3})(\\d{4})","$1-$2 $3-$4",["15"]]],"0"],"IM":["44","00","1624\\d{6}|(?:[3578]\\d|90)\\d{8}",[10],0,"0",0,"([25-8]\\d{5})$|0|180020","1624$1",0,"74576|(?:16|7[56])24"],"IN":["91","00","(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}",[8,9,10,11,12,13],[["(\\d{8})","$1",["5(?:0|2[23]|3[03]|[67]1|88)","5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)","5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)"],0,1],["(\\d{4})(\\d{4,5})","$1 $2",["180","1800"],0,1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["140"],0,1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79[1-7]|80[2-46]","11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])","11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]","1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]","1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]"],"0$1",1],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807","1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]","1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\d|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]))[2-7]"],"0$1",1],["(\\d{5})(\\d{5})","$1 $2",["[6-9]"],"0$1",1],["(\\d{4})(\\d{2,4})(\\d{4})","$1 $2 $3",["1(?:6|8[06])","1(?:6|8[06]0)"],0,1],["(\\d{4})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["18"],0,1]],"0"],"IO":["246","00","3\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["3"]]]],"IQ":["964","00","(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"]],"0"],"IR":["98","00","[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}",[4,5,6,7,10],[["(\\d{4,5})","$1",["96"],"0$1"],["(\\d{2})(\\d{4,5})","$1 $2",["(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[1-8]"],"0$1"]],"0"],"IS":["354","00|1(?:0(?:01|[12]0)|100)","(?:38\\d|[4-9])\\d{6}",[7,9],[["(\\d{3})(\\d{4})","$1 $2",["[4-9]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["3"]]],0,0,0,0,0,0,0,"00"],"IT":["39","00","0\\d{5,11}|1\\d{8,10}|3(?:[0-8]\\d{7,10}|9\\d{7,8})|(?:43|55|70)\\d{8}|8\\d{5}(?:\\d{2,4})?",[6,7,8,9,10,11,12],[["(\\d{2})(\\d{4,6})","$1 $2",["0[26]"]],["(\\d{3})(\\d{3,6})","$1 $2",["0[13-57-9][0159]|8(?:03|4[17]|9[2-5])","0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))"]],["(\\d{4})(\\d{2,6})","$1 $2",["0(?:[13-579][2-46-8]|8[236-8])"]],["(\\d{4})(\\d{4})","$1 $2",["894"]],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[26]|5"]],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["1(?:44|[679])|[378]|43"]],["(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[13-57-9][0159]|14"]],["(\\d{2})(\\d{4})(\\d{5})","$1 $2 $3",["0[26]"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"]],["(\\d{3})(\\d{4})(\\d{4,5})","$1 $2 $3",["[03]"]]],0,0,0,0,0,0,[["0(?:669[0-79]\\d{1,6}|831\\d{2,8})|0(?:1(?:[0159]\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\d\\d|3(?:[0159]\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\d|6[0-8])|7(?:[0159]\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\d|2[3-578]|3[2356]|[6-8][1-5])|9(?:[0159]\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\d{2,7}"],["3[2-9]\\d{7,8}|(?:31|43)\\d{8}",[9,10]],["80(?:0\\d{3}|3)\\d{3}",[6,9]],["(?:0878\\d{3}|89(?:2\\d|3[04]|4(?:[0-4]|[5-9]\\d\\d)|5[0-4]))\\d\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\d{6}",[6,8,9,10]],["1(?:78\\d|99)\\d{6}",[9,10]],["3[2-8]\\d{9,10}",[11,12]],0,0,["55\\d{8}",[10]],["84(?:[08]\\d{3}|[17])\\d{3}",[6,9]]]],"JE":["44","00","1534\\d{6}|(?:[3578]\\d|90)\\d{8}",[10],0,"0",0,"([0-24-8]\\d{5})$|0|180020","1534$1",0,0,[["1534[0-24-8]\\d{5}"],["7(?:(?:(?:50|82)9|937)\\d|7(?:00[378]|97\\d))\\d{5}"],["80(?:07(?:35|81)|8901)\\d{4}"],["(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\d{4}"],["701511\\d{4}"],0,["(?:3(?:0(?:07(?:35|81)|8901)|3\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\d{4})\\d{4}"],["76(?:464|652)\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\d{6}"],["56\\d{8}"]]],"JM":["1","011","(?:[58]\\d\\d|658|900)\\d{7}",[10],0,"1",0,0,0,0,"658|876"],"JO":["962","00","(?:(?:[2689]|7\\d)\\d|32|427|53)\\d{6}",[8,9],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]|87"],"(0$1)"],["(\\d{3})(\\d{5,6})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["70"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[47]"],"0$1"]],"0"],"JP":["81","010","00[1-9]\\d{6,14}|[25-9]\\d{9}|(?:00|[1-9]\\d\\d)\\d{6}",[8,9,10,11,12,13,14,15,16,17],[["(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"],"0$1"],["(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])","1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]","1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["60"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["3|4(?:2[09]|7[01])|6[1-9]","3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]"],"0$1"],["(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["[14]|[289][2-9]|5[3-9]|7[2-4679]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[25-9]"],"0$1"]],"0",0,"(000[2569]\\d{4,6})$|(?:(?:003768)0?)|0","$1"],"KE":["254","000","(?:[17]\\d\\d|900)\\d{6}|(?:2|80)0\\d{6,7}|[4-6]\\d{6,8}",[7,8,9,10],[["(\\d{2})(\\d{5,7})","$1 $2",["[24-6]"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["[17]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"],"0$1"]],"0"],"KG":["996","00","8\\d{9}|[235-9]\\d{8}",[9,10],[["(\\d{4})(\\d{5})","$1 $2",["3(?:1[346]|[24-79])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235-79]|88"],"0$1"],["(\\d{3})(\\d{3})(\\d)(\\d{2,3})","$1 $2 $3 $4",["8"],"0$1"]],"0"],"KH":["855","00[14-9]","1\\d{9}|[1-9]\\d{7,8}",[8,9,10],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-9]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0"],"KI":["686","00","(?:[37]\\d|6[0-79])\\d{6}|(?:[2-48]\\d|50)\\d{3}",[5,8],0,"0"],"KM":["269","00","[3478]\\d{6}",[7],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[3478]"]]]],"KN":["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","869$1",0,"869"],"KP":["850","00|99","85\\d{6}|(?:19\\d|[2-7])\\d{7}",[8,10],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2-7]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"]],"0"],"KR":["82","00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))","00[1-9]\\d{8,11}|(?:[12]|5\\d{3})\\d{7}|[13-6]\\d{9}|(?:[1-6]\\d|80)\\d{7}|[3-6]\\d{4,5}|(?:00|7)0\\d{8}",[5,6,8,9,10,11,12,13,14],[["(\\d{2})(\\d{3,4})","$1-$2",["(?:3[1-3]|[46][1-4]|5[1-5])1"],"0$1"],["(\\d{4})(\\d{4})","$1-$2",["1"]],["(\\d)(\\d{3,4})(\\d{4})","$1-$2-$3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[36]0|8"],"0$1"],["(\\d{2})(\\d{3,4})(\\d{4})","$1-$2-$3",["[1346]|5[1-5]"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[57]"],"0$1"],["(\\d{2})(\\d{5})(\\d{4})","$1-$2-$3",["5"],"0$1"]],"0",0,"0(8(?:[1-46-8]|5\\d\\d))?"],"KW":["965","00","18\\d{5}|(?:[2569]\\d|41)\\d{6}",[7,8],[["(\\d{4})(\\d{3,4})","$1 $2",["[169]|2(?:[235]|4[1-35-9])|52"]],["(\\d{3})(\\d{5})","$1 $2",["[245]"]]]],"KY":["1","011","(?:345|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","345$1",0,"345"],"KZ":["7","810","(?:33622|8\\d{8})\\d{5}|[78]\\d{9}",[10,14],0,"8",0,0,0,0,"33622|7",0,"8~10"],"LA":["856","00","[23]\\d{9}|3\\d{8}|(?:[235-8]\\d|41)\\d{6}",[8,9,10],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2[13]|3[14]|[4-8]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["3"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[23]"],"0$1"]],"0"],"LB":["961","00","[27-9]\\d{7}|[13-9]\\d{6}",[7,8],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[27-9]"]]],"0"],"LC":["1","011","(?:[58]\\d\\d|758|900)\\d{7}",[10],0,"1",0,"([2-8]\\d{6})$|1","758$1",0,"758"],"LI":["423","00","[68]\\d{8}|(?:[2378]\\d|90)\\d{5}",[7,9],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[2379]|8(?:0[09]|7)","[2379]|8(?:0(?:02|9)|7)"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["69"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]]],"0",0,"(1001)|0"],"LK":["94","00","[1-9]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[1-689]"],"0$1"]],"0"],"LR":["231","00","(?:[2457]\\d|33|88)\\d{7}|(?:2\\d|[4-6])\\d{6}",[7,8,9],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["4[67]|[56]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[2-578]"],"0$1"]],"0"],"LS":["266","00","(?:[256]\\d\\d|800)\\d{5}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[2568]"]]]],"LT":["370","00","(?:[3469]\\d|52|[78]0)\\d{6}",[8],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["52[0-7]"],"(0-$1)",1],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[7-9]"],"0 $1",1],["(\\d{2})(\\d{6})","$1 $2",["37|4(?:[15]|6[1-8])"],"(0-$1)",1],["(\\d{3})(\\d{5})","$1 $2",["[3-6]"],"(0-$1)",1]],"0",0,"[08]"],"LU":["352","00","35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}",[4,5,6,7,8,9,10,11],[["(\\d{2})(\\d{3})","$1 $2",["2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])"]],["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])"]],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["20[2-689]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4",["2(?:[0367]|4[3-8])"]],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["80[01]|90[015]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["20"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4 $5",["2(?:[0367]|4[3-8])"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,5})","$1 $2 $3 $4",["[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]"]]],0,0,"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\d)"],"LV":["371","00","(?:[268]\\d|78|90)\\d{6}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2679]|8[01]"]]]],"LY":["218","00","[2-9]\\d{8}",[9],[["(\\d{2})(\\d{7})","$1-$2",["[2-9]"],"0$1"]],"0"],"MA":["212","00","[5-8]\\d{8}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5[45]"],"0$1"],["(\\d{4})(\\d{5})","$1-$2",["5(?:2[2-46-9]|3[3-9]|9)|8(?:0[89]|92)"],"0$1"],["(\\d{2})(\\d{7})","$1-$2",["8"],"0$1"],["(\\d{3})(\\d{6})","$1-$2",["[5-7]"],"0$1"]],"0",0,0,0,0,0,[["5(?:2(?:[0-25-79]\\d|3[1-578]|4[02-46-8]|8[0235-7])|3(?:[0-47]\\d|5[02-9]|6[02-8]|8[014-9]|9[3-9])|(?:4[067]|5[03])\\d)\\d{5}"],["(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[0167]\\d|2[0-8]|5[0-5]|8[0-7]))\\d{6}"],["80[0-7]\\d{6}"],["89\\d{7}"],0,0,0,0,["(?:592(?:4[0-2]|93)|80[89]\\d\\d)\\d{4}"]]],"MC":["377","00","(?:[3489]|6\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["4"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[389]"]],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["6"],"0$1"]],"0"],"MD":["373","00","(?:[235-7]\\d|[89]0)\\d{6}",[8],[["(\\d{3})(\\d{5})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["22|3"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[25-7]"],"0$1"]],"0"],"ME":["382","00","(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"0$1"]],"0"],"MF":["590","00","(?:590\\d|7090)\\d{5}|(?:69|80|9\\d)\\d{7}",[9],0,"0",0,0,0,0,0,[["590(?:0[079]|[14]3|[27][79]|3[03-7]|5[0-268]|87)\\d{4}"],["(?:69(?:0\\d\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\d)|6(?:1[016-9]|5[0-4]|[67]\\d))|7090[0-4])\\d{4}"],["80[0-5]\\d{6}"],0,0,0,0,0,["9(?:(?:39[5-7]|76[018])\\d|475[0-6])\\d{4}"]]],"MG":["261","00","[23]\\d{8}",[9],[["(\\d{2})(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",["[23]"],"0$1"]],"0",0,"([24-9]\\d{6})$|0","20$1"],"MH":["692","011","329\\d{4}|(?:[256]\\d|45)\\d{5}",[7],[["(\\d{3})(\\d{4})","$1-$2",["[2-6]"]]],"1"],"MK":["389","00","[2-578]\\d{7}",[8],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2|34[47]|4(?:[37]7|5[47]|64)"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[347]"],"0$1"],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["[58]"],"0$1"]],"0"],"ML":["223","00","[24-9]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24-9]"]]]],"MM":["95","00","1\\d{5,7}|95\\d{6}|(?:[4-7]|9[0-46-9])\\d{6,8}|(?:2|8\\d)\\d{5,8}",[6,7,8,9,10],[["(\\d)(\\d{2})(\\d{3})","$1 $2 $3",["16|2"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[12]|452|678|86","[12]|452|6788|86"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[4-7]|8[1-35]"],"0$1"],["(\\d)(\\d{3})(\\d{4,6})","$1 $2 $3",["9(?:2[0-4]|[35-9]|4[137-9])"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["92"],"0$1"],["(\\d)(\\d{5})(\\d{4})","$1 $2 $3",["9"],"0$1"]],"0"],"MN":["976","001","[12]\\d{7,9}|[5-9]\\d{7}",[8,9,10],[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[12]1"],"0$1"],["(\\d{4})(\\d{4})","$1 $2",["[5-9]"]],["(\\d{3})(\\d{5,6})","$1 $2",["[12]2[1-3]"],"0$1"],["(\\d{4})(\\d{5,6})","$1 $2",["[12](?:27|3[2-8]|4[2-68]|5[1-4689])","[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]"],"0$1"],["(\\d{5})(\\d{4,5})","$1 $2",["[12]"],"0$1"]],"0"],"MO":["853","00","0800\\d{3}|(?:28|[68]\\d)\\d{6}",[7,8],[["(\\d{4})(\\d{3})","$1 $2",["0"]],["(\\d{4})(\\d{4})","$1 $2",["[268]"]]]],"MP":["1","011","[58]\\d{9}|(?:67|90)0\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","670$1",0,"670"],"MQ":["596","00","(?:596\\d|7091)\\d{5}|(?:69|[89]\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-79]|8(?:0[6-9]|[36])"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0"],"MR":["222","00","(?:[2-4]\\d\\d|800)\\d{5}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-48]"]]]],"MS":["1","011","(?:[58]\\d\\d|664|900)\\d{7}",[10],0,"1",0,"([34]\\d{6})$|1","664$1",0,"664"],"MT":["356","00","3550\\d{4}|(?:[2579]\\d\\d|800)\\d{5}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[2357-9]"]]]],"MU":["230","0(?:0|[24-7]0|3[03])","(?:[57]|8\\d\\d)\\d{7}|[2-468]\\d{6}",[7,8,10],[["(\\d{3})(\\d{4})","$1 $2",["[2-46]|8[013]"]],["(\\d{4})(\\d{4})","$1 $2",["[57]"]],["(\\d{5})(\\d{5})","$1 $2",["8"]]],0,0,0,0,0,0,0,"020"],"MV":["960","0(?:0|19)","(?:800|9[0-57-9]\\d)\\d{7}|[34679]\\d{6}",[7,10],[["(\\d{3})(\\d{4})","$1-$2",["[34679]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"]]],0,0,0,0,0,0,0,"00"],"MW":["265","00","(?:[1289]\\d|31|77)\\d{7}|1\\d{6}",[7,9],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[137-9]"],"0$1"]],"0"],"MX":["52","0[09]","[2-9]\\d{9}",[10],[["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["33|5[56]|81"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2-9]"]]],0,0,0,0,0,0,0,"00"],"MY":["60","00","1\\d{8,9}|(?:3\\d|[4-9])\\d{7}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1-$2 $3",["[4-79]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1-$2 $3",["1(?:[02469]|[378][1-9]|53)|8","1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1-$2 $3",["3"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3-$4",["1(?:[367]|80)"]],["(\\d{3})(\\d{3})(\\d{4})","$1-$2 $3",["15"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2 $3",["1"],"0$1"]],"0"],"MZ":["258","00","(?:2|8\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[2-79]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]]]],"NA":["264","00","[68]\\d{7,8}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["88"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["6"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["87"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"]],"0"],"NC":["687","00","(?:050|[2-57-9]\\d\\d)\\d{3}",[6],[["(\\d{2})(\\d{2})(\\d{2})","$1.$2.$3",["[02-57-9]"]]]],"NE":["227","00","[027-9]\\d{7}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["08"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[089]|2[013]|7[0467]"]]]],"NF":["672","00","[13]\\d{5}",[6],[["(\\d{2})(\\d{4})","$1 $2",["1[0-3]"]],["(\\d)(\\d{5})","$1 $2",["[13]"]]],0,0,"([0-258]\\d{4})$","3$1"],"NG":["234","009","(?:20|9\\d)\\d{8}|[78]\\d{9,13}",[10,11,12,13,14],[["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[7-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["20[129]"],"0$1"],["(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{4})(\\d{4,5})","$1 $2 $3",["[78]"],"0$1"],["(\\d{3})(\\d{5})(\\d{5,6})","$1 $2 $3",["[78]"],"0$1"]],"0"],"NI":["505","00","(?:1800|[25-8]\\d{3})\\d{4}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[125-8]"]]]],"NL":["31","00","(?:[124-7]\\d\\d|3(?:[02-9]\\d|1[0-8]))\\d{6}|8\\d{6,9}|9\\d{6,10}|1\\d{4,5}",[5,6,7,8,9,10,11],[["(\\d{3})(\\d{4,7})","$1 $2",["[89]0"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["66"],"0$1"],["(\\d)(\\d{8})","$1 $2",["6"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-578]|91"],"0$1"],["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",["9"],"0$1"]],"0"],"NO":["47","00","(?:0|[2-9]\\d{3})\\d{4}",[5,8],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["8"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-79]"]]],0,0,0,0,0,"[02-689]|7[0-8]"],"NP":["977","00","(?:1\\d|9)\\d{9}|[1-9]\\d{7}",[8,10,11],[["(\\d)(\\d{7})","$1-$2",["1[2-6]"],"0$1"],["(\\d{2})(\\d{6})","$1-$2",["1[01]|[2-8]|9(?:[1-59]|[67][2-6])"],"0$1"],["(\\d{3})(\\d{7})","$1-$2",["9"]]],"0"],"NR":["674","00","(?:222|444|(?:55|8\\d)\\d|666|777|999)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[24-9]"]]]],"NU":["683","00","(?:[4-7]|888\\d)\\d{3}",[4,7],[["(\\d{3})(\\d{4})","$1 $2",["8"]]]],"NZ":["64","0(?:0|161)","[1289]\\d{9}|50\\d{5}(?:\\d{2,3})?|[27-9]\\d{7,8}|(?:[34]\\d|6[0-35-9])\\d{6}|8\\d{4,6}",[5,6,7,8,9,10],[["(\\d{2})(\\d{3,8})","$1 $2",["8[1-79]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["50[036-8]|8|90","50(?:[0367]|88)|8|90"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["24|[346]|7[2-57-9]|9[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:10|74)|[589]"],"0$1"],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["1|2[028]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,5})","$1 $2 $3",["2(?:[169]|7[0-35-9])|7"],"0$1"]],"0",0,0,0,0,0,0,"00"],"OM":["968","00","(?:1505|[279]\\d{3}|500)\\d{4}|800\\d{5,6}",[7,8,9],[["(\\d{3})(\\d{4,6})","$1 $2",["[58]"]],["(\\d{2})(\\d{6})","$1 $2",["2"]],["(\\d{4})(\\d{4})","$1 $2",["[179]"]]]],"PA":["507","00","(?:00800|8\\d{3})\\d{6}|[68]\\d{7}|[1-57-9]\\d{6}",[7,8,10,11],[["(\\d{3})(\\d{4})","$1-$2",["[1-57-9]"]],["(\\d{4})(\\d{4})","$1-$2",["[68]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]]]],"PE":["51","00|19(?:1[124]|77|90)00","(?:[14-8]|9\\d)\\d{7}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["80"],"(0$1)"],["(\\d)(\\d{7})","$1 $2",["1"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["[4-8]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"]]],"0",0,0,0,0,0,0,"00"," Anexo "],"PF":["689","00","4\\d{5}(?:\\d{2})?|8\\d{7,8}",[6,8,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["44"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4|8[7-9]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]]]],"PG":["675","00|140[1-3]","(?:180|[78]\\d{3})\\d{4}|(?:[2-589]\\d|64)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["18|[2-69]|85"]],["(\\d{4})(\\d{4})","$1 $2",["[78]"]]],0,0,0,0,0,0,0,"00"],"PH":["63","00","(?:[2-7]|9\\d)\\d{8}|2\\d{5}|(?:1800|8)\\d{7,9}",[6,8,9,10,11,12,13],[["(\\d)(\\d{5})","$1 $2",["2"],"(0$1)"],["(\\d{4})(\\d{4,6})","$1 $2",["3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))"],"(0$1)"],["(\\d{5})(\\d{4})","$1 $2",["346|4(?:27|9[35])|883","3469|4(?:279|9(?:30|56))|8834"],"(0$1)"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[3-7]|8[2-8]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]],["(\\d{4})(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1"]]],"0"],"PK":["92","00","122\\d{6}|[24-8]\\d{10,11}|9(?:[013-9]\\d{8,10}|2(?:[01]\\d\\d|2(?:[06-8]\\d|1[01]))\\d{7})|(?:[2-8]\\d{3}|92(?:[0-7]\\d|8[1-9]))\\d{6}|[24-9]\\d{8}|[89]\\d{7}",[8,9,10,11,12],[["(\\d{3})(\\d{3})(\\d{2,7})","$1 $2 $3",["[89]0"],"0$1"],["(\\d{4})(\\d{5})","$1 $2",["1"]],["(\\d{3})(\\d{6,7})","$1 $2",["2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])","9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]"],"(0$1)"],["(\\d{2})(\\d{7,8})","$1 $2",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]"],"(0$1)"],["(\\d{5})(\\d{5})","$1 $2",["58"],"(0$1)"],["(\\d{3})(\\d{7})","$1 $2",["3"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[24-9]"],"(0$1)"]],"0"],"PL":["48","00","(?:6|8\\d\\d)\\d{7}|[1-9]\\d{6}(?:\\d{2})?|[26]\\d{5}",[6,7,8,9,10],[["(\\d{5})","$1",["19"]],["(\\d{3})(\\d{3})","$1 $2",["11|20|64"]],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1","(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19"]],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["64"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)"]],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[2-8]|[2-7]|8[1-79]|9[145]"]],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["8"]]]],"PM":["508","00","[45]\\d{5}|(?:708|8\\d\\d)\\d{6}",[6,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[45]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0"],"PR":["1","011","(?:[589]\\d\\d|787)\\d{7}",[10],0,"1",0,0,0,0,"787|939"],"PS":["970","00","[2489]2\\d{6}|(?:1\\d|5)\\d{8}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2489]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["5"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0"],"PT":["351","00","1693\\d{5}|(?:[26-9]\\d|30)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["2[12]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["16|[236-9]"]]]],"PW":["680","01[12]","(?:[24-8]\\d\\d|345|900)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]]],"PY":["595","00","59\\d{4,6}|9\\d{5,10}|(?:[2-46-8]\\d|5[0-8])\\d{4,7}",[6,7,8,9,10,11],[["(\\d{3})(\\d{3,6})","$1 $2",["[2-9]0"],"0$1"],["(\\d{2})(\\d{5})","$1 $2",["[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]"],"(0$1)"],["(\\d{3})(\\d{4,5})","$1 $2",["2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["87"]],["(\\d{3})(\\d{6})","$1 $2",["9(?:[5-79]|8[1-7])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]"],"0$1"],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["9"]]],"0"],"QA":["974","00","800\\d{4}|(?:2|800)\\d{6}|(?:0080|[3-7])\\d{7}",[7,8,9,11],[["(\\d{3})(\\d{4})","$1 $2",["2[136]|8"]],["(\\d{4})(\\d{4})","$1 $2",["[3-7]"]]]],"RE":["262","00","709\\d{6}|(?:26|[689]\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[26-9]"],"0$1"]],"0",0,0,0,0,0,[["26(?:2\\d\\d|3(?:0\\d|1[0-6]))\\d{4}"],["(?:69(?:2\\d\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\d{4}"],["80\\d{7}"],["89[1-37-9]\\d{6}"],0,0,0,0,["9(?:399[0-3]|479[0-6]|76(?:2[278]|3[0-37]))\\d{4}"],["8(?:1[019]|2[0156]|84|90)\\d{6}"]]],"RO":["40","00","(?:[236-8]\\d|90)\\d{7}|[23]\\d{5}",[6,9],[["(\\d{3})(\\d{3})","$1 $2",["2[3-6]","2[3-6]\\d9"],"0$1"],["(\\d{2})(\\d{4})","$1 $2",["219|31"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[23]1"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[236-9]"],"0$1"]],"0",0,0,0,0,0,0,0," int "],"RS":["381","00","38[02-9]\\d{6,9}|6\\d{7,9}|90\\d{4,8}|38\\d{5,6}|(?:7\\d\\d|800)\\d{3,9}|(?:[12]\\d|3[0-79])\\d{5,10}",[6,7,8,9,10,11,12],[["(\\d{3})(\\d{3,9})","$1 $2",["(?:2[389]|39)0|[7-9]"],"0$1"],["(\\d{2})(\\d{5,10})","$1 $2",["[1-36]"],"0$1"]],"0"],"RU":["7","810","8\\d{13}|[347-9]\\d{9}",[10,14],[["(\\d{4})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["7(?:1[0-8]|2[1-9])","7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))","7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2"],"8 ($1)",1],["(\\d{5})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["7(?:1[0-68]|2[1-9])","7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))","7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]"],"8 ($1)",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"8 ($1)",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[349]|8(?:[02-7]|1[1-8])"],"8 ($1)",1],["(\\d{4})(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["8"],"8 ($1)"]],"8",0,0,0,0,0,[["336(?:[013-9]\\d|2[013-9])\\d{5}|(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15-7]|6[0-35-79]|7[1-37-9]))\\d{7}",[10]],["9\\d{9}",[10]],["8(?:0[04]|108\\d{3})\\d{7}"],["80[39]\\d{7}",[10]],["808\\d{7}",[10]]],"8~10"],"RW":["250","00","(?:06|[27]\\d\\d|[89]00)\\d{6}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[7-9]"],"0$1"]],"0"],"SA":["966","00","(?:[15]\\d|800|92)\\d{7}",[9,10],[["(\\d{4})(\\d{5})","$1 $2",["9"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]]],"0"],"SB":["677","0[01]","[6-9]\\d{6}|[1-6]\\d{4}",[5,7],[["(\\d{2})(\\d{5})","$1 $2",["6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])"]]]],"SC":["248","010|0[0-2]","(?:[2489]\\d|64)\\d{5}",[7],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[246]|9[57]"]]],0,0,0,0,0,0,0,"00"],"SD":["249","00","[19]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[19]"],"0$1"]],"0"],"SE":["46","00","(?:[26]\\d\\d|9)\\d{9}|[1-9]\\d{8}|[1-689]\\d{7}|[1-4689]\\d{6}|2\\d{5}",[6,7,8,9,10,12],[["(\\d{2})(\\d{2,3})(\\d{2})","$1-$2 $3",["20"],"0$1",0,"$1 $2 $3"],["(\\d{3})(\\d{4})","$1-$2",["9(?:00|39|44|9)"],"0$1",0,"$1 $2"],["(\\d{2})(\\d{3})(\\d{2})","$1-$2 $3",["[12][136]|3[356]|4[0246]|6[03]|90[1-9]"],"0$1",0,"$1 $2 $3"],["(\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["8"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2,3})(\\d{2})","$1-$2 $3",["1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])"],"0$1",0,"$1 $2 $3"],["(\\d{3})(\\d{2,3})(\\d{3})","$1-$2 $3",["9(?:00|39|44)"],"0$1",0,"$1 $2 $3"],["(\\d{2})(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]"],"0$1",0,"$1 $2 $3 $4"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["10|7"],"0$1",0,"$1 $2 $3 $4"],["(\\d)(\\d{3})(\\d{3})(\\d{2})","$1-$2 $3 $4",["8"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1-$2 $3 $4",["[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{2})(\\d{3})","$1-$2 $3 $4",["9"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4 $5",["[26]"],"0$1",0,"$1 $2 $3 $4 $5"]],"0"],"SG":["65","0[0-3]\\d","(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}",[8,10,11],[["(\\d{4})(\\d{4})","$1 $2",["[369]|8(?:0[1-9]|[1-9])"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]],["(\\d{4})(\\d{4})(\\d{3})","$1 $2 $3",["7"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]]]],"SH":["290","00","(?:[256]\\d|8)\\d{3}",[4,5],0,0,0,0,0,0,"[256]"],"SI":["386","00|10(?:22|66|88|99)","[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}",[5,6,7,8],[["(\\d{2})(\\d{3,6})","$1 $2",["8[09]|9"],"0$1"],["(\\d{3})(\\d{5})","$1 $2",["59|8"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[37][01]|4[0139]|51|6"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-57]"],"(0$1)"]],"0",0,0,0,0,0,0,"00"],"SJ":["47","00","0\\d{4}|(?:[489]\\d|79)\\d{6}",[5,8],0,0,0,0,0,0,"79"],"SK":["421","00","[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}",[6,7,9],[["(\\d)(\\d{2})(\\d{3,4})","$1 $2 $3",["21"],"0$1"],["(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["[3-5][1-8]1","[3-5][1-8]1[67]"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4",["2"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[689]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4",["[3-5]"],"0$1"]],"0"],"SL":["232","00","(?:[237-9]\\d|66)\\d{6}",[8],[["(\\d{2})(\\d{6})","$1 $2",["[236-9]"],"(0$1)"]],"0"],"SM":["378","00","(?:0549|[5-7]\\d)\\d{6}",[8,10],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]"]],["(\\d{4})(\\d{6})","$1 $2",["0"]]],0,0,"([89]\\d{5})$","0549$1"],"SN":["221","00","(?:[378]\\d|93)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[379]"]]]],"SO":["252","00","[346-9]\\d{8}|[12679]\\d{7}|[1-5]\\d{6}|[1348]\\d{5}",[6,7,8,9],[["(\\d{2})(\\d{4})","$1 $2",["8[125]"]],["(\\d{6})","$1",["[134]"]],["(\\d)(\\d{6})","$1 $2",["[15]|2[0-79]|3[0-46-8]|4[0-7]"]],["(\\d)(\\d{7})","$1 $2",["(?:2|90)4|[67]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[348]|64|79|90"]],["(\\d{2})(\\d{5,7})","$1 $2",["1|28|6[0-35-9]|7[67]|9[2-9]"]]],"0"],"SR":["597","00","(?:[2-5]|[6-8]\\d|90)\\d{5}",[6,7],[["(\\d{2})(\\d{2})(\\d{2})","$1-$2-$3",["56"]],["(\\d{3})(\\d{3})","$1-$2",["[2-5]"]],["(\\d{3})(\\d{4})","$1-$2",["[6-9]"]]]],"SS":["211","00","[19]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[19]"],"0$1"]],"0"],"ST":["239","00","(?:22|9\\d)\\d{5}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[29]"]]]],"SV":["503","00","[267]\\d{7}|(?:80\\d|900)\\d{4}(?:\\d{4})?",[7,8,11],[["(\\d{3})(\\d{4})","$1 $2",["[89]"]],["(\\d{4})(\\d{4})","$1 $2",["[267]"]],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["[89]"]]]],"SX":["1","011","7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"(5\\d{6})$|1","721$1",0,"721"],"SY":["963","00","[1-359]\\d{8}|[1-5]\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-4]|5[1-3]"],"0$1",1],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[59]"],"0$1",1]],"0"],"SZ":["268","00","0800\\d{4}|(?:[237]\\d|900)\\d{6}",[8,9],[["(\\d{4})(\\d{4})","$1 $2",["[0237]"]],["(\\d{5})(\\d{4})","$1 $2",["9"]]]],"TA":["290","00","8\\d{3}",[4],0,0,0,0,0,0,"8"],"TC":["1","011","(?:[58]\\d\\d|649|900)\\d{7}",[10],0,"1",0,"([2-479]\\d{6})$|1","649$1",0,"649"],"TD":["235","00|16","(?:22|30|[689]\\d|77)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[236-9]"]]],0,0,0,0,0,0,0,"00"],"TG":["228","00","[279]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[279]"]]]],"TH":["66","00[1-9]","(?:001800|[2-57]|[689]\\d)\\d{7}|1\\d{7,9}",[8,9,10,13],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13-9]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0"],"TJ":["992","810","[0-57-9]\\d{8}",[9],[["(\\d{6})(\\d)(\\d{2})","$1 $2 $3",["331","3317"]],["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["44[02-479]|[34]7"]],["(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["3(?:[1245]|3[12])"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[0-57-9]"]]],0,0,0,0,0,0,0,"8~10"],"TK":["690","00","[2-47]\\d{3,6}",[4,5,6,7]],"TL":["670","00","7\\d{7}|(?:[2-47]\\d|[89]0)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["[2-489]|70"]],["(\\d{4})(\\d{4})","$1 $2",["7"]]]],"TM":["993","810","(?:[1-6]\\d|71)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["12"],"(8 $1)"],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4",["[1-5]"],"(8 $1)"],["(\\d{2})(\\d{6})","$1 $2",["[67]"],"8 $1"]],"8",0,0,0,0,0,0,"8~10"],"TN":["216","00","[2-57-9]\\d{7}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-57-9]"]]]],"TO":["676","00","(?:0800|(?:[5-8]\\d\\d|999)\\d)\\d{3}|[2-8]\\d{4}",[5,7],[["(\\d{2})(\\d{3})","$1-$2",["[2-4]|50|6[09]|7[0-24-69]|8[05]"]],["(\\d{4})(\\d{3})","$1 $2",["0"]],["(\\d{3})(\\d{4})","$1 $2",["[5-9]"]]]],"TR":["90","00","4\\d{6}|8\\d{11,12}|(?:[2-58]\\d\\d|900)\\d{7}",[7,10,12,13],[["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["512|8[01589]|90"],"0$1",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5(?:[0-59]|61)","5(?:[0-59]|61[06])","5(?:[0-59]|61[06]1)"],"0$1",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24][1-8]|3[1-9]"],"(0$1)",1],["(\\d{3})(\\d{3})(\\d{6,7})","$1 $2 $3",["80"],"0$1",1]],"0"],"TT":["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-46-8]\\d{6})$|1","868$1",0,"868"],"TV":["688","00","(?:2|7\\d\\d|90)\\d{4}",[5,6,7],[["(\\d{2})(\\d{3})","$1 $2",["2"]],["(\\d{2})(\\d{4})","$1 $2",["90"]],["(\\d{2})(\\d{5})","$1 $2",["7"]]]],"TW":["886","0(?:0[25-79]|19)","[2-689]\\d{8}|7\\d{9,10}|[2-8]\\d{7}|2\\d{6}",[7,8,9,10,11],[["(\\d{2})(\\d)(\\d{4})","$1 $2 $3",["202"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[258]0"],"0$1"],["(\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]","[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[49]"],"0$1"],["(\\d{2})(\\d{4})(\\d{4,5})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,0,0,"#"],"TZ":["255","00[056]","(?:[25-8]\\d|41|90)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[24]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["5"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[67]"],"0$1"]],"0"],"UA":["380","00","[89]\\d{9}|[3-9]\\d{8}",[9,10],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]","6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]"],"0$1"],["(\\d{4})(\\d{5})","$1 $2",["3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])","3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[3-7]|89|9[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"],"0$1"]],"0",0,0,0,0,0,0,"0~0"],"UG":["256","00[057]","800\\d{6}|(?:[29]0|[347]\\d)\\d{7}",[9],[["(\\d{4})(\\d{5})","$1 $2",["202","2024"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["[27-9]|4(?:6[45]|[7-9])"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["[34]"],"0$1"]],"0"],"US":["1","011","[2-9]\\d{9}|3\\d{6}",[10],[["(\\d{3})(\\d{4})","$1-$2",["310"],0,1],["(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",["[2-9]"],0,1,"$1-$2-$3"]],"1",0,0,0,0,0,[["3052(?:0[0-8]|[1-9]\\d)\\d{4}|(?:2742|305[3-9])\\d{6}|(?:472|983)[2-47-9]\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-2]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\d{6}"],[""],["8(?:00|33|44|55|66|77|88)[2-9]\\d{6}"],["900[2-9]\\d{6}"],["52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\d{6}"],0,0,0,["305209\\d{4}"]]],"UY":["598","0(?:0|1[3-9]\\d)","0004\\d{2,9}|[1249]\\d{7}|2\\d{3,4}|(?:[49]\\d|80)\\d{5}",[4,5,6,7,8,9,10,11,12,13],[["(\\d{4,5})","$1",["21"]],["(\\d{3})(\\d{3,4})","$1 $2",["0"]],["(\\d{3})(\\d{4})","$1 $2",["[49]0|8"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1"],["(\\d{4})(\\d{4})","$1 $2",["[124]"]],["(\\d{3})(\\d{3})(\\d{2,4})","$1 $2 $3",["0"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{2,4})","$1 $2 $3 $4",["0"]]],"0",0,0,0,0,0,0,"00"," int. "],"UZ":["998","00","(?:20|33|[5-9]\\d)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[235-9]"]]]],"VA":["39","00","0\\d{5,10}|3[0-8]\\d{7,10}|55\\d{8}|8\\d{5}(?:\\d{2,4})?|(?:1\\d|39)\\d{7,8}",[6,7,8,9,10,11,12],0,0,0,0,0,0,"06698"],"VC":["1","011","(?:[58]\\d\\d|784|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","784$1",0,"784"],"VE":["58","00","[68]00\\d{7}|(?:[24]\\d|[59]0)\\d{8}",[10],[["(\\d{3})(\\d{7})","$1-$2",["[24-689]"],"0$1"]],"0"],"VG":["1","011","(?:284|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-578]\\d{6})$|1","284$1",0,"284"],"VI":["1","011","[58]\\d{9}|(?:34|90)0\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","340$1",0,"340"],"VN":["84","00","[12]\\d{9}|[135-9]\\d{8}|[16]\\d{7}|[16-8]\\d{6}",[7,8,9,10],[["(\\d{2})(\\d{5})","$1 $2",["80"],"0$1",1],["(\\d{4})(\\d{4,6})","$1 $2",["1"],0,1],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["6"],"0$1",1],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[357-9]"],"0$1",1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["2[48]"],"0$1",1],["(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3",["2"],"0$1",1]],"0"],"VU":["678","00","[57-9]\\d{6}|(?:[238]\\d|48)\\d{3}",[5,7],[["(\\d{3})(\\d{4})","$1 $2",["[57-9]"]]]],"WF":["681","00","(?:40|72|8\\d{4})\\d{4}|[89]\\d{5}",[6,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[47-9]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]]]],"WS":["685","0","(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}",[5,6,7,10],[["(\\d{5})","$1",["[2-5]|6[1-9]"]],["(\\d{3})(\\d{3,7})","$1 $2",["[68]"]],["(\\d{2})(\\d{5})","$1 $2",["7"]]]],"XK":["383","00","2\\d{7,8}|3\\d{7,11}|(?:4\\d\\d|[89]00)\\d{5}",[8,9,10,11,12],[["(\\d{3})(\\d{5})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-4]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2|39"],"0$1"],["(\\d{2})(\\d{7,10})","$1 $2",["3"],"0$1"]],"0"],"YE":["967","00","(?:1|7\\d)\\d{7}|[1-7]\\d{6}",[7,8,9],[["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7(?:[24-6]|8[0-7])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"],"0$1"]],"0"],"YT":["262","00","7093\\d{5}|(?:80|9\\d)\\d{7}|(?:26|63)9\\d{6}",[9],0,"0",0,0,0,0,0,[["269(?:0[0-467]|15|5[0-4]|6\\d|[78]0)\\d{4}"],["(?:639(?:0[0-79]|1[019]|[267]\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\d{4}"],["80\\d{7}"],0,0,0,0,0,["9(?:(?:39|47)8[01]|769\\d)\\d{4}"]]],"ZA":["27","00","[1-79]\\d{8}|8\\d{4,9}",[5,6,7,8,9,10],[["(\\d{2})(\\d{3,4})","$1 $2",["8[1-4]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["8[1-4]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["860"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"]],"0"],"ZM":["260","00","800\\d{6}|(?:21|[579]\\d|63)\\d{7}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[28]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["[579]"],"0$1"]],"0"],"ZW":["263","00","2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}",[5,6,7,8,9,10],[["(\\d{3})(\\d{3,5})","$1 $2",["2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]"],"0$1"],["(\\d)(\\d{3})(\\d{2,4})","$1 $2 $3",["[49]"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["80"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2","2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)","2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)"],"0$1"],["(\\d{4})(\\d{6})","$1 $2",["8"],"0$1"],["(\\d{2})(\\d{3,5})","$1 $2",["1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["29[013-9]|39|54"],"0$1"],["(\\d{4})(\\d{3,5})","$1 $2",["(?:25|54)8","258|5483"],"0$1"]],"0"]},"nonGeographic":{"800":["800",0,"(?:00|[1-9]\\d)\\d{6}",[8],[["(\\d{4})(\\d{4})","$1 $2",["\\d"]]],0,0,0,0,0,0,[0,0,["(?:00|[1-9]\\d)\\d{6}"]]],"808":["808",0,"[1-9]\\d{7}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[1-9]"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,["[1-9]\\d{7}"]]],"870":["870",0,"7\\d{11}|[235-7]\\d{8}",[9,12],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235-7]"]]],0,0,0,0,0,0,[0,["(?:[356]|774[45])\\d{8}|7[6-8]\\d{7}"],0,0,0,0,0,0,["2\\d{8}",[9]]]],"878":["878",0,"10\\d{10}",[12],[["(\\d{2})(\\d{5})(\\d{5})","$1 $2 $3",["1"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,["10\\d{10}"]]],"881":["881",0,"6\\d{9}|[0-36-9]\\d{8}",[9,10],[["(\\d)(\\d{3})(\\d{5})","$1 $2 $3",["[0-37-9]"]],["(\\d)(\\d{3})(\\d{5,6})","$1 $2 $3",["6"]]],0,0,0,0,0,0,[0,["6\\d{9}|[0-36-9]\\d{8}"]]],"882":["882",0,"[13]\\d{6}(?:\\d{2,5})?|[19]\\d{7}|(?:[25]\\d\\d|4)\\d{7}(?:\\d{2})?",[7,8,9,10,11,12],[["(\\d{2})(\\d{5})","$1 $2",["16|342"]],["(\\d{2})(\\d{6})","$1 $2",["49"]],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["1[36]|9"]],["(\\d{2})(\\d{4})(\\d{3})","$1 $2 $3",["3[23]"]],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["16"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["10|23|3(?:[15]|4[57])|4|51"]],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["34"]],["(\\d{2})(\\d{4,5})(\\d{5})","$1 $2 $3",["[1-35]"]]],0,0,0,0,0,0,[0,["342\\d{4}|(?:337|49)\\d{6}|(?:3(?:2|47|7\\d{3})|50\\d{3})\\d{7}",[7,8,9,10,12]],0,0,0,["348[57]\\d{7}",[11]],0,0,["1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\d{4}|6\\d{5,10})|(?:345\\d|9[89])\\d{6}|(?:10|2(?:3|85\\d)|3(?:[15]|[69]\\d\\d)|4[15-8]|51)\\d{8}"]]],"883":["883",0,"(?:[1-4]\\d|51)\\d{6,10}",[8,9,10,11,12],[["(\\d{3})(\\d{3})(\\d{2,8})","$1 $2 $3",["[14]|2[24-689]|3[02-689]|51[24-9]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["510"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["21"]],["(\\d{4})(\\d{4})(\\d{4})","$1 $2 $3",["51[13]"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[235]"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,["(?:2(?:00\\d\\d|10)|(?:370[1-9]|51\\d0)\\d)\\d{7}|51(?:00\\d{5}|[24-9]0\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\d{5,9}"]]],"888":["888",0,"\\d{11}",[11],[["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3"]],0,0,0,0,0,0,[0,0,0,0,0,0,["\\d{11}"]]],"979":["979",0,"[1359]\\d{8}",[9],[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[1359]"]]],0,0,0,0,0,0,[0,0,0,["[1359]\\d{8}"]]]}}); 28042 28043/***/ }), 28044
vendor: 49,881 bytes, lines 28045-28082
28045/***/ "../node_modules/libphonenumber-js/min/exports/AsYouType.js": 28046/*!******************************************************************!*\ 28047 !*** ../node_modules/libphonenumber-js/min/exports/AsYouType.js ***! 28048 \******************************************************************/ 28049/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 28050 28051"use strict"; 28052__webpack_require__.r(__webpack_exports__); 28053/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28054/* harmony export */ AsYouType: function() { return /* binding */ AsYouType; } 28055/* harmony export */ }); 28056/* harmony import */ var _metadata_min_json_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../metadata.min.json.js */ "../node_modules/libphonenumber-js/metadata.min.json.js"); 28057/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/index.js */ "../node_modules/libphonenumber-js/es6/AsYouType.js"); 28058// Importing from a ".js" file is a workaround for Node.js "ES Modules" 28059// importing system which is even uncapable of importing "*.json" files. 28060 28061 28062 28063 28064function AsYouType(country) { 28065 return _core_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].call(this, country, _metadata_min_json_js__WEBPACK_IMPORTED_MODULE_0__["default"]) 28066} 28067 28068AsYouType.prototype = Object.create(_core_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].prototype, {}) 28069AsYouType.prototype.constructor = AsYouType 28070 28071/***/ }), 28072 28073/***/ "../node_modules/raw-loader/index.js!./resources/js/src/magnific.js": 28074/*!**************************************************************************!*\ 28075 !*** ../node_modules/raw-loader/index.js!./resources/js/src/magnific.js ***! 28076 \**************************************************************************/ 28077/***/ (function(module) { 28078 28079module.exports = "/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n;(function (factory) { \nif (typeof define === 'function' && define.amd) { \n // AMD. Register as an anonymous module. \n define(['jquery'], factory); \n } else if (typeof exports === 'object') { \n // Node/CommonJS \n factory(require('jquery')); \n } else { \n // Browser globals \n factory(window.jQuery || window.Zepto); \n } \n }(function($) { \n\n/*>>core*/\n/**\n * \n * Magnific Popup Core JS file\n * \n */\n\n\n/**\n * Private static constants\n */\nvar CLOSE_EVENT = 'Close',\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\n\tAFTER_CLOSE_EVENT = 'AfterClose',\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\n\tOPEN_EVENT = 'Open',\n\tCHANGE_EVENT = 'Change',\n\tNS = 'mfp',\n\tEVENT_NS = '.' + NS,\n\tREADY_CLASS = 'mfp-ready',\n\tREMOVING_CLASS = 'mfp-removing',\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\n\n\n/**\n * Private vars \n */\n/*jshint -W079 */\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\n\tMagnificPopup = function(){},\n\t_isJQ = !!(window.jQuery),\n\t_prevStatus,\n\t_window = $(window),\n\t_document,\n\t_prevContentType,\n\t_wrapClasses,\n\t_currPopupType;\n\n\n/**\n * Private functions\n */\nvar _mfpOn = function(name, f) {\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\n\t},\n\t_getEl = function(className, appendTo, html, raw) {\n\t\tvar el = document.createElement('div');\n\t\tel.className = 'mfp-'+className;\n\t\tif(html) {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t\tif(!raw) {\n\t\t\tel = $(el);\n\t\t\tif(appendTo) {\n\t\t\t\tel.appendTo(appendTo);\n\t\t\t}\n\t\t} else if(appendTo) {\n\t\t\tappendTo.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\t_mfpTrigger = function(e, data) {\n\t\tmfp.ev.triggerHandler(NS + e, data);\n\n\t\tif(mfp.st.callbacks) {\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\n\t\t\tif(mfp.st.callbacks[e]) {\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\n\t\t\t}\n\t\t}\n\t},\n\t_getCloseBtn = function(type) {\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\n\t\t\t_currPopupType = type;\n\t\t}\n\t\treturn mfp.currTemplate.closeBtn;\n\t},\n\t// Initialize Magnific Popup only when called at least once\n\t_checkInstance = function() {\n\t\tif(!$.magnificPopup.instance) {\n\t\t\t/*jshint -W020 */\n\t\t\tmfp = new MagnificPopup();\n\t\t\tmfp.init();\n\t\t\t$.magnificPopup.instance = mfp;\n\t\t}\n\t},\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n\tsupportsTransitions = function() {\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\n\n\t\tif( s['transition'] !== undefined ) {\n\t\t\treturn true; \n\t\t}\n\t\t\t\n\t\twhile( v.length ) {\n\t\t\tif( v.pop() + 'Transition' in s ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn false;\n\t};\n\n\n\n/**\n * Public functions\n */\nMagnificPopup.prototype = {\n\n\tconstructor: MagnificPopup,\n\n\t/**\n\t * Initializes Magnific Popup plugin. \n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\n\t */\n\tinit: function() {\n\t\tvar appVersion = navigator.appVersion;\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\n\t\tmfp.supportsTransition = supportsTransitions();\n\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\n\t\t// If you know a better way of detecting this - let me know.\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\n\t\t_document = $(document);\n\n\t\tmfp.popupsCache = {};\n\t},\n\n\t/**\n\t * Opens popup\n\t * @param data [description]\n\t */\n\topen: function(data) {\n\n\t\tvar i;\n\n\t\tif(data.isObj === false) { \n\t\t\t// convert jQuery collection to array to avoid conflicts later\n\t\t\tmfp.items = data.items.toArray();\n\n\t\t\tmfp.index = 0;\n\t\t\tvar items = data.items,\n\t\t\t\titem;\n\t\t\tfor(i = 0; i < items.length; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tif(item.parsed) {\n\t\t\t\t\titem = item.el[0];\n\t\t\t\t}\n\t\t\t\tif(item === data.el[0]) {\n\t\t\t\t\tmfp.index = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\n\t\t\tmfp.index = data.index || 0;\n\t\t}\n\n\t\t// if popup is already opened - we just update the content\n\t\tif(mfp.isOpen) {\n\t\t\tmfp.updateItemHTML();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmfp.types = []; \n\t\t_wrapClasses = '';\n\t\tif(data.mainEl && data.mainEl.length) {\n\t\t\tmfp.ev = data.mainEl.eq(0);\n\t\t} else {\n\t\t\tmfp.ev = _document;\n\t\t}\n\n\t\tif(data.key) {\n\t\t\tif(!mfp.popupsCache[data.key]) {\n\t\t\t\tmfp.popupsCache[data.key] = {};\n\t\t\t}\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\n\t\t} else {\n\t\t\tmfp.currTemplate = {};\n\t\t}\n\n\n\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\n\n\t\tif(mfp.st.modal) {\n\t\t\tmfp.st.closeOnContentClick = false;\n\t\t\tmfp.st.closeOnBgClick = false;\n\t\t\tmfp.st.showCloseBtn = false;\n\t\t\tmfp.st.enableEscapeKey = false;\n\t\t}\n\t\t\n\n\t\t// Building markup\n\t\t// main containers are created only once\n\t\tif(!mfp.bgOverlay) {\n\n\t\t\t// Dark overlay\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\n\t\t\t\tmfp.close();\n\t\t\t});\n\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\n\t\t}\n\n\t\tmfp.contentContainer = _getEl('content');\n\t\tif(mfp.st.preloader) {\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\n\t\t}\n\n\n\t\t// Initializing modules\n\t\tvar modules = $.magnificPopup.modules;\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar n = modules[i];\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\n\t\t\tmfp['init'+n].call(mfp);\n\t\t}\n\t\t_mfpTrigger('BeforeOpen');\n\n\n\t\tif(mfp.st.showCloseBtn) {\n\t\t\t// Close button\n\t\t\tif(!mfp.st.closeBtnInside) {\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\n\t\t\t} else {\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\n\t\t\t\t});\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\n\t\t\t}\n\t\t}\n\n\t\tif(mfp.st.alignTop) {\n\t\t\t_wrapClasses += ' mfp-align-top';\n\t\t}\n\n\t\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css({\n\t\t\t\toverflow: mfp.st.overflowY,\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\toverflowY: mfp.st.overflowY\n\t\t\t});\n\t\t} else {\n\t\t\tmfp.wrap.css({ \n\t\t\t\ttop: _window.scrollTop(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\n\t\t\tmfp.bgOverlay.css({\n\t\t\t\theight: _document.height(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\n\t\t\n\n\t\tif(mfp.st.enableEscapeKey) {\n\t\t\t// Close on ESC key\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\n\t\t\t\tif(e.keyCode === 27) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_window.on('resize' + EVENT_NS, function() {\n\t\t\tmfp.updateSize();\n\t\t});\n\n\n\t\tif(!mfp.st.closeOnContentClick) {\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\n\t\t}\n\t\t\n\t\tif(_wrapClasses)\n\t\t\tmfp.wrap.addClass(_wrapClasses);\n\n\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\n\t\tvar windowHeight = mfp.wH = _window.height();\n\n\t\t\n\t\tvar windowStyles = {};\n\n\t\tif( mfp.fixedContentPos ) {\n if(mfp._hasScrollBar(windowHeight)){\n var s = mfp._getScrollbarSize();\n if(s) {\n windowStyles.marginRight = s;\n }\n }\n }\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tif(!mfp.isIE7) {\n\t\t\t\twindowStyles.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\t// ie7 double-scroll bug\n\t\t\t\t$('body, html').css('overflow', 'hidden');\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t\n\t\tvar classesToadd = mfp.st.mainClass;\n\t\tif(mfp.isIE7) {\n\t\t\tclassesToadd += ' mfp-ie7';\n\t\t}\n\t\tif(classesToadd) {\n\t\t\tmfp._addClassToMFP( classesToadd );\n\t\t}\n\n\t\t// add content\n\t\tmfp.updateItemHTML();\n\n\t\t_mfpTrigger('BuildControls');\n\n\t\t// remove scrollbar, add margin e.t.c\n\t\t$('html').css(windowStyles);\n\t\t\n\t\t// add everything to DOM\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\n\n\t\t// Save last focused element\n\t\tmfp._lastFocusedEl = document.activeElement;\n\t\t\n\t\t// Wait for next cycle to allow CSS transition\n\t\tsetTimeout(function() {\n\t\t\t\n\t\t\tif(mfp.content) {\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\n\t\t\t\tmfp._setFocus();\n\t\t\t} else {\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\n\t\t\t}\n\t\t\t\n\t\t\t// Trap the focus in popup\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\n\n\t\t}, 16);\n\n\t\tmfp.isOpen = true;\n\t\tmfp.updateSize(windowHeight);\n\t\t_mfpTrigger(OPEN_EVENT);\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Closes the popup\n\t */\n\tclose: function() {\n\t\tif(!mfp.isOpen) return;\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\n\n\t\tmfp.isOpen = false;\n\t\t// for CSS3 animation\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) {\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\n\t\t\tsetTimeout(function() {\n\t\t\t\tmfp._close();\n\t\t\t}, mfp.st.removalDelay);\n\t\t} else {\n\t\t\tmfp._close();\n\t\t}\n\t},\n\n\t/**\n\t * Helper for close() function\n\t */\n\t_close: function() {\n\t\t_mfpTrigger(CLOSE_EVENT);\n\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\n\n\t\tmfp.bgOverlay.detach();\n\t\tmfp.wrap.detach();\n\t\tmfp.container.empty();\n\n\t\tif(mfp.st.mainClass) {\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\n\t\t}\n\n\t\tmfp._removeClassFromMFP(classesToRemove);\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tvar windowStyles = {marginRight: ''};\n\t\t\tif(mfp.isIE7) {\n\t\t\t\t$('body, html').css('overflow', '');\n\t\t\t} else {\n\t\t\t\twindowStyles.overflow = '';\n\t\t\t}\n\t\t\t$('html').css(windowStyles);\n\t\t}\n\t\t\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\n\t\tmfp.ev.off(EVENT_NS);\n\n\t\t// clean up DOM elements that aren't removed\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\n\t\tmfp.container.attr('class', 'mfp-container');\n\n\t\t// remove close button from target element\n\t\tif(mfp.st.showCloseBtn &&\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\n\t\t\tif(mfp.currTemplate.closeBtn)\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\n\t\t}\n\n\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\n\t\t}\n\t\tmfp.currItem = null;\t\n\t\tmfp.content = null;\n\t\tmfp.currTemplate = null;\n\t\tmfp.prevHeight = 0;\n\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\n\t},\n\t\n\tupdateSize: function(winHeight) {\n\n\t\tif(mfp.isIOS) {\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\n\t\t\tvar height = window.innerHeight * zoomLevel;\n\t\t\tmfp.wrap.css('height', height);\n\t\t\tmfp.wH = height;\n\t\t} else {\n\t\t\tmfp.wH = winHeight || _window.height();\n\t\t}\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\n\t\tif(!mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css('height', mfp.wH);\n\t\t}\n\n\t\t_mfpTrigger('Resize');\n\n\t},\n\n\t/**\n\t * Set content of popup based on current index\n\t */\n\tupdateItemHTML: function() {\n\t\tvar item = mfp.items[mfp.index];\n\n\t\t// Detach and perform modifications\n\t\tmfp.contentContainer.detach();\n\n\t\tif(mfp.content)\n\t\t\tmfp.content.detach();\n\n\t\tif(!item.parsed) {\n\t\t\titem = mfp.parseEl( mfp.index );\n\t\t}\n\n\t\tvar type = item.type;\n\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\n\t\t// BeforeChange event works like so:\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\n\n\t\tmfp.currItem = item;\n\n\t\tif(!mfp.currTemplate[type]) {\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\n\n\t\t\t// allows to modify markup\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\n\n\t\t\tif(markup) {\n\t\t\t\tmfp.currTemplate[type] = $(markup);\n\t\t\t} else {\n\t\t\t\t// if there is no markup found we just define that template is parsed\n\t\t\t\tmfp.currTemplate[type] = true;\n\t\t\t}\n\t\t}\n\n\t\tif(_prevContentType && _prevContentType !== item.type) {\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\n\t\t}\n\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\n\t\tmfp.appendContent(newContent, type);\n\n\t\titem.preloaded = true;\n\n\t\t_mfpTrigger(CHANGE_EVENT, item);\n\t\t_prevContentType = item.type;\n\n\t\t// Append container back after its content changed\n\t\tmfp.container.prepend(mfp.contentContainer);\n\n\t\t_mfpTrigger('AfterChange');\n\t},\n\n\n\t/**\n\t * Set HTML content of popup\n\t */\n\tappendContent: function(newContent, type) {\n\t\tmfp.content = newContent;\n\n\t\tif(newContent) {\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\n\t\t\t\tmfp.currTemplate[type] === true) {\n\t\t\t\t// if there is no markup, we just append close button element inside\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmfp.content = newContent;\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.content = '';\n\t\t}\n\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\n\n\t\tmfp.contentContainer.append(mfp.content);\n\t},\n\n\n\t/**\n\t * Creates Magnific Popup data object based on given data\n\t * @param {int} index Index of item to parse\n\t */\n\tparseEl: function(index) {\n\t\tvar item = mfp.items[index],\n\t\t\ttype;\n\n\t\tif(item.tagName) {\n\t\t\titem = { el: $(item) };\n\t\t} else {\n\t\t\ttype = item.type;\n\t\t\titem = { data: item, src: item.src };\n\t\t}\n\n\t\tif(item.el) {\n\t\t\tvar types = mfp.types;\n\n\t\t\t// check for 'mfp-TYPE' class\n\t\t\tfor(var i = 0; i < types.length; i++) {\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\n\t\t\t\t\ttype = types[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.src = item.el.attr('data-mfp-src');\n\t\t\tif(!item.src) {\n\t\t\t\titem.src = item.el.attr('href');\n\t\t\t}\n\t\t}\n\n\t\titem.type = type || mfp.st.type || 'inline';\n\t\titem.index = index;\n\t\titem.parsed = true;\n\t\tmfp.items[index] = item;\n\t\t_mfpTrigger('ElementParse', item);\n\n\t\treturn mfp.items[index];\n\t},\n\n\n\t/**\n\t * Initializes single popup or a group of popups\n\t */\n\taddGroup: function(el, options) {\n\t\tvar eHandler = function(e) {\n\t\t\te.mfpEl = this;\n\t\t\tmfp._openClick(e, el, options);\n\t\t};\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tvar eName = 'click.magnificPopup';\n\t\toptions.mainEl = el;\n\n\t\tif(options.items) {\n\t\t\toptions.isObj = true;\n\t\t\tel.off(eName).on(eName, eHandler);\n\t\t} else {\n\t\t\toptions.isObj = false;\n\t\t\tif(options.delegate) {\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\n\t\t\t} else {\n\t\t\t\toptions.items = el;\n\t\t\t\tel.off(eName).on(eName, eHandler);\n\t\t\t}\n\t\t}\n\t},\n\t_openClick: function(e, el, options) {\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\n\n\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\n\n\t\tif(disableOn) {\n\t\t\tif($.isFunction(disableOn)) {\n\t\t\t\tif( !disableOn.call(mfp) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else { // else it's number\n\t\t\t\tif( _window.width() < disableOn ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(e.type) {\n\t\t\te.preventDefault();\n\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\n\t\t\tif(mfp.isOpen) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\toptions.el = $(e.mfpEl);\n\t\tif(options.delegate) {\n\t\t\toptions.items = el.find(options.delegate);\n\t\t}\n\t\tmfp.open(options);\n\t},\n\n\n\t/**\n\t * Updates text on preloader\n\t */\n\tupdateStatus: function(status, text) {\n\n\t\tif(mfp.preloader) {\n\t\t\tif(_prevStatus !== status) {\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\n\t\t\t}\n\n\t\t\tif(!text && status === 'loading') {\n\t\t\t\ttext = mfp.st.tLoading;\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tstatus: status,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t\t// allows to modify status\n\t\t\t_mfpTrigger('UpdateStatus', data);\n\n\t\t\tstatus = data.status;\n\t\t\ttext = data.text;\n\n\t\t\tmfp.preloader.html(text);\n\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tmfp.container.addClass('mfp-s-'+status);\n\t\t\t_prevStatus = status;\n\t\t}\n\t},\n\n\n\t/*\n\t\t\"Private\" helpers that aren't private at all\n\t */\n\t// Check to close popup or not\n\t// \"target\" is an element that was clicked\n\t_checkIfClose: function(target) {\n\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\n\n\t\tif(closeOnContent && closeOnBg) {\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// if click is outside the content\n\t\t\tif( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) {\n\t\t\t\tif(closeOnBg) {\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\n\t\t\t\t\tif( $.contains(document, target) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(closeOnContent) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\t\treturn false;\n\t},\n\t_addClassToMFP: function(cName) {\n\t\tmfp.bgOverlay.addClass(cName);\n\t\tmfp.wrap.addClass(cName);\n\t},\n\t_removeClassFromMFP: function(cName) {\n\t\tthis.bgOverlay.removeClass(cName);\n\t\tmfp.wrap.removeClass(cName);\n\t},\n\t_hasScrollBar: function(winHeight) {\n\t\treturn ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\n\t},\n\t_setFocus: function() {\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\n\t},\n\t_onFocusIn: function(e) {\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\n\t\t\tmfp._setFocus();\n\t\t\treturn false;\n\t\t}\n\t},\n\t_parseMarkup: function(template, values, item) {\n\t\tvar arr;\n\t\tif(item.data) {\n\t\t\tvalues = $.extend(item.data, values);\n\t\t}\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\n\n\t\t$.each(values, function(key, value) {\n\t\t\tif(value === undefined || value === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tarr = key.split('_');\n\t\t\tif(arr.length > 1) {\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\n\n\t\t\t\tif(el.length > 0) {\n\t\t\t\t\tvar attr = arr[1];\n\t\t\t\t\tif(attr === 'replaceWith') {\n\t\t\t\t\t\tif(el[0] !== value[0]) {\n\t\t\t\t\t\t\tel.replaceWith(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(attr === 'img') {\n\t\t\t\t\t\tif(el.is('img')) {\n\t\t\t\t\t\t\tel.attr('src', value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.attr(arr[1], value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\n\t\t\t}\n\t\t});\n\t},\n\n\t_getScrollbarSize: function() {\n\t\t// thx David\n\t\tif(mfp.scrollbarSize === undefined) {\n\t\t\tvar scrollDiv = document.createElement(\"div\");\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\n\t\t\tdocument.body.appendChild(scrollDiv);\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t\tdocument.body.removeChild(scrollDiv);\n\t\t}\n\t\treturn mfp.scrollbarSize;\n\t}\n\n}; /* MagnificPopup core prototype end */\n\n\n\n\n/**\n * Public static functions\n */\n$.magnificPopup = {\n\tinstance: null,\n\tproto: MagnificPopup.prototype,\n\tmodules: [],\n\n\topen: function(options, index) {\n\t\t_checkInstance();\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t} else {\n\t\t\toptions = $.extend(true, {}, options);\n\t\t}\n\n\t\toptions.isObj = true;\n\t\toptions.index = index || 0;\n\t\treturn this.instance.open(options);\n\t},\n\n\tclose: function() {\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\n\t},\n\n\tregisterModule: function(name, module) {\n\t\tif(module.options) {\n\t\t\t$.magnificPopup.defaults[name] = module.options;\n\t\t}\n\t\t$.extend(this.proto, module.proto);\n\t\tthis.modules.push(name);\n\t},\n\n\tdefaults: {\n\n\t\t// Info about options is in docs:\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\n\n\t\tdisableOn: 0,\n\n\t\tkey: null,\n\n\t\tmidClick: false,\n\n\t\tmainClass: '',\n\n\t\tpreloader: true,\n\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\n\n\t\tcloseOnContentClick: false,\n\n\t\tcloseOnBgClick: true,\n\n\t\tcloseBtnInside: true,\n\n\t\tshowCloseBtn: true,\n\n\t\tenableEscapeKey: true,\n\n\t\tmodal: false,\n\n\t\talignTop: false,\n\n\t\tremovalDelay: 0,\n\n\t\tprependTo: null,\n\n\t\tfixedContentPos: 'auto',\n\n\t\tfixedBgPos: 'auto',\n\n\t\toverflowY: 'auto',\n\n\t\tcloseMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">×</button>',\n\n\t\ttClose: 'Close (Esc)',\n\n\t\ttLoading: 'Loading...',\n\n\t\tautoFocusLast: true\n\n\t}\n};\n\n\n\n$.fn.magnificPopup = function(options) {\n\t_checkInstance();\n\n\tvar jqEl = $(this);\n\n\t// We call some API method of first param is a string\n\tif (typeof options === \"string\" ) {\n\n\t\tif(options === 'open') {\n\t\t\tvar items,\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\n\n\t\t\tif(itemOpts.items) {\n\t\t\t\titems = itemOpts.items[index];\n\t\t\t} else {\n\t\t\t\titems = jqEl;\n\t\t\t\tif(itemOpts.delegate) {\n\t\t\t\t\titems = items.find(itemOpts.delegate);\n\t\t\t\t}\n\t\t\t\titems = items.eq( index );\n\t\t\t}\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\n\t\t} else {\n\t\t\tif(mfp.isOpen)\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\n\t} else {\n\t\t// clone options obj\n\t\toptions = $.extend(true, {}, options);\n\n\t\t/*\n\t\t * As Zepto doesn't support .data() method for objects\n\t\t * and it works only in normal browsers\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\n\t\t */\n\t\tif(_isJQ) {\n\t\t\tjqEl.data('magnificPopup', options);\n\t\t} else {\n\t\t\tjqEl[0].magnificPopup = options;\n\t\t}\n\n\t\tmfp.addGroup(jqEl, options);\n\n\t}\n\treturn jqEl;\n};\n\n/*>>core*/\n\n/*>>inline*/\n\nvar INLINE_NS = 'inline',\n\t_hiddenClass,\n\t_inlinePlaceholder,\n\t_lastInlineElement,\n\t_putInlineElementsBack = function() {\n\t\tif(_lastInlineElement) {\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\n\t\t\t_lastInlineElement = null;\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(INLINE_NS, {\n\toptions: {\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\n\t\tmarkup: '',\n\t\ttNotFound: 'Content not found'\n\t},\n\tproto: {\n\n\t\tinitInline: function() {\n\t\t\tmfp.types.push(INLINE_NS);\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\n\t\t\t\t_putInlineElementsBack();\n\t\t\t});\n\t\t},\n\n\t\tgetInline: function(item, template) {\n\n\t\t\t_putInlineElementsBack();\n\n\t\t\tif(item.src) {\n\t\t\t\tvar inlineSt = mfp.st.inline,\n\t\t\t\t\tel = $(item.src);\n\n\t\t\t\tif(el.length) {\n\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\n\t\t\t\t\tvar parent = el[0].parentNode;\n\t\t\t\t\tif(parent && parent.tagName) {\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace target inline element with placeholder\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\n\t\t\t\t\t}\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t} else {\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\n\t\t\t\t\tel = $('<div>');\n\t\t\t\t}\n\n\t\t\t\titem.inlineElement = el;\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('ready');\n\t\t\tmfp._parseMarkup(template, {}, item);\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>inline*/\n\n/*>>ajax*/\nvar AJAX_NS = 'ajax',\n\t_ajaxCur,\n\t_removeAjaxCursor = function() {\n\t\tif(_ajaxCur) {\n\t\t\t$(document.body).removeClass(_ajaxCur);\n\t\t}\n\t},\n\t_destroyAjaxRequest = function() {\n\t\t_removeAjaxCursor();\n\t\tif(mfp.req) {\n\t\t\tmfp.req.abort();\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(AJAX_NS, {\n\n\toptions: {\n\t\tsettings: null,\n\t\tcursor: 'mfp-ajax-cur',\n\t\ttError: '<a href=\"%url%\">The content</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitAjax: function() {\n\t\t\tmfp.types.push(AJAX_NS);\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\n\t\t},\n\t\tgetAjax: function(item) {\n\n\t\t\tif(_ajaxCur) {\n\t\t\t\t$(document.body).addClass(_ajaxCur);\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\n\t\t\tvar opts = $.extend({\n\t\t\t\turl: item.src,\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\tvar temp = {\n\t\t\t\t\t\tdata:data,\n\t\t\t\t\t\txhr:jqXHR\n\t\t\t\t\t};\n\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\n\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\n\n\t\t\t\t\titem.finished = true;\n\n\t\t\t\t\t_removeAjaxCursor();\n\n\t\t\t\t\tmfp._setFocus();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\n\t\t\t\t\t}, 16);\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t_removeAjaxCursor();\n\t\t\t\t\titem.finished = item.loadError = true;\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\n\t\t\t\t}\n\t\t\t}, mfp.st.ajax.settings);\n\n\t\t\tmfp.req = $.ajax(opts);\n\n\t\t\treturn '';\n\t\t}\n\t}\n});\n\n/*>>ajax*/\n\n/*>>image*/\nvar _imgInterval,\n\t_getTitle = function(item) {\n\t\tif(item.data && item.data.title !== undefined)\n\t\t\treturn item.data.title;\n\n\t\tvar src = mfp.st.image.titleSrc;\n\n\t\tif(src) {\n\t\t\tif($.isFunction(src)) {\n\t\t\t\treturn src.call(mfp, item);\n\t\t\t} else if(item.el) {\n\t\t\t\treturn item.el.attr(src) || '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\n$.magnificPopup.registerModule('image', {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-figure\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<figure>'+\n\t\t\t\t\t\t'<div class=\"mfp-img\"></div>'+\n\t\t\t\t\t\t'<figcaption>'+\n\t\t\t\t\t\t\t'<div class=\"mfp-bottom-bar\">'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-title\"></div>'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-counter\"></div>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</figcaption>'+\n\t\t\t\t\t'</figure>'+\n\t\t\t\t'</div>',\n\t\tcursor: 'mfp-zoom-out-cur',\n\t\ttitleSrc: 'title',\n\t\tverticalFit: true,\n\t\ttError: '<a href=\"%url%\">The image</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitImage: function() {\n\t\t\tvar imgSt = mfp.st.image,\n\t\t\t\tns = '.image';\n\n\t\t\tmfp.types.push('image');\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(imgSt.cursor) {\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t\t_window.off('resize' + EVENT_NS);\n\t\t\t});\n\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\n\t\t\tif(mfp.isLowIE) {\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\n\t\t\t}\n\t\t},\n\t\tresizeImage: function() {\n\t\t\tvar item = mfp.currItem;\n\t\t\tif(!item || !item.img) return;\n\n\t\t\tif(mfp.st.image.verticalFit) {\n\t\t\t\tvar decr = 0;\n\t\t\t\t// fix box-sizing in ie7/8\n\t\t\t\tif(mfp.isLowIE) {\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\n\t\t\t\t}\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\n\t\t\t}\n\t\t},\n\t\t_onImageHasSize: function(item) {\n\t\t\tif(item.img) {\n\n\t\t\t\titem.hasSize = true;\n\n\t\t\t\tif(_imgInterval) {\n\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t}\n\n\t\t\t\titem.isCheckingImgSize = false;\n\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\n\n\t\t\t\tif(item.imgHidden) {\n\t\t\t\t\tif(mfp.content)\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\n\n\t\t\t\t\titem.imgHidden = false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Function that loops until the image has size to display elements that rely on it asap\n\t\t */\n\t\tfindImageSize: function(item) {\n\n\t\t\tvar counter = 0,\n\t\t\t\timg = item.img[0],\n\t\t\t\tmfpSetInterval = function(delay) {\n\n\t\t\t\t\tif(_imgInterval) {\n\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t}\n\t\t\t\t\t// decelerating interval that checks for size of an image\n\t\t\t\t\t_imgInterval = setInterval(function() {\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter > 200) {\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\tif(counter === 3) {\n\t\t\t\t\t\t\tmfpSetInterval(10);\n\t\t\t\t\t\t} else if(counter === 40) {\n\t\t\t\t\t\t\tmfpSetInterval(50);\n\t\t\t\t\t\t} else if(counter === 100) {\n\t\t\t\t\t\t\tmfpSetInterval(500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t};\n\n\t\t\tmfpSetInterval(1);\n\t\t},\n\n\t\tgetImage: function(item, template) {\n\n\t\t\tvar guard = 0,\n\n\t\t\t\t// image load complete handler\n\t\t\t\tonLoadComplete = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\tif (item.img[0].complete) {\n\t\t\t\t\t\t\titem.img.off('.mfploader');\n\n\t\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\t\titem.loaded = true;\n\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\n\t\t\t\t\t\t\tguard++;\n\t\t\t\t\t\t\tif(guard < 200) {\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonLoadError();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// image error handler\n\t\t\t\tonLoadError = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\titem.img.off('.mfploader');\n\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\titem.loaded = true;\n\t\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timgSt = mfp.st.image;\n\n\n\t\t\tvar el = template.find('.mfp-img');\n\t\t\tif(el.length) {\n\t\t\t\tvar img = document.createElement('img');\n\t\t\t\timg.className = 'mfp-img';\n\t\t\t\tif(item.el && item.el.find('img').length) {\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\n\t\t\t\t}\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\n\t\t\t\timg.src = item.src;\n\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\n\t\t\t\t// TODO: find a way to avoid such cloning\n\t\t\t\tif(el.is('img')) {\n\t\t\t\t\titem.img = item.img.clone();\n\t\t\t\t}\n\n\t\t\t\timg = item.img[0];\n\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t} else if(!img.width) {\n\t\t\t\t\titem.hasSize = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmfp._parseMarkup(template, {\n\t\t\t\ttitle: _getTitle(item),\n\t\t\t\timg_replaceWith: item.img\n\t\t\t}, item);\n\n\t\t\tmfp.resizeImage();\n\n\t\t\tif(item.hasSize) {\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\n\n\t\t\t\tif(item.loadError) {\n\t\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t} else {\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t}\n\t\t\t\treturn template;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\t\t\titem.loading = true;\n\n\t\t\tif(!item.hasSize) {\n\t\t\t\titem.imgHidden = true;\n\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\tmfp.findImageSize(item);\n\t\t\t}\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>image*/\n\n/*>>zoom*/\nvar hasMozTransform,\n\tgetHasMozTransform = function() {\n\t\tif(hasMozTransform === undefined) {\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\n\t\t}\n\t\treturn hasMozTransform;\n\t};\n\n$.magnificPopup.registerModule('zoom', {\n\n\toptions: {\n\t\tenabled: false,\n\t\teasing: 'ease-in-out',\n\t\tduration: 300,\n\t\topener: function(element) {\n\t\t\treturn element.is('img') ? element : element.find('img');\n\t\t}\n\t},\n\n\tproto: {\n\n\t\tinitZoom: function() {\n\t\t\tvar zoomSt = mfp.st.zoom,\n\t\t\t\tns = '.zoom',\n\t\t\t\timage;\n\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar duration = zoomSt.duration,\n\t\t\t\tgetElToAnimate = function(image) {\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\n\t\t\t\t\t\tcssObj = {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tt = 'transition';\n\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\n\n\t\t\t\t\tnewImg.css(cssObj);\n\t\t\t\t\treturn newImg;\n\t\t\t\t},\n\t\t\t\tshowMainContent = function() {\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\n\t\t\t\t},\n\t\t\t\topenTimeout,\n\t\t\t\tanimatedImg;\n\n\t\t\t_mfpOn('BuildControls'+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\n\n\t\t\t\t\timage = mfp._getItemToZoom();\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\tshowMainContent();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\n\t\t\t\t\topenTimeout = setTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\n\n\t\t\t\t\t\t\tshowMainContent();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t\t\t\timage = animatedImg = null;\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\n\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\n\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\n\n\n\t\t\t\t\t// Lots of timeouts...\n\t\t\t\t}\n\t\t\t});\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\n\t\t\t\t\tmfp.st.removalDelay = duration;\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\timage = mfp._getItemToZoom();\n\t\t\t\t\t\tif(!image) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\t\t\t\t\t}, 16);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\t\t\t\t\tshowMainContent();\n\t\t\t\t\tif(animatedImg) {\n\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t}\n\t\t\t\t\timage = null;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_allowZoom: function() {\n\t\t\treturn mfp.currItem.type === 'image';\n\t\t},\n\n\t\t_getItemToZoom: function() {\n\t\t\tif(mfp.currItem.hasSize) {\n\t\t\t\treturn mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Get element postion relative to viewport\n\t\t_getOffset: function(isLarge) {\n\t\t\tvar el;\n\t\t\tif(isLarge) {\n\t\t\t\tel = mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\n\t\t\t}\n\n\t\t\tvar offset = el.offset();\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\n\n\n\t\t\t/*\n\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\n\n\t\t\t */\n\t\t\tvar obj = {\n\t\t\t\twidth: el.width(),\n\t\t\t\t// fix Zepto height+padding issue\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\n\t\t\t};\n\n\t\t\t// I hate to do this, but there is no another option\n\t\t\tif( getHasMozTransform() ) {\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\n\t\t\t} else {\n\t\t\t\tobj.left = offset.left;\n\t\t\t\tobj.top = offset.top;\n\t\t\t}\n\t\t\treturn obj;\n\t\t}\n\n\t}\n});\n\n\n\n/*>>zoom*/\n\n/*>>iframe*/\n\nvar IFRAME_NS = 'iframe',\n\t_emptyPage = '//about:blank',\n\n\t_fixIframeBugs = function(isShowing) {\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\n\t\t\tif(el.length) {\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\n\t\t\t\tif(!isShowing) {\n\t\t\t\t\tel[0].src = _emptyPage;\n\t\t\t\t}\n\n\t\t\t\t// IE8 black screen bug fix\n\t\t\t\tif(mfp.isIE8) {\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(IFRAME_NS, {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-iframe-scaler\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<iframe class=\"mfp-iframe\" src=\"//about:blank\" frameborder=\"0\" allowfullscreen></iframe>'+\n\t\t\t\t'</div>',\n\n\t\tsrcAction: 'iframe_src',\n\n\t\t// we don't care and support only one default type of URL by default\n\t\tpatterns: {\n\t\t\tyoutube: {\n\t\t\t\tindex: 'youtube.com',\n\t\t\t\tid: 'v=',\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\n\t\t\t},\n\t\t\tvimeo: {\n\t\t\t\tindex: 'vimeo.com/',\n\t\t\t\tid: '/',\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\n\t\t\t},\n\t\t\tgmaps: {\n\t\t\t\tindex: '//maps.google.',\n\t\t\t\tsrc: '%id%&output=embed'\n\t\t\t}\n\t\t}\n\t},\n\n\tproto: {\n\t\tinitIframe: function() {\n\t\t\tmfp.types.push(IFRAME_NS);\n\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\n\t\t\t\tif(prevType !== newType) {\n\t\t\t\t\tif(prevType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\n\t\t\t\t\t}\n\t\t\t\t}// else {\n\t\t\t\t\t// iframe source is switched, don't do anything\n\t\t\t\t//}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\n\t\t\t\t_fixIframeBugs();\n\t\t\t});\n\t\t},\n\n\t\tgetIframe: function(item, template) {\n\t\t\tvar embedSrc = item.src;\n\t\t\tvar iframeSt = mfp.st.iframe;\n\n\t\t\t$.each(iframeSt.patterns, function() {\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\n\t\t\t\t\tif(this.id) {\n\t\t\t\t\t\tif(typeof this.id === 'string') {\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\n\t\t\t\t\treturn false; // break;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar dataObj = {};\n\t\t\tif(iframeSt.srcAction) {\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\n\t\t\t}\n\t\t\tmfp._parseMarkup(template, dataObj, item);\n\n\t\t\tmfp.updateStatus('ready');\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n\n\n/*>>iframe*/\n\n/*>>gallery*/\n/**\n * Get looped index depending on number of slides\n */\nvar _getLoopedId = function(index) {\n\t\tvar numSlides = mfp.items.length;\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t_replaceCurrTotal = function(text, curr, total) {\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\n\t};\n\n$.magnificPopup.registerModule('gallery', {\n\n\toptions: {\n\t\tenabled: false,\n\t\tarrowMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-arrow mfp-arrow-%dir%\"></button>',\n\t\tpreload: [0,2],\n\t\tnavigateByImgClick: true,\n\t\tarrows: true,\n\n\t\ttPrev: 'Previous (Left arrow key)',\n\t\ttNext: 'Next (Right arrow key)',\n\t\ttCounter: '%curr% of %total%'\n\t},\n\n\tproto: {\n\t\tinitGallery: function() {\n\n\t\t\tvar gSt = mfp.st.gallery,\n\t\t\t\tns = '.mfp-gallery';\n\n\t\t\tmfp.direction = true; // true - next, false - prev\n\n\t\t\tif(!gSt || !gSt.enabled ) return false;\n\n\t\t\t_wrapClasses += ' mfp-gallery';\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\n\t\t\t\tif(gSt.navigateByImgClick) {\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\n\t\t\t\t\t\tif(mfp.items.length > 1) {\n\t\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_document.on('keydown'+ns, function(e) {\n\t\t\t\t\tif (e.keyCode === 37) {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t} else if (e.keyCode === 39) {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\n\t\t\t\tif(data.text) {\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\n\t\t\t\tvar l = mfp.items.length;\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\n\t\t\t});\n\n\t\t\t_mfpOn('BuildControls' + ns, function() {\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\n\n\t\t\t\t\tarrowLeft.click(function() {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t});\n\t\t\t\t\tarrowRight.click(function() {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t});\n\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\n\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\n\t\t\t\t\tmfp.preloadNearbyImages();\n\t\t\t\t\tmfp._preloadTimeout = null;\n\t\t\t\t}, 16);\n\t\t\t});\n\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\t_document.off(ns);\n\t\t\t\tmfp.wrap.off('click'+ns);\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\n\t\t\t});\n\n\t\t},\n\t\tnext: function() {\n\t\t\tmfp.direction = true;\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tprev: function() {\n\t\t\tmfp.direction = false;\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tgoTo: function(newIndex) {\n\t\t\tmfp.direction = (newIndex >= mfp.index);\n\t\t\tmfp.index = newIndex;\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tpreloadNearbyImages: function() {\n\t\t\tvar p = mfp.st.gallery.preload,\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\n\t\t\t\ti;\n\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index+i);\n\t\t\t}\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index-i);\n\t\t\t}\n\t\t},\n\t\t_preloadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\n\t\t\tif(mfp.items[index].preloaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = mfp.items[index];\n\t\t\tif(!item.parsed) {\n\t\t\t\titem = mfp.parseEl( index );\n\t\t\t}\n\n\t\t\t_mfpTrigger('LazyLoad', item);\n\n\t\t\tif(item.type === 'image') {\n\t\t\t\titem.img = $('<img class=\"mfp-img\" />').on('load.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t}).on('error.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\n\t\t\t\t}).attr('src', item.src);\n\t\t\t}\n\n\n\t\t\titem.preloaded = true;\n\t\t}\n\t}\n});\n\n/*>>gallery*/\n\n/*>>retina*/\n\nvar RETINA_NS = 'retina';\n\n$.magnificPopup.registerModule(RETINA_NS, {\n\toptions: {\n\t\treplaceSrc: function(item) {\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\n\t\t},\n\t\tratio: 1 // Function or number. Set to 1 to disable.\n\t},\n\tproto: {\n\t\tinitRetina: function() {\n\t\t\tif(window.devicePixelRatio > 1) {\n\n\t\t\t\tvar st = mfp.st.retina,\n\t\t\t\t\tratio = st.ratio;\n\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\n\n\t\t\t\tif(ratio > 1) {\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.img.css({\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\n\t\t\t\t\t\t\t'width': '100%'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n\n/*>>retina*/\n _checkInstance(); }));" 28080 28081/***/ }), 28082
vendor: 1,616 bytes, lines 28083-28129
28083/***/ "../node_modules/script-loader/addScript.js": 28084/*!**************************************************!*\ 28085 !*** ../node_modules/script-loader/addScript.js ***! 28086 \**************************************************/ 28087/***/ (function(module) { 28088 28089/* 28090 MIT License http://www.opensource.org/licenses/mit-license.php 28091 Author Tobias Koppers @sokra 28092*/ 28093module.exports = function(src) { 28094 function log(error) { 28095 (typeof console !== "undefined") 28096 && (console.error || console.log)("[Script Loader]", error); 28097 } 28098 28099 // Check for IE =< 8 28100 function isIE() { 28101 return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined"; 28102 } 28103 28104 try { 28105 if (typeof execScript !== "undefined" && isIE()) { 28106 execScript(src); 28107 } else if (typeof eval !== "undefined") { 28108 eval.call(null, src); 28109 } else { 28110 log("EvalError: No eval function available"); 28111 } 28112 } catch (error) { 28113 log(error); 28114 } 28115} 28116 28117 28118/***/ }), 28119 28120/***/ "../node_modules/script-loader/index.js!./resources/js/src/magnific.js": 28121/*!*****************************************************************************!*\ 28122 !*** ../node_modules/script-loader/index.js!./resources/js/src/magnific.js ***! 28123 \*****************************************************************************/ 28124/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { 28125 28126__webpack_require__(/*! !!../node_modules/script-loader/addScript.js */ "../node_modules/script-loader/addScript.js")(__webpack_require__(/*! !!../node_modules/raw-loader/index.js!./resources/js/src/magnific.js */ "../node_modules/raw-loader/index.js!./resources/js/src/magnific.js")) 28127 28128/***/ }), 28129
28130/***/ "./resources/css/src/stylesheet.scss": 28131/*!*******************************************!*\ 28132 !*** ./resources/css/src/stylesheet.scss ***! 28133 \*******************************************/ 28134/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 28135 28136"use strict"; 28137__webpack_require__.r(__webpack_exports__); 28138// extracted by mini-css-extract-plugin 28139 28140 28141/***/ }), 28142
28143/***/ "./resources/js/src/material-design.js": 28144/*!*********************************************!*\ 28145 !*** ./resources/js/src/material-design.js ***! 28146 \*********************************************/ 28147/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 28148 28149"use strict"; 28150__webpack_require__.r(__webpack_exports__); 28151/* harmony import */ var libphonenumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! libphonenumber-js */ "../node_modules/libphonenumber-js/min/exports/AsYouType.js"); 28152/* harmony import */ var libphonenumber_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! libphonenumber-js */ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js"); 28153 28154 28155const checkValue = FormInput => { 28156 const element = $(FormInput); 28157 // check if the input has any value (if we've typed into it) 28158 if (element.val()) { 28159 const inputValue = element.val(); 28160 if (element.attr("type") === "tel") { 28161 const formattedNumber = new libphonenumber_js__WEBPACK_IMPORTED_MODULE_0__.AsYouType("US").input( 28162 (0,libphonenumber_js__WEBPACK_IMPORTED_MODULE_1__["default"])(inputValue.toString()) 28163 ); 28164 element.val(formattedNumber); 28165 } 28166 element.parent(".float-label-wrapper").addClass("has-value"); 28167 } else { 28168 element.parent(".float-label-wrapper").removeClass("has-value"); 28169 } 28170}; 28171 28172$(document).ready(() => { 28173 // Run on page load 28174 $(".float-label").each((index, element) => checkValue(element)); 28175 // Run on input exit 28176 $(".float-label") 28177 .blur(e => checkValue(e.target)) 28178 .change(e => !$(e.target).hasClass("has-value") && checkValue(e.target)) 28179 .keyup(e => !$(e.target).hasClass("has-value") && checkValue(e.target)); 28180}); 28181 28182 28183/***/ }), 28184
28185/***/ "./resources/js/src/place-autocomplete.js": 28186/*!************************************************!*\ 28187 !*** ./resources/js/src/place-autocomplete.js ***! 28188 \************************************************/ 28189/***/ (function() { 28190 28191// Take unique Id of inputs and retrieves sibling components 28192const getComponents = id => ({ 28193 street_number: { 28194 component: `${id}`, 28195 type: "long_name" 28196 }, 28197 optional_line_2: { 28198 component: `${id}-line-2`, 28199 type: "long_name" 28200 }, 28201 locality: { 28202 component: `${id}-city`, 28203 type: "long_name" 28204 }, 28205 postal_code: { 28206 component: `${id}-postal`, 28207 type: "short_name" 28208 }, 28209 country: { 28210 component: `${id}-country`, 28211 type: "short_name" 28212 }, 28213 administrative_area_level_1: { 28214 component: `${id}-state`, 28215 type: "short_name" 28216 }, 28217 route: { 28218 component: `${id}`, 28219 type: "long_name" 28220 } 28221}); 28222 28223$(document).ready(() => { 28224 const placesState = {}; 28225 28226 const setup = function(parent) { 28227 const getKey = id => { 28228 if (parent) return parent + " #" + id; 28229 28230 return "#" + id; 28231 }; 28232 const selector = parent 28233 ? parent + " input.places-autocomplete-line-1" 28234 : ".places-autocomplete-line-1"; 28235 $(selector).each((i, e) => { 28236 const inputId = $(e).attr("id"); 28237 const key = getKey(inputId); 28238 if (!placesState[key]) { 28239 placesState[key] = { 28240 autocomplete: null, 28241 components: getComponents(inputId) 28242 }; 28243 } 28244 }); 28245 28246 // Listen's to focus event for auto complete 28247 $(selector).focus(function(e) { 28248 // Get the id of current focused element 28249 const inputId = $(e.target).attr("id"); 28250 // Initialize autocomplete 28251 const key = getKey(inputId); 28252 // if (!placesState[key].autocomplete) { 28253 initAutocomplete(inputId); 28254 // } 28255 }); 28256 28257 function initAutocomplete(id) { 28258 // Create the autocomplete object, restricting the search predictions to 28259 // geographical location types. 28260 const key = getKey(id); 28261 placesState[key].autocomplete = new google.maps.places.Autocomplete( 28262 $(key)[0], 28263 { 28264 types: ["geocode"] 28265 } 28266 ); 28267 28268 // Avoid paying for data that you don't need by restricting the set of 28269 // place fields that are returned to just the address components. 28270 placesState[key].autocomplete.setFields(["address_components"]); 28271 28272 // Get the place details from the autocomplete object. 28273 placesState[key].autocomplete.addListener("place_changed", () => 28274 getAddress(key) 28275 ); 28276 } 28277 28278 // When user chooses an address then parse returned value to consumable values 28279 function getAddress(id) { 28280 try { 28281 const { address_components } = placesState[id].autocomplete.getPlace(); 28282 Object.keys(placesState[id].components).forEach(component => { 28283 const container = `.${placesState[id].components[component].component}-container`; 28284 $(container).css({ display: "block" }); 28285 }); 28286 28287 // Get each component of the address from the place details, 28288 // and then fill-in the corresponding field on the form. 28289 address_components.forEach(function(place) { 28290 const addressType = place.types[0]; 28291 if (placesState[id].components[addressType]) { 28292 const val = place[placesState[id].components[addressType].type]; 28293 const sel = `#${placesState[id].components[addressType].component}`; 28294 28295 if (addressType === "country") { 28296 const stateCode = "administrative_area_level_1"; 28297 const t = `#${placesState[id].components[stateCode].component}`; 28298 const tV = address_components.find(function(v) { 28299 return v.types[0] === stateCode; 28300 }); 28301 $(sel) 28302 .val(val) 28303 .trigger("change"); 28304 28305 $(t) 28306 .val(tV.short_name) 28307 .trigger("change"); 28308 } else if (addressType !== "route") { 28309 $(sel) 28310 .val(val) 28311 .trigger("change"); 28312 } else { 28313 const previousValue = $(sel).val(); 28314 $(sel) 28315 .val(previousValue.concat(" " + val)) 28316 .trigger("change"); 28317 } 28318 } 28319 }); 28320 } catch (e) {} 28321 } 28322 }; 28323
28324 $('div[id^="figureModal"]').on("show.bs.modal", function(e) { 28325 $(document).ajaxComplete(function(event, xhr, settings) { 28326 try { 28327 window.crs.init(); 28328 const modal = $(e.relatedTarget).attr("data-target"); 28329 setup(modal); 28330 } catch (e) {} 28331 }); 28332 }); 28333 28334 setup(); 28335}); 28336 28337 28338/***/ }), 28339
28340/***/ "./resources/js/src/theme.js": 28341/*!***********************************!*\ 28342 !*** ./resources/js/src/theme.js ***! 28343 \***********************************/ 28344/***/ (function() { 28345 28346var FIGURE = FIGURE || {}; 28347 28348FIGURE.shippingMessage = function() { 28349 var specialMessageModal = $.cookie('specialmessage'); 28350 if (specialMessageModal == 'read') { 28351 return; 28352 } else { 28353 setTimeout(function(){ 28354 $('#figureMessageModal').modal(); 28355 }, 3000); 28356 } 28357 $('#figureMessageModal').on('hide.bs.modal', function (event) { 28358 $.cookie('specialmessage', 'read', { path: '/' }); 28359 }); 28360 $('#figureMessageModal a').click(function() { 28361 $.cookie('specialmessage', 'read', { path: '/' }); 28362 }); 28363}; 28364 28365FIGURE.ageGate = function() { 28366 $('.page-product-shop .figure-product-button').css('visibility','hidden'); 28367 var ageGate = $.cookie('ageGate'); 28368 if (ageGate == 'verified') { 28369 $('.page-product-shop .figure-product-button').css('visibility','visible'); 28370 return; 28371 } else { 28372 setTimeout(function(){ 28373 $('#ageGateModal').modal(); 28374 }, 1000); 28375 } 28376 $('#ageGateModal .verifyme').click(function() { 28377 $.cookie('ageGate', 'verified', { expires: 7, path: '/' }); 28378 $('.page-product-shop .figure-product-button').css('visibility','visible'); 28379 }); 28380}(); 28381 28382FIGURE.legacyInit = function() { 28383 //loader 28384 setTimeout(function() { 28385 $("body").addClass("loaded"); 28386 }, 500); 28387 //headroom 28388 $(".larkmead-header").headroom({ tolerance: 10, offset: 10 }); 28389 28390 //Carousel 28391 $(".carousel").carousel({ 28392 interval: false 28393 }); 28394}(); 28395 28396FIGURE.moreLink = function() { 28397 $(".more-link").focus(function(e) { 28398 $("span.more-link").on("keyup", function(e) { 28399 if (e.which !== 13) return; 28400 28401 $(".more-link .more").css({ 28402 opacity: 1, 28403 height: "auto", 28404 display: "block", 28405 overflow: "visible" 28406 }); 28407 }); 28408 }); 28409 $(".banner-message").hide(); 28410 $(".close-banner-message").click(function() { 28411 $(".banner-message").hide(); 28412 return false; 28413 }); 28414}(); 28415 28416FIGURE.mobileNav = function() { 28417 //mobile nav 28418 $(".hamburger").click(function() { 28419 if ($(this).hasClass("on")) { 28420 $(this).removeClass("on"); 28421 $(".mobile-nav").removeClass("visible"); 28422 $("body").css("overflow", "visible"); 28423 } else { 28424 $(this).addClass("on"); 28425 $(".mobile-nav").addClass("visible"); 28426 $("body").css("overflow", "hidden"); 28427 } 28428 return false; 28429 }); 28430 $(".close-nav").click(function() { 28431 $(".mobile-nav").removeClass("visible"); 28432 $("body").css("overflow", "visible"); 28433 $(".hamburger").removeClass("on"); 28434 return false; 28435 }); 28436 $(document).on("keyup", function(evt) { 28437 if (evt.keyCode == 27) { 28438 $(".mobile-nav").removeClass("visible"); 28439 $("body").css("overflow", "visible"); 28440 $(".hamburger").removeClass("on"); 28441 return false; 28442 } 28443 }); 28444}(); 28445 28446FIGURE.Scroller = function() { 28447 //Scroller 28448 28449 var hashTagActive = ""; 28450 $(".show-content").click(function(event) { 28451 var dest = 0; 28452 if ($(this.hash).offset().top > $(document).height() - $(window).height()) { 28453 dest = $(document).height() - $(window).height() - 80; 28454 } else { 28455 dest = $(this.hash).offset().top - 80; 28456 } 28457 //go to destination 28458 $("html,body").animate( 28459 { 28460 scrollTop: dest 28461 }, 28462 500, 28463 "swing", 28464 function() {} 28465 ); 28466 }); 28467 28468 var hashTagActive = ""; 28469 $(".scroll").click(function(event) { 28470 var dest = 0; 28471 if ($(this.hash).offset().top > $(document).height() - $(window).height()) { 28472 dest = $(document).height() - $(window).height() - 40; 28473 } else { 28474 dest = $(this.hash).offset().top - 40; 28475 } 28476 //go to destination 28477 $("html,body").animate( 28478 { 28479 scrollTop: dest 28480 }, 28481 1000, 28482 "swing", 28483 function() {} 28484 ); 28485 return false; 28486 }); 28487}(); 28488 28489FIGURE.showContent = function() { 28490 //Show more content 28491 $(document).on("click", ".show-content", function() { 28492 var theTarget = $(this).attr("rel"); 28493 if ($(this).hasClass("expanded")) { 28494 $(theTarget).slideUp(500); 28495 $(this).removeClass("expanded"); 28496 //$('body').removeClass('slider-open'); 28497 } else { 28498 //$('.hidden-content').slideUp(500); 28499 //$('.show-content').removeClass('expanded'); 28500 $(this).addClass("expanded"); 28501 $(theTarget).slideDown(500); 28502 //$('body').addClass('slider-open'); 28503 } 28504 return false;
28505 }); 28506}(); 28507 28508FIGURE.Magnific = function() { 28509 //Popups 28510 $(".ajax-popup-link").magnificPopup({ 28511 type: "ajax", 28512 tLoading: "", 28513 gallery: { 28514 enabled: false 28515 } 28516 }); 28517 $(".popup-gallery").each(function() { 28518 $(this).magnificPopup({ 28519 delegate: "a", 28520 type: "image", 28521 tLoading: "Loading image #%curr%...", 28522 mainClass: "mfp-img-mobile", 28523 gallery: { 28524 tCounter: '<span class="mfp-counter">%curr% / %total%</span>', 28525 enabled: true, 28526 navigateByImgClick: true, 28527 preload: [0, 1] // Will preload 0 - before current, and 1 after the current image 28528 }, 28529 image: { 28530 verticalFit: true, 28531 tError: '<a href="%url%">The image #%curr%</a> could not be loaded.', 28532 titleSrc: function(item) { 28533 return ( 28534 '<span class="caption-special">' + item.el.attr("name") + "</span>" 28535 ); 28536 } 28537 } 28538 }); 28539 }); 28540}(); 28541 28542 28543 28544/***/ })
vendor: 4,061 bytes, lines 28544-28646
28544 28545 28546/******/ }); 28547/************************************************************************/ 28548/******/ // The module cache 28549/******/ var __webpack_module_cache__ = {}; 28550/******/ 28551/******/ // The require function 28552/******/ function __webpack_require__(moduleId) { 28553/******/ // Check if module is in cache 28554/******/ var cachedModule = __webpack_module_cache__[moduleId]; 28555/******/ if (cachedModule !== undefined) { 28556/******/ return cachedModule.exports; 28557/******/ } 28558/******/ // Create a new module (and put it into the cache) 28559/******/ var module = __webpack_module_cache__[moduleId] = { 28560/******/ // no module.id needed 28561/******/ // no module.loaded needed 28562/******/ exports: {} 28563/******/ }; 28564/******/ 28565/******/ // Execute the module function 28566/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 28567/******/ 28568/******/ // Return the exports of the module 28569/******/ return module.exports; 28570/******/ } 28571/******/ 28572/************************************************************************/ 28573/******/ /* webpack/runtime/define property getters */ 28574/******/ !function() { 28575/******/ // define getter functions for harmony exports 28576/******/ __webpack_require__.d = function(exports, definition) { 28577/******/ for(var key in definition) { 28578/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 28579/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 28580/******/ } 28581/******/ } 28582/******/ }; 28583/******/ }(); 28584/******/ 28585/******/ /* webpack/runtime/global */ 28586/******/ !function() { 28587/******/ __webpack_require__.g = (function() { 28588/******/ if (typeof globalThis === 'object') return globalThis; 28589/******/ try { 28590/******/ return this || new Function('return this')(); 28591/******/ } catch (e) { 28592/******/ if (typeof window === 'object') return window; 28593/******/ } 28594/******/ })(); 28595/******/ }(); 28596/******/ 28597/******/ /* webpack/runtime/hasOwnProperty shorthand */ 28598/******/ !function() { 28599/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 28600/******/ }(); 28601/******/ 28602/******/ /* webpack/runtime/make namespace object */ 28603/******/ !function() { 28604/******/ // define __esModule on exports 28605/******/ __webpack_require__.r = function(exports) { 28606/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 28607/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 28608/******/ } 28609/******/ Object.defineProperty(exports, '__esModule', { value: true }); 28610/******/ }; 28611/******/ }(); 28612/******/ 28613/************************************************************************/ 28614var __webpack_exports__ = {}; 28615// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. 28616!function() { 28617/*!****************************************!*\ 28618 !*** ./resources/js/src/javascript.js ***! 28619 \****************************************/ 28620// Include Stylesheet 28621__webpack_require__(/*! ../../css/src/stylesheet.scss */ "./resources/css/src/stylesheet.scss"); 28622 28623// Include Figure Base Resources 28624__webpack_require__(/*! FigureBaseResources */ "../FigureBaseResources/FigureBaseResources.js"); 28625//Magnific plugin 28626__webpack_require__(/*! script-loader!./magnific.js */ "../node_modules/script-loader/index.js!./resources/js/src/magnific.js"); 28627// Custom Site Stuff 28628__webpack_require__(/*! ./theme.js */ "./resources/js/src/theme.js"); 28629//require('script-loader!./grid.js'); 28630//require('script-loader!./modernizr.custom.js'); 28631// Google Places Autocomplete 28632__webpack_require__(/*! ./place-autocomplete.js */ "./resources/js/src/place-autocomplete.js"); 28633 28634// Material Design 28635__webpack_require__(/*! ./material-design.js */ "./resources/js/src/material-design.js"); 28636 28637// Load via script tag: 28638// require('script-loader!./scroller.js') 28639 28640// Expose a variable from a library: 28641// const scroller = require('expose-loader?scroller!./scroller.js') 28642 28643}(); 28644/******/ })() 28645; 28646//# sourceMappingURL=javascript.js.map
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.