diff --git a/_data/nav.yml b/_data/nav.yml index be02cc8fbddb1fc6927dc72cf377c854e62b0120..91f28a3cba018ad2fa0b9f22032d06accc4e2ffc 100644 --- a/_data/nav.yml +++ b/_data/nav.yml @@ -1,12 +1,18 @@ -- name: Using Frama-C - link: /html/using-frama-c.html +#- name: Using Frama-C +# link: /html/using-frama-c.html +# id : using - name: Features link: /html/kernel-plugin.html + id : features - name: Documentation link: /html/documentation.html + id : documentation - name: Blog link: /blog/index.html -# - name: Careers - # link: /html/careers.html + id : blog +#- name: Careers +# link: /html/careers.html +# id : careers - name: Contact link: /html/contact.html + id : contact diff --git a/_fc-plugins/wp.md b/_fc-plugins/wp.md index cdd4110b45cf8e98245627bed4507e73706ec336..29b6268ab97b0f7d09699493095c05a0e47f7d2a 100644 --- a/_fc-plugins/wp.md +++ b/_fc-plugins/wp.md @@ -10,7 +10,7 @@ additional: short: "ACSL by Example" link: https://fraunhoferfokus.github.io/acsl-by-example - name: "Introduction to C program proof with Frama-C and WP, by Allan Blanchard" - short: "Tutorial on Frama-C and WP" + short: "Tutorial on Frama-C/WP" link: https://github.com/AllanBlanchard/tutoriel_wp --- diff --git a/_fc-versions/magnesium.md b/_fc-versions/magnesium.md index b0dd6ea51adf28c90cd90bf499d3556ed771548a..968bc7d94f93a7f9bfaacf1ea97e2f2a12b0aaa9 100755 --- a/_fc-versions/magnesium.md +++ b/_fc-versions/magnesium.md @@ -33,7 +33,7 @@ releases: - name: WP manual link: /download/wp-manual-Magnesium-20151002.pdf - name: External Plug-ins - file: + files: - name: E-ACSL version 0.6 link: /download/e-acsl/e-acsl-0.6.tar.gz --- \ No newline at end of file diff --git a/_fc-versions/neon.md b/_fc-versions/neon.md index cd05a905a2674f426312a209223d810fb43d2790..27ee211f90c345985a725877ed84fe28518f0f1f 100755 --- a/_fc-versions/neon.md +++ b/_fc-versions/neon.md @@ -33,7 +33,7 @@ releases: - name: WP 0.8 manual link: /download/wp-manual-Neon-20140301.pdf - name: External Plug-ins - file: + files: - name: E-ACSL version 0.4.1 link: /download/e-acsl/e-acsl-0.4.1.tar.gz --- \ No newline at end of file diff --git a/_fc-versions/nitrogen.md b/_fc-versions/nitrogen.md index 538e85006b7cceaaf926b7ed8fd3515655355861..1ac8c6d18794b62a4fc2ff57d1c004139f27e408 100755 --- a/_fc-versions/nitrogen.md +++ b/_fc-versions/nitrogen.md @@ -6,7 +6,7 @@ releases: - number: 0 changelog: 20111001 categories: - - name: Frama-C v18.0 Argon + - name: Frama-C v7.0 Nitrogen files: - name: Source distribution link: /download/frama-c-Nitrogen-20111001.tar.gz diff --git a/_fc-versions/silicon.md b/_fc-versions/silicon.md index f3d46f6ebcf743f6880e3c05c185739f09d4f324..d8c63f0b6722a0e33069a739ba54bc1c2b6cc720 100755 --- a/_fc-versions/silicon.md +++ b/_fc-versions/silicon.md @@ -33,7 +33,7 @@ releases: - name: WP manual link: /download/wp-manual-Silicon-20161101.pdf - name: External Plug-ins - file: + files: - name: E-ACSL version 0.8 link: /download/e-acsl/e-acsl-0.8.tar.gz --- \ No newline at end of file diff --git a/_fc-versions/sodium.md b/_fc-versions/sodium.md index 9f26c6a0bf052564cf4bee59fce0a91ab0860a8a..5af8d78df7f7dee1164c47a1aa78184da1726960 100755 --- a/_fc-versions/sodium.md +++ b/_fc-versions/sodium.md @@ -33,7 +33,7 @@ releases: - name: WP manual link: /download/wp-manual-Sodium-20150201.pdf - name: External Plug-ins - file: + files: - name: E-ACSL version 0.5 link: /download/e-acsl/e-acsl-0.5.tar.gz --- \ No newline at end of file diff --git a/_includes/headers.html b/_includes/headers.html index 69a03760d68220e7b8cef29410d2bbad603b4bd7..e381ec5e02aabdd60f146e0fcfbceebb9aef377f 100755 --- a/_includes/headers.html +++ b/_includes/headers.html @@ -2,13 +2,13 @@ <div id="header_iv_point" class="inviewTop"></div> <span class="brandLogo"><a href="/index.html" rel="home" title= "Frama-C"><img src="/assets/img/framac.gif" alt=""><span>Frama-C</span></a></span><a role="button" id= - "menu_toggle" class="menuToggle"><span class="open"><i></i><i></i><i></i></span><span class="close"><i></i><i></i></span></a> + "menu_toggle" class="menuToggle"><span class="open" onclick="openMenu()"><i></i><i></i><i></i></span><span class="close" onclick="closeMenu()"><i></i><i></i></span></a> <nav id="menu" role="navigation"> <div class="menu-primary-meny-container"> <ul id="menu-primary-meny" class="menu"> {% for item in site.data.nav %} - {% if forloop.index == include.header %} + {% if item.id == include.header %} <li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item current_page_item"> {% else %} <li class="menu-item menu-item-type-post_type menu-item-object-page"> @@ -22,3 +22,15 @@ "icon icon-curly-left"></i><i class="icon icon-download-arrow"></i><i class="icon icon-curly-right"></i></span></a> </nav> </header> + +<script> +function openMenu(){ + var x = document.getElementById("site_header"); + x.classList.add("menuOpen"); +} + +function closeMenu(){ + var x = document.getElementById("site_header"); + x.classList.remove("menuOpen"); +} +</script> \ No newline at end of file diff --git a/_layouts/blog.html b/_layouts/blog.html index ce095326561ddf20d4576b66a91d00c468b3ab73..62ef1e68081093d0a8fa63a665f1fa163b3bdfab 100644 --- a/_layouts/blog.html +++ b/_layouts/blog.html @@ -7,7 +7,7 @@ css: blog <div id="wrapper" class="hfeed"> <!-- TODO after new website is online: uncomment below and comment after - {% include headers.html header=4 title=Blog %} + {% include headers.html header="blog" title=Blog %} --> {% include blog-headers-standalone.html %} diff --git a/_layouts/clean_page.html b/_layouts/clean_page.html index 87d9953969cedde10c1d79442376ca782f120eab..3e4ca20b47c35cb44682af64cbb1ebb31f47e2a4 100644 --- a/_layouts/clean_page.html +++ b/_layouts/clean_page.html @@ -6,7 +6,7 @@ css: wiki <body class="page-template page-template-page-kernel page-template-page-kernel-php page nonTouch"> <div id="wrapper" class="hfeed"> -{% include headers.html header=3 %} +{% include headers.html header="documentation" %} <div id="container" class="mainContainer"> <div class="defaultPage wikiPage pages textLeft" id="content" role="main"> diff --git a/_layouts/default.html b/_layouts/default.html index fac54c5114ceee0d6e1dc5f5493955f66ddabab8..039d1011499b5affb48b3f0eca6064ac81fa2008 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -17,6 +17,8 @@ <link rel="stylesheet" href="/assets/css/default.css"> <link rel="stylesheet" href="/assets/css/blog.css"> <link rel="stylesheet" href="/assets/css/documentation.css"> + <link rel="stylesheet" href="/assets/css/tiles.css"> + <link rel="stylesheet" href="/assets/css/swiper.css"> {% if layout.css !=null %} <link rel="stylesheet" href="/assets/css/{{ layout.css }}.css"> {% endif %} @@ -24,18 +26,10 @@ <link rel="stylesheet" href="/assets/css/{{ page.css }}.css"> {% endif %} <link rel="shortcut icon" href="/assets/img/favicon.ico" type="image/x-icon"> -</head> - {{ content }} - - <script type='text/javascript' src='/assets/js/manifest.js'></script> - <script type='text/javascript' src='/assets/js/lib.js'></script> - <script type='text/javascript'> - var ajax = {"url":"http:\/\/localhost:8000\/wp\/wp-admin\/admin-ajax.php","ajax_var":{"template_directory_uri":"http:\/\/localhost:8000\/app\/themes\/frama"},"apikey":"AIzaSyDwKjbfd43-rY5muMW76XUdAFMb7mL9kU8","nonce":"eb10361e5c"}; - </script> - <script type='text/javascript' src='/assets/js/main.js'></script> - +</head> + {{ content }} </body> </html> diff --git a/_layouts/feature.html b/_layouts/feature.html index cc0485af94aa1e42e86330054ed5099c14c09ab1..fd302720f4e50cba5914ac1a258eeae9372c0819 100644 --- a/_layouts/feature.html +++ b/_layouts/feature.html @@ -8,7 +8,7 @@ title: Kernel & Plugins - Frama-C <div id="wrapper" class="hfeed"> - {% include headers.html header=2 %} + {% include headers.html header="features" %} <div id="container" class="mainContainer"> <div class="tabs"> diff --git a/_layouts/plugin.html b/_layouts/plugin.html index 8f8b6685f4932fc96dc48bc36b57aa9deeaff20e..8d70bae931043609377b7139a54f4c0c1f503d36 100644 --- a/_layouts/plugin.html +++ b/_layouts/plugin.html @@ -6,7 +6,7 @@ css: plugin <body class="page-template page-template-page-kernel page-template-page-kernel-php page nonTouch"> <div id="wrapper" class="hfeed"> - {% include headers.html header=2 %} + {% include headers.html header="features" %} <div id="container" class="mainContainer"> <div class="tabs"> diff --git a/_layouts/post.html b/_layouts/post.html index b60dceee5c51191d33e79e4c4920c065bc3019c5..ed8cc08d3b618ed4dd295639126d62a84ac44788 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -5,7 +5,7 @@ layout: default <div id="wrapper" class="hfeed"> <!-- TODO after new website is online: uncomment below - {% include headers.html header=4 title=Blog %} + {% include headers.html header="blog" title=Blog %} --> <div id="container" class="mainContainer"> diff --git a/assets/css/documentation.css b/assets/css/documentation.css index 5f2a5f2612cd1ea3ea4be4b0b8acfb0b9ad4c39e..45b008c2836f44fed2299e231606ceedae3be933 100644 --- a/assets/css/documentation.css +++ b/assets/css/documentation.css @@ -2,49 +2,6 @@ /* Colors */ /* Global Media Queries */ /* Direction */ -.documentDetail .bgTextbig, -.pageDocumentation .bgTextbig { - left: 0; - transform: translate(0, -50%); -} -@media (min-width: 768px) { - .documentDetail .bgTextbig, - .pageDocumentation .bgTextbig { - font-size: 170px; - } -} -@media (min-width: 1024px) { - .documentDetail .bgTextbig, - .pageDocumentation .bgTextbig { - font-size: 220px; - } -} -@media (min-width: 1280px) { - .documentDetail .bgTextbig, - .pageDocumentation .bgTextbig { - font-size: 280px; - } -} -@media (min-width: 1600px) { - .documentDetail .bgTextbig, - .pageDocumentation .bgTextbig { - font-size: 300px; - } -} -.documentDetail { - padding-top: 30px; - min-height: 100%; - box-sizing: border-box; - padding-bottom: 130px; -} -@media (min-width: 768px) { - .documentDetail { - padding-top: 70px; - } -} -.documentDetail .pages { - padding-bottom: 0; -} .pageDocumentation { padding-top: 40px; } @@ -53,89 +10,13 @@ padding-top: 70px; } } -.pageDocumentation .pageBanner { - background-size: cover; -} -.pageDocumentation .listItem { +.pageDocumentation .tile { cursor: default; } -.otherDocuments { +.pageDocumentation > .wrap { position: relative; - background-color: #f6f6f6; - padding: 30px 15px; -} -@media (min-width: 1280px) { - .otherDocuments { - padding: 60px 0; - } -} -.otherDocuments ul { - list-style-type: none; - padding: 0; -} -.otherDocuments > div { max-width: 1260px; margin: 0 auto; -} -.otherDocuments h4 { - margin-top: 0; - font-size: 18px; -} -@media (min-width: 768px) { - .otherDocuments h4 { - font-size: 20px; - padding: 0 17% 0 25%; - } -} -@media (min-width: 1280px) { - .otherDocuments h4 { - font-size: 24px; - } -} -.otherDocuments ul { - overflow: hidden; -} -@media (min-width: 768px) { - .otherDocuments ul { - padding: 0 17% 30px 25%; - } -} -.otherDocuments ul li { - position: relative; - padding-left: 20px; - margin-bottom: 5px; - font-size: 14px; - box-sizing: border-box; -} -@media (min-width: 768px) { - .otherDocuments ul li { - width: 50%; - padding: 0 20px; - float: left; - } -} -.otherDocuments ul li a { - display: block; - color: inherit; -} -.otherDocuments ul li i { - position: absolute; - top: 0; - left: 0; - color: #f7931c; - font-size: 12px; - line-height: 16px; - font-weight: 700; -} -.defnitionList dd p a { - display: inline-block; - padding: 0; - border: none; - box-shadow: none; - margin: 0; -} -.defnitionList dd p a:hover { - background-color: transparent !important; - color: #f7931c !important; - text-decoration: underline; + padding: 0 25px; + z-index: 2; } diff --git a/assets/css/get-framac.css b/assets/css/get-framac.css index 2af58a208bcb6034e82f35a648ec4ad0efa6844c..ec4e3d1099997b2bd2d1e7696313617bc31881de 100644 --- a/assets/css/get-framac.css +++ b/assets/css/get-framac.css @@ -15,7 +15,6 @@ left: 0; right: 0; height: 1px; - background-color: #acacac; } .getFramaC .wrap { position: relative; @@ -117,8 +116,8 @@ } } .getFramaC .notebook { - width: 300px; - height: 175px; + width: 80%; + height: 20%; margin-bottom: 20px; margin-left: auto; margin-right: auto; @@ -127,81 +126,16 @@ border: 0; background: transparent; } -@media only screen and (min-width: 481px) { - .getFramaC .notebook { - width: 400px; - height: 233px; - } -} -@media (min-width: 768px) { - .getFramaC .notebook { - width: 600px; - height: 349px; - } -} -@media (min-width: 1024px) { - .getFramaC .notebook { - width: 720px; - height: 422px; - } -} -@media (min-width: 1280px) { - .getFramaC .notebook { - width: 800px; - height: 466px; - } -} + + .getFramaC .notebook > div { background: transparent url('../img/laptop.png') no-repeat; - background-size: 100%; - padding: 15px 36px 20px; + background-size: 100% 100%; + padding: 4.8% 12.5% 4.6% 12.5%; border: 0; border-radius: 0; } -@media only screen and (min-width: 481px) { - .getFramaC .notebook > div { - padding: 22px 48px 24px; - } -} -@media (min-width: 768px) { - .getFramaC .notebook > div { - padding: 32px 74px 36px; - } -} -@media (min-width: 1024px) { - .getFramaC .notebook > div { - padding: 44px 93px 20px; - } -} -@media (min-width: 1280px) { - .getFramaC .notebook > div { - padding: 43px 100px 47px; - } -} -.getFramaC .notebook > div .codeScreen { - min-height: 100px; - height: 140px; -} -@media only screen and (min-width: 481px) { - .getFramaC .notebook > div .codeScreen { - height: 186px; - } -} -@media (min-width: 768px) { - .getFramaC .notebook > div .codeScreen { - height: 280px; - } -} -@media (min-width: 1024px) { - .getFramaC .notebook > div .codeScreen { - height: 360px; - } -} -@media (min-width: 1280px) { - .getFramaC .notebook > div .codeScreen { - height: 374px; - } -} + @keyframes lineGrow { 0% { width: 0; @@ -228,10 +162,10 @@ } .shell-win { color:#ffffff; - background:#000080; + background:#0078D7; } .shell-win-comment { - color:#c0c0c0; + color:#f0f090; } @media (min-width: 1024px) { diff --git a/assets/css/home.css b/assets/css/home.css index a747cd5ade9273c89048d7fa9879ce8bd79eec19..d84972560aaa38c6f85f8c43fdbd15cfaa1ce35f 100644 --- a/assets/css/home.css +++ b/assets/css/home.css @@ -152,6 +152,11 @@ .home p br { display: none; } + +.banner-desc { + text-align: center; +} + .home .banner-title { max-width: 280px; margin: 0 auto 20px; @@ -1491,10 +1496,17 @@ a.goDown .icon { padding-right: 20px; } .eventDetailsBlock .contentBlk { - display: inline-flex; + display: flex; + flex-direction: column; text-align: left; font-size: 13px; } +@media (min-width: 800px) { + .eventDetailsBlock .contentBlk { + display: inline-flex; + flex-direction: row; + } +} .eventDetailsBlock .contentBlk > div { margin-left: 16px; } @@ -1512,36 +1524,38 @@ a.goDown .icon { } .eventDetailsBlock time { color: #e74643; - font-size: 32px; line-height: 1.1; + width: 100%; + text-align: center; + margin-bottom: 30px; } .eventDetailsBlock time b, .eventDetailsBlock time small { - display: block; font-weight: 600; + font-size: 36px; +} +.eventDetailsBlock time b + b:after { + content: ','; } .eventDetailsBlock time b:first-child { line-height: 40px; } -.eventDetailsBlock time b + b { - font-size: 18px; - margin-top: -1px; -} -.eventDetailsBlock time small { - font-size: 16px; -} @media (min-width: 800px) { .eventDetailsBlock time { - font-size: 42px; + display: block; + text-align: right; + width: auto; display: inline-flex; flex-direction: column; flex: 0 0 auto; } .eventDetailsBlock time b + b { font-size: 30px; - order: -1; margin-top: 0; } + .eventDetailsBlock time b + b:after { + content: ''; + } .eventDetailsBlock time small { font-size: 18px; } diff --git a/assets/css/main.css b/assets/css/main.css index afd96b8fdc7df8aefa157febebc1e80d4d33df3b..67f0a9fed3622bedb4dd2ee28ba7e11ad9dfb56d 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -459,13 +459,12 @@ div#wpadminbar:hover div#wp-toolbar { width: 100%; left: 0; top: 0; - height: 70px; + height: 64px; z-index: 51; } @media (min-width: 768px) { .siteHeader { height: 60px; - border-bottom: 1px solid #f7f7f7; } } @media (min-width: 1280px) { @@ -576,7 +575,6 @@ div#wpadminbar:hover div#wp-toolbar { position: static; width: auto; max-width: none; - display: block; float: left; } .siteHeader nav ul { @@ -597,7 +595,13 @@ div#wpadminbar:hover div#wp-toolbar { } .siteHeader nav li.current-menu-item a { color: #f26521; + border-bottom: #f26521 1px solid; + } + + .siteHeader nav li a:hover { + border-bottom: #f26521 1px solid; } + .siteHeader .btnDownload { float: right; display: block; @@ -605,7 +609,7 @@ div#wpadminbar:hover div#wp-toolbar { background: #f7931c; color: #fff; font-size: 20px; - height: 60px; + height: 58px; width: 68px; text-align: center; line-height: 62px; @@ -679,7 +683,7 @@ div#wpadminbar:hover div#wp-toolbar { } .siteHeader .btnDownload { font-size: 23px; - height: 65px; + height: 64px; width: 80px; line-height: 67px; } @@ -701,24 +705,24 @@ div#wpadminbar:hover div#wp-toolbar { } .brandLogo { position: absolute; - top: 6px; - left: 6px; + top: 0px; + left: 10px; display: block; } .brandLogo span { display: none; } .brandLogo img { - width: 128px; + height: 64px; } @media (min-width: 768px) { .brandLogo { position: static; - padding: 6px; + padding-left: 10px; float: left; } .brandLogo img { - width: 104px; + height: 60px; } } @media (min-width: 1280px) { @@ -726,14 +730,13 @@ div#wpadminbar:hover div#wp-toolbar { padding: 0; } .brandLogo img { - width: 145px; + height: 65px; } } .menuToggle { position: absolute; - right: 10px; - top: 10px; - padding: 6px 8px; + right: 15px; + top: 15px; z-index: 62; backface-visibility: hidden; } @@ -823,173 +826,6 @@ div#wpadminbar:hover div#wp-toolbar { transform: translateY(0px); } } -.pageDocumentation .btnPdfDownload { - background: #f7931c; - border-radius: 80px; - border: 0 none; - box-shadow: 0 8px 16px rgba(244, 116, 31, 0.5); - outline: 0 none; - color: #fff; - cursor: pointer; - display: inline-block; - font-size: 18px; - font-weight: 300; - padding: 16px 34px; - position: relative; - overflow: hidden; - transition: transform 0.4s, box-shadow 0.4s; - backface-visibility: hidden; - z-index: 1; - position: absolute; - bottom: 20px; - right: 20px; - padding: 15px 25px !important; - font-size: 20px; - border-radius: 40px; - opacity: 0; - pointer-events: none; - transition: opacity 0.3s; -} -.pageDocumentation .btnPdfDownload span { - position: relative; - z-index: 2; -} -.pageDocumentation .btnPdfDownload span span { - margin-left: 8px; -} -.pageDocumentation .btnPdfDownload span i { - top: 2px; -} -.pageDocumentation .btnPdfDownload span .icon-download-arrow { - font-size: 17px; - margin: 0 7px; - top: 1px; -} -.pageDocumentation .btnPdfDownload i { - position: relative; - z-index: 2; -} -.pageDocumentation .btnPdfDownload small { - position: relative; - text-transform: uppercase; - z-index: 2; - font-size: 70%; - font-weight: 600; - line-height: 1; - display: block; - margin: 0 15px; -} -@media (min-width: 1024px) { - .pageDocumentation .btnPdfDownload small { - margin: 0 25px; - } -} -.pageDocumentation .btnPdfDownload b { - font-weight: 700; -} -.pageDocumentation .btnPdfDownload:before, -.pageDocumentation .btnPdfDownload:after { - content: ''; - display: block; - border-radius: 80px; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - transition: opacity 0.3s; -} -.pageDocumentation .btnPdfDownload:before { - background: #f26521; - background: -moz-linear-gradient(-150deg, #f26521 0%, #f7931c 80%); - background: -webkit-linear-gradient(-150deg, #f26521 0%, #f7931c 80%); - background: linear-gradient(-150deg, #f26521 0%, #f7931c 80%); -} -.pageDocumentation .btnPdfDownload:after { - background: #f7931c; - background: -moz-linear-gradient(-150deg, #f7931c 0%, #f26521 80%); - background: -webkit-linear-gradient(-150deg, #f7931c 0%, #f26521 80%); - background: linear-gradient(-150deg, #f7931c 0%, #f26521 80%); - opacity: 0; -} -.nonTouch .pageDocumentation .btnPdfDownload:hover:after { - opacity: 1; -} -.nonTouch .pageDocumentation .btnPdfDownload:hover .icon-download-arrow { - animation: intimateDownload 0.8s ease; -} -@media (min-width: 1280px) { - .pageDocumentation .btnPdfDownload { - font-size: 22px; - padding: 20px 45px; - box-shadow: 0 10px 20px rgba(244, 112, 32, 0.5); - } - .pageDocumentation .btnPdfDownload span .icon-download-arrow { - font-size: 19px; - margin: 0 8px; - } -} -.pageDocumentation .btnPdfDownload.btnCancel { - background: #f3f3f3; - box-shadow: none; - color: rgba(0, 0, 0, 0.5); -} -.pageDocumentation .btnPdfDownload.btnCancel:before { - display: none; -} -.nonTouch .pageDocumentation .btnPdfDownload.btnCancel:hover { - color: #fff; -} -.pageDocumentation .btnPdfDownload.btnCancel.active { - color: #fff; -} -.pageDocumentation .btnPdfDownload.btnCancel.active:before { - display: block; -} -.pageDocumentation .btnPdfDownload.cta-download span i { - transition: transform 0.4s; -} -.nonTouch .pageDocumentation .btnPdfDownload.cta-download:hover span i:first-child { - transform: translateX(-2px); -} -.nonTouch .pageDocumentation .btnPdfDownload.cta-download:hover span i:last-child { - transform: translateX(2px); -} -.nonTouch .pageDocumentation .btnPdfDownload.cta-download:hover span i.icon-download-arrow { - animation: intimateDownload 0.8s ease; -} -.pageDocumentation .btnPdfDownload.btnSmall { - font-size: 15px; - padding: 13px 25px; -} -.pageDocumentation .btnPdfDownload.btnSmall span .icon-download-arrow { - font-size: 90%; - margin-right: 0; -} -@media (max-width: 767px) { - .pageDocumentation .btnPdfDownload { - display: none; - } -} -.touch .pageDocumentation .btnPdfDownload { - opacity: 1; - display: block; - font-size: 18px; - padding: 13px 23px 12px !important; - bottom: 18px; - right: 18px; -} -.pageDocumentation .btnPdfDownload:before, -.pageDocumentation .btnPdfDownload:after { - border-radius: 40px; -} -.pageDocumentation .btnPdfDownload i { - position: relative; -} -.pageDocumentation .listItem:hover .btnPdfDownload { - opacity: 1; - pointer-events: all; -} /*---------------------------- 5. Common button ------------------------------*/ .btn { background: #f7931c; @@ -1457,190 +1293,6 @@ h2 { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -.pluginListwrap { - padding: 0; -} -.pluginListwrap > section { - margin-bottom: 35px; -} -@media (min-width: 600px) { - .pluginListwrap > section { - display: flex; - flex-wrap: wrap; - margin-bottom: 130px; - } -} -@media (min-width: 768px) { - .pluginListwrap > section { - padding: 0 10px; - } -} -@media (min-width: 1280px) { - .pluginListwrap > section { - padding: 0; - } -} -.pluginListwrap > section > div, -.pluginListwrap > section .listItem { - box-sizing: border-box; -} -@media (min-width: 600px) { - .pluginListwrap > section > div, - .pluginListwrap > section .listItem { - width: 49%; - margin: 0 0.5% 1%; - } -} -@media (min-width: 768px) { - .pluginListwrap > section > div, - .pluginListwrap > section .listItem { - width: 32.66%; - margin: 0 0.25% 0.5%; - box-sizing: border-box; - } - .pluginListwrap > section > div:nth-child(4):nth-last-child(1), - .pluginListwrap > section .listItem:nth-child(4):nth-last-child(1) { - width: 32.66%; - margin: auto; - position: relative; - left: -0.25%; - } -} -.pluginListwrap > section > div.pluginListTitle, -.pluginListwrap > section .listItem.pluginListTitle { - align-self: center; -} -@media (min-width: 768px) { - .pluginListwrap > section > div.pluginListTitle, - .pluginListwrap > section .listItem.pluginListTitle { - width: 32.66%; - } -} -.pluginListTitle { - font-weight: 700; - margin-bottom: 25px; - font-size: 26px; - padding: 0 30px; - word-break: break-word; -} -@media (min-width: 768px) { - .pluginListTitle { - font-size: 30px; - } -} -.pageDocumentation > .wrap { - position: relative; - max-width: 1260px; - margin: 0 auto; - padding: 0 25px; - z-index: 2; -} -@media (min-width: 768px) { - pageDocuu.pageDocumentation > .wrap { - height: 90px; - padding: 28px 10px 0; - } -} -@media only screen and (min-width: 900px) { - pageDocuu.pageDocumentation > .wrap { - padding: 28px 25px 0; - } -} -@media only screen and (min-width: 1260px) { - pageDocuu.pageDocumentation > .wrap { - padding-left: 0; - padding-right: 0; - } -} - -.docListwrap { - padding: 20px 0 0; -} -.docListwrap > section { - margin-bottom: 35px; -} -@media (min-width: 600px) { - .docListwrap > section { - display: flex; - flex-wrap: wrap; - padding: 0; - } -} -@media (min-width: 768px) { - .docListwrap > section { - margin-bottom: 70px; - } -} -.docItem:before { - content: "> "; - color:#f36521; -} -.docListwrap > section > div, -.docListwrap > section .listItem { - box-sizing: border-box; - padding: 35px 30px 30px; -} -@media (min-width: 600px) { - .docListwrap > section > div, - .docListwrap > section .listItem { - width: 47%; - margin: 0 0.5% 1%; - } -} -.docListwrap > section > div:nth-last-child(1), -.docListwrap > section .listItem:nth-last-child(1) { - position: relative; -} -@media (min-width: 768px){ - .docListwrap > section > div, - .docListwrap > section .listItem { - width: 32.66%; - margin: 0 0.25% 0.5%; - } -} -@media (min-width: 900px) { - .docListwrap > section > div, - .docListwrap > section .listItem { - width: 24%; - margin: 0 0.25% 0.5%; - box-sizing: border-box; - } -} -.docListwrap > section > div.docListTitle, -.docListwrap > section .listItem.docListTitle { - align-self: center; -} -@media (min-width: 600px) { - .docListwrap > section > div.docListTitle, - .docListwrap > section .listItem.docListTitle { - width: 47%; - } -} -@media (min-width: 768px) { - .docListwrap > section > div.docListTitle, - .docListwrap > section .listItem.docListTitle { - width: 32.66%; - } -} -@media (min-width: 900px) { - .docListwrap > section > div.docListTitle, - .docListwrap > section .listItem.docListTitle { - width: 24%; - } -} -.docListTitle { - font-weight: 700; - margin-bottom: 25px; - font-size: 26px; - padding: 0 30px; - height: auto; - word-break: break-word; -} -@media (min-width: 768px) { - .docListTitle { - font-size: 30px; - } -} .linkReadmore { position: absolute; top: 0; @@ -1650,40 +1302,6 @@ h2 { cursor: pointer; display: block; } -.docReadMore { - position: relative; - display: inline-block; - color: #d6be98; - padding-bottom: 2px; - /*@media @uptoSmallScreen { - display: none; - }*/ -} -.docReadMore:before, -.docReadMore:after { - content: ''; - position: absolute; - bottom: 0; - background-color: currentColor; - transition: 0.2s; -} -.docReadMore:before { - left: -5px; - width: 1px; - height: 0; -} -.docReadMore:after { - left: 0; - width: 100%; - height: 1px; -} -.listItem:hover .docReadMore:before { - height: 100%; -} -.listItem:hover .docReadMore:after { - left: -5px; - width: 20px; -} .defnitionList { max-width: 1260px; margin: 0 auto; @@ -1909,7 +1527,7 @@ h2 { background: #f6f8ff; } .codeScreen .codeTab.tab-windows { - background: #000080; + background: #0078D7; } .codeScreen .codeTab.tab-demo { background: #202020; @@ -2018,7 +1636,6 @@ footer .copyright li + li { } footer .copyright a { color: #333; - opacity: 0.5; border-bottom: 1px solid #bbb; display: inline-block; padding: 0 2px; @@ -2033,7 +1650,6 @@ footer .copyright a { @media (min-width: 768px) { footer { background: #fff; - border-top: 1px solid #f7f7f7; overflow: hidden; padding: 32px 5% 0; margin-top: -120px; diff --git a/assets/css/page.css b/assets/css/page.css index e0debe16f6c8dbfb7261c1f320ef78f194d6e9d1..a671b3b340d55c32c761ce3802ac5357b11ad7ef 100644 --- a/assets/css/page.css +++ b/assets/css/page.css @@ -203,7 +203,7 @@ .authorList .authorInfo { text-align: left; display: inline-block; - width: 152px; + width: 252px; vertical-align: top; padding: 0 8px 12px; } @@ -213,7 +213,7 @@ } @media (min-width: 1024px) { .authorList .authorInfo { - width: 190px; + width: 350px; padding: 0 14px 12px; } } diff --git a/assets/css/swiper.css b/assets/css/swiper.css new file mode 100644 index 0000000000000000000000000000000000000000..9efd2570dca7716a60a024a41600fc755961da76 --- /dev/null +++ b/assets/css/swiper.css @@ -0,0 +1,532 @@ +/** + * Swiper 6.1.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://swiperjs.com + * + * Copyright 2014-2020 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: July 31, 2020 + */ + +@font-face { + font-family: 'swiper-icons'; + src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA') format('woff'); + font-weight: 400; + font-style: normal; +} +:root { + --swiper-theme-color: #007aff; +} +.swiper-container { + margin-left: auto; + margin-right: auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + /* Fix of Webkit flickering */ + z-index: 1; +} +.swiper-container-vertical > .swiper-wrapper { + flex-direction: column; +} +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: flex; + transition-property: transform; + box-sizing: content-box; +} +.swiper-container-android .swiper-slide, +.swiper-wrapper { + transform: translate3d(0px, 0, 0); +} +.swiper-container-multirow > .swiper-wrapper { + flex-wrap: wrap; +} +.swiper-container-multirow-column > .swiper-wrapper { + flex-wrap: wrap; + flex-direction: column; +} +.swiper-container-free-mode > .swiper-wrapper { + transition-timing-function: ease-out; + margin: 0 auto; +} +.swiper-slide { + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; + transition-property: transform; +} +.swiper-slide-invisible-blank { + visibility: hidden; +} +/* Auto Height */ +.swiper-container-autoheight, +.swiper-container-autoheight .swiper-slide { + height: auto; +} +.swiper-container-autoheight .swiper-wrapper { + align-items: flex-start; + transition-property: transform, height; +} +/* 3D Effects */ +.swiper-container-3d { + perspective: 1200px; +} +.swiper-container-3d .swiper-wrapper, +.swiper-container-3d .swiper-slide, +.swiper-container-3d .swiper-slide-shadow-left, +.swiper-container-3d .swiper-slide-shadow-right, +.swiper-container-3d .swiper-slide-shadow-top, +.swiper-container-3d .swiper-slide-shadow-bottom, +.swiper-container-3d .swiper-cube-shadow { + transform-style: preserve-3d; +} +.swiper-container-3d .swiper-slide-shadow-left, +.swiper-container-3d .swiper-slide-shadow-right, +.swiper-container-3d .swiper-slide-shadow-top, +.swiper-container-3d .swiper-slide-shadow-bottom { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; +} +.swiper-container-3d .swiper-slide-shadow-left { + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} +.swiper-container-3d .swiper-slide-shadow-right { + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} +.swiper-container-3d .swiper-slide-shadow-top { + background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} +.swiper-container-3d .swiper-slide-shadow-bottom { + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} +/* CSS Mode */ +.swiper-container-css-mode > .swiper-wrapper { + overflow: auto; + scrollbar-width: none; + /* For Firefox */ + -ms-overflow-style: none; + /* For Internet Explorer and Edge */ +} +.swiper-container-css-mode > .swiper-wrapper::-webkit-scrollbar { + display: none; +} +.swiper-container-css-mode > .swiper-wrapper > .swiper-slide { + scroll-snap-align: start start; +} +.swiper-container-horizontal.swiper-container-css-mode > .swiper-wrapper { + scroll-snap-type: x mandatory; +} +.swiper-container-vertical.swiper-container-css-mode > .swiper-wrapper { + scroll-snap-type: y mandatory; +} +:root { + --swiper-navigation-size: 44px; + /* + --swiper-navigation-color: var(--swiper-theme-color); + */ +} +.swiper-button-prev, +.swiper-button-next { + position: absolute; + top: 50%; + width: calc(var(--swiper-navigation-size) / 44 * 27); + height: var(--swiper-navigation-size); + margin-top: calc(-1 * var(--swiper-navigation-size) / 2); + z-index: 10; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + color: var(--swiper-navigation-color, var(--swiper-theme-color)); +} +.swiper-button-prev.swiper-button-disabled, +.swiper-button-next.swiper-button-disabled { + opacity: 0.35; + cursor: auto; + pointer-events: none; +} +.swiper-button-prev:after, +.swiper-button-next:after { + font-family: swiper-icons; + font-size: var(--swiper-navigation-size); + text-transform: none !important; + letter-spacing: 0; + text-transform: none; + font-variant: initial; + line-height: 1; +} +.swiper-button-prev, +.swiper-container-rtl .swiper-button-next { + left: 10px; + right: auto; +} +.swiper-button-prev:after, +.swiper-container-rtl .swiper-button-next:after { + content: 'prev'; +} +.swiper-button-next, +.swiper-container-rtl .swiper-button-prev { + right: 10px; + left: auto; +} +.swiper-button-next:after, +.swiper-container-rtl .swiper-button-prev:after { + content: 'next'; +} +.swiper-button-prev.swiper-button-white, +.swiper-button-next.swiper-button-white { + --swiper-navigation-color: #ffffff; +} +.swiper-button-prev.swiper-button-black, +.swiper-button-next.swiper-button-black { + --swiper-navigation-color: #000000; +} +.swiper-button-lock { + display: none; +} +:root { + /* + --swiper-pagination-color: var(--swiper-theme-color); + */ +} +.swiper-pagination { + position: absolute; + text-align: center; + transition: 300ms opacity; + transform: translate3d(0, 0, 0); + z-index: 10; +} +.swiper-pagination.swiper-pagination-hidden { + opacity: 0; +} +/* Common Styles */ +.swiper-pagination-fraction, +.swiper-pagination-custom, +.swiper-container-horizontal > .swiper-pagination-bullets { + bottom: 10px; + left: 0; + width: 100%; +} +/* Bullets */ +.swiper-pagination-bullets-dynamic { + overflow: hidden; + font-size: 0; +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transform: scale(0.33); + position: relative; +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { + transform: scale(1); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main { + transform: scale(1); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { + transform: scale(0.66); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { + transform: scale(0.33); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { + transform: scale(0.66); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { + transform: scale(0.33); +} +.swiper-pagination-bullet { + width: 8px; + height: 8px; + display: inline-block; + border-radius: 100%; + background: #000; + opacity: 0.2; +} +button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + box-shadow: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; +} +.swiper-pagination-bullet-active { + opacity: 1; + background: var(--swiper-pagination-color, var(--swiper-theme-color)); +} +.swiper-container-vertical > .swiper-pagination-bullets { + right: 10px; + top: 50%; + transform: translate3d(0px, -50%, 0); +} +.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 6px 0; + display: block; +} +.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + top: 50%; + transform: translateY(-50%); + width: 8px; +} +.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + display: inline-block; + transition: 200ms transform, 200ms top; +} +.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 4px; +} +.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + left: 50%; + transform: translateX(-50%); + white-space: nowrap; +} +.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transition: 200ms transform, 200ms left; +} +.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transition: 200ms transform, 200ms right; +} +/* Progress */ +.swiper-pagination-progressbar { + background: rgba(0, 0, 0, 0.25); + position: absolute; +} +.swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: var(--swiper-pagination-color, var(--swiper-theme-color)); + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + transform: scale(0); + transform-origin: left top; +} +.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + transform-origin: right top; +} +.swiper-container-horizontal > .swiper-pagination-progressbar, +.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { + width: 100%; + height: 4px; + left: 0; + top: 0; +} +.swiper-container-vertical > .swiper-pagination-progressbar, +.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { + width: 4px; + height: 100%; + left: 0; + top: 0; +} +.swiper-pagination-white { + --swiper-pagination-color: #ffffff; +} +.swiper-pagination-black { + --swiper-pagination-color: #000000; +} +.swiper-pagination-lock { + display: none; +} +/* Scrollbar */ +.swiper-scrollbar { + border-radius: 10px; + position: relative; + -ms-touch-action: none; + background: rgba(0, 0, 0, 0.1); +} +.swiper-container-horizontal > .swiper-scrollbar { + position: absolute; + left: 1%; + bottom: 3px; + z-index: 50; + height: 5px; + width: 98%; +} +.swiper-container-vertical > .swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; +} +.swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: rgba(0, 0, 0, 0.5); + border-radius: 10px; + left: 0; + top: 0; +} +.swiper-scrollbar-cursor-drag { + cursor: move; +} +.swiper-scrollbar-lock { + display: none; +} +.swiper-zoom-container { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} +.swiper-zoom-container > img, +.swiper-zoom-container > svg, +.swiper-zoom-container > canvas { + max-width: 100%; + max-height: 100%; + object-fit: contain; +} +.swiper-slide-zoomed { + cursor: move; +} +/* Preloader */ +:root { + /* + --swiper-preloader-color: var(--swiper-theme-color); + */ +} +.swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + transform-origin: 50%; + animation: swiper-preloader-spin 1s infinite linear; + box-sizing: border-box; + border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color)); + border-radius: 50%; + border-top-color: transparent; +} +.swiper-lazy-preloader-white { + --swiper-preloader-color: #fff; +} +.swiper-lazy-preloader-black { + --swiper-preloader-color: #000; +} +@keyframes swiper-preloader-spin { + 100% { + transform: rotate(360deg); + } +} +/* a11y */ +.swiper-container .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; +} +.swiper-container-fade.swiper-container-free-mode .swiper-slide { + transition-timing-function: ease-out; +} +.swiper-container-fade .swiper-slide { + pointer-events: none; + transition-property: opacity; +} +.swiper-container-fade .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-container-fade .swiper-slide-active, +.swiper-container-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.swiper-container-cube { + overflow: visible; +} +.swiper-container-cube .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; + visibility: hidden; + transform-origin: 0 0; + width: 100%; + height: 100%; +} +.swiper-container-cube .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-container-cube.swiper-container-rtl .swiper-slide { + transform-origin: 100% 0; +} +.swiper-container-cube .swiper-slide-active, +.swiper-container-cube .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.swiper-container-cube .swiper-slide-active, +.swiper-container-cube .swiper-slide-next, +.swiper-container-cube .swiper-slide-prev, +.swiper-container-cube .swiper-slide-next + .swiper-slide { + pointer-events: auto; + visibility: visible; +} +.swiper-container-cube .swiper-slide-shadow-top, +.swiper-container-cube .swiper-slide-shadow-bottom, +.swiper-container-cube .swiper-slide-shadow-left, +.swiper-container-cube .swiper-slide-shadow-right { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.swiper-container-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0px; + width: 100%; + height: 100%; + background: #000; + opacity: 0.6; + -webkit-filter: blur(50px); + filter: blur(50px); + z-index: 0; +} +.swiper-container-flip { + overflow: visible; +} +.swiper-container-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; +} +.swiper-container-flip .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-container-flip .swiper-slide-active, +.swiper-container-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.swiper-container-flip .swiper-slide-shadow-top, +.swiper-container-flip .swiper-slide-shadow-bottom, +.swiper-container-flip .swiper-slide-shadow-left, +.swiper-container-flip .swiper-slide-shadow-right { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} diff --git a/assets/css/tiles.css b/assets/css/tiles.css new file mode 100644 index 0000000000000000000000000000000000000000..5c75b75fbda28efaf998d3638fea7023a63d8578 --- /dev/null +++ b/assets/css/tiles.css @@ -0,0 +1,176 @@ +:root { + --tile-color: #f4f4f4; + --tile-hover: #f9f9f9; + --tile-shadow: rgba(0, 0, 0, 0.15); + --tile-text: rgba(51, 51, 51, 0.6); + --tile-link: #98805a; + --tile-li-bullet: #f36521; +} + +.tile { + display: block; + overflow: hidden; + cursor: pointer; + color: inherit; + position: relative; + background-color: var(--tile-color); + box-sizing: border-box; +} +.tileWrapper[size="big"] .tile { + padding: 40px 40px 40px 45px; +} +.tileWrapper[size="small"] .tile { + padding: 30px 30px 30px 35px; +} +.nonTouch .tile { + transition: 0.35s ease-out; +} +.nonTouch .tile:hover { + transform: translateY(-5px); + z-index: 1; + box-shadow: 15px 40px 40px 0 var(--tile-shadow); +} +.nonTouch .tile:hover .tileTitle:before { + color: var(--tile-hover); +} + +.tile .tileTitle { + text-transform: uppercase; + font-weight: 700; + font-size: 16px; + margin: 0 0 15px; + transition: 0.35s; +} +@media (min-width: 1280px) { + .tile .tileTitle { + font-size: 18px; + } +} +.tile .tileTitle span { + position: relative; +} +.tile p { + font-weight: 600; + position: relative; + color: var(--tile-text); + font-size: 14px; +} +.tile a { + color: var(--tile-link); +} +.tile > ul { + position: relative; + padding-left: 10px; + margin: 0; +} +.tile > ul > li { + list-style: "> "; + color: var(--tile-li-bullet); +} + +.tileWrapper { + padding: 20px 0 0; + margin-bottom: 35px; +} +.tileWrapper .tileWrapperTitle, +.tileWrapper .tile { + box-sizing: border-box; + margin: 2%; +} +@media (min-width: 600px) { + .tileWrapper[size="small"] { + display: flex; + flex-wrap: wrap; + padding: 0; + } + .tileWrapper[size="small"] .tileWrapperTitle, + .tileWrapper[size="small"] .tile { + box-sizing: border-box; + margin: 0.5%; + } +} +@media (min-width: 768px) { + .tileWrapper[size="big"] { + display: flex; + flex-wrap: wrap; + padding: 0; + } + .tileWrapper[size="big"] .tileWrapperTitle, + .tileWrapper[size="big"] .tile { + box-sizing: border-box; + margin: 0.5%; + } +} +@media (min-width: 768px) { + .tileWrapper { + margin-bottom: 70px; + } +} + +.tileWrapper > div:nth-last-child(1), +.tileWrapper .tile:nth-last-child(1) { + position: relative; +} +.tileWrapperTitle { + font-weight: 700; + margin-bottom: 25px; + font-size: 26px; + padding: 0 30px; + height: auto; + word-break: break-word; +} +@media (min-width: 768px) { + .tileWrapperTitle { + font-size: 30px; + } +} +.tileWrapper .tileWrapperTitle, +.tileWrapper .tile.tileTitle { + align-self: center; +} + +/* Tile: width: (100 - N * margin) / N (with N = number of tiles) */ + +/* SMALL TILES */ +@media (min-width: 600px) { /* 2 Tiles */ + .tileWrapper[size="small"] > div, + .tileWrapper[size="small"] .tile, + .tileWrapper[size="small"] > div.tileTitle, + .tileWrapper[size="small"] .tile.tileWrapperTitle { + width: 49%; + } +} +@media (min-width: 900px){ /* 3 Tiles */ + .tileWrapper[size="small"] > div, + .tileWrapper[size="small"] .tile, + .tileWrapper[size="small"] > div.tileTitle, + .tileWrapper[size="small"] .tile.tileWrapperTitle { + width: 32.33%; + } +} +@media (min-width: 1260px) { /* 4 Tiles */ + .tileWrapper[size="small"] > div, + .tileWrapper[size="small"] > .tile, + .tileWrapper[size="small"] > div.tileTitle, + .tileWrapper[size="small"] > .tile.tileWrapperTitle { + width: 24%; + } +} + +/* BIG TILES */ +@media (min-width: 768px) { /* 2 Tiles */ + .tileWrapper[size="big"] > div, + .tileWrapper[size="big"] .tile, + .tileWrapper[size="big"] > div.tileTitle, + .tileWrapper[size="big"] .tile.tileWrapperTitle { + width: 49%; + } +} +@media (min-width: 1260px){ /* 3 Tiles */ + .tileWrapper[size="big"] > div, + .tileWrapper[size="big"] .tile, + .tileWrapper[size="big"] > div.tileTitle, + .tileWrapper[size="big"] .tile.tileWrapperTitle { + width: 32.33%; + } +} \ No newline at end of file diff --git a/assets/js/codeTabs.js b/assets/js/codeTabs.js new file mode 100644 index 0000000000000000000000000000000000000000..8bb87ef612c46d961fe94288013179e7b0db4e07 --- /dev/null +++ b/assets/js/codeTabs.js @@ -0,0 +1,25 @@ + +var x = document.getElementsByClassName("codeTabs"); + +if (x.length > 0) { + var OSName = "linux"; + if (navigator.appVersion.indexOf("Win") != -1) OSName = "windows"; + if (navigator.appVersion.indexOf("Mac") != -1) OSName = "mac"; + if (navigator.appVersion.indexOf("X11") != -1) OSName = "linux"; + if (navigator.appVersion.indexOf("Linux") != -1) OSName = "linux"; + + document.getElementsByClassName('tab-up-' + OSName)[0].classList.add("active"); + document.getElementsByClassName('tab-' + OSName)[0].classList.remove('hide'); +} + +function clickTab(name) { + tabs_up = document.getElementsByClassName('tab-up'); + tabs = document.getElementsByClassName('codeTab'); + for (i = 0; i < tabs.length; i++) { + tabs[i].classList.add("hide"); + tabs_up[i].classList.remove('active'); + } + + document.getElementsByClassName('tab-up-' + name)[0].classList.add("active"); + document.getElementsByClassName('tab-' + name)[0].classList.remove('hide'); +} \ No newline at end of file diff --git a/assets/js/lib.js b/assets/js/lib.js deleted file mode 100644 index 5c71ba456d4301f777988f2e9ea15ca96c49919f..0000000000000000000000000000000000000000 --- a/assets/js/lib.js +++ /dev/null @@ -1,21205 +0,0 @@ -webpackJsonp([0],{ - -/***/ "../../../../../node_modules/ansi-html/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = ansiHTML - -// Reference to https://github.com/sindresorhus/ansi-regex -var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/ - -var _defColors = { - reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] - black: '000', - red: 'ff0000', - green: '209805', - yellow: 'e8bf03', - blue: '0000ff', - magenta: 'ff00ff', - cyan: '00ffee', - lightgrey: 'f0f0f0', - darkgrey: '888' -} -var _styles = { - 30: 'black', - 31: 'red', - 32: 'green', - 33: 'yellow', - 34: 'blue', - 35: 'magenta', - 36: 'cyan', - 37: 'lightgrey' -} -var _openTags = { - '1': 'font-weight:bold', // bold - '2': 'opacity:0.5', // dim - '3': '<i>', // italic - '4': '<u>', // underscore - '8': 'display:none', // hidden - '9': '<del>' // delete -} -var _closeTags = { - '23': '</i>', // reset italic - '24': '</u>', // reset underscore - '29': '</del>' // reset delete -} - -;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) { - _closeTags[n] = '</span>' -}) - -/** - * Converts text with ANSI color codes to HTML markup. - * @param {String} text - * @returns {*} - */ -function ansiHTML (text) { - // Returns the text if the string has no ANSI escape code. - if (!_regANSI.test(text)) { - return text - } - - // Cache opened sequence. - var ansiCodes = [] - // Replace with markup. - var ret = text.replace(/\033\[(\d+)*m/g, function (match, seq) { - var ot = _openTags[seq] - if (ot) { - // If current sequence has been opened, close it. - if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast - ansiCodes.pop() - return '</span>' - } - // Open tag. - ansiCodes.push(seq) - return ot[0] === '<' ? ot : '<span style="' + ot + ';">' - } - - var ct = _closeTags[seq] - if (ct) { - // Pop sequence - ansiCodes.pop() - return ct - } - return '' - }) - - // Make sure tags are closed. - var l = ansiCodes.length - ;(l > 0) && (ret += Array(l + 1).join('</span>')) - - return ret -} - -/** - * Customize colors. - * @param {Object} colors reference to _defColors - */ -ansiHTML.setColors = function (colors) { - if (typeof colors !== 'object') { - throw new Error('`colors` parameter must be an Object.') - } - - var _finalColors = {} - for (var key in _defColors) { - var hex = colors.hasOwnProperty(key) ? colors[key] : null - if (!hex) { - _finalColors[key] = _defColors[key] - continue - } - if ('reset' === key) { - if (typeof hex === 'string') { - hex = [hex] - } - if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) { - return typeof h !== 'string' - })) { - throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000') - } - var defHexColor = _defColors[key] - if (!hex[0]) { - hex[0] = defHexColor[0] - } - if (hex.length === 1 || !hex[1]) { - hex = [hex[0]] - hex.push(defHexColor[1]) - } - - hex = hex.slice(0, 2) - } else if (typeof hex !== 'string') { - throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000') - } - _finalColors[key] = hex - } - _setTags(_finalColors) -} - -/** - * Reset colors. - */ -ansiHTML.reset = function () { - _setTags(_defColors) -} - -/** - * Expose tags, including open and close. - * @type {Object} - */ -ansiHTML.tags = {} - -if (Object.defineProperty) { - Object.defineProperty(ansiHTML.tags, 'open', { - get: function () { return _openTags } - }) - Object.defineProperty(ansiHTML.tags, 'close', { - get: function () { return _closeTags } - }) -} else { - ansiHTML.tags.open = _openTags - ansiHTML.tags.close = _closeTags -} - -function _setTags (colors) { - // reset all - _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1] - // inverse - _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0] - // dark grey - _openTags['90'] = 'color:#' + colors.darkgrey - - for (var code in _styles) { - var color = _styles[code] - var oriColor = colors[color] || '000' - _openTags[code] = 'color:#' + oriColor - code = parseInt(code) - _openTags[(code + 10).toString()] = 'background:#' + oriColor - } -} - -ansiHTML.reset() - - -/***/ }), - -/***/ "../../../../../node_modules/ansi-regex/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -module.exports = function () { - return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/debug/src/browser.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(process) {/** - * This is the web browser implementation of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = __webpack_require__("../../../../../node_modules/debug/src/debug.js"); -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = 'undefined' != typeof chrome - && 'undefined' != typeof chrome.storage - ? chrome.storage.local - : localstorage(); - -/** - * Colors. - */ - -exports.colors = [ - 'lightseagreen', - 'forestgreen', - 'goldenrod', - 'dodgerblue', - 'darkorchid', - 'crimson' -]; - -/** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - -function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { - return true; - } - - // is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); -} - -/** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - -exports.formatters.j = function(v) { - try { - return JSON.stringify(v); - } catch (err) { - return '[UnexpectedJSONParseError]: ' + err.message; - } -}; - - -/** - * Colorize log arguments if enabled. - * - * @api public - */ - -function formatArgs(args) { - var useColors = this.useColors; - - args[0] = (useColors ? '%c' : '') - + this.namespace - + (useColors ? ' %c' : ' ') - + args[0] - + (useColors ? '%c ' : ' ') - + '+' + exports.humanize(this.diff); - - if (!useColors) return; - - var c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit') - - // the final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - var index = 0; - var lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, function(match) { - if ('%%' === match) return; - index++; - if ('%c' === match) { - // we only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - - args.splice(lastC, 0, c); -} - -/** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". - * - * @api public - */ - -function log() { - // this hackery is required for IE8/9, where - // the `console.log` function doesn't have 'apply' - return 'object' === typeof console - && console.log - && Function.prototype.apply.call(console.log, console, arguments); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - -function save(namespaces) { - try { - if (null == namespaces) { - exports.storage.removeItem('debug'); - } else { - exports.storage.debug = namespaces; - } - } catch(e) {} -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - var r; - try { - r = exports.storage.debug; - } catch(e) {} - - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } - - return r; -} - -/** - * Enable namespaces listed in `localStorage.debug` initially. - */ - -exports.enable(load()); - -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - -function localstorage() { - try { - return window.localStorage; - } catch (e) {} -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/process/browser.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/debug/src/debug.js": -/***/ (function(module, exports, __webpack_require__) { - - -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; -exports.coerce = coerce; -exports.disable = disable; -exports.enable = enable; -exports.enabled = enabled; -exports.humanize = __webpack_require__("../../../../../node_modules/ms/index.js"); - -/** - * The currently active debug mode names, and names to skip. - */ - -exports.names = []; -exports.skips = []; - -/** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - -exports.formatters = {}; - -/** - * Previous log timestamp. - */ - -var prevTime; - -/** - * Select a color. - * @param {String} namespace - * @return {Number} - * @api private - */ - -function selectColor(namespace) { - var hash = 0, i; - - for (i in namespace) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return exports.colors[Math.abs(hash) % exports.colors.length]; -} - -/** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - -function createDebug(namespace) { - - function debug() { - // disabled? - if (!debug.enabled) return; - - var self = debug; - - // set `diff` timestamp - var curr = +new Date(); - var ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - // turn the `arguments` into a proper Array - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - - args[0] = exports.coerce(args[0]); - - if ('string' !== typeof args[0]) { - // anything else let's inspect with %O - args.unshift('%O'); - } - - // apply any `formatters` transformations - var index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { - // if we encounter an escaped % then don't increase the array index - if (match === '%%') return match; - index++; - var formatter = exports.formatters[format]; - if ('function' === typeof formatter) { - var val = args[index]; - match = formatter.call(self, val); - - // now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // apply env-specific formatting (colors, etc.) - exports.formatArgs.call(self, args); - - var logFn = debug.log || exports.log || console.log.bind(console); - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.enabled = exports.enabled(namespace); - debug.useColors = exports.useColors(); - debug.color = selectColor(namespace); - - // env-specific initialization logic for debug instances - if ('function' === typeof exports.init) { - exports.init(debug); - } - - return debug; -} - -/** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - -function enable(namespaces) { - exports.save(namespaces); - - exports.names = []; - exports.skips = []; - - var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - var len = split.length; - - for (var i = 0; i < len; i++) { - if (!split[i]) continue; // ignore empty strings - namespaces = split[i].replace(/\*/g, '.*?'); - if (namespaces[0] === '-') { - exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - exports.names.push(new RegExp('^' + namespaces + '$')); - } - } -} - -/** - * Disable debug output. - * - * @api public - */ - -function disable() { - exports.enable(''); -} - -/** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - -function enabled(name) { - var i, len; - for (i = 0, len = exports.skips.length; i < len; i++) { - if (exports.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = exports.names.length; i < len; i++) { - if (exports.names[i].test(name)) { - return true; - } - } - return false; -} - -/** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} - - -/***/ }), - -/***/ "../../../../../node_modules/events/events.js": -/***/ (function(module, exports) { - -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -EventEmitter.defaultMaxListeners = 10; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; - -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; - - if (!this._events) - this._events = {}; - - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } else { - // At least give some kind of context to the user - var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); - err.context = er; - throw err; - } - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) - return false; - - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - args = Array.prototype.slice.call(arguments, 1); - handler.apply(this, args); - } - } else if (isObject(handler)) { - args = Array.prototype.slice.call(arguments, 1); - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } - - return true; -}; - -EventEmitter.prototype.addListener = function(type, listener) { - var m; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events) - this._events = {}; - - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); - - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener; - else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener); - else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; - - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - // not supported in IE 10 - console.trace(); - } - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; - -// emits a 'removeListener' event iff the listener was removed -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else if (listeners) { - // LIFO order - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.prototype.listenerCount = function(type) { - if (this._events) { - var evlistener = this._events[type]; - - if (isFunction(evlistener)) - return 1; - else if (evlistener) - return evlistener.length; - } - return 0; -}; - -EventEmitter.listenerCount = function(emitter, type) { - return emitter.listenerCount(type); -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - - -/***/ }), - -/***/ "../../../../../node_modules/html-entities/index.js": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = { - XmlEntities: __webpack_require__("../../../../../node_modules/html-entities/lib/xml-entities.js"), - Html4Entities: __webpack_require__("../../../../../node_modules/html-entities/lib/html4-entities.js"), - Html5Entities: __webpack_require__("../../../../../node_modules/html-entities/lib/html5-entities.js"), - AllHtmlEntities: __webpack_require__("../../../../../node_modules/html-entities/lib/html5-entities.js") -}; - - -/***/ }), - -/***/ "../../../../../node_modules/html-entities/lib/html4-entities.js": -/***/ (function(module, exports) { - -var HTML_ALPHA = ['apos', 'nbsp', 'iexcl', 'cent', 'pound', 'curren', 'yen', 'brvbar', 'sect', 'uml', 'copy', 'ordf', 'laquo', 'not', 'shy', 'reg', 'macr', 'deg', 'plusmn', 'sup2', 'sup3', 'acute', 'micro', 'para', 'middot', 'cedil', 'sup1', 'ordm', 'raquo', 'frac14', 'frac12', 'frac34', 'iquest', 'Agrave', 'Aacute', 'Acirc', 'Atilde', 'Auml', 'Aring', 'Aelig', 'Ccedil', 'Egrave', 'Eacute', 'Ecirc', 'Euml', 'Igrave', 'Iacute', 'Icirc', 'Iuml', 'ETH', 'Ntilde', 'Ograve', 'Oacute', 'Ocirc', 'Otilde', 'Ouml', 'times', 'Oslash', 'Ugrave', 'Uacute', 'Ucirc', 'Uuml', 'Yacute', 'THORN', 'szlig', 'agrave', 'aacute', 'acirc', 'atilde', 'auml', 'aring', 'aelig', 'ccedil', 'egrave', 'eacute', 'ecirc', 'euml', 'igrave', 'iacute', 'icirc', 'iuml', 'eth', 'ntilde', 'ograve', 'oacute', 'ocirc', 'otilde', 'ouml', 'divide', 'oslash', 'ugrave', 'uacute', 'ucirc', 'uuml', 'yacute', 'thorn', 'yuml', 'quot', 'amp', 'lt', 'gt', 'OElig', 'oelig', 'Scaron', 'scaron', 'Yuml', 'circ', 'tilde', 'ensp', 'emsp', 'thinsp', 'zwnj', 'zwj', 'lrm', 'rlm', 'ndash', 'mdash', 'lsquo', 'rsquo', 'sbquo', 'ldquo', 'rdquo', 'bdquo', 'dagger', 'Dagger', 'permil', 'lsaquo', 'rsaquo', 'euro', 'fnof', 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta', 'Iota', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Xi', 'Omicron', 'Pi', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'Phi', 'Chi', 'Psi', 'Omega', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigmaf', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega', 'thetasym', 'upsih', 'piv', 'bull', 'hellip', 'prime', 'Prime', 'oline', 'frasl', 'weierp', 'image', 'real', 'trade', 'alefsym', 'larr', 'uarr', 'rarr', 'darr', 'harr', 'crarr', 'lArr', 'uArr', 'rArr', 'dArr', 'hArr', 'forall', 'part', 'exist', 'empty', 'nabla', 'isin', 'notin', 'ni', 'prod', 'sum', 'minus', 'lowast', 'radic', 'prop', 'infin', 'ang', 'and', 'or', 'cap', 'cup', 'int', 'there4', 'sim', 'cong', 'asymp', 'ne', 'equiv', 'le', 'ge', 'sub', 'sup', 'nsub', 'sube', 'supe', 'oplus', 'otimes', 'perp', 'sdot', 'lceil', 'rceil', 'lfloor', 'rfloor', 'lang', 'rang', 'loz', 'spades', 'clubs', 'hearts', 'diams']; -var HTML_CODES = [39, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 34, 38, 60, 62, 338, 339, 352, 353, 376, 710, 732, 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8240, 8249, 8250, 8364, 402, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8226, 8230, 8242, 8243, 8254, 8260, 8472, 8465, 8476, 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830]; - -var alphaIndex = {}; -var numIndex = {}; - -var i = 0; -var length = HTML_ALPHA.length; -while (i < length) { - var a = HTML_ALPHA[i]; - var c = HTML_CODES[i]; - alphaIndex[a] = String.fromCharCode(c); - numIndex[c] = a; - i++; -} - -/** - * @constructor - */ -function Html4Entities() {} - -/** - * @param {String} str - * @returns {String} - */ -Html4Entities.prototype.decode = function(str) { - if (!str || !str.length) { - return ''; - } - return str.replace(/&(#?[\w\d]+);?/g, function(s, entity) { - var chr; - if (entity.charAt(0) === "#") { - var code = entity.charAt(1).toLowerCase() === 'x' ? - parseInt(entity.substr(2), 16) : - parseInt(entity.substr(1)); - - if (!(isNaN(code) || code < -32768 || code > 65535)) { - chr = String.fromCharCode(code); - } - } else { - chr = alphaIndex[entity]; - } - return chr || s; - }); -}; - -/** - * @param {String} str - * @returns {String} - */ -Html4Entities.decode = function(str) { - return new Html4Entities().decode(str); -}; - -/** - * @param {String} str - * @returns {String} - */ -Html4Entities.prototype.encode = function(str) { - if (!str || !str.length) { - return ''; - } - var strLength = str.length; - var result = ''; - var i = 0; - while (i < strLength) { - var alpha = numIndex[str.charCodeAt(i)]; - result += alpha ? "&" + alpha + ";" : str.charAt(i); - i++; - } - return result; -}; - -/** - * @param {String} str - * @returns {String} - */ -Html4Entities.encode = function(str) { - return new Html4Entities().encode(str); -}; - -/** - * @param {String} str - * @returns {String} - */ -Html4Entities.prototype.encodeNonUTF = function(str) { - if (!str || !str.length) { - return ''; - } - var strLength = str.length; - var result = ''; - var i = 0; - while (i < strLength) { - var cc = str.charCodeAt(i); - var alpha = numIndex[cc]; - if (alpha) { - result += "&" + alpha + ";"; - } else if (cc < 32 || cc > 126) { - result += "&#" + cc + ";"; - } else { - result += str.charAt(i); - } - i++; - } - return result; -}; - -/** - * @param {String} str - * @returns {String} - */ -Html4Entities.encodeNonUTF = function(str) { - return new Html4Entities().encodeNonUTF(str); -}; - -/** - * @param {String} str - * @returns {String} - */ -Html4Entities.prototype.encodeNonASCII = function(str) { - if (!str || !str.length) { - return ''; - } - var strLength = str.length; - var result = ''; - var i = 0; - while (i < strLength) { - var c = str.charCodeAt(i); - if (c <= 255) { - result += str[i++]; - continue; - } - result += '&#' + c + ';'; - i++; - } - return result; -}; - -/** - * @param {String} str - * @returns {String} - */ -Html4Entities.encodeNonASCII = function(str) { - return new Html4Entities().encodeNonASCII(str); -}; - -module.exports = Html4Entities; - - -/***/ }), - -/***/ "../../../../../node_modules/html-entities/lib/html5-entities.js": -/***/ (function(module, exports) { - -var ENTITIES = [['Aacute', [193]], ['aacute', [225]], ['Abreve', [258]], ['abreve', [259]], ['ac', [8766]], ['acd', [8767]], ['acE', [8766, 819]], ['Acirc', [194]], ['acirc', [226]], ['acute', [180]], ['Acy', [1040]], ['acy', [1072]], ['AElig', [198]], ['aelig', [230]], ['af', [8289]], ['Afr', [120068]], ['afr', [120094]], ['Agrave', [192]], ['agrave', [224]], ['alefsym', [8501]], ['aleph', [8501]], ['Alpha', [913]], ['alpha', [945]], ['Amacr', [256]], ['amacr', [257]], ['amalg', [10815]], ['amp', [38]], ['AMP', [38]], ['andand', [10837]], ['And', [10835]], ['and', [8743]], ['andd', [10844]], ['andslope', [10840]], ['andv', [10842]], ['ang', [8736]], ['ange', [10660]], ['angle', [8736]], ['angmsdaa', [10664]], ['angmsdab', [10665]], ['angmsdac', [10666]], ['angmsdad', [10667]], ['angmsdae', [10668]], ['angmsdaf', [10669]], ['angmsdag', [10670]], ['angmsdah', [10671]], ['angmsd', [8737]], ['angrt', [8735]], ['angrtvb', [8894]], ['angrtvbd', [10653]], ['angsph', [8738]], ['angst', [197]], ['angzarr', [9084]], ['Aogon', [260]], ['aogon', [261]], ['Aopf', [120120]], ['aopf', [120146]], ['apacir', [10863]], ['ap', [8776]], ['apE', [10864]], ['ape', [8778]], ['apid', [8779]], ['apos', [39]], ['ApplyFunction', [8289]], ['approx', [8776]], ['approxeq', [8778]], ['Aring', [197]], ['aring', [229]], ['Ascr', [119964]], ['ascr', [119990]], ['Assign', [8788]], ['ast', [42]], ['asymp', [8776]], ['asympeq', [8781]], ['Atilde', [195]], ['atilde', [227]], ['Auml', [196]], ['auml', [228]], ['awconint', [8755]], ['awint', [10769]], ['backcong', [8780]], ['backepsilon', [1014]], ['backprime', [8245]], ['backsim', [8765]], ['backsimeq', [8909]], ['Backslash', [8726]], ['Barv', [10983]], ['barvee', [8893]], ['barwed', [8965]], ['Barwed', [8966]], ['barwedge', [8965]], ['bbrk', [9141]], ['bbrktbrk', [9142]], ['bcong', [8780]], ['Bcy', [1041]], ['bcy', [1073]], ['bdquo', [8222]], ['becaus', [8757]], ['because', [8757]], ['Because', [8757]], ['bemptyv', [10672]], ['bepsi', [1014]], ['bernou', [8492]], ['Bernoullis', [8492]], ['Beta', [914]], ['beta', [946]], ['beth', [8502]], ['between', [8812]], ['Bfr', [120069]], ['bfr', [120095]], ['bigcap', [8898]], ['bigcirc', [9711]], ['bigcup', [8899]], ['bigodot', [10752]], ['bigoplus', [10753]], ['bigotimes', [10754]], ['bigsqcup', [10758]], ['bigstar', [9733]], ['bigtriangledown', [9661]], ['bigtriangleup', [9651]], ['biguplus', [10756]], ['bigvee', [8897]], ['bigwedge', [8896]], ['bkarow', [10509]], ['blacklozenge', [10731]], ['blacksquare', [9642]], ['blacktriangle', [9652]], ['blacktriangledown', [9662]], ['blacktriangleleft', [9666]], ['blacktriangleright', [9656]], ['blank', [9251]], ['blk12', [9618]], ['blk14', [9617]], ['blk34', [9619]], ['block', [9608]], ['bne', [61, 8421]], ['bnequiv', [8801, 8421]], ['bNot', [10989]], ['bnot', [8976]], ['Bopf', [120121]], ['bopf', [120147]], ['bot', [8869]], ['bottom', [8869]], ['bowtie', [8904]], ['boxbox', [10697]], ['boxdl', [9488]], ['boxdL', [9557]], ['boxDl', [9558]], ['boxDL', [9559]], ['boxdr', [9484]], ['boxdR', [9554]], ['boxDr', [9555]], ['boxDR', [9556]], ['boxh', [9472]], ['boxH', [9552]], ['boxhd', [9516]], ['boxHd', [9572]], ['boxhD', [9573]], ['boxHD', [9574]], ['boxhu', [9524]], ['boxHu', [9575]], ['boxhU', [9576]], ['boxHU', [9577]], ['boxminus', [8863]], ['boxplus', [8862]], ['boxtimes', [8864]], ['boxul', [9496]], ['boxuL', [9563]], ['boxUl', [9564]], ['boxUL', [9565]], ['boxur', [9492]], ['boxuR', [9560]], ['boxUr', [9561]], ['boxUR', [9562]], ['boxv', [9474]], ['boxV', [9553]], ['boxvh', [9532]], ['boxvH', [9578]], ['boxVh', [9579]], ['boxVH', [9580]], ['boxvl', [9508]], ['boxvL', [9569]], ['boxVl', [9570]], ['boxVL', [9571]], ['boxvr', [9500]], ['boxvR', [9566]], ['boxVr', [9567]], ['boxVR', [9568]], ['bprime', [8245]], ['breve', [728]], ['Breve', [728]], ['brvbar', [166]], ['bscr', [119991]], ['Bscr', [8492]], ['bsemi', [8271]], ['bsim', [8765]], ['bsime', [8909]], ['bsolb', [10693]], ['bsol', [92]], ['bsolhsub', [10184]], ['bull', [8226]], ['bullet', [8226]], ['bump', [8782]], ['bumpE', [10926]], ['bumpe', [8783]], ['Bumpeq', [8782]], ['bumpeq', [8783]], ['Cacute', [262]], ['cacute', [263]], ['capand', [10820]], ['capbrcup', [10825]], ['capcap', [10827]], ['cap', [8745]], ['Cap', [8914]], ['capcup', [10823]], ['capdot', [10816]], ['CapitalDifferentialD', [8517]], ['caps', [8745, 65024]], ['caret', [8257]], ['caron', [711]], ['Cayleys', [8493]], ['ccaps', [10829]], ['Ccaron', [268]], ['ccaron', [269]], ['Ccedil', [199]], ['ccedil', [231]], ['Ccirc', [264]], ['ccirc', [265]], ['Cconint', [8752]], ['ccups', [10828]], ['ccupssm', [10832]], ['Cdot', [266]], ['cdot', [267]], ['cedil', [184]], ['Cedilla', [184]], ['cemptyv', [10674]], ['cent', [162]], ['centerdot', [183]], ['CenterDot', [183]], ['cfr', [120096]], ['Cfr', [8493]], ['CHcy', [1063]], ['chcy', [1095]], ['check', [10003]], ['checkmark', [10003]], ['Chi', [935]], ['chi', [967]], ['circ', [710]], ['circeq', [8791]], ['circlearrowleft', [8634]], ['circlearrowright', [8635]], ['circledast', [8859]], ['circledcirc', [8858]], ['circleddash', [8861]], ['CircleDot', [8857]], ['circledR', [174]], ['circledS', [9416]], ['CircleMinus', [8854]], ['CirclePlus', [8853]], ['CircleTimes', [8855]], ['cir', [9675]], ['cirE', [10691]], ['cire', [8791]], ['cirfnint', [10768]], ['cirmid', [10991]], ['cirscir', [10690]], ['ClockwiseContourIntegral', [8754]], ['clubs', [9827]], ['clubsuit', [9827]], ['colon', [58]], ['Colon', [8759]], ['Colone', [10868]], ['colone', [8788]], ['coloneq', [8788]], ['comma', [44]], ['commat', [64]], ['comp', [8705]], ['compfn', [8728]], ['complement', [8705]], ['complexes', [8450]], ['cong', [8773]], ['congdot', [10861]], ['Congruent', [8801]], ['conint', [8750]], ['Conint', [8751]], ['ContourIntegral', [8750]], ['copf', [120148]], ['Copf', [8450]], ['coprod', [8720]], ['Coproduct', [8720]], ['copy', [169]], ['COPY', [169]], ['copysr', [8471]], ['CounterClockwiseContourIntegral', [8755]], ['crarr', [8629]], ['cross', [10007]], ['Cross', [10799]], ['Cscr', [119966]], ['cscr', [119992]], ['csub', [10959]], ['csube', [10961]], ['csup', [10960]], ['csupe', [10962]], ['ctdot', [8943]], ['cudarrl', [10552]], ['cudarrr', [10549]], ['cuepr', [8926]], ['cuesc', [8927]], ['cularr', [8630]], ['cularrp', [10557]], ['cupbrcap', [10824]], ['cupcap', [10822]], ['CupCap', [8781]], ['cup', [8746]], ['Cup', [8915]], ['cupcup', [10826]], ['cupdot', [8845]], ['cupor', [10821]], ['cups', [8746, 65024]], ['curarr', [8631]], ['curarrm', [10556]], ['curlyeqprec', [8926]], ['curlyeqsucc', [8927]], ['curlyvee', [8910]], ['curlywedge', [8911]], ['curren', [164]], ['curvearrowleft', [8630]], ['curvearrowright', [8631]], ['cuvee', [8910]], ['cuwed', [8911]], ['cwconint', [8754]], ['cwint', [8753]], ['cylcty', [9005]], ['dagger', [8224]], ['Dagger', [8225]], ['daleth', [8504]], ['darr', [8595]], ['Darr', [8609]], ['dArr', [8659]], ['dash', [8208]], ['Dashv', [10980]], ['dashv', [8867]], ['dbkarow', [10511]], ['dblac', [733]], ['Dcaron', [270]], ['dcaron', [271]], ['Dcy', [1044]], ['dcy', [1076]], ['ddagger', [8225]], ['ddarr', [8650]], ['DD', [8517]], ['dd', [8518]], ['DDotrahd', [10513]], ['ddotseq', [10871]], ['deg', [176]], ['Del', [8711]], ['Delta', [916]], ['delta', [948]], ['demptyv', [10673]], ['dfisht', [10623]], ['Dfr', [120071]], ['dfr', [120097]], ['dHar', [10597]], ['dharl', [8643]], ['dharr', [8642]], ['DiacriticalAcute', [180]], ['DiacriticalDot', [729]], ['DiacriticalDoubleAcute', [733]], ['DiacriticalGrave', [96]], ['DiacriticalTilde', [732]], ['diam', [8900]], ['diamond', [8900]], ['Diamond', [8900]], ['diamondsuit', [9830]], ['diams', [9830]], ['die', [168]], ['DifferentialD', [8518]], ['digamma', [989]], ['disin', [8946]], ['div', [247]], ['divide', [247]], ['divideontimes', [8903]], ['divonx', [8903]], ['DJcy', [1026]], ['djcy', [1106]], ['dlcorn', [8990]], ['dlcrop', [8973]], ['dollar', [36]], ['Dopf', [120123]], ['dopf', [120149]], ['Dot', [168]], ['dot', [729]], ['DotDot', [8412]], ['doteq', [8784]], ['doteqdot', [8785]], ['DotEqual', [8784]], ['dotminus', [8760]], ['dotplus', [8724]], ['dotsquare', [8865]], ['doublebarwedge', [8966]], ['DoubleContourIntegral', [8751]], ['DoubleDot', [168]], ['DoubleDownArrow', [8659]], ['DoubleLeftArrow', [8656]], ['DoubleLeftRightArrow', [8660]], ['DoubleLeftTee', [10980]], ['DoubleLongLeftArrow', [10232]], ['DoubleLongLeftRightArrow', [10234]], ['DoubleLongRightArrow', [10233]], ['DoubleRightArrow', [8658]], ['DoubleRightTee', [8872]], ['DoubleUpArrow', [8657]], ['DoubleUpDownArrow', [8661]], ['DoubleVerticalBar', [8741]], ['DownArrowBar', [10515]], ['downarrow', [8595]], ['DownArrow', [8595]], ['Downarrow', [8659]], ['DownArrowUpArrow', [8693]], ['DownBreve', [785]], ['downdownarrows', [8650]], ['downharpoonleft', [8643]], ['downharpoonright', [8642]], ['DownLeftRightVector', [10576]], ['DownLeftTeeVector', [10590]], ['DownLeftVectorBar', [10582]], ['DownLeftVector', [8637]], ['DownRightTeeVector', [10591]], ['DownRightVectorBar', [10583]], ['DownRightVector', [8641]], ['DownTeeArrow', [8615]], ['DownTee', [8868]], ['drbkarow', [10512]], ['drcorn', [8991]], ['drcrop', [8972]], ['Dscr', [119967]], ['dscr', [119993]], ['DScy', [1029]], ['dscy', [1109]], ['dsol', [10742]], ['Dstrok', [272]], ['dstrok', [273]], ['dtdot', [8945]], ['dtri', [9663]], ['dtrif', [9662]], ['duarr', [8693]], ['duhar', [10607]], ['dwangle', [10662]], ['DZcy', [1039]], ['dzcy', [1119]], ['dzigrarr', [10239]], ['Eacute', [201]], ['eacute', [233]], ['easter', [10862]], ['Ecaron', [282]], ['ecaron', [283]], ['Ecirc', [202]], ['ecirc', [234]], ['ecir', [8790]], ['ecolon', [8789]], ['Ecy', [1069]], ['ecy', [1101]], ['eDDot', [10871]], ['Edot', [278]], ['edot', [279]], ['eDot', [8785]], ['ee', [8519]], ['efDot', [8786]], ['Efr', [120072]], ['efr', [120098]], ['eg', [10906]], ['Egrave', [200]], ['egrave', [232]], ['egs', [10902]], ['egsdot', [10904]], ['el', [10905]], ['Element', [8712]], ['elinters', [9191]], ['ell', [8467]], ['els', [10901]], ['elsdot', [10903]], ['Emacr', [274]], ['emacr', [275]], ['empty', [8709]], ['emptyset', [8709]], ['EmptySmallSquare', [9723]], ['emptyv', [8709]], ['EmptyVerySmallSquare', [9643]], ['emsp13', [8196]], ['emsp14', [8197]], ['emsp', [8195]], ['ENG', [330]], ['eng', [331]], ['ensp', [8194]], ['Eogon', [280]], ['eogon', [281]], ['Eopf', [120124]], ['eopf', [120150]], ['epar', [8917]], ['eparsl', [10723]], ['eplus', [10865]], ['epsi', [949]], ['Epsilon', [917]], ['epsilon', [949]], ['epsiv', [1013]], ['eqcirc', [8790]], ['eqcolon', [8789]], ['eqsim', [8770]], ['eqslantgtr', [10902]], ['eqslantless', [10901]], ['Equal', [10869]], ['equals', [61]], ['EqualTilde', [8770]], ['equest', [8799]], ['Equilibrium', [8652]], ['equiv', [8801]], ['equivDD', [10872]], ['eqvparsl', [10725]], ['erarr', [10609]], ['erDot', [8787]], ['escr', [8495]], ['Escr', [8496]], ['esdot', [8784]], ['Esim', [10867]], ['esim', [8770]], ['Eta', [919]], ['eta', [951]], ['ETH', [208]], ['eth', [240]], ['Euml', [203]], ['euml', [235]], ['euro', [8364]], ['excl', [33]], ['exist', [8707]], ['Exists', [8707]], ['expectation', [8496]], ['exponentiale', [8519]], ['ExponentialE', [8519]], ['fallingdotseq', [8786]], ['Fcy', [1060]], ['fcy', [1092]], ['female', [9792]], ['ffilig', [64259]], ['fflig', [64256]], ['ffllig', [64260]], ['Ffr', [120073]], ['ffr', [120099]], ['filig', [64257]], ['FilledSmallSquare', [9724]], ['FilledVerySmallSquare', [9642]], ['fjlig', [102, 106]], ['flat', [9837]], ['fllig', [64258]], ['fltns', [9649]], ['fnof', [402]], ['Fopf', [120125]], ['fopf', [120151]], ['forall', [8704]], ['ForAll', [8704]], ['fork', [8916]], ['forkv', [10969]], ['Fouriertrf', [8497]], ['fpartint', [10765]], ['frac12', [189]], ['frac13', [8531]], ['frac14', [188]], ['frac15', [8533]], ['frac16', [8537]], ['frac18', [8539]], ['frac23', [8532]], ['frac25', [8534]], ['frac34', [190]], ['frac35', [8535]], ['frac38', [8540]], ['frac45', [8536]], ['frac56', [8538]], ['frac58', [8541]], ['frac78', [8542]], ['frasl', [8260]], ['frown', [8994]], ['fscr', [119995]], ['Fscr', [8497]], ['gacute', [501]], ['Gamma', [915]], ['gamma', [947]], ['Gammad', [988]], ['gammad', [989]], ['gap', [10886]], ['Gbreve', [286]], ['gbreve', [287]], ['Gcedil', [290]], ['Gcirc', [284]], ['gcirc', [285]], ['Gcy', [1043]], ['gcy', [1075]], ['Gdot', [288]], ['gdot', [289]], ['ge', [8805]], ['gE', [8807]], ['gEl', [10892]], ['gel', [8923]], ['geq', [8805]], ['geqq', [8807]], ['geqslant', [10878]], ['gescc', [10921]], ['ges', [10878]], ['gesdot', [10880]], ['gesdoto', [10882]], ['gesdotol', [10884]], ['gesl', [8923, 65024]], ['gesles', [10900]], ['Gfr', [120074]], ['gfr', [120100]], ['gg', [8811]], ['Gg', [8921]], ['ggg', [8921]], ['gimel', [8503]], ['GJcy', [1027]], ['gjcy', [1107]], ['gla', [10917]], ['gl', [8823]], ['glE', [10898]], ['glj', [10916]], ['gnap', [10890]], ['gnapprox', [10890]], ['gne', [10888]], ['gnE', [8809]], ['gneq', [10888]], ['gneqq', [8809]], ['gnsim', [8935]], ['Gopf', [120126]], ['gopf', [120152]], ['grave', [96]], ['GreaterEqual', [8805]], ['GreaterEqualLess', [8923]], ['GreaterFullEqual', [8807]], ['GreaterGreater', [10914]], ['GreaterLess', [8823]], ['GreaterSlantEqual', [10878]], ['GreaterTilde', [8819]], ['Gscr', [119970]], ['gscr', [8458]], ['gsim', [8819]], ['gsime', [10894]], ['gsiml', [10896]], ['gtcc', [10919]], ['gtcir', [10874]], ['gt', [62]], ['GT', [62]], ['Gt', [8811]], ['gtdot', [8919]], ['gtlPar', [10645]], ['gtquest', [10876]], ['gtrapprox', [10886]], ['gtrarr', [10616]], ['gtrdot', [8919]], ['gtreqless', [8923]], ['gtreqqless', [10892]], ['gtrless', [8823]], ['gtrsim', [8819]], ['gvertneqq', [8809, 65024]], ['gvnE', [8809, 65024]], ['Hacek', [711]], ['hairsp', [8202]], ['half', [189]], ['hamilt', [8459]], ['HARDcy', [1066]], ['hardcy', [1098]], ['harrcir', [10568]], ['harr', [8596]], ['hArr', [8660]], ['harrw', [8621]], ['Hat', [94]], ['hbar', [8463]], ['Hcirc', [292]], ['hcirc', [293]], ['hearts', [9829]], ['heartsuit', [9829]], ['hellip', [8230]], ['hercon', [8889]], ['hfr', [120101]], ['Hfr', [8460]], ['HilbertSpace', [8459]], ['hksearow', [10533]], ['hkswarow', [10534]], ['hoarr', [8703]], ['homtht', [8763]], ['hookleftarrow', [8617]], ['hookrightarrow', [8618]], ['hopf', [120153]], ['Hopf', [8461]], ['horbar', [8213]], ['HorizontalLine', [9472]], ['hscr', [119997]], ['Hscr', [8459]], ['hslash', [8463]], ['Hstrok', [294]], ['hstrok', [295]], ['HumpDownHump', [8782]], ['HumpEqual', [8783]], ['hybull', [8259]], ['hyphen', [8208]], ['Iacute', [205]], ['iacute', [237]], ['ic', [8291]], ['Icirc', [206]], ['icirc', [238]], ['Icy', [1048]], ['icy', [1080]], ['Idot', [304]], ['IEcy', [1045]], ['iecy', [1077]], ['iexcl', [161]], ['iff', [8660]], ['ifr', [120102]], ['Ifr', [8465]], ['Igrave', [204]], ['igrave', [236]], ['ii', [8520]], ['iiiint', [10764]], ['iiint', [8749]], ['iinfin', [10716]], ['iiota', [8489]], ['IJlig', [306]], ['ijlig', [307]], ['Imacr', [298]], ['imacr', [299]], ['image', [8465]], ['ImaginaryI', [8520]], ['imagline', [8464]], ['imagpart', [8465]], ['imath', [305]], ['Im', [8465]], ['imof', [8887]], ['imped', [437]], ['Implies', [8658]], ['incare', [8453]], ['in', [8712]], ['infin', [8734]], ['infintie', [10717]], ['inodot', [305]], ['intcal', [8890]], ['int', [8747]], ['Int', [8748]], ['integers', [8484]], ['Integral', [8747]], ['intercal', [8890]], ['Intersection', [8898]], ['intlarhk', [10775]], ['intprod', [10812]], ['InvisibleComma', [8291]], ['InvisibleTimes', [8290]], ['IOcy', [1025]], ['iocy', [1105]], ['Iogon', [302]], ['iogon', [303]], ['Iopf', [120128]], ['iopf', [120154]], ['Iota', [921]], ['iota', [953]], ['iprod', [10812]], ['iquest', [191]], ['iscr', [119998]], ['Iscr', [8464]], ['isin', [8712]], ['isindot', [8949]], ['isinE', [8953]], ['isins', [8948]], ['isinsv', [8947]], ['isinv', [8712]], ['it', [8290]], ['Itilde', [296]], ['itilde', [297]], ['Iukcy', [1030]], ['iukcy', [1110]], ['Iuml', [207]], ['iuml', [239]], ['Jcirc', [308]], ['jcirc', [309]], ['Jcy', [1049]], ['jcy', [1081]], ['Jfr', [120077]], ['jfr', [120103]], ['jmath', [567]], ['Jopf', [120129]], ['jopf', [120155]], ['Jscr', [119973]], ['jscr', [119999]], ['Jsercy', [1032]], ['jsercy', [1112]], ['Jukcy', [1028]], ['jukcy', [1108]], ['Kappa', [922]], ['kappa', [954]], ['kappav', [1008]], ['Kcedil', [310]], ['kcedil', [311]], ['Kcy', [1050]], ['kcy', [1082]], ['Kfr', [120078]], ['kfr', [120104]], ['kgreen', [312]], ['KHcy', [1061]], ['khcy', [1093]], ['KJcy', [1036]], ['kjcy', [1116]], ['Kopf', [120130]], ['kopf', [120156]], ['Kscr', [119974]], ['kscr', [120000]], ['lAarr', [8666]], ['Lacute', [313]], ['lacute', [314]], ['laemptyv', [10676]], ['lagran', [8466]], ['Lambda', [923]], ['lambda', [955]], ['lang', [10216]], ['Lang', [10218]], ['langd', [10641]], ['langle', [10216]], ['lap', [10885]], ['Laplacetrf', [8466]], ['laquo', [171]], ['larrb', [8676]], ['larrbfs', [10527]], ['larr', [8592]], ['Larr', [8606]], ['lArr', [8656]], ['larrfs', [10525]], ['larrhk', [8617]], ['larrlp', [8619]], ['larrpl', [10553]], ['larrsim', [10611]], ['larrtl', [8610]], ['latail', [10521]], ['lAtail', [10523]], ['lat', [10923]], ['late', [10925]], ['lates', [10925, 65024]], ['lbarr', [10508]], ['lBarr', [10510]], ['lbbrk', [10098]], ['lbrace', [123]], ['lbrack', [91]], ['lbrke', [10635]], ['lbrksld', [10639]], ['lbrkslu', [10637]], ['Lcaron', [317]], ['lcaron', [318]], ['Lcedil', [315]], ['lcedil', [316]], ['lceil', [8968]], ['lcub', [123]], ['Lcy', [1051]], ['lcy', [1083]], ['ldca', [10550]], ['ldquo', [8220]], ['ldquor', [8222]], ['ldrdhar', [10599]], ['ldrushar', [10571]], ['ldsh', [8626]], ['le', [8804]], ['lE', [8806]], ['LeftAngleBracket', [10216]], ['LeftArrowBar', [8676]], ['leftarrow', [8592]], ['LeftArrow', [8592]], ['Leftarrow', [8656]], ['LeftArrowRightArrow', [8646]], ['leftarrowtail', [8610]], ['LeftCeiling', [8968]], ['LeftDoubleBracket', [10214]], ['LeftDownTeeVector', [10593]], ['LeftDownVectorBar', [10585]], ['LeftDownVector', [8643]], ['LeftFloor', [8970]], ['leftharpoondown', [8637]], ['leftharpoonup', [8636]], ['leftleftarrows', [8647]], ['leftrightarrow', [8596]], ['LeftRightArrow', [8596]], ['Leftrightarrow', [8660]], ['leftrightarrows', [8646]], ['leftrightharpoons', [8651]], ['leftrightsquigarrow', [8621]], ['LeftRightVector', [10574]], ['LeftTeeArrow', [8612]], ['LeftTee', [8867]], ['LeftTeeVector', [10586]], ['leftthreetimes', [8907]], ['LeftTriangleBar', [10703]], ['LeftTriangle', [8882]], ['LeftTriangleEqual', [8884]], ['LeftUpDownVector', [10577]], ['LeftUpTeeVector', [10592]], ['LeftUpVectorBar', [10584]], ['LeftUpVector', [8639]], ['LeftVectorBar', [10578]], ['LeftVector', [8636]], ['lEg', [10891]], ['leg', [8922]], ['leq', [8804]], ['leqq', [8806]], ['leqslant', [10877]], ['lescc', [10920]], ['les', [10877]], ['lesdot', [10879]], ['lesdoto', [10881]], ['lesdotor', [10883]], ['lesg', [8922, 65024]], ['lesges', [10899]], ['lessapprox', [10885]], ['lessdot', [8918]], ['lesseqgtr', [8922]], ['lesseqqgtr', [10891]], ['LessEqualGreater', [8922]], ['LessFullEqual', [8806]], ['LessGreater', [8822]], ['lessgtr', [8822]], ['LessLess', [10913]], ['lesssim', [8818]], ['LessSlantEqual', [10877]], ['LessTilde', [8818]], ['lfisht', [10620]], ['lfloor', [8970]], ['Lfr', [120079]], ['lfr', [120105]], ['lg', [8822]], ['lgE', [10897]], ['lHar', [10594]], ['lhard', [8637]], ['lharu', [8636]], ['lharul', [10602]], ['lhblk', [9604]], ['LJcy', [1033]], ['ljcy', [1113]], ['llarr', [8647]], ['ll', [8810]], ['Ll', [8920]], ['llcorner', [8990]], ['Lleftarrow', [8666]], ['llhard', [10603]], ['lltri', [9722]], ['Lmidot', [319]], ['lmidot', [320]], ['lmoustache', [9136]], ['lmoust', [9136]], ['lnap', [10889]], ['lnapprox', [10889]], ['lne', [10887]], ['lnE', [8808]], ['lneq', [10887]], ['lneqq', [8808]], ['lnsim', [8934]], ['loang', [10220]], ['loarr', [8701]], ['lobrk', [10214]], ['longleftarrow', [10229]], ['LongLeftArrow', [10229]], ['Longleftarrow', [10232]], ['longleftrightarrow', [10231]], ['LongLeftRightArrow', [10231]], ['Longleftrightarrow', [10234]], ['longmapsto', [10236]], ['longrightarrow', [10230]], ['LongRightArrow', [10230]], ['Longrightarrow', [10233]], ['looparrowleft', [8619]], ['looparrowright', [8620]], ['lopar', [10629]], ['Lopf', [120131]], ['lopf', [120157]], ['loplus', [10797]], ['lotimes', [10804]], ['lowast', [8727]], ['lowbar', [95]], ['LowerLeftArrow', [8601]], ['LowerRightArrow', [8600]], ['loz', [9674]], ['lozenge', [9674]], ['lozf', [10731]], ['lpar', [40]], ['lparlt', [10643]], ['lrarr', [8646]], ['lrcorner', [8991]], ['lrhar', [8651]], ['lrhard', [10605]], ['lrm', [8206]], ['lrtri', [8895]], ['lsaquo', [8249]], ['lscr', [120001]], ['Lscr', [8466]], ['lsh', [8624]], ['Lsh', [8624]], ['lsim', [8818]], ['lsime', [10893]], ['lsimg', [10895]], ['lsqb', [91]], ['lsquo', [8216]], ['lsquor', [8218]], ['Lstrok', [321]], ['lstrok', [322]], ['ltcc', [10918]], ['ltcir', [10873]], ['lt', [60]], ['LT', [60]], ['Lt', [8810]], ['ltdot', [8918]], ['lthree', [8907]], ['ltimes', [8905]], ['ltlarr', [10614]], ['ltquest', [10875]], ['ltri', [9667]], ['ltrie', [8884]], ['ltrif', [9666]], ['ltrPar', [10646]], ['lurdshar', [10570]], ['luruhar', [10598]], ['lvertneqq', [8808, 65024]], ['lvnE', [8808, 65024]], ['macr', [175]], ['male', [9794]], ['malt', [10016]], ['maltese', [10016]], ['Map', [10501]], ['map', [8614]], ['mapsto', [8614]], ['mapstodown', [8615]], ['mapstoleft', [8612]], ['mapstoup', [8613]], ['marker', [9646]], ['mcomma', [10793]], ['Mcy', [1052]], ['mcy', [1084]], ['mdash', [8212]], ['mDDot', [8762]], ['measuredangle', [8737]], ['MediumSpace', [8287]], ['Mellintrf', [8499]], ['Mfr', [120080]], ['mfr', [120106]], ['mho', [8487]], ['micro', [181]], ['midast', [42]], ['midcir', [10992]], ['mid', [8739]], ['middot', [183]], ['minusb', [8863]], ['minus', [8722]], ['minusd', [8760]], ['minusdu', [10794]], ['MinusPlus', [8723]], ['mlcp', [10971]], ['mldr', [8230]], ['mnplus', [8723]], ['models', [8871]], ['Mopf', [120132]], ['mopf', [120158]], ['mp', [8723]], ['mscr', [120002]], ['Mscr', [8499]], ['mstpos', [8766]], ['Mu', [924]], ['mu', [956]], ['multimap', [8888]], ['mumap', [8888]], ['nabla', [8711]], ['Nacute', [323]], ['nacute', [324]], ['nang', [8736, 8402]], ['nap', [8777]], ['napE', [10864, 824]], ['napid', [8779, 824]], ['napos', [329]], ['napprox', [8777]], ['natural', [9838]], ['naturals', [8469]], ['natur', [9838]], ['nbsp', [160]], ['nbump', [8782, 824]], ['nbumpe', [8783, 824]], ['ncap', [10819]], ['Ncaron', [327]], ['ncaron', [328]], ['Ncedil', [325]], ['ncedil', [326]], ['ncong', [8775]], ['ncongdot', [10861, 824]], ['ncup', [10818]], ['Ncy', [1053]], ['ncy', [1085]], ['ndash', [8211]], ['nearhk', [10532]], ['nearr', [8599]], ['neArr', [8663]], ['nearrow', [8599]], ['ne', [8800]], ['nedot', [8784, 824]], ['NegativeMediumSpace', [8203]], ['NegativeThickSpace', [8203]], ['NegativeThinSpace', [8203]], ['NegativeVeryThinSpace', [8203]], ['nequiv', [8802]], ['nesear', [10536]], ['nesim', [8770, 824]], ['NestedGreaterGreater', [8811]], ['NestedLessLess', [8810]], ['nexist', [8708]], ['nexists', [8708]], ['Nfr', [120081]], ['nfr', [120107]], ['ngE', [8807, 824]], ['nge', [8817]], ['ngeq', [8817]], ['ngeqq', [8807, 824]], ['ngeqslant', [10878, 824]], ['nges', [10878, 824]], ['nGg', [8921, 824]], ['ngsim', [8821]], ['nGt', [8811, 8402]], ['ngt', [8815]], ['ngtr', [8815]], ['nGtv', [8811, 824]], ['nharr', [8622]], ['nhArr', [8654]], ['nhpar', [10994]], ['ni', [8715]], ['nis', [8956]], ['nisd', [8954]], ['niv', [8715]], ['NJcy', [1034]], ['njcy', [1114]], ['nlarr', [8602]], ['nlArr', [8653]], ['nldr', [8229]], ['nlE', [8806, 824]], ['nle', [8816]], ['nleftarrow', [8602]], ['nLeftarrow', [8653]], ['nleftrightarrow', [8622]], ['nLeftrightarrow', [8654]], ['nleq', [8816]], ['nleqq', [8806, 824]], ['nleqslant', [10877, 824]], ['nles', [10877, 824]], ['nless', [8814]], ['nLl', [8920, 824]], ['nlsim', [8820]], ['nLt', [8810, 8402]], ['nlt', [8814]], ['nltri', [8938]], ['nltrie', [8940]], ['nLtv', [8810, 824]], ['nmid', [8740]], ['NoBreak', [8288]], ['NonBreakingSpace', [160]], ['nopf', [120159]], ['Nopf', [8469]], ['Not', [10988]], ['not', [172]], ['NotCongruent', [8802]], ['NotCupCap', [8813]], ['NotDoubleVerticalBar', [8742]], ['NotElement', [8713]], ['NotEqual', [8800]], ['NotEqualTilde', [8770, 824]], ['NotExists', [8708]], ['NotGreater', [8815]], ['NotGreaterEqual', [8817]], ['NotGreaterFullEqual', [8807, 824]], ['NotGreaterGreater', [8811, 824]], ['NotGreaterLess', [8825]], ['NotGreaterSlantEqual', [10878, 824]], ['NotGreaterTilde', [8821]], ['NotHumpDownHump', [8782, 824]], ['NotHumpEqual', [8783, 824]], ['notin', [8713]], ['notindot', [8949, 824]], ['notinE', [8953, 824]], ['notinva', [8713]], ['notinvb', [8951]], ['notinvc', [8950]], ['NotLeftTriangleBar', [10703, 824]], ['NotLeftTriangle', [8938]], ['NotLeftTriangleEqual', [8940]], ['NotLess', [8814]], ['NotLessEqual', [8816]], ['NotLessGreater', [8824]], ['NotLessLess', [8810, 824]], ['NotLessSlantEqual', [10877, 824]], ['NotLessTilde', [8820]], ['NotNestedGreaterGreater', [10914, 824]], ['NotNestedLessLess', [10913, 824]], ['notni', [8716]], ['notniva', [8716]], ['notnivb', [8958]], ['notnivc', [8957]], ['NotPrecedes', [8832]], ['NotPrecedesEqual', [10927, 824]], ['NotPrecedesSlantEqual', [8928]], ['NotReverseElement', [8716]], ['NotRightTriangleBar', [10704, 824]], ['NotRightTriangle', [8939]], ['NotRightTriangleEqual', [8941]], ['NotSquareSubset', [8847, 824]], ['NotSquareSubsetEqual', [8930]], ['NotSquareSuperset', [8848, 824]], ['NotSquareSupersetEqual', [8931]], ['NotSubset', [8834, 8402]], ['NotSubsetEqual', [8840]], ['NotSucceeds', [8833]], ['NotSucceedsEqual', [10928, 824]], ['NotSucceedsSlantEqual', [8929]], ['NotSucceedsTilde', [8831, 824]], ['NotSuperset', [8835, 8402]], ['NotSupersetEqual', [8841]], ['NotTilde', [8769]], ['NotTildeEqual', [8772]], ['NotTildeFullEqual', [8775]], ['NotTildeTilde', [8777]], ['NotVerticalBar', [8740]], ['nparallel', [8742]], ['npar', [8742]], ['nparsl', [11005, 8421]], ['npart', [8706, 824]], ['npolint', [10772]], ['npr', [8832]], ['nprcue', [8928]], ['nprec', [8832]], ['npreceq', [10927, 824]], ['npre', [10927, 824]], ['nrarrc', [10547, 824]], ['nrarr', [8603]], ['nrArr', [8655]], ['nrarrw', [8605, 824]], ['nrightarrow', [8603]], ['nRightarrow', [8655]], ['nrtri', [8939]], ['nrtrie', [8941]], ['nsc', [8833]], ['nsccue', [8929]], ['nsce', [10928, 824]], ['Nscr', [119977]], ['nscr', [120003]], ['nshortmid', [8740]], ['nshortparallel', [8742]], ['nsim', [8769]], ['nsime', [8772]], ['nsimeq', [8772]], ['nsmid', [8740]], ['nspar', [8742]], ['nsqsube', [8930]], ['nsqsupe', [8931]], ['nsub', [8836]], ['nsubE', [10949, 824]], ['nsube', [8840]], ['nsubset', [8834, 8402]], ['nsubseteq', [8840]], ['nsubseteqq', [10949, 824]], ['nsucc', [8833]], ['nsucceq', [10928, 824]], ['nsup', [8837]], ['nsupE', [10950, 824]], ['nsupe', [8841]], ['nsupset', [8835, 8402]], ['nsupseteq', [8841]], ['nsupseteqq', [10950, 824]], ['ntgl', [8825]], ['Ntilde', [209]], ['ntilde', [241]], ['ntlg', [8824]], ['ntriangleleft', [8938]], ['ntrianglelefteq', [8940]], ['ntriangleright', [8939]], ['ntrianglerighteq', [8941]], ['Nu', [925]], ['nu', [957]], ['num', [35]], ['numero', [8470]], ['numsp', [8199]], ['nvap', [8781, 8402]], ['nvdash', [8876]], ['nvDash', [8877]], ['nVdash', [8878]], ['nVDash', [8879]], ['nvge', [8805, 8402]], ['nvgt', [62, 8402]], ['nvHarr', [10500]], ['nvinfin', [10718]], ['nvlArr', [10498]], ['nvle', [8804, 8402]], ['nvlt', [60, 8402]], ['nvltrie', [8884, 8402]], ['nvrArr', [10499]], ['nvrtrie', [8885, 8402]], ['nvsim', [8764, 8402]], ['nwarhk', [10531]], ['nwarr', [8598]], ['nwArr', [8662]], ['nwarrow', [8598]], ['nwnear', [10535]], ['Oacute', [211]], ['oacute', [243]], ['oast', [8859]], ['Ocirc', [212]], ['ocirc', [244]], ['ocir', [8858]], ['Ocy', [1054]], ['ocy', [1086]], ['odash', [8861]], ['Odblac', [336]], ['odblac', [337]], ['odiv', [10808]], ['odot', [8857]], ['odsold', [10684]], ['OElig', [338]], ['oelig', [339]], ['ofcir', [10687]], ['Ofr', [120082]], ['ofr', [120108]], ['ogon', [731]], ['Ograve', [210]], ['ograve', [242]], ['ogt', [10689]], ['ohbar', [10677]], ['ohm', [937]], ['oint', [8750]], ['olarr', [8634]], ['olcir', [10686]], ['olcross', [10683]], ['oline', [8254]], ['olt', [10688]], ['Omacr', [332]], ['omacr', [333]], ['Omega', [937]], ['omega', [969]], ['Omicron', [927]], ['omicron', [959]], ['omid', [10678]], ['ominus', [8854]], ['Oopf', [120134]], ['oopf', [120160]], ['opar', [10679]], ['OpenCurlyDoubleQuote', [8220]], ['OpenCurlyQuote', [8216]], ['operp', [10681]], ['oplus', [8853]], ['orarr', [8635]], ['Or', [10836]], ['or', [8744]], ['ord', [10845]], ['order', [8500]], ['orderof', [8500]], ['ordf', [170]], ['ordm', [186]], ['origof', [8886]], ['oror', [10838]], ['orslope', [10839]], ['orv', [10843]], ['oS', [9416]], ['Oscr', [119978]], ['oscr', [8500]], ['Oslash', [216]], ['oslash', [248]], ['osol', [8856]], ['Otilde', [213]], ['otilde', [245]], ['otimesas', [10806]], ['Otimes', [10807]], ['otimes', [8855]], ['Ouml', [214]], ['ouml', [246]], ['ovbar', [9021]], ['OverBar', [8254]], ['OverBrace', [9182]], ['OverBracket', [9140]], ['OverParenthesis', [9180]], ['para', [182]], ['parallel', [8741]], ['par', [8741]], ['parsim', [10995]], ['parsl', [11005]], ['part', [8706]], ['PartialD', [8706]], ['Pcy', [1055]], ['pcy', [1087]], ['percnt', [37]], ['period', [46]], ['permil', [8240]], ['perp', [8869]], ['pertenk', [8241]], ['Pfr', [120083]], ['pfr', [120109]], ['Phi', [934]], ['phi', [966]], ['phiv', [981]], ['phmmat', [8499]], ['phone', [9742]], ['Pi', [928]], ['pi', [960]], ['pitchfork', [8916]], ['piv', [982]], ['planck', [8463]], ['planckh', [8462]], ['plankv', [8463]], ['plusacir', [10787]], ['plusb', [8862]], ['pluscir', [10786]], ['plus', [43]], ['plusdo', [8724]], ['plusdu', [10789]], ['pluse', [10866]], ['PlusMinus', [177]], ['plusmn', [177]], ['plussim', [10790]], ['plustwo', [10791]], ['pm', [177]], ['Poincareplane', [8460]], ['pointint', [10773]], ['popf', [120161]], ['Popf', [8473]], ['pound', [163]], ['prap', [10935]], ['Pr', [10939]], ['pr', [8826]], ['prcue', [8828]], ['precapprox', [10935]], ['prec', [8826]], ['preccurlyeq', [8828]], ['Precedes', [8826]], ['PrecedesEqual', [10927]], ['PrecedesSlantEqual', [8828]], ['PrecedesTilde', [8830]], ['preceq', [10927]], ['precnapprox', [10937]], ['precneqq', [10933]], ['precnsim', [8936]], ['pre', [10927]], ['prE', [10931]], ['precsim', [8830]], ['prime', [8242]], ['Prime', [8243]], ['primes', [8473]], ['prnap', [10937]], ['prnE', [10933]], ['prnsim', [8936]], ['prod', [8719]], ['Product', [8719]], ['profalar', [9006]], ['profline', [8978]], ['profsurf', [8979]], ['prop', [8733]], ['Proportional', [8733]], ['Proportion', [8759]], ['propto', [8733]], ['prsim', [8830]], ['prurel', [8880]], ['Pscr', [119979]], ['pscr', [120005]], ['Psi', [936]], ['psi', [968]], ['puncsp', [8200]], ['Qfr', [120084]], ['qfr', [120110]], ['qint', [10764]], ['qopf', [120162]], ['Qopf', [8474]], ['qprime', [8279]], ['Qscr', [119980]], ['qscr', [120006]], ['quaternions', [8461]], ['quatint', [10774]], ['quest', [63]], ['questeq', [8799]], ['quot', [34]], ['QUOT', [34]], ['rAarr', [8667]], ['race', [8765, 817]], ['Racute', [340]], ['racute', [341]], ['radic', [8730]], ['raemptyv', [10675]], ['rang', [10217]], ['Rang', [10219]], ['rangd', [10642]], ['range', [10661]], ['rangle', [10217]], ['raquo', [187]], ['rarrap', [10613]], ['rarrb', [8677]], ['rarrbfs', [10528]], ['rarrc', [10547]], ['rarr', [8594]], ['Rarr', [8608]], ['rArr', [8658]], ['rarrfs', [10526]], ['rarrhk', [8618]], ['rarrlp', [8620]], ['rarrpl', [10565]], ['rarrsim', [10612]], ['Rarrtl', [10518]], ['rarrtl', [8611]], ['rarrw', [8605]], ['ratail', [10522]], ['rAtail', [10524]], ['ratio', [8758]], ['rationals', [8474]], ['rbarr', [10509]], ['rBarr', [10511]], ['RBarr', [10512]], ['rbbrk', [10099]], ['rbrace', [125]], ['rbrack', [93]], ['rbrke', [10636]], ['rbrksld', [10638]], ['rbrkslu', [10640]], ['Rcaron', [344]], ['rcaron', [345]], ['Rcedil', [342]], ['rcedil', [343]], ['rceil', [8969]], ['rcub', [125]], ['Rcy', [1056]], ['rcy', [1088]], ['rdca', [10551]], ['rdldhar', [10601]], ['rdquo', [8221]], ['rdquor', [8221]], ['CloseCurlyDoubleQuote', [8221]], ['rdsh', [8627]], ['real', [8476]], ['realine', [8475]], ['realpart', [8476]], ['reals', [8477]], ['Re', [8476]], ['rect', [9645]], ['reg', [174]], ['REG', [174]], ['ReverseElement', [8715]], ['ReverseEquilibrium', [8651]], ['ReverseUpEquilibrium', [10607]], ['rfisht', [10621]], ['rfloor', [8971]], ['rfr', [120111]], ['Rfr', [8476]], ['rHar', [10596]], ['rhard', [8641]], ['rharu', [8640]], ['rharul', [10604]], ['Rho', [929]], ['rho', [961]], ['rhov', [1009]], ['RightAngleBracket', [10217]], ['RightArrowBar', [8677]], ['rightarrow', [8594]], ['RightArrow', [8594]], ['Rightarrow', [8658]], ['RightArrowLeftArrow', [8644]], ['rightarrowtail', [8611]], ['RightCeiling', [8969]], ['RightDoubleBracket', [10215]], ['RightDownTeeVector', [10589]], ['RightDownVectorBar', [10581]], ['RightDownVector', [8642]], ['RightFloor', [8971]], ['rightharpoondown', [8641]], ['rightharpoonup', [8640]], ['rightleftarrows', [8644]], ['rightleftharpoons', [8652]], ['rightrightarrows', [8649]], ['rightsquigarrow', [8605]], ['RightTeeArrow', [8614]], ['RightTee', [8866]], ['RightTeeVector', [10587]], ['rightthreetimes', [8908]], ['RightTriangleBar', [10704]], ['RightTriangle', [8883]], ['RightTriangleEqual', [8885]], ['RightUpDownVector', [10575]], ['RightUpTeeVector', [10588]], ['RightUpVectorBar', [10580]], ['RightUpVector', [8638]], ['RightVectorBar', [10579]], ['RightVector', [8640]], ['ring', [730]], ['risingdotseq', [8787]], ['rlarr', [8644]], ['rlhar', [8652]], ['rlm', [8207]], ['rmoustache', [9137]], ['rmoust', [9137]], ['rnmid', [10990]], ['roang', [10221]], ['roarr', [8702]], ['robrk', [10215]], ['ropar', [10630]], ['ropf', [120163]], ['Ropf', [8477]], ['roplus', [10798]], ['rotimes', [10805]], ['RoundImplies', [10608]], ['rpar', [41]], ['rpargt', [10644]], ['rppolint', [10770]], ['rrarr', [8649]], ['Rrightarrow', [8667]], ['rsaquo', [8250]], ['rscr', [120007]], ['Rscr', [8475]], ['rsh', [8625]], ['Rsh', [8625]], ['rsqb', [93]], ['rsquo', [8217]], ['rsquor', [8217]], ['CloseCurlyQuote', [8217]], ['rthree', [8908]], ['rtimes', [8906]], ['rtri', [9657]], ['rtrie', [8885]], ['rtrif', [9656]], ['rtriltri', [10702]], ['RuleDelayed', [10740]], ['ruluhar', [10600]], ['rx', [8478]], ['Sacute', [346]], ['sacute', [347]], ['sbquo', [8218]], ['scap', [10936]], ['Scaron', [352]], ['scaron', [353]], ['Sc', [10940]], ['sc', [8827]], ['sccue', [8829]], ['sce', [10928]], ['scE', [10932]], ['Scedil', [350]], ['scedil', [351]], ['Scirc', [348]], ['scirc', [349]], ['scnap', [10938]], ['scnE', [10934]], ['scnsim', [8937]], ['scpolint', [10771]], ['scsim', [8831]], ['Scy', [1057]], ['scy', [1089]], ['sdotb', [8865]], ['sdot', [8901]], ['sdote', [10854]], ['searhk', [10533]], ['searr', [8600]], ['seArr', [8664]], ['searrow', [8600]], ['sect', [167]], ['semi', [59]], ['seswar', [10537]], ['setminus', [8726]], ['setmn', [8726]], ['sext', [10038]], ['Sfr', [120086]], ['sfr', [120112]], ['sfrown', [8994]], ['sharp', [9839]], ['SHCHcy', [1065]], ['shchcy', [1097]], ['SHcy', [1064]], ['shcy', [1096]], ['ShortDownArrow', [8595]], ['ShortLeftArrow', [8592]], ['shortmid', [8739]], ['shortparallel', [8741]], ['ShortRightArrow', [8594]], ['ShortUpArrow', [8593]], ['shy', [173]], ['Sigma', [931]], ['sigma', [963]], ['sigmaf', [962]], ['sigmav', [962]], ['sim', [8764]], ['simdot', [10858]], ['sime', [8771]], ['simeq', [8771]], ['simg', [10910]], ['simgE', [10912]], ['siml', [10909]], ['simlE', [10911]], ['simne', [8774]], ['simplus', [10788]], ['simrarr', [10610]], ['slarr', [8592]], ['SmallCircle', [8728]], ['smallsetminus', [8726]], ['smashp', [10803]], ['smeparsl', [10724]], ['smid', [8739]], ['smile', [8995]], ['smt', [10922]], ['smte', [10924]], ['smtes', [10924, 65024]], ['SOFTcy', [1068]], ['softcy', [1100]], ['solbar', [9023]], ['solb', [10692]], ['sol', [47]], ['Sopf', [120138]], ['sopf', [120164]], ['spades', [9824]], ['spadesuit', [9824]], ['spar', [8741]], ['sqcap', [8851]], ['sqcaps', [8851, 65024]], ['sqcup', [8852]], ['sqcups', [8852, 65024]], ['Sqrt', [8730]], ['sqsub', [8847]], ['sqsube', [8849]], ['sqsubset', [8847]], ['sqsubseteq', [8849]], ['sqsup', [8848]], ['sqsupe', [8850]], ['sqsupset', [8848]], ['sqsupseteq', [8850]], ['square', [9633]], ['Square', [9633]], ['SquareIntersection', [8851]], ['SquareSubset', [8847]], ['SquareSubsetEqual', [8849]], ['SquareSuperset', [8848]], ['SquareSupersetEqual', [8850]], ['SquareUnion', [8852]], ['squarf', [9642]], ['squ', [9633]], ['squf', [9642]], ['srarr', [8594]], ['Sscr', [119982]], ['sscr', [120008]], ['ssetmn', [8726]], ['ssmile', [8995]], ['sstarf', [8902]], ['Star', [8902]], ['star', [9734]], ['starf', [9733]], ['straightepsilon', [1013]], ['straightphi', [981]], ['strns', [175]], ['sub', [8834]], ['Sub', [8912]], ['subdot', [10941]], ['subE', [10949]], ['sube', [8838]], ['subedot', [10947]], ['submult', [10945]], ['subnE', [10955]], ['subne', [8842]], ['subplus', [10943]], ['subrarr', [10617]], ['subset', [8834]], ['Subset', [8912]], ['subseteq', [8838]], ['subseteqq', [10949]], ['SubsetEqual', [8838]], ['subsetneq', [8842]], ['subsetneqq', [10955]], ['subsim', [10951]], ['subsub', [10965]], ['subsup', [10963]], ['succapprox', [10936]], ['succ', [8827]], ['succcurlyeq', [8829]], ['Succeeds', [8827]], ['SucceedsEqual', [10928]], ['SucceedsSlantEqual', [8829]], ['SucceedsTilde', [8831]], ['succeq', [10928]], ['succnapprox', [10938]], ['succneqq', [10934]], ['succnsim', [8937]], ['succsim', [8831]], ['SuchThat', [8715]], ['sum', [8721]], ['Sum', [8721]], ['sung', [9834]], ['sup1', [185]], ['sup2', [178]], ['sup3', [179]], ['sup', [8835]], ['Sup', [8913]], ['supdot', [10942]], ['supdsub', [10968]], ['supE', [10950]], ['supe', [8839]], ['supedot', [10948]], ['Superset', [8835]], ['SupersetEqual', [8839]], ['suphsol', [10185]], ['suphsub', [10967]], ['suplarr', [10619]], ['supmult', [10946]], ['supnE', [10956]], ['supne', [8843]], ['supplus', [10944]], ['supset', [8835]], ['Supset', [8913]], ['supseteq', [8839]], ['supseteqq', [10950]], ['supsetneq', [8843]], ['supsetneqq', [10956]], ['supsim', [10952]], ['supsub', [10964]], ['supsup', [10966]], ['swarhk', [10534]], ['swarr', [8601]], ['swArr', [8665]], ['swarrow', [8601]], ['swnwar', [10538]], ['szlig', [223]], ['Tab', [9]], ['target', [8982]], ['Tau', [932]], ['tau', [964]], ['tbrk', [9140]], ['Tcaron', [356]], ['tcaron', [357]], ['Tcedil', [354]], ['tcedil', [355]], ['Tcy', [1058]], ['tcy', [1090]], ['tdot', [8411]], ['telrec', [8981]], ['Tfr', [120087]], ['tfr', [120113]], ['there4', [8756]], ['therefore', [8756]], ['Therefore', [8756]], ['Theta', [920]], ['theta', [952]], ['thetasym', [977]], ['thetav', [977]], ['thickapprox', [8776]], ['thicksim', [8764]], ['ThickSpace', [8287, 8202]], ['ThinSpace', [8201]], ['thinsp', [8201]], ['thkap', [8776]], ['thksim', [8764]], ['THORN', [222]], ['thorn', [254]], ['tilde', [732]], ['Tilde', [8764]], ['TildeEqual', [8771]], ['TildeFullEqual', [8773]], ['TildeTilde', [8776]], ['timesbar', [10801]], ['timesb', [8864]], ['times', [215]], ['timesd', [10800]], ['tint', [8749]], ['toea', [10536]], ['topbot', [9014]], ['topcir', [10993]], ['top', [8868]], ['Topf', [120139]], ['topf', [120165]], ['topfork', [10970]], ['tosa', [10537]], ['tprime', [8244]], ['trade', [8482]], ['TRADE', [8482]], ['triangle', [9653]], ['triangledown', [9663]], ['triangleleft', [9667]], ['trianglelefteq', [8884]], ['triangleq', [8796]], ['triangleright', [9657]], ['trianglerighteq', [8885]], ['tridot', [9708]], ['trie', [8796]], ['triminus', [10810]], ['TripleDot', [8411]], ['triplus', [10809]], ['trisb', [10701]], ['tritime', [10811]], ['trpezium', [9186]], ['Tscr', [119983]], ['tscr', [120009]], ['TScy', [1062]], ['tscy', [1094]], ['TSHcy', [1035]], ['tshcy', [1115]], ['Tstrok', [358]], ['tstrok', [359]], ['twixt', [8812]], ['twoheadleftarrow', [8606]], ['twoheadrightarrow', [8608]], ['Uacute', [218]], ['uacute', [250]], ['uarr', [8593]], ['Uarr', [8607]], ['uArr', [8657]], ['Uarrocir', [10569]], ['Ubrcy', [1038]], ['ubrcy', [1118]], ['Ubreve', [364]], ['ubreve', [365]], ['Ucirc', [219]], ['ucirc', [251]], ['Ucy', [1059]], ['ucy', [1091]], ['udarr', [8645]], ['Udblac', [368]], ['udblac', [369]], ['udhar', [10606]], ['ufisht', [10622]], ['Ufr', [120088]], ['ufr', [120114]], ['Ugrave', [217]], ['ugrave', [249]], ['uHar', [10595]], ['uharl', [8639]], ['uharr', [8638]], ['uhblk', [9600]], ['ulcorn', [8988]], ['ulcorner', [8988]], ['ulcrop', [8975]], ['ultri', [9720]], ['Umacr', [362]], ['umacr', [363]], ['uml', [168]], ['UnderBar', [95]], ['UnderBrace', [9183]], ['UnderBracket', [9141]], ['UnderParenthesis', [9181]], ['Union', [8899]], ['UnionPlus', [8846]], ['Uogon', [370]], ['uogon', [371]], ['Uopf', [120140]], ['uopf', [120166]], ['UpArrowBar', [10514]], ['uparrow', [8593]], ['UpArrow', [8593]], ['Uparrow', [8657]], ['UpArrowDownArrow', [8645]], ['updownarrow', [8597]], ['UpDownArrow', [8597]], ['Updownarrow', [8661]], ['UpEquilibrium', [10606]], ['upharpoonleft', [8639]], ['upharpoonright', [8638]], ['uplus', [8846]], ['UpperLeftArrow', [8598]], ['UpperRightArrow', [8599]], ['upsi', [965]], ['Upsi', [978]], ['upsih', [978]], ['Upsilon', [933]], ['upsilon', [965]], ['UpTeeArrow', [8613]], ['UpTee', [8869]], ['upuparrows', [8648]], ['urcorn', [8989]], ['urcorner', [8989]], ['urcrop', [8974]], ['Uring', [366]], ['uring', [367]], ['urtri', [9721]], ['Uscr', [119984]], ['uscr', [120010]], ['utdot', [8944]], ['Utilde', [360]], ['utilde', [361]], ['utri', [9653]], ['utrif', [9652]], ['uuarr', [8648]], ['Uuml', [220]], ['uuml', [252]], ['uwangle', [10663]], ['vangrt', [10652]], ['varepsilon', [1013]], ['varkappa', [1008]], ['varnothing', [8709]], ['varphi', [981]], ['varpi', [982]], ['varpropto', [8733]], ['varr', [8597]], ['vArr', [8661]], ['varrho', [1009]], ['varsigma', [962]], ['varsubsetneq', [8842, 65024]], ['varsubsetneqq', [10955, 65024]], ['varsupsetneq', [8843, 65024]], ['varsupsetneqq', [10956, 65024]], ['vartheta', [977]], ['vartriangleleft', [8882]], ['vartriangleright', [8883]], ['vBar', [10984]], ['Vbar', [10987]], ['vBarv', [10985]], ['Vcy', [1042]], ['vcy', [1074]], ['vdash', [8866]], ['vDash', [8872]], ['Vdash', [8873]], ['VDash', [8875]], ['Vdashl', [10982]], ['veebar', [8891]], ['vee', [8744]], ['Vee', [8897]], ['veeeq', [8794]], ['vellip', [8942]], ['verbar', [124]], ['Verbar', [8214]], ['vert', [124]], ['Vert', [8214]], ['VerticalBar', [8739]], ['VerticalLine', [124]], ['VerticalSeparator', [10072]], ['VerticalTilde', [8768]], ['VeryThinSpace', [8202]], ['Vfr', [120089]], ['vfr', [120115]], ['vltri', [8882]], ['vnsub', [8834, 8402]], ['vnsup', [8835, 8402]], ['Vopf', [120141]], ['vopf', [120167]], ['vprop', [8733]], ['vrtri', [8883]], ['Vscr', [119985]], ['vscr', [120011]], ['vsubnE', [10955, 65024]], ['vsubne', [8842, 65024]], ['vsupnE', [10956, 65024]], ['vsupne', [8843, 65024]], ['Vvdash', [8874]], ['vzigzag', [10650]], ['Wcirc', [372]], ['wcirc', [373]], ['wedbar', [10847]], ['wedge', [8743]], ['Wedge', [8896]], ['wedgeq', [8793]], ['weierp', [8472]], ['Wfr', [120090]], ['wfr', [120116]], ['Wopf', [120142]], ['wopf', [120168]], ['wp', [8472]], ['wr', [8768]], ['wreath', [8768]], ['Wscr', [119986]], ['wscr', [120012]], ['xcap', [8898]], ['xcirc', [9711]], ['xcup', [8899]], ['xdtri', [9661]], ['Xfr', [120091]], ['xfr', [120117]], ['xharr', [10231]], ['xhArr', [10234]], ['Xi', [926]], ['xi', [958]], ['xlarr', [10229]], ['xlArr', [10232]], ['xmap', [10236]], ['xnis', [8955]], ['xodot', [10752]], ['Xopf', [120143]], ['xopf', [120169]], ['xoplus', [10753]], ['xotime', [10754]], ['xrarr', [10230]], ['xrArr', [10233]], ['Xscr', [119987]], ['xscr', [120013]], ['xsqcup', [10758]], ['xuplus', [10756]], ['xutri', [9651]], ['xvee', [8897]], ['xwedge', [8896]], ['Yacute', [221]], ['yacute', [253]], ['YAcy', [1071]], ['yacy', [1103]], ['Ycirc', [374]], ['ycirc', [375]], ['Ycy', [1067]], ['ycy', [1099]], ['yen', [165]], ['Yfr', [120092]], ['yfr', [120118]], ['YIcy', [1031]], ['yicy', [1111]], ['Yopf', [120144]], ['yopf', [120170]], ['Yscr', [119988]], ['yscr', [120014]], ['YUcy', [1070]], ['yucy', [1102]], ['yuml', [255]], ['Yuml', [376]], ['Zacute', [377]], ['zacute', [378]], ['Zcaron', [381]], ['zcaron', [382]], ['Zcy', [1047]], ['zcy', [1079]], ['Zdot', [379]], ['zdot', [380]], ['zeetrf', [8488]], ['ZeroWidthSpace', [8203]], ['Zeta', [918]], ['zeta', [950]], ['zfr', [120119]], ['Zfr', [8488]], ['ZHcy', [1046]], ['zhcy', [1078]], ['zigrarr', [8669]], ['zopf', [120171]], ['Zopf', [8484]], ['Zscr', [119989]], ['zscr', [120015]], ['zwj', [8205]], ['zwnj', [8204]]]; - -var alphaIndex = {}; -var charIndex = {}; - -createIndexes(alphaIndex, charIndex); - -/** - * @constructor - */ -function Html5Entities() {} - -/** - * @param {String} str - * @returns {String} - */ -Html5Entities.prototype.decode = function(str) { - if (!str || !str.length) { - return ''; - } - return str.replace(/&(#?[\w\d]+);?/g, function(s, entity) { - var chr; - if (entity.charAt(0) === "#") { - var code = entity.charAt(1) === 'x' ? - parseInt(entity.substr(2).toLowerCase(), 16) : - parseInt(entity.substr(1)); - - if (!(isNaN(code) || code < -32768 || code > 65535)) { - chr = String.fromCharCode(code); - } - } else { - chr = alphaIndex[entity]; - } - return chr || s; - }); -}; - -/** - * @param {String} str - * @returns {String} - */ - Html5Entities.decode = function(str) { - return new Html5Entities().decode(str); - }; - -/** - * @param {String} str - * @returns {String} - */ -Html5Entities.prototype.encode = function(str) { - if (!str || !str.length) { - return ''; - } - var strLength = str.length; - var result = ''; - var i = 0; - while (i < strLength) { - var charInfo = charIndex[str.charCodeAt(i)]; - if (charInfo) { - var alpha = charInfo[str.charCodeAt(i + 1)]; - if (alpha) { - i++; - } else { - alpha = charInfo['']; - } - if (alpha) { - result += "&" + alpha + ";"; - i++; - continue; - } - } - result += str.charAt(i); - i++; - } - return result; -}; - -/** - * @param {String} str - * @returns {String} - */ - Html5Entities.encode = function(str) { - return new Html5Entities().encode(str); - }; - -/** - * @param {String} str - * @returns {String} - */ -Html5Entities.prototype.encodeNonUTF = function(str) { - if (!str || !str.length) { - return ''; - } - var strLength = str.length; - var result = ''; - var i = 0; - while (i < strLength) { - var c = str.charCodeAt(i); - var charInfo = charIndex[c]; - if (charInfo) { - var alpha = charInfo[str.charCodeAt(i + 1)]; - if (alpha) { - i++; - } else { - alpha = charInfo['']; - } - if (alpha) { - result += "&" + alpha + ";"; - i++; - continue; - } - } - if (c < 32 || c > 126) { - result += '&#' + c + ';'; - } else { - result += str.charAt(i); - } - i++; - } - return result; -}; - -/** - * @param {String} str - * @returns {String} - */ - Html5Entities.encodeNonUTF = function(str) { - return new Html5Entities().encodeNonUTF(str); - }; - -/** - * @param {String} str - * @returns {String} - */ -Html5Entities.prototype.encodeNonASCII = function(str) { - if (!str || !str.length) { - return ''; - } - var strLength = str.length; - var result = ''; - var i = 0; - while (i < strLength) { - var c = str.charCodeAt(i); - if (c <= 255) { - result += str[i++]; - continue; - } - result += '&#' + c + ';'; - i++ - } - return result; -}; - -/** - * @param {String} str - * @returns {String} - */ - Html5Entities.encodeNonASCII = function(str) { - return new Html5Entities().encodeNonASCII(str); - }; - -/** - * @param {Object} alphaIndex Passed by reference. - * @param {Object} charIndex Passed by reference. - */ -function createIndexes(alphaIndex, charIndex) { - var i = ENTITIES.length; - var _results = []; - while (i--) { - var e = ENTITIES[i]; - var alpha = e[0]; - var chars = e[1]; - var chr = chars[0]; - var addChar = (chr < 32 || chr > 126) || chr === 62 || chr === 60 || chr === 38 || chr === 34 || chr === 39; - var charInfo; - if (addChar) { - charInfo = charIndex[chr] = charIndex[chr] || {}; - } - if (chars[1]) { - var chr2 = chars[1]; - alphaIndex[alpha] = String.fromCharCode(chr) + String.fromCharCode(chr2); - _results.push(addChar && (charInfo[chr2] = alpha)); - } else { - alphaIndex[alpha] = String.fromCharCode(chr); - _results.push(addChar && (charInfo[''] = alpha)); - } - } -} - -module.exports = Html5Entities; - - -/***/ }), - -/***/ "../../../../../node_modules/html-entities/lib/xml-entities.js": -/***/ (function(module, exports) { - -var ALPHA_INDEX = { - '<': '<', - '>': '>', - '"': '"', - '&apos': '\'', - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': '\'', - '&': '&' -}; - -var CHAR_INDEX = { - 60: 'lt', - 62: 'gt', - 34: 'quot', - 39: 'apos', - 38: 'amp' -}; - -var CHAR_S_INDEX = { - '<': '<', - '>': '>', - '"': '"', - '\'': ''', - '&': '&' -}; - -/** - * @constructor - */ -function XmlEntities() {} - -/** - * @param {String} str - * @returns {String} - */ -XmlEntities.prototype.encode = function(str) { - if (!str || !str.length) { - return ''; - } - return str.replace(/<|>|"|'|&/g, function(s) { - return CHAR_S_INDEX[s]; - }); -}; - -/** - * @param {String} str - * @returns {String} - */ - XmlEntities.encode = function(str) { - return new XmlEntities().encode(str); - }; - -/** - * @param {String} str - * @returns {String} - */ -XmlEntities.prototype.decode = function(str) { - if (!str || !str.length) { - return ''; - } - return str.replace(/&#?[0-9a-zA-Z]+;?/g, function(s) { - if (s.charAt(1) === '#') { - var code = s.charAt(2).toLowerCase() === 'x' ? - parseInt(s.substr(3), 16) : - parseInt(s.substr(2)); - - if (isNaN(code) || code < -32768 || code > 65535) { - return ''; - } - return String.fromCharCode(code); - } - return ALPHA_INDEX[s] || s; - }); -}; - -/** - * @param {String} str - * @returns {String} - */ - XmlEntities.decode = function(str) { - return new XmlEntities().decode(str); - }; - -/** - * @param {String} str - * @returns {String} - */ -XmlEntities.prototype.encodeNonUTF = function(str) { - if (!str || !str.length) { - return ''; - } - var strLength = str.length; - var result = ''; - var i = 0; - while (i < strLength) { - var c = str.charCodeAt(i); - var alpha = CHAR_INDEX[c]; - if (alpha) { - result += "&" + alpha + ";"; - i++; - continue; - } - if (c < 32 || c > 126) { - result += '&#' + c + ';'; - } else { - result += str.charAt(i); - } - i++; - } - return result; -}; - -/** - * @param {String} str - * @returns {String} - */ - XmlEntities.encodeNonUTF = function(str) { - return new XmlEntities().encodeNonUTF(str); - }; - -/** - * @param {String} str - * @returns {String} - */ -XmlEntities.prototype.encodeNonASCII = function(str) { - if (!str || !str.length) { - return ''; - } - var strLenght = str.length; - var result = ''; - var i = 0; - while (i < strLenght) { - var c = str.charCodeAt(i); - if (c <= 255) { - result += str[i++]; - continue; - } - result += '&#' + c + ';'; - i++; - } - return result; -}; - -/** - * @param {String} str - * @returns {String} - */ - XmlEntities.encodeNonASCII = function(str) { - return new XmlEntities().encodeNonASCII(str); - }; - -module.exports = XmlEntities; - - -/***/ }), - -/***/ "../../../../../node_modules/inherits/inherits_browser.js": -/***/ (function(module, exports) { - -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - - -/***/ }), - -/***/ "../../../../../node_modules/jquery/dist/jquery.js": -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - * jQuery JavaScript Library v3.2.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2017-03-20T18:59Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var document = window.document; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - - - - function DOMEval( code, doc ) { - doc = doc || document; - - var script = doc.createElement( "script" ); - - script.text = code; - doc.head.appendChild( script ).parentNode.removeChild( script ); - } -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.2.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - - if ( copyIsArray ) { - copyIsArray = false; - clone = src && Array.isArray( src ) ? src : []; - - } else { - clone = src && jQuery.isPlainObject( src ) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - DOMEval( code ); - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.3 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-08-08 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - disabledAncestor = addCombinator( - function( elem ) { - return elem.disabled === true && ("form" in elem || "label" in elem); - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - disabledAncestor( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + - "<select id='" + expando + "-\r\\' msallowcapture=''>" + - "<option selected=''></option></select>"; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "<a href='' disabled='disabled'></a>" + - "<select disabled='disabled'><option/></select>"; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - !compilerCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) {} - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = "<a href='#'></a>"; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = "<input/>"; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Simple selector that can be filtered directly, removing non-Elements - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - // Complex selector, compare the two sets, removing non-Elements - qualifier = jQuery.filter( qualifier, elements ); - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; - } ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( nodeName( elem, "iframe" ) ) { - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( jQuery.isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( jQuery.isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ jQuery.camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ jQuery.camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( jQuery.camelCase ); - } else { - key = jQuery.camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - jQuery.contains( elem.ownerDocument, elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, - scale = 1, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - do { - - // If previous iteration zeroed out, double until we get *something*. - // Use string for doubling so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - initialInUnit = initialInUnit / scale; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // Break the loop if scale is unchanged or perfect, or if we've just had enough. - } while ( - scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations - ); - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); - -var rscriptType = ( /^$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "<select multiple='multiple'>", "</select>" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting <tbody> or other required elements. - thead: [ 1, "<table>", "</table>" ], - col: [ 2, "<table><colgroup>", "</colgroup></table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = "<textarea>x</textarea>"; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); -var documentElement = document.documentElement; - - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 only -// See #13393 for more info -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or 2) have namespace(s) - // a subset or equal to those in the bound event (both can have no namespace). - if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG <use> instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: jQuery.isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /<script|<style|<link/i, - - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( ">tbody", elem )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1></$2>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rmargin = ( /^margin/ ); - -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - div.style.cssText = - "box-sizing:border-box;" + - "position:relative;display:block;" + - "margin:auto;border:1px;padding:1px;" + - "top:1%;width:50%"; - div.innerHTML = ""; - documentElement.appendChild( container ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = divStyle.marginLeft === "2px"; - boxSizingReliableVal = divStyle.width === "4px"; - - // Support: Android 4.0 - 4.3 only - // Some styles come back with percentage values, even though they shouldn't - div.style.marginRight = "50%"; - pixelMarginRightVal = divStyle.marginRight === "4px"; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + - "padding:0;margin-top:1px;position:absolute"; - container.appendChild( div ); - - jQuery.extend( support, { - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelMarginRight: function() { - computeStyleTests(); - return pixelMarginRightVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style; - -// Return a css property mapped to a potentially vendor prefixed property -function vendorPropName( name ) { - - // Shortcut for names that are not vendor prefixed - if ( name in emptyStyle ) { - return name; - } - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a property mapped along what jQuery.cssProps suggests or to -// a vendor prefixed property. -function finalPropName( name ) { - var ret = jQuery.cssProps[ name ]; - if ( !ret ) { - ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; - } - return ret; -} - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i, - val = 0; - - // If we already have the right measurement, avoid augmentation - if ( extra === ( isBorderBox ? "border" : "content" ) ) { - i = 4; - - // Otherwise initialize for horizontal or vertical properties - } else { - i = name === "width" ? 1 : 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // At this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - - // At this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // At this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with computed style - var valueIsBorderBox, - styles = getStyles( elem ), - val = curCSS( elem, name, styles ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test( val ) ) { - return val; - } - - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - - // Fall back to offsetWidth/Height when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - if ( val === "auto" ) { - val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; - } - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - - // Use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - "float": "cssFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - if ( type === "number" ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = jQuery.camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - } ) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = extra && getStyles( elem ), - subtract = extra && augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ); - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ name ] = value; - value = jQuery.css( elem, name ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && - ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || - jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 13 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( jQuery.isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - jQuery.proxy( result.stop, result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( jQuery.isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; - - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( jQuery.isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; - - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( type === "string" ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = value.match( rnothtmlwhite ) || []; - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, isFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu" ).split( " " ), - function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -} ); - -jQuery.fn.extend( { - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -} ); - - - - -support.focusin = "onfocusin" in window; - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = jQuery.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = jQuery.isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 13 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available, append data to url - if ( s.data ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - "throws": true - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( jQuery.isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( "<script>" ).prop( { - charset: s.scriptCharset, - src: s.url - } ).on( - "load error", - callback = function( evt ) { - script.remove(); - callback = null; - if ( evt ) { - complete( evt.type === "error" ? 404 : 200, evt.type ); - } - } - ); - - // Use native DOM manipulation to avoid our domManip AJAX trickery - document.head.appendChild( script[ 0 ] ); - }, - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup( { - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } -} ); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && - ( s.contentType || "" ) - .indexOf( "application/x-www-form-urlencoded" ) === 0 && - rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters[ "script json" ] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // Force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always( function() { - - // If previous value didn't exist - remove it - if ( overwritten === undefined ) { - jQuery( window ).removeProp( callbackName ); - - // Otherwise restore preexisting value - } else { - window[ callbackName ] = overwritten; - } - - // Save back as free - if ( s[ callbackName ] ) { - - // Make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // Save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - } ); - - // Delegate to script - return "script"; - } -} ); - - - - -// Support: Safari 8 only -// In Safari 8 documents created via document.implementation.createHTMLDocument -// collapse sibling forms: the second one becomes a child of the first one. -// Because of that, this security measure has to be disabled in Safari 8. -// https://bugs.webkit.org/show_bug.cgi?id=137337 -support.createHTMLDocument = ( function() { - var body = document.implementation.createHTMLDocument( "" ).body; - body.innerHTML = "<form></form><form></form>"; - return body.childNodes.length === 2; -} )(); - - -// Argument "data" should be string of html -// context (optional): If specified, the fragment will be created in this context, -// defaults to document -// keepScripts (optional): If true, will include scripts passed in the html string -jQuery.parseHTML = function( data, context, keepScripts ) { - if ( typeof data !== "string" ) { - return []; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - - var base, parsed, scripts; - - if ( !context ) { - - // Stop scripts or inline event handlers from being executed immediately - // by using document.implementation - if ( support.createHTMLDocument ) { - context = document.implementation.createHTMLDocument( "" ); - - // Set the base href for the created document - // so any parsed elements with URLs - // are based on the document's URL (gh-2965) - base = context.createElement( "base" ); - base.href = document.location.href; - context.head.appendChild( base ); - } else { - context = document; - } - } - - parsed = rsingleTag.exec( data ); - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[ 1 ] ) ]; - } - - parsed = buildFragment( [ data ], context, scripts ); - - if ( scripts && scripts.length ) { - jQuery( scripts ).remove(); - } - - return jQuery.merge( [], parsed.childNodes ); -}; - - -/** - * Load a url into a page - */ -jQuery.fn.load = function( url, params, callback ) { - var selector, type, response, - self = this, - off = url.indexOf( " " ); - - if ( off > -1 ) { - selector = stripAndCollapse( url.slice( off ) ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax( { - url: url, - - // If "type" variable is undefined, then "GET" method will be used. - // Make value of this field explicit since - // user can override it through ajaxSetup method - type: type || "GET", - dataType: "html", - data: params - } ).done( function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - // If the request succeeds, this function gets "data", "status", "jqXHR" - // but they are ignored because response was set above. - // If it fails, this function gets "jqXHR", "status", "error" - } ).always( callback && function( jqXHR, status ) { - self.each( function() { - callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); - } ); - } ); - } - - return this; -}; - - - - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ - "ajaxStart", - "ajaxStop", - "ajaxComplete", - "ajaxError", - "ajaxSuccess", - "ajaxSend" -], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -} ); - - - - -jQuery.expr.pseudos.animated = function( elem ) { - return jQuery.grep( jQuery.timers, function( fn ) { - return elem === fn.elem; - } ).length; -}; - - - - -jQuery.offset = { - setOffset: function( elem, options, i ) { - var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, - position = jQuery.css( elem, "position" ), - curElem = jQuery( elem ), - props = {}; - - // Set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - curOffset = curElem.offset(); - curCSSTop = jQuery.css( elem, "top" ); - curCSSLeft = jQuery.css( elem, "left" ); - calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; - - // Need to be able to calculate position if either - // top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - - // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) - options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - - } else { - curElem.css( props ); - } - } -}; - -jQuery.fn.extend( { - offset: function( options ) { - - // Preserve chaining for setter - if ( arguments.length ) { - return options === undefined ? - this : - this.each( function( i ) { - jQuery.offset.setOffset( this, options, i ); - } ); - } - - var doc, docElem, rect, win, - elem = this[ 0 ]; - - if ( !elem ) { - return; - } - - // Return zeros for disconnected and hidden (display: none) elements (gh-2310) - // Support: IE <=11 only - // Running getBoundingClientRect on a - // disconnected node in IE throws an error - if ( !elem.getClientRects().length ) { - return { top: 0, left: 0 }; - } - - rect = elem.getBoundingClientRect(); - - doc = elem.ownerDocument; - docElem = doc.documentElement; - win = doc.defaultView; - - return { - top: rect.top + win.pageYOffset - docElem.clientTop, - left: rect.left + win.pageXOffset - docElem.clientLeft - }; - }, - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - elem = this[ 0 ], - parentOffset = { top: 0, left: 0 }; - - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, - // because it is its only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - - // Assume getBoundingClientRect is there when computed position is fixed - offset = elem.getBoundingClientRect(); - - } else { - - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset = { - top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ), - left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) - }; - } - - // Subtract parent offsets and element margins - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) - }; - }, - - // This method will return documentElement in the following cases: - // 1) For the element inside the iframe without offsetParent, this method will return - // documentElement of the parent window - // 2) For the hidden or detached element - // 3) For body or html element, i.e. in case of the html node - it will return itself - // - // but those exceptions were never presented as a real life use-cases - // and might be considered as more preferable results. - // - // This logic, however, is not guaranteed and can change at any point in the future - offsetParent: function() { - return this.map( function() { - var offsetParent = this.offsetParent; - - while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { - offsetParent = offsetParent.offsetParent; - } - - return offsetParent || documentElement; - } ); - } -} ); - -// Create scrollLeft and scrollTop methods -jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { - var top = "pageYOffset" === prop; - - jQuery.fn[ method ] = function( val ) { - return access( this, function( elem, method, val ) { - - // Coalesce documents and windows - var win; - if ( jQuery.isWindow( elem ) ) { - win = elem; - } else if ( elem.nodeType === 9 ) { - win = elem.defaultView; - } - - if ( val === undefined ) { - return win ? win[ prop ] : elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : win.pageXOffset, - top ? val : win.pageYOffset - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length ); - }; -} ); - -// Support: Safari <=7 - 9.1, Chrome <=37 - 49 -// Add the top/left cssHooks using jQuery.fn.position -// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 -// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 -// getComputedStyle returns percent when specified for top/left/bottom/right; -// rather than make the css module depend on the offset module, just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, - function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - - // If curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - ); -} ); - - -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, - function( defaultExtra, funcName ) { - - // Margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - - // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) - return funcName.indexOf( "outer" ) === 0 ? - elem[ "inner" + name ] : - elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], - // whichever is greatest - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable ); - }; - } ); -} ); - - -jQuery.fn.extend( { - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? - this.off( selector, "**" ) : - this.off( types, selector || "**", fn ); - } -} ); - -jQuery.holdReady = function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } -}; -jQuery.isArray = Array.isArray; -jQuery.parseJSON = JSON.parse; -jQuery.nodeName = nodeName; - - - - -// Register as a named AMD module, since jQuery can be concatenated with other -// files that may use define, but not via a proper concatenation script that -// understands anonymous AMD modules. A named AMD is safest and most robust -// way to register. Lowercase jquery is used because AMD module names are -// derived from file names, and jQuery is normally delivered in a lowercase -// file name. Do this after creating the global so that if an AMD module wants -// to call noConflict to hide this version of jQuery, it will work. - -// Note that for maximum portability, libraries that are not jQuery should -// declare themselves as anonymous modules, and avoid setting a global if an -// AMD loader is present. jQuery is a special case. For more information, see -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon - -if ( true ) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { - return jQuery; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); -} - - - - -var - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$; - -jQuery.noConflict = function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; -}; - -// Expose jQuery and $ identifiers, even in AMD -// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( !noGlobal ) { - window.jQuery = window.$ = jQuery; -} - - - - -return jQuery; -} ); - - -/***/ }), - -/***/ "../../../../../node_modules/json3/lib/json3.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ -;(function () { - // Detect the `define` function exposed by asynchronous module loaders. The - // strict `define` check is necessary for compatibility with `r.js`. - var isLoader = "function" === "function" && __webpack_require__("../../../../../node_modules/webpack/buildin/amd-options.js"); - - // A set of types used to distinguish objects from primitives. - var objectTypes = { - "function": true, - "object": true - }; - - // Detect the `exports` object exposed by CommonJS implementations. - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - // Use the `global` object exposed by Node (including Browserify via - // `insert-module-globals`), Narwhal, and Ringo as the default context, - // and the `window` object in browsers. Rhino exports a `global` function - // instead. - var root = objectTypes[typeof window] && window || this, - freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; - - if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) { - root = freeGlobal; - } - - // Public: Initializes JSON 3 using the given `context` object, attaching the - // `stringify` and `parse` functions to the specified `exports` object. - function runInContext(context, exports) { - context || (context = root["Object"]()); - exports || (exports = root["Object"]()); - - // Native constructor aliases. - var Number = context["Number"] || root["Number"], - String = context["String"] || root["String"], - Object = context["Object"] || root["Object"], - Date = context["Date"] || root["Date"], - SyntaxError = context["SyntaxError"] || root["SyntaxError"], - TypeError = context["TypeError"] || root["TypeError"], - Math = context["Math"] || root["Math"], - nativeJSON = context["JSON"] || root["JSON"]; - - // Delegate to the native `stringify` and `parse` implementations. - if (typeof nativeJSON == "object" && nativeJSON) { - exports.stringify = nativeJSON.stringify; - exports.parse = nativeJSON.parse; - } - - // Convenience aliases. - var objectProto = Object.prototype, - getClass = objectProto.toString, - isProperty, forEach, undef; - - // Test the `Date#getUTC*` methods. Based on work by @Yaffle. - var isExtended = new Date(-3509827334573292); - try { - // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical - // results for certain dates in Opera >= 10.53. - isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && - // Safari < 2.0.2 stores the internal millisecond time value correctly, - // but clips the values returned by the date methods to the range of - // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]). - isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; - } catch (exception) {} - - // Internal: Determines whether the native `JSON.stringify` and `parse` - // implementations are spec-compliant. Based on work by Ken Snyder. - function has(name) { - if (has[name] !== undef) { - // Return cached feature test result. - return has[name]; - } - var isSupported; - if (name == "bug-string-char-index") { - // IE <= 7 doesn't support accessing string characters using square - // bracket notation. IE 8 only supports this for primitives. - isSupported = "a"[0] != "a"; - } else if (name == "json") { - // Indicates whether both `JSON.stringify` and `JSON.parse` are - // supported. - isSupported = has("json-stringify") && has("json-parse"); - } else { - var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - // Test `JSON.stringify`. - if (name == "json-stringify") { - var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended; - if (stringifySupported) { - // A test function object with a custom `toJSON` method. - (value = function () { - return 1; - }).toJSON = value; - try { - stringifySupported = - // Firefox 3.1b1 and b2 serialize string, number, and boolean - // primitives as object literals. - stringify(0) === "0" && - // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object - // literals. - stringify(new Number()) === "0" && - stringify(new String()) == '""' && - // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or - // does not define a canonical JSON representation (this applies to - // objects with `toJSON` properties as well, *unless* they are nested - // within an object or array). - stringify(getClass) === undef && - // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and - // FF 3.1b3 pass this test. - stringify(undef) === undef && - // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, - // respectively, if the value is omitted entirely. - stringify() === undef && - // FF 3.1b1, 2 throw an error if the given value is not a number, - // string, array, object, Boolean, or `null` literal. This applies to - // objects with custom `toJSON` methods as well, unless they are nested - // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` - // methods entirely. - stringify(value) === "1" && - stringify([value]) == "[1]" && - // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of - // `"[null]"`. - stringify([undef]) == "[null]" && - // YUI 3.0.0b1 fails to serialize `null` literals. - stringify(null) == "null" && - // FF 3.1b1, 2 halts serialization if an array contains a function: - // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 - // elides non-JSON values from objects and arrays, unless they - // define custom `toJSON` methods. - stringify([undef, getClass, null]) == "[null,null,null]" && - // Simple serialization test. FF 3.1b1 uses Unicode escape sequences - // where character escape codes are expected (e.g., `\b` => `\u0008`). - stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && - // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. - stringify(null, value) === "1" && - stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" && - // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly - // serialize extended years. - stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && - // The milliseconds are optional in ES 5, but required in 5.1. - stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && - // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative - // four-digit years instead of six-digit years. Credits: @Yaffle. - stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond - // values less than 1000. Credits: @Yaffle. - stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; - } catch (exception) { - stringifySupported = false; - } - } - isSupported = stringifySupported; - } - // Test `JSON.parse`. - if (name == "json-parse") { - var parse = exports.parse; - if (typeof parse == "function") { - try { - // FF 3.1b1, b2 will throw an exception if a bare literal is provided. - // Conforming implementations should also coerce the initial argument to - // a string prior to parsing. - if (parse("0") === 0 && !parse(false)) { - // Simple parsing test. - value = parse(serialized); - var parseSupported = value["a"].length == 5 && value["a"][0] === 1; - if (parseSupported) { - try { - // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. - parseSupported = !parse('"\t"'); - } catch (exception) {} - if (parseSupported) { - try { - // FF 4.0 and 4.0.1 allow leading `+` signs and leading - // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow - // certain octal literals. - parseSupported = parse("01") !== 1; - } catch (exception) {} - } - if (parseSupported) { - try { - // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal - // points. These environments, along with FF 3.1b1 and 2, - // also allow trailing commas in JSON objects and arrays. - parseSupported = parse("1.") !== 1; - } catch (exception) {} - } - } - } - } catch (exception) { - parseSupported = false; - } - } - isSupported = parseSupported; - } - } - return has[name] = !!isSupported; - } - - if (!has("json")) { - // Common `[[Class]]` name aliases. - var functionClass = "[object Function]", - dateClass = "[object Date]", - numberClass = "[object Number]", - stringClass = "[object String]", - arrayClass = "[object Array]", - booleanClass = "[object Boolean]"; - - // Detect incomplete support for accessing string characters by index. - var charIndexBuggy = has("bug-string-char-index"); - - // Define additional utility methods if the `Date` methods are buggy. - if (!isExtended) { - var floor = Math.floor; - // A mapping between the months of the year and the number of days between - // January 1st and the first of the respective month. - var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - // Internal: Calculates the number of days between the Unix epoch and the - // first day of the given month. - var getDay = function (year, month) { - return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); - }; - } - - // Internal: Determines if a property is a direct property of the given - // object. Delegates to the native `Object#hasOwnProperty` method. - if (!(isProperty = objectProto.hasOwnProperty)) { - isProperty = function (property) { - var members = {}, constructor; - if ((members.__proto__ = null, members.__proto__ = { - // The *proto* property cannot be set multiple times in recent - // versions of Firefox and SeaMonkey. - "toString": 1 - }, members).toString != getClass) { - // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but - // supports the mutable *proto* property. - isProperty = function (property) { - // Capture and break the object's prototype chain (see section 8.6.2 - // of the ES 5.1 spec). The parenthesized expression prevents an - // unsafe transformation by the Closure Compiler. - var original = this.__proto__, result = property in (this.__proto__ = null, this); - // Restore the original prototype chain. - this.__proto__ = original; - return result; - }; - } else { - // Capture a reference to the top-level `Object` constructor. - constructor = members.constructor; - // Use the `constructor` property to simulate `Object#hasOwnProperty` in - // other environments. - isProperty = function (property) { - var parent = (this.constructor || constructor).prototype; - return property in this && !(property in parent && this[property] === parent[property]); - }; - } - members = null; - return isProperty.call(this, property); - }; - } - - // Internal: Normalizes the `for...in` iteration algorithm across - // environments. Each enumerated key is yielded to a `callback` function. - forEach = function (object, callback) { - var size = 0, Properties, members, property; - - // Tests for bugs in the current environment's `for...in` algorithm. The - // `valueOf` property inherits the non-enumerable flag from - // `Object.prototype` in older versions of IE, Netscape, and Mozilla. - (Properties = function () { - this.valueOf = 0; - }).prototype.valueOf = 0; - - // Iterate over a new instance of the `Properties` class. - members = new Properties(); - for (property in members) { - // Ignore all properties inherited from `Object.prototype`. - if (isProperty.call(members, property)) { - size++; - } - } - Properties = members = null; - - // Normalize the iteration algorithm. - if (!size) { - // A list of non-enumerable properties inherited from `Object.prototype`. - members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; - // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable - // properties. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, length; - var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; - for (property in object) { - // Gecko <= 1.0 enumerates the `prototype` property of functions under - // certain conditions; IE does not. - if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { - callback(property); - } - } - // Manually invoke the callback for each non-enumerable property. - for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property)); - }; - } else if (size == 2) { - // Safari <= 2.0.4 enumerates shadowed properties twice. - forEach = function (object, callback) { - // Create a set of iterated properties. - var members = {}, isFunction = getClass.call(object) == functionClass, property; - for (property in object) { - // Store each property name to prevent double enumeration. The - // `prototype` property of functions is not enumerated due to cross- - // environment inconsistencies. - if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) { - callback(property); - } - } - }; - } else { - // No bugs detected; use the standard `for...in` algorithm. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, isConstructor; - for (property in object) { - if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { - callback(property); - } - } - // Manually invoke the callback for the `constructor` property due to - // cross-environment inconsistencies. - if (isConstructor || isProperty.call(object, (property = "constructor"))) { - callback(property); - } - }; - } - return forEach(object, callback); - }; - - // Public: Serializes a JavaScript `value` as a JSON string. The optional - // `filter` argument may specify either a function that alters how object and - // array members are serialized, or an array of strings and numbers that - // indicates which properties should be serialized. The optional `width` - // argument may be either a string or number that specifies the indentation - // level of the output. - if (!has("json-stringify")) { - // Internal: A map of control characters and their escaped equivalents. - var Escapes = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t" - }; - - // Internal: Converts `value` into a zero-padded string such that its - // length is at least equal to `width`. The `width` must be <= 6. - var leadingZeroes = "000000"; - var toPaddedString = function (width, value) { - // The `|| 0` expression is necessary to work around a bug in - // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. - return (leadingZeroes + (value || 0)).slice(-width); - }; - - // Internal: Double-quotes a string `value`, replacing all ASCII control - // characters (characters with code unit values between 0 and 31) with - // their escaped equivalents. This is an implementation of the - // `Quote(value)` operation defined in ES 5.1 section 15.12.3. - var unicodePrefix = "\\u00"; - var quote = function (value) { - var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10; - var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value); - for (; index < length; index++) { - var charCode = value.charCodeAt(index); - // If the character is a control character, append its Unicode or - // shorthand escape sequence; otherwise, append the character as-is. - switch (charCode) { - case 8: case 9: case 10: case 12: case 13: case 34: case 92: - result += Escapes[charCode]; - break; - default: - if (charCode < 32) { - result += unicodePrefix + toPaddedString(2, charCode.toString(16)); - break; - } - result += useCharIndex ? symbols[index] : value.charAt(index); - } - } - return result + '"'; - }; - - // Internal: Recursively serializes an object. Implements the - // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. - var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { - var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result; - try { - // Necessary for host object support. - value = object[property]; - } catch (exception) {} - if (typeof value == "object" && value) { - className = getClass.call(value); - if (className == dateClass && !isProperty.call(value, "toJSON")) { - if (value > -1 / 0 && value < 1 / 0) { - // Dates are serialized according to the `Date#toJSON` method - // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 - // for the ISO 8601 date time string format. - if (getDay) { - // Manually compute the year, month, date, hours, minutes, - // seconds, and milliseconds if the `getUTC*` methods are - // buggy. Adapted from @Yaffle's `date-shim` project. - date = floor(value / 864e5); - for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); - for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); - date = 1 + date - getDay(year, month); - // The `time` value specifies the time within the day (see ES - // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used - // to compute `A modulo B`, as the `%` operator does not - // correspond to the `modulo` operation for negative numbers. - time = (value % 864e5 + 864e5) % 864e5; - // The hours, minutes, seconds, and milliseconds are obtained by - // decomposing the time within the day. See section 15.9.1.10. - hours = floor(time / 36e5) % 24; - minutes = floor(time / 6e4) % 60; - seconds = floor(time / 1e3) % 60; - milliseconds = time % 1e3; - } else { - year = value.getUTCFullYear(); - month = value.getUTCMonth(); - date = value.getUTCDate(); - hours = value.getUTCHours(); - minutes = value.getUTCMinutes(); - seconds = value.getUTCSeconds(); - milliseconds = value.getUTCMilliseconds(); - } - // Serialize extended years correctly. - value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + - "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + - // Months, dates, hours, minutes, and seconds should have two - // digits; milliseconds should have three. - "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + - // Milliseconds are optional in ES 5.0, but required in 5.1. - "." + toPaddedString(3, milliseconds) + "Z"; - } else { - value = null; - } - } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) { - // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the - // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3 - // ignores all `toJSON` methods on these objects unless they are - // defined directly on an instance. - value = value.toJSON(property); - } - } - if (callback) { - // If a replacement function was provided, call it to obtain the value - // for serialization. - value = callback.call(object, property, value); - } - if (value === null) { - return "null"; - } - className = getClass.call(value); - if (className == booleanClass) { - // Booleans are represented literally. - return "" + value; - } else if (className == numberClass) { - // JSON numbers must be finite. `Infinity` and `NaN` are serialized as - // `"null"`. - return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; - } else if (className == stringClass) { - // Strings are double-quoted and escaped. - return quote("" + value); - } - // Recursively serialize objects and arrays. - if (typeof value == "object") { - // Check for cyclic structures. This is a linear search; performance - // is inversely proportional to the number of unique nested objects. - for (length = stack.length; length--;) { - if (stack[length] === value) { - // Cyclic structures cannot be serialized by `JSON.stringify`. - throw TypeError(); - } - } - // Add the object to the stack of traversed objects. - stack.push(value); - results = []; - // Save the current indentation level and indent one additional level. - prefix = indentation; - indentation += whitespace; - if (className == arrayClass) { - // Recursively serialize array elements. - for (index = 0, length = value.length; index < length; index++) { - element = serialize(index, value, callback, properties, whitespace, indentation, stack); - results.push(element === undef ? "null" : element); - } - result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; - } else { - // Recursively serialize object members. Members are selected from - // either a user-specified list of property names, or the object - // itself. - forEach(properties || value, function (property) { - var element = serialize(property, value, callback, properties, whitespace, indentation, stack); - if (element !== undef) { - // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} - // is not the empty string, let `member` {quote(property) + ":"} - // be the concatenation of `member` and the `space` character." - // The "`space` character" refers to the literal space - // character, not the `space` {width} argument provided to - // `JSON.stringify`. - results.push(quote(property) + ":" + (whitespace ? " " : "") + element); - } - }); - result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; - } - // Remove the object from the traversed object stack. - stack.pop(); - return result; - } - }; - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - exports.stringify = function (source, filter, width) { - var whitespace, callback, properties, className; - if (objectTypes[typeof filter] && filter) { - if ((className = getClass.call(filter)) == functionClass) { - callback = filter; - } else if (className == arrayClass) { - // Convert the property names array into a makeshift set. - properties = {}; - for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1)); - } - } - if (width) { - if ((className = getClass.call(width)) == numberClass) { - // Convert the `width` to an integer and create a string containing - // `width` number of space characters. - if ((width -= width % 1) > 0) { - for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " "); - } - } else if (className == stringClass) { - whitespace = width.length <= 10 ? width : width.slice(0, 10); - } - } - // Opera <= 7.54u2 discards the values associated with empty string keys - // (`""`) only if they are used directly within an object member list - // (e.g., `!("" in { "": 1})`). - return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); - }; - } - - // Public: Parses a JSON source string. - if (!has("json-parse")) { - var fromCharCode = String.fromCharCode; - - // Internal: A map of escaped control characters and their unescaped - // equivalents. - var Unescapes = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r" - }; - - // Internal: Stores the parser state. - var Index, Source; - - // Internal: Resets the parser state and throws a `SyntaxError`. - var abort = function () { - Index = Source = null; - throw SyntaxError(); - }; - - // Internal: Returns the next token, or `"$"` if the parser has reached - // the end of the source string. A token may be a string, number, `null` - // literal, or Boolean literal. - var lex = function () { - var source = Source, length = source.length, value, begin, position, isSigned, charCode; - while (Index < length) { - charCode = source.charCodeAt(Index); - switch (charCode) { - case 9: case 10: case 13: case 32: - // Skip whitespace tokens, including tabs, carriage returns, line - // feeds, and space characters. - Index++; - break; - case 123: case 125: case 91: case 93: case 58: case 44: - // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at - // the current position. - value = charIndexBuggy ? source.charAt(Index) : source[Index]; - Index++; - return value; - case 34: - // `"` delimits a JSON string; advance to the next character and - // begin parsing the string. String tokens are prefixed with the - // sentinel `@` character to distinguish them from punctuators and - // end-of-string tokens. - for (value = "@", Index++; Index < length;) { - charCode = source.charCodeAt(Index); - if (charCode < 32) { - // Unescaped ASCII control characters (those with a code unit - // less than the space character) are not permitted. - abort(); - } else if (charCode == 92) { - // A reverse solidus (`\`) marks the beginning of an escaped - // control character (including `"`, `\`, and `/`) or Unicode - // escape sequence. - charCode = source.charCodeAt(++Index); - switch (charCode) { - case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: - // Revive escaped control characters. - value += Unescapes[charCode]; - Index++; - break; - case 117: - // `\u` marks the beginning of a Unicode escape sequence. - // Advance to the first character and validate the - // four-digit code point. - begin = ++Index; - for (position = Index + 4; Index < position; Index++) { - charCode = source.charCodeAt(Index); - // A valid sequence comprises four hexdigits (case- - // insensitive) that form a single hexadecimal value. - if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { - // Invalid Unicode escape sequence. - abort(); - } - } - // Revive the escaped character. - value += fromCharCode("0x" + source.slice(begin, Index)); - break; - default: - // Invalid escape sequence. - abort(); - } - } else { - if (charCode == 34) { - // An unescaped double-quote character marks the end of the - // string. - break; - } - charCode = source.charCodeAt(Index); - begin = Index; - // Optimize for the common case where a string is valid. - while (charCode >= 32 && charCode != 92 && charCode != 34) { - charCode = source.charCodeAt(++Index); - } - // Append the string as-is. - value += source.slice(begin, Index); - } - } - if (source.charCodeAt(Index) == 34) { - // Advance to the next character and return the revived string. - Index++; - return value; - } - // Unterminated string. - abort(); - default: - // Parse numbers and literals. - begin = Index; - // Advance past the negative sign, if one is specified. - if (charCode == 45) { - isSigned = true; - charCode = source.charCodeAt(++Index); - } - // Parse an integer or floating-point value. - if (charCode >= 48 && charCode <= 57) { - // Leading zeroes are interpreted as octal literals. - if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { - // Illegal octal literal. - abort(); - } - isSigned = false; - // Parse the integer component. - for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); - // Floats cannot contain a leading decimal point; however, this - // case is already accounted for by the parser. - if (source.charCodeAt(Index) == 46) { - position = ++Index; - // Parse the decimal component. - for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal trailing decimal. - abort(); - } - Index = position; - } - // Parse exponents. The `e` denoting the exponent is - // case-insensitive. - charCode = source.charCodeAt(Index); - if (charCode == 101 || charCode == 69) { - charCode = source.charCodeAt(++Index); - // Skip past the sign following the exponent, if one is - // specified. - if (charCode == 43 || charCode == 45) { - Index++; - } - // Parse the exponential component. - for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal empty exponent. - abort(); - } - Index = position; - } - // Coerce the parsed value to a JavaScript number. - return +source.slice(begin, Index); - } - // A negative sign may only precede numbers. - if (isSigned) { - abort(); - } - // `true`, `false`, and `null` literals. - if (source.slice(Index, Index + 4) == "true") { - Index += 4; - return true; - } else if (source.slice(Index, Index + 5) == "false") { - Index += 5; - return false; - } else if (source.slice(Index, Index + 4) == "null") { - Index += 4; - return null; - } - // Unrecognized token. - abort(); - } - } - // Return the sentinel `$` character if the parser has reached the end - // of the source string. - return "$"; - }; - - // Internal: Parses a JSON `value` token. - var get = function (value) { - var results, hasMembers; - if (value == "$") { - // Unexpected end of input. - abort(); - } - if (typeof value == "string") { - if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { - // Remove the sentinel `@` character. - return value.slice(1); - } - // Parse object and array literals. - if (value == "[") { - // Parses a JSON array, returning a new JavaScript array. - results = []; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing square bracket marks the end of the array literal. - if (value == "]") { - break; - } - // If the array literal contains elements, the current token - // should be a comma separating the previous element from the - // next. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "]") { - // Unexpected trailing `,` in array literal. - abort(); - } - } else { - // A `,` must separate each array element. - abort(); - } - } - // Elisions and leading commas are not permitted. - if (value == ",") { - abort(); - } - results.push(get(value)); - } - return results; - } else if (value == "{") { - // Parses a JSON object, returning a new JavaScript object. - results = {}; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing curly brace marks the end of the object literal. - if (value == "}") { - break; - } - // If the object literal contains members, the current token - // should be a comma separator. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "}") { - // Unexpected trailing `,` in object literal. - abort(); - } - } else { - // A `,` must separate each object member. - abort(); - } - } - // Leading commas are not permitted, object property names must be - // double-quoted strings, and a `:` must separate each property - // name and value. - if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { - abort(); - } - results[value.slice(1)] = get(lex()); - } - return results; - } - // Unexpected token encountered. - abort(); - } - return value; - }; - - // Internal: Updates a traversed object member. - var update = function (source, property, callback) { - var element = walk(source, property, callback); - if (element === undef) { - delete source[property]; - } else { - source[property] = element; - } - }; - - // Internal: Recursively traverses a parsed JSON object, invoking the - // `callback` function for each value. This is an implementation of the - // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. - var walk = function (source, property, callback) { - var value = source[property], length; - if (typeof value == "object" && value) { - // `forEach` can't be used to traverse an array in Opera <= 8.54 - // because its `Object#hasOwnProperty` implementation returns `false` - // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). - if (getClass.call(value) == arrayClass) { - for (length = value.length; length--;) { - update(value, length, callback); - } - } else { - forEach(value, function (property) { - update(value, property, callback); - }); - } - } - return callback.call(source, property, value); - }; - - // Public: `JSON.parse`. See ES 5.1 section 15.12.2. - exports.parse = function (source, callback) { - var result, value; - Index = 0; - Source = "" + source; - result = get(lex()); - // If a JSON string contains multiple tokens, it is invalid. - if (lex() != "$") { - abort(); - } - // Reset the parser state. - Index = Source = null; - return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; - }; - } - } - - exports["runInContext"] = runInContext; - return exports; - } - - if (freeExports && !isLoader) { - // Export for CommonJS environments. - runInContext(root, freeExports); - } else { - // Export for web browsers and JavaScript engines. - var nativeJSON = root.JSON, - previousJSON = root["JSON3"], - isRestored = false; - - var JSON3 = runInContext(root, (root["JSON3"] = { - // Public: Restores the original value of the global `JSON` object and - // returns a reference to the `JSON3` object. - "noConflict": function () { - if (!isRestored) { - isRestored = true; - root.JSON = nativeJSON; - root["JSON3"] = previousJSON; - nativeJSON = previousJSON = null; - } - return JSON3; - } - })); - - root.JSON = { - "parse": JSON3.parse, - "stringify": JSON3.stringify - }; - } - - // Export for asynchronous module loaders. - if (isLoader) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { - return JSON3; - }.call(exports, __webpack_require__, exports, module), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } -}).call(this); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/module.js")(module), __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/js/lightgallery.js": -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! lightgallery - v1.6.0 - 2017-08-08 -* http://sachinchoolur.github.io/lightGallery/ -* Copyright (c) 2017 Sachin N; Licensed GPLv3 */ -(function (root, factory) { - if (true) { - // AMD. Register as an anonymous module unless amdModuleId is set - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__("../../../../../node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_RESULT__ = function (a0) { - return (factory(a0)); - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require('jquery')); - } else { - factory(root["jQuery"]); - } -}(this, function ($) { - -(function() { - 'use strict'; - - var defaults = { - - mode: 'lg-slide', - - // Ex : 'ease' - cssEasing: 'ease', - - //'for jquery animation' - easing: 'linear', - speed: 600, - height: '100%', - width: '100%', - addClass: '', - startClass: 'lg-start-zoom', - backdropDuration: 150, - hideBarsDelay: 6000, - - useLeft: false, - - closable: true, - loop: true, - escKey: true, - keyPress: true, - controls: true, - slideEndAnimatoin: true, - hideControlOnEnd: false, - mousewheel: true, - - getCaptionFromTitleOrAlt: true, - - // .lg-item || '.lg-sub-html' - appendSubHtmlTo: '.lg-sub-html', - - subHtmlSelectorRelative: false, - - /** - * @desc number of preload slides - * will exicute only after the current slide is fully loaded. - * - * @ex you clicked on 4th image and if preload = 1 then 3rd slide and 5th - * slide will be loaded in the background after the 4th slide is fully loaded.. - * if preload is 2 then 2nd 3rd 5th 6th slides will be preloaded.. ... ... - * - */ - preload: 1, - showAfterLoad: true, - selector: '', - selectWithin: '', - nextHtml: '', - prevHtml: '', - - // 0, 1 - index: false, - - iframeMaxWidth: '100%', - - download: true, - counter: true, - appendCounterTo: '.lg-toolbar', - - swipeThreshold: 50, - enableSwipe: true, - enableDrag: true, - - dynamic: false, - dynamicEl: [], - galleryId: 1 - }; - - function Plugin(element, options) { - - // Current lightGallery element - this.el = element; - - // Current jquery element - this.$el = $(element); - - // lightGallery settings - this.s = $.extend({}, defaults, options); - - // When using dynamic mode, ensure dynamicEl is an array - if (this.s.dynamic && this.s.dynamicEl !== 'undefined' && this.s.dynamicEl.constructor === Array && !this.s.dynamicEl.length) { - throw ('When using dynamic mode, you must also define dynamicEl as an Array.'); - } - - // lightGallery modules - this.modules = {}; - - // false when lightgallery complete first slide; - this.lGalleryOn = false; - - this.lgBusy = false; - - // Timeout function for hiding controls; - this.hideBartimeout = false; - - // To determine browser supports for touch events; - this.isTouch = ('ontouchstart' in document.documentElement); - - // Disable hideControlOnEnd if sildeEndAnimation is true - if (this.s.slideEndAnimatoin) { - this.s.hideControlOnEnd = false; - } - - // Gallery items - if (this.s.dynamic) { - this.$items = this.s.dynamicEl; - } else { - if (this.s.selector === 'this') { - this.$items = this.$el; - } else if (this.s.selector !== '') { - if (this.s.selectWithin) { - this.$items = $(this.s.selectWithin).find(this.s.selector); - } else { - this.$items = this.$el.find($(this.s.selector)); - } - } else { - this.$items = this.$el.children(); - } - } - - // .lg-item - this.$slide = ''; - - // .lg-outer - this.$outer = ''; - - this.init(); - - return this; - } - - Plugin.prototype.init = function() { - - var _this = this; - - // s.preload should not be more than $item.length - if (_this.s.preload > _this.$items.length) { - _this.s.preload = _this.$items.length; - } - - // if dynamic option is enabled execute immediately - var _hash = window.location.hash; - if (_hash.indexOf('lg=' + this.s.galleryId) > 0) { - - _this.index = parseInt(_hash.split('&slide=')[1], 10); - - $('body').addClass('lg-from-hash'); - if (!$('body').hasClass('lg-on')) { - setTimeout(function() { - _this.build(_this.index); - }); - - $('body').addClass('lg-on'); - } - } - - if (_this.s.dynamic) { - - _this.$el.trigger('onBeforeOpen.lg'); - - _this.index = _this.s.index || 0; - - // prevent accidental double execution - if (!$('body').hasClass('lg-on')) { - setTimeout(function() { - _this.build(_this.index); - $('body').addClass('lg-on'); - }); - } - } else { - - // Using different namespace for click because click event should not unbind if selector is same object('this') - _this.$items.on('click.lgcustom', function(event) { - - // For IE8 - try { - event.preventDefault(); - event.preventDefault(); - } catch (er) { - event.returnValue = false; - } - - _this.$el.trigger('onBeforeOpen.lg'); - - _this.index = _this.s.index || _this.$items.index(this); - - // prevent accidental double execution - if (!$('body').hasClass('lg-on')) { - _this.build(_this.index); - $('body').addClass('lg-on'); - } - }); - } - - }; - - Plugin.prototype.build = function(index) { - - var _this = this; - - _this.structure(); - - // module constructor - $.each($.fn.lightGallery.modules, function(key) { - _this.modules[key] = new $.fn.lightGallery.modules[key](_this.el); - }); - - // initiate slide function - _this.slide(index, false, false, false); - - if (_this.s.keyPress) { - _this.keyPress(); - } - - if (_this.$items.length > 1) { - - _this.arrow(); - - setTimeout(function() { - _this.enableDrag(); - _this.enableSwipe(); - }, 50); - - if (_this.s.mousewheel) { - _this.mousewheel(); - } - } else { - _this.$slide.on('click.lg', function() { - _this.$el.trigger('onSlideClick.lg'); - }); - } - - _this.counter(); - - _this.closeGallery(); - - _this.$el.trigger('onAfterOpen.lg'); - - // Hide controllers if mouse doesn't move for some period - _this.$outer.on('mousemove.lg click.lg touchstart.lg', function() { - - _this.$outer.removeClass('lg-hide-items'); - - clearTimeout(_this.hideBartimeout); - - // Timeout will be cleared on each slide movement also - _this.hideBartimeout = setTimeout(function() { - _this.$outer.addClass('lg-hide-items'); - }, _this.s.hideBarsDelay); - - }); - - _this.$outer.trigger('mousemove.lg'); - - }; - - Plugin.prototype.structure = function() { - var list = ''; - var controls = ''; - var i = 0; - var subHtmlCont = ''; - var template; - var _this = this; - - $('body').append('<div class="lg-backdrop"></div>'); - $('.lg-backdrop').css('transition-duration', this.s.backdropDuration + 'ms'); - - // Create gallery items - for (i = 0; i < this.$items.length; i++) { - list += '<div class="lg-item"></div>'; - } - - // Create controlls - if (this.s.controls && this.$items.length > 1) { - controls = '<div class="lg-actions">' + - '<button class="lg-prev lg-icon">' + this.s.prevHtml + '</button>' + - '<button class="lg-next lg-icon">' + this.s.nextHtml + '</button>' + - '</div>'; - } - - if (this.s.appendSubHtmlTo === '.lg-sub-html') { - subHtmlCont = '<div class="lg-sub-html"></div>'; - } - - template = '<div class="lg-outer ' + this.s.addClass + ' ' + this.s.startClass + '">' + - '<div class="lg" style="width:' + this.s.width + '; height:' + this.s.height + '">' + - '<div class="lg-inner">' + list + '</div>' + - '<div class="lg-toolbar lg-group">' + - '<span class="lg-close lg-icon"></span>' + - '</div>' + - controls + - subHtmlCont + - '</div>' + - '</div>'; - - $('body').append(template); - this.$outer = $('.lg-outer'); - this.$slide = this.$outer.find('.lg-item'); - - if (this.s.useLeft) { - this.$outer.addClass('lg-use-left'); - - // Set mode lg-slide if use left is true; - this.s.mode = 'lg-slide'; - } else { - this.$outer.addClass('lg-use-css3'); - } - - // For fixed height gallery - _this.setTop(); - $(window).on('resize.lg orientationchange.lg', function() { - setTimeout(function() { - _this.setTop(); - }, 100); - }); - - // add class lg-current to remove initial transition - this.$slide.eq(this.index).addClass('lg-current'); - - // add Class for css support and transition mode - if (this.doCss()) { - this.$outer.addClass('lg-css3'); - } else { - this.$outer.addClass('lg-css'); - - // Set speed 0 because no animation will happen if browser doesn't support css3 - this.s.speed = 0; - } - - this.$outer.addClass(this.s.mode); - - if (this.s.enableDrag && this.$items.length > 1) { - this.$outer.addClass('lg-grab'); - } - - if (this.s.showAfterLoad) { - this.$outer.addClass('lg-show-after-load'); - } - - if (this.doCss()) { - var $inner = this.$outer.find('.lg-inner'); - $inner.css('transition-timing-function', this.s.cssEasing); - $inner.css('transition-duration', this.s.speed + 'ms'); - } - - setTimeout(function() { - $('.lg-backdrop').addClass('in'); - }); - - setTimeout(function() { - _this.$outer.addClass('lg-visible'); - }, this.s.backdropDuration); - - if (this.s.download) { - this.$outer.find('.lg-toolbar').append('<a id="lg-download" target="_blank" download class="lg-download lg-icon"></a>'); - } - - // Store the current scroll top value to scroll back after closing the gallery.. - this.prevScrollTop = $(window).scrollTop(); - - }; - - // For fixed height gallery - Plugin.prototype.setTop = function() { - if (this.s.height !== '100%') { - var wH = $(window).height(); - var top = (wH - parseInt(this.s.height, 10)) / 2; - var $lGallery = this.$outer.find('.lg'); - if (wH >= parseInt(this.s.height, 10)) { - $lGallery.css('top', top + 'px'); - } else { - $lGallery.css('top', '0px'); - } - } - }; - - // Find css3 support - Plugin.prototype.doCss = function() { - // check for css animation support - var support = function() { - var transition = ['transition', 'MozTransition', 'WebkitTransition', 'OTransition', 'msTransition', 'KhtmlTransition']; - var root = document.documentElement; - var i = 0; - for (i = 0; i < transition.length; i++) { - if (transition[i] in root.style) { - return true; - } - } - }; - - if (support()) { - return true; - } - - return false; - }; - - /** - * @desc Check the given src is video - * @param {String} src - * @return {Object} video type - * Ex:{ youtube : ["//www.youtube.com/watch?v=c0asJgSyxcY", "c0asJgSyxcY"] } - */ - Plugin.prototype.isVideo = function(src, index) { - - var html; - if (this.s.dynamic) { - html = this.s.dynamicEl[index].html; - } else { - html = this.$items.eq(index).attr('data-html'); - } - - if (!src) { - if(html) { - return { - html5: true - }; - } else { - console.error('lightGallery :- data-src is not pvovided on slide item ' + (index + 1) + '. Please make sure the selector property is properly configured. More info - http://sachinchoolur.github.io/lightGallery/demos/html-markup.html'); - return false; - } - } - - var youtube = src.match(/\/\/(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=|embed\/)?([a-z0-9\-\_\%]+)/i); - var vimeo = src.match(/\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i); - var dailymotion = src.match(/\/\/(?:www\.)?dai.ly\/([0-9a-z\-_]+)/i); - var vk = src.match(/\/\/(?:www\.)?(?:vk\.com|vkontakte\.ru)\/(?:video_ext\.php\?)(.*)/i); - - if (youtube) { - return { - youtube: youtube - }; - } else if (vimeo) { - return { - vimeo: vimeo - }; - } else if (dailymotion) { - return { - dailymotion: dailymotion - }; - } else if (vk) { - return { - vk: vk - }; - } - }; - - /** - * @desc Create image counter - * Ex: 1/10 - */ - Plugin.prototype.counter = function() { - if (this.s.counter) { - $(this.s.appendCounterTo).append('<div id="lg-counter"><span id="lg-counter-current">' + (parseInt(this.index, 10) + 1) + '</span> / <span id="lg-counter-all">' + this.$items.length + '</span></div>'); - } - }; - - /** - * @desc add sub-html into the slide - * @param {Number} index - index of the slide - */ - Plugin.prototype.addHtml = function(index) { - var subHtml = null; - var subHtmlUrl; - var $currentEle; - if (this.s.dynamic) { - if (this.s.dynamicEl[index].subHtmlUrl) { - subHtmlUrl = this.s.dynamicEl[index].subHtmlUrl; - } else { - subHtml = this.s.dynamicEl[index].subHtml; - } - } else { - $currentEle = this.$items.eq(index); - if ($currentEle.attr('data-sub-html-url')) { - subHtmlUrl = $currentEle.attr('data-sub-html-url'); - } else { - subHtml = $currentEle.attr('data-sub-html'); - if (this.s.getCaptionFromTitleOrAlt && !subHtml) { - subHtml = $currentEle.attr('title') || $currentEle.find('img').first().attr('alt'); - } - } - } - - if (!subHtmlUrl) { - if (typeof subHtml !== 'undefined' && subHtml !== null) { - - // get first letter of subhtml - // if first letter starts with . or # get the html form the jQuery object - var fL = subHtml.substring(0, 1); - if (fL === '.' || fL === '#') { - if (this.s.subHtmlSelectorRelative && !this.s.dynamic) { - subHtml = $currentEle.find(subHtml).html(); - } else { - subHtml = $(subHtml).html(); - } - } - } else { - subHtml = ''; - } - } - - if (this.s.appendSubHtmlTo === '.lg-sub-html') { - - if (subHtmlUrl) { - this.$outer.find(this.s.appendSubHtmlTo).load(subHtmlUrl); - } else { - this.$outer.find(this.s.appendSubHtmlTo).html(subHtml); - } - - } else { - - if (subHtmlUrl) { - this.$slide.eq(index).load(subHtmlUrl); - } else { - this.$slide.eq(index).append(subHtml); - } - } - - // Add lg-empty-html class if title doesn't exist - if (typeof subHtml !== 'undefined' && subHtml !== null) { - if (subHtml === '') { - this.$outer.find(this.s.appendSubHtmlTo).addClass('lg-empty-html'); - } else { - this.$outer.find(this.s.appendSubHtmlTo).removeClass('lg-empty-html'); - } - } - - this.$el.trigger('onAfterAppendSubHtml.lg', [index]); - }; - - /** - * @desc Preload slides - * @param {Number} index - index of the slide - */ - Plugin.prototype.preload = function(index) { - var i = 1; - var j = 1; - for (i = 1; i <= this.s.preload; i++) { - if (i >= this.$items.length - index) { - break; - } - - this.loadContent(index + i, false, 0); - } - - for (j = 1; j <= this.s.preload; j++) { - if (index - j < 0) { - break; - } - - this.loadContent(index - j, false, 0); - } - }; - - /** - * @desc Load slide content into slide. - * @param {Number} index - index of the slide. - * @param {Boolean} rec - if true call loadcontent() function again. - * @param {Boolean} delay - delay for adding complete class. it is 0 except first time. - */ - Plugin.prototype.loadContent = function(index, rec, delay) { - - var _this = this; - var _hasPoster = false; - var _$img; - var _src; - var _poster; - var _srcset; - var _sizes; - var _html; - var getResponsiveSrc = function(srcItms) { - var rsWidth = []; - var rsSrc = []; - for (var i = 0; i < srcItms.length; i++) { - var __src = srcItms[i].split(' '); - - // Manage empty space - if (__src[0] === '') { - __src.splice(0, 1); - } - - rsSrc.push(__src[0]); - rsWidth.push(__src[1]); - } - - var wWidth = $(window).width(); - for (var j = 0; j < rsWidth.length; j++) { - if (parseInt(rsWidth[j], 10) > wWidth) { - _src = rsSrc[j]; - break; - } - } - }; - - if (_this.s.dynamic) { - - if (_this.s.dynamicEl[index].poster) { - _hasPoster = true; - _poster = _this.s.dynamicEl[index].poster; - } - - _html = _this.s.dynamicEl[index].html; - _src = _this.s.dynamicEl[index].src; - - if (_this.s.dynamicEl[index].responsive) { - var srcDyItms = _this.s.dynamicEl[index].responsive.split(','); - getResponsiveSrc(srcDyItms); - } - - _srcset = _this.s.dynamicEl[index].srcset; - _sizes = _this.s.dynamicEl[index].sizes; - - } else { - - if (_this.$items.eq(index).attr('data-poster')) { - _hasPoster = true; - _poster = _this.$items.eq(index).attr('data-poster'); - } - - _html = _this.$items.eq(index).attr('data-html'); - _src = _this.$items.eq(index).attr('href') || _this.$items.eq(index).attr('data-src'); - - if (_this.$items.eq(index).attr('data-responsive')) { - var srcItms = _this.$items.eq(index).attr('data-responsive').split(','); - getResponsiveSrc(srcItms); - } - - _srcset = _this.$items.eq(index).attr('data-srcset'); - _sizes = _this.$items.eq(index).attr('data-sizes'); - - } - - //if (_src || _srcset || _sizes || _poster) { - - var iframe = false; - if (_this.s.dynamic) { - if (_this.s.dynamicEl[index].iframe) { - iframe = true; - } - } else { - if (_this.$items.eq(index).attr('data-iframe') === 'true') { - iframe = true; - } - } - - var _isVideo = _this.isVideo(_src, index); - if (!_this.$slide.eq(index).hasClass('lg-loaded')) { - if (iframe) { - _this.$slide.eq(index).prepend('<div class="lg-video-cont lg-has-iframe" style="max-width:' + _this.s.iframeMaxWidth + '"><div class="lg-video"><iframe class="lg-object" frameborder="0" src="' + _src + '" allowfullscreen="true"></iframe></div></div>'); - } else if (_hasPoster) { - var videoClass = ''; - if (_isVideo && _isVideo.youtube) { - videoClass = 'lg-has-youtube'; - } else if (_isVideo && _isVideo.vimeo) { - videoClass = 'lg-has-vimeo'; - } else { - videoClass = 'lg-has-html5'; - } - - _this.$slide.eq(index).prepend('<div class="lg-video-cont ' + videoClass + ' "><div class="lg-video"><span class="lg-video-play"></span><img class="lg-object lg-has-poster" src="' + _poster + '" /></div></div>'); - - } else if (_isVideo) { - _this.$slide.eq(index).prepend('<div class="lg-video-cont "><div class="lg-video"></div></div>'); - _this.$el.trigger('hasVideo.lg', [index, _src, _html]); - } else { - _this.$slide.eq(index).prepend('<div class="lg-img-wrap"><img class="lg-object lg-image" src="' + _src + '" /></div>'); - } - - _this.$el.trigger('onAferAppendSlide.lg', [index]); - - _$img = _this.$slide.eq(index).find('.lg-object'); - if (_sizes) { - _$img.attr('sizes', _sizes); - } - - if (_srcset) { - _$img.attr('srcset', _srcset); - try { - picturefill({ - elements: [_$img[0]] - }); - } catch (e) { - console.warn('lightGallery :- If you want srcset to be supported for older browser please include picturefil version 2 javascript library in your document.'); - } - } - - if (this.s.appendSubHtmlTo !== '.lg-sub-html') { - _this.addHtml(index); - } - - _this.$slide.eq(index).addClass('lg-loaded'); - } - - _this.$slide.eq(index).find('.lg-object').on('load.lg error.lg', function() { - - // For first time add some delay for displaying the start animation. - var _speed = 0; - - // Do not change the delay value because it is required for zoom plugin. - // If gallery opened from direct url (hash) speed value should be 0 - if (delay && !$('body').hasClass('lg-from-hash')) { - _speed = delay; - } - - setTimeout(function() { - _this.$slide.eq(index).addClass('lg-complete'); - _this.$el.trigger('onSlideItemLoad.lg', [index, delay || 0]); - }, _speed); - - }); - - // @todo check load state for html5 videos - if (_isVideo && _isVideo.html5 && !_hasPoster) { - _this.$slide.eq(index).addClass('lg-complete'); - } - - if (rec === true) { - if (!_this.$slide.eq(index).hasClass('lg-complete')) { - _this.$slide.eq(index).find('.lg-object').on('load.lg error.lg', function() { - _this.preload(index); - }); - } else { - _this.preload(index); - } - } - - //} - }; - - /** - * @desc slide function for lightgallery - ** Slide() gets call on start - ** ** Set lg.on true once slide() function gets called. - ** Call loadContent() on slide() function inside setTimeout - ** ** On first slide we do not want any animation like slide of fade - ** ** So on first slide( if lg.on if false that is first slide) loadContent() should start loading immediately - ** ** Else loadContent() should wait for the transition to complete. - ** ** So set timeout s.speed + 50 - <=> ** loadContent() will load slide content in to the particular slide - ** ** It has recursion (rec) parameter. if rec === true loadContent() will call preload() function. - ** ** preload will execute only when the previous slide is fully loaded (images iframe) - ** ** avoid simultaneous image load - <=> ** Preload() will check for s.preload value and call loadContent() again accoring to preload value - ** loadContent() <====> Preload(); - - * @param {Number} index - index of the slide - * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag - * @param {Boolean} fromThumb - true if slide function called via thumbnail click - * @param {String} direction - Direction of the slide(next/prev) - */ - Plugin.prototype.slide = function(index, fromTouch, fromThumb, direction) { - - var _prevIndex = this.$outer.find('.lg-current').index(); - var _this = this; - - // Prevent if multiple call - // Required for hsh plugin - if (_this.lGalleryOn && (_prevIndex === index)) { - return; - } - - var _length = this.$slide.length; - var _time = _this.lGalleryOn ? this.s.speed : 0; - - if (!_this.lgBusy) { - - if (this.s.download) { - var _src; - if (_this.s.dynamic) { - _src = _this.s.dynamicEl[index].downloadUrl !== false && (_this.s.dynamicEl[index].downloadUrl || _this.s.dynamicEl[index].src); - } else { - _src = _this.$items.eq(index).attr('data-download-url') !== 'false' && (_this.$items.eq(index).attr('data-download-url') || _this.$items.eq(index).attr('href') || _this.$items.eq(index).attr('data-src')); - - } - - if (_src) { - $('#lg-download').attr('href', _src); - _this.$outer.removeClass('lg-hide-download'); - } else { - _this.$outer.addClass('lg-hide-download'); - } - } - - this.$el.trigger('onBeforeSlide.lg', [_prevIndex, index, fromTouch, fromThumb]); - - _this.lgBusy = true; - - clearTimeout(_this.hideBartimeout); - - // Add title if this.s.appendSubHtmlTo === lg-sub-html - if (this.s.appendSubHtmlTo === '.lg-sub-html') { - - // wait for slide animation to complete - setTimeout(function() { - _this.addHtml(index); - }, _time); - } - - this.arrowDisable(index); - - if (!direction) { - if (index < _prevIndex) { - direction = 'prev'; - } else if (index > _prevIndex) { - direction = 'next'; - } - } - - if (!fromTouch) { - - // remove all transitions - _this.$outer.addClass('lg-no-trans'); - - this.$slide.removeClass('lg-prev-slide lg-next-slide'); - - if (direction === 'prev') { - - //prevslide - this.$slide.eq(index).addClass('lg-prev-slide'); - this.$slide.eq(_prevIndex).addClass('lg-next-slide'); - } else { - - // next slide - this.$slide.eq(index).addClass('lg-next-slide'); - this.$slide.eq(_prevIndex).addClass('lg-prev-slide'); - } - - // give 50 ms for browser to add/remove class - setTimeout(function() { - _this.$slide.removeClass('lg-current'); - - //_this.$slide.eq(_prevIndex).removeClass('lg-current'); - _this.$slide.eq(index).addClass('lg-current'); - - // reset all transitions - _this.$outer.removeClass('lg-no-trans'); - }, 50); - } else { - - this.$slide.removeClass('lg-prev-slide lg-current lg-next-slide'); - var touchPrev; - var touchNext; - if (_length > 2) { - touchPrev = index - 1; - touchNext = index + 1; - - if ((index === 0) && (_prevIndex === _length - 1)) { - - // next slide - touchNext = 0; - touchPrev = _length - 1; - } else if ((index === _length - 1) && (_prevIndex === 0)) { - - // prev slide - touchNext = 0; - touchPrev = _length - 1; - } - - } else { - touchPrev = 0; - touchNext = 1; - } - - if (direction === 'prev') { - _this.$slide.eq(touchNext).addClass('lg-next-slide'); - } else { - _this.$slide.eq(touchPrev).addClass('lg-prev-slide'); - } - - _this.$slide.eq(index).addClass('lg-current'); - } - - if (_this.lGalleryOn) { - setTimeout(function() { - _this.loadContent(index, true, 0); - }, this.s.speed + 50); - - setTimeout(function() { - _this.lgBusy = false; - _this.$el.trigger('onAfterSlide.lg', [_prevIndex, index, fromTouch, fromThumb]); - }, this.s.speed); - - } else { - _this.loadContent(index, true, _this.s.backdropDuration); - - _this.lgBusy = false; - _this.$el.trigger('onAfterSlide.lg', [_prevIndex, index, fromTouch, fromThumb]); - } - - _this.lGalleryOn = true; - - if (this.s.counter) { - $('#lg-counter-current').text(index + 1); - } - - } - - }; - - /** - * @desc Go to next slide - * @param {Boolean} fromTouch - true if slide function called via touch event - */ - Plugin.prototype.goToNextSlide = function(fromTouch) { - var _this = this; - var _loop = _this.s.loop; - if (fromTouch && _this.$slide.length < 3) { - _loop = false; - } - - if (!_this.lgBusy) { - if ((_this.index + 1) < _this.$slide.length) { - _this.index++; - _this.$el.trigger('onBeforeNextSlide.lg', [_this.index]); - _this.slide(_this.index, fromTouch, false, 'next'); - } else { - if (_loop) { - _this.index = 0; - _this.$el.trigger('onBeforeNextSlide.lg', [_this.index]); - _this.slide(_this.index, fromTouch, false, 'next'); - } else if (_this.s.slideEndAnimatoin && !fromTouch) { - _this.$outer.addClass('lg-right-end'); - setTimeout(function() { - _this.$outer.removeClass('lg-right-end'); - }, 400); - } - } - } - }; - - /** - * @desc Go to previous slide - * @param {Boolean} fromTouch - true if slide function called via touch event - */ - Plugin.prototype.goToPrevSlide = function(fromTouch) { - var _this = this; - var _loop = _this.s.loop; - if (fromTouch && _this.$slide.length < 3) { - _loop = false; - } - - if (!_this.lgBusy) { - if (_this.index > 0) { - _this.index--; - _this.$el.trigger('onBeforePrevSlide.lg', [_this.index, fromTouch]); - _this.slide(_this.index, fromTouch, false, 'prev'); - } else { - if (_loop) { - _this.index = _this.$items.length - 1; - _this.$el.trigger('onBeforePrevSlide.lg', [_this.index, fromTouch]); - _this.slide(_this.index, fromTouch, false, 'prev'); - } else if (_this.s.slideEndAnimatoin && !fromTouch) { - _this.$outer.addClass('lg-left-end'); - setTimeout(function() { - _this.$outer.removeClass('lg-left-end'); - }, 400); - } - } - } - }; - - Plugin.prototype.keyPress = function() { - var _this = this; - if (this.$items.length > 1) { - $(window).on('keyup.lg', function(e) { - if (_this.$items.length > 1) { - if (e.keyCode === 37) { - e.preventDefault(); - _this.goToPrevSlide(); - } - - if (e.keyCode === 39) { - e.preventDefault(); - _this.goToNextSlide(); - } - } - }); - } - - $(window).on('keydown.lg', function(e) { - if (_this.s.escKey === true && e.keyCode === 27) { - e.preventDefault(); - if (!_this.$outer.hasClass('lg-thumb-open')) { - _this.destroy(); - } else { - _this.$outer.removeClass('lg-thumb-open'); - } - } - }); - }; - - Plugin.prototype.arrow = function() { - var _this = this; - this.$outer.find('.lg-prev').on('click.lg', function() { - _this.goToPrevSlide(); - }); - - this.$outer.find('.lg-next').on('click.lg', function() { - _this.goToNextSlide(); - }); - }; - - Plugin.prototype.arrowDisable = function(index) { - - // Disable arrows if s.hideControlOnEnd is true - if (!this.s.loop && this.s.hideControlOnEnd) { - if ((index + 1) < this.$slide.length) { - this.$outer.find('.lg-next').removeAttr('disabled').removeClass('disabled'); - } else { - this.$outer.find('.lg-next').attr('disabled', 'disabled').addClass('disabled'); - } - - if (index > 0) { - this.$outer.find('.lg-prev').removeAttr('disabled').removeClass('disabled'); - } else { - this.$outer.find('.lg-prev').attr('disabled', 'disabled').addClass('disabled'); - } - } - }; - - Plugin.prototype.setTranslate = function($el, xValue, yValue) { - // jQuery supports Automatic CSS prefixing since jQuery 1.8.0 - if (this.s.useLeft) { - $el.css('left', xValue); - } else { - $el.css({ - transform: 'translate3d(' + (xValue) + 'px, ' + yValue + 'px, 0px)' - }); - } - }; - - Plugin.prototype.touchMove = function(startCoords, endCoords) { - - var distance = endCoords - startCoords; - - if (Math.abs(distance) > 15) { - // reset opacity and transition duration - this.$outer.addClass('lg-dragging'); - - // move current slide - this.setTranslate(this.$slide.eq(this.index), distance, 0); - - // move next and prev slide with current slide - this.setTranslate($('.lg-prev-slide'), -this.$slide.eq(this.index).width() + distance, 0); - this.setTranslate($('.lg-next-slide'), this.$slide.eq(this.index).width() + distance, 0); - } - }; - - Plugin.prototype.touchEnd = function(distance) { - var _this = this; - - // keep slide animation for any mode while dragg/swipe - if (_this.s.mode !== 'lg-slide') { - _this.$outer.addClass('lg-slide'); - } - - this.$slide.not('.lg-current, .lg-prev-slide, .lg-next-slide').css('opacity', '0'); - - // set transition duration - setTimeout(function() { - _this.$outer.removeClass('lg-dragging'); - if ((distance < 0) && (Math.abs(distance) > _this.s.swipeThreshold)) { - _this.goToNextSlide(true); - } else if ((distance > 0) && (Math.abs(distance) > _this.s.swipeThreshold)) { - _this.goToPrevSlide(true); - } else if (Math.abs(distance) < 5) { - - // Trigger click if distance is less than 5 pix - _this.$el.trigger('onSlideClick.lg'); - } - - _this.$slide.removeAttr('style'); - }); - - // remove slide class once drag/swipe is completed if mode is not slide - setTimeout(function() { - if (!_this.$outer.hasClass('lg-dragging') && _this.s.mode !== 'lg-slide') { - _this.$outer.removeClass('lg-slide'); - } - }, _this.s.speed + 100); - - }; - - Plugin.prototype.enableSwipe = function() { - var _this = this; - var startCoords = 0; - var endCoords = 0; - var isMoved = false; - - if (_this.s.enableSwipe && _this.doCss()) { - - _this.$slide.on('touchstart.lg', function(e) { - if (!_this.$outer.hasClass('lg-zoomed') && !_this.lgBusy) { - e.preventDefault(); - _this.manageSwipeClass(); - startCoords = e.originalEvent.targetTouches[0].pageX; - } - }); - - _this.$slide.on('touchmove.lg', function(e) { - if (!_this.$outer.hasClass('lg-zoomed')) { - e.preventDefault(); - endCoords = e.originalEvent.targetTouches[0].pageX; - _this.touchMove(startCoords, endCoords); - isMoved = true; - } - }); - - _this.$slide.on('touchend.lg', function() { - if (!_this.$outer.hasClass('lg-zoomed')) { - if (isMoved) { - isMoved = false; - _this.touchEnd(endCoords - startCoords); - } else { - _this.$el.trigger('onSlideClick.lg'); - } - } - }); - } - - }; - - Plugin.prototype.enableDrag = function() { - var _this = this; - var startCoords = 0; - var endCoords = 0; - var isDraging = false; - var isMoved = false; - if (_this.s.enableDrag && _this.doCss()) { - _this.$slide.on('mousedown.lg', function(e) { - // execute only on .lg-object - if (!_this.$outer.hasClass('lg-zoomed')) { - if ($(e.target).hasClass('lg-object') || $(e.target).hasClass('lg-video-play')) { - e.preventDefault(); - - if (!_this.lgBusy) { - _this.manageSwipeClass(); - startCoords = e.pageX; - isDraging = true; - - // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723 - _this.$outer.scrollLeft += 1; - _this.$outer.scrollLeft -= 1; - - // * - - _this.$outer.removeClass('lg-grab').addClass('lg-grabbing'); - - _this.$el.trigger('onDragstart.lg'); - } - - } - } - }); - - $(window).on('mousemove.lg', function(e) { - if (isDraging) { - isMoved = true; - endCoords = e.pageX; - _this.touchMove(startCoords, endCoords); - _this.$el.trigger('onDragmove.lg'); - } - }); - - $(window).on('mouseup.lg', function(e) { - if (isMoved) { - isMoved = false; - _this.touchEnd(endCoords - startCoords); - _this.$el.trigger('onDragend.lg'); - } else if ($(e.target).hasClass('lg-object') || $(e.target).hasClass('lg-video-play')) { - _this.$el.trigger('onSlideClick.lg'); - } - - // Prevent execution on click - if (isDraging) { - isDraging = false; - _this.$outer.removeClass('lg-grabbing').addClass('lg-grab'); - } - }); - - } - }; - - Plugin.prototype.manageSwipeClass = function() { - var _touchNext = this.index + 1; - var _touchPrev = this.index - 1; - if (this.s.loop && this.$slide.length > 2) { - if (this.index === 0) { - _touchPrev = this.$slide.length - 1; - } else if (this.index === this.$slide.length - 1) { - _touchNext = 0; - } - } - - this.$slide.removeClass('lg-next-slide lg-prev-slide'); - if (_touchPrev > -1) { - this.$slide.eq(_touchPrev).addClass('lg-prev-slide'); - } - - this.$slide.eq(_touchNext).addClass('lg-next-slide'); - }; - - Plugin.prototype.mousewheel = function() { - var _this = this; - _this.$outer.on('mousewheel.lg', function(e) { - - if (!e.deltaY) { - return; - } - - if (e.deltaY > 0) { - _this.goToPrevSlide(); - } else { - _this.goToNextSlide(); - } - - e.preventDefault(); - }); - - }; - - Plugin.prototype.closeGallery = function() { - - var _this = this; - var mousedown = false; - this.$outer.find('.lg-close').on('click.lg', function() { - _this.destroy(); - }); - - if (_this.s.closable) { - - // If you drag the slide and release outside gallery gets close on chrome - // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer - _this.$outer.on('mousedown.lg', function(e) { - - if ($(e.target).is('.lg-outer') || $(e.target).is('.lg-item ') || $(e.target).is('.lg-img-wrap')) { - mousedown = true; - } else { - mousedown = false; - } - - }); - - _this.$outer.on('mouseup.lg', function(e) { - - if ($(e.target).is('.lg-outer') || $(e.target).is('.lg-item ') || $(e.target).is('.lg-img-wrap') && mousedown) { - if (!_this.$outer.hasClass('lg-dragging')) { - _this.destroy(); - } - } - - }); - - } - - }; - - Plugin.prototype.destroy = function(d) { - - var _this = this; - - if (!d) { - _this.$el.trigger('onBeforeClose.lg'); - $(window).scrollTop(_this.prevScrollTop); - } - - - /** - * if d is false or undefined destroy will only close the gallery - * plugins instance remains with the element - * - * if d is true destroy will completely remove the plugin - */ - - if (d) { - if (!_this.s.dynamic) { - // only when not using dynamic mode is $items a jquery collection - this.$items.off('click.lg click.lgcustom'); - } - - $.removeData(_this.el, 'lightGallery'); - } - - // Unbind all events added by lightGallery - this.$el.off('.lg.tm'); - - // Distroy all lightGallery modules - $.each($.fn.lightGallery.modules, function(key) { - if (_this.modules[key]) { - _this.modules[key].destroy(); - } - }); - - this.lGalleryOn = false; - - clearTimeout(_this.hideBartimeout); - this.hideBartimeout = false; - $(window).off('.lg'); - $('body').removeClass('lg-on lg-from-hash'); - - if (_this.$outer) { - _this.$outer.removeClass('lg-visible'); - } - - $('.lg-backdrop').removeClass('in'); - - setTimeout(function() { - if (_this.$outer) { - _this.$outer.remove(); - } - - $('.lg-backdrop').remove(); - - if (!d) { - _this.$el.trigger('onCloseAfter.lg'); - } - - }, _this.s.backdropDuration + 50); - }; - - $.fn.lightGallery = function(options) { - return this.each(function() { - if (!$.data(this, 'lightGallery')) { - $.data(this, 'lightGallery', new Plugin(this, options)); - } else { - try { - $(this).data('lightGallery').init(); - } catch (err) { - console.error('lightGallery has not initiated properly'); - } - } - }); - }; - - $.fn.lightGallery.modules = {}; - -})(); - - -})); - - -/***/ }), - -/***/ "../../../../../node_modules/loglevel/lib/loglevel.js": -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/* -* loglevel - https://github.com/pimterry/loglevel -* -* Copyright (c) 2013 Tim Perry -* Licensed under the MIT license. -*/ -(function (root, definition) { - "use strict"; - if (true) { - !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : - __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof module === 'object' && module.exports) { - module.exports = definition(); - } else { - root.log = definition(); - } -}(this, function () { - "use strict"; - var noop = function() {}; - var undefinedType = "undefined"; - - function realMethod(methodName) { - if (typeof console === undefinedType) { - return false; // We can't build a real method without a console to log to - } else if (console[methodName] !== undefined) { - return bindMethod(console, methodName); - } else if (console.log !== undefined) { - return bindMethod(console, 'log'); - } else { - return noop; - } - } - - function bindMethod(obj, methodName) { - var method = obj[methodName]; - if (typeof method.bind === 'function') { - return method.bind(obj); - } else { - try { - return Function.prototype.bind.call(method, obj); - } catch (e) { - // Missing bind shim or IE8 + Modernizr, fallback to wrapping - return function() { - return Function.prototype.apply.apply(method, [obj, arguments]); - }; - } - } - } - - // these private functions always need `this` to be set properly - - function enableLoggingWhenConsoleArrives(methodName, level, loggerName) { - return function () { - if (typeof console !== undefinedType) { - replaceLoggingMethods.call(this, level, loggerName); - this[methodName].apply(this, arguments); - } - }; - } - - function replaceLoggingMethods(level, loggerName) { - /*jshint validthis:true */ - for (var i = 0; i < logMethods.length; i++) { - var methodName = logMethods[i]; - this[methodName] = (i < level) ? - noop : - this.methodFactory(methodName, level, loggerName); - } - } - - function defaultMethodFactory(methodName, level, loggerName) { - /*jshint validthis:true */ - return realMethod(methodName) || - enableLoggingWhenConsoleArrives.apply(this, arguments); - } - - var logMethods = [ - "trace", - "debug", - "info", - "warn", - "error" - ]; - - function Logger(name, defaultLevel, factory) { - var self = this; - var currentLevel; - var storageKey = "loglevel"; - if (name) { - storageKey += ":" + name; - } - - function persistLevelIfPossible(levelNum) { - var levelName = (logMethods[levelNum] || 'silent').toUpperCase(); - - // Use localStorage if available - try { - window.localStorage[storageKey] = levelName; - return; - } catch (ignore) {} - - // Use session cookie as fallback - try { - window.document.cookie = - encodeURIComponent(storageKey) + "=" + levelName + ";"; - } catch (ignore) {} - } - - function getPersistedLevel() { - var storedLevel; - - try { - storedLevel = window.localStorage[storageKey]; - } catch (ignore) {} - - if (typeof storedLevel === undefinedType) { - try { - var cookie = window.document.cookie; - var location = cookie.indexOf( - encodeURIComponent(storageKey) + "="); - if (location) { - storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1]; - } - } catch (ignore) {} - } - - // If the stored level is not valid, treat it as if nothing was stored. - if (self.levels[storedLevel] === undefined) { - storedLevel = undefined; - } - - return storedLevel; - } - - /* - * - * Public API - * - */ - - self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3, - "ERROR": 4, "SILENT": 5}; - - self.methodFactory = factory || defaultMethodFactory; - - self.getLevel = function () { - return currentLevel; - }; - - self.setLevel = function (level, persist) { - if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) { - level = self.levels[level.toUpperCase()]; - } - if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) { - currentLevel = level; - if (persist !== false) { // defaults to true - persistLevelIfPossible(level); - } - replaceLoggingMethods.call(self, level, name); - if (typeof console === undefinedType && level < self.levels.SILENT) { - return "No console available for logging"; - } - } else { - throw "log.setLevel() called with invalid level: " + level; - } - }; - - self.setDefaultLevel = function (level) { - if (!getPersistedLevel()) { - self.setLevel(level, false); - } - }; - - self.enableAll = function(persist) { - self.setLevel(self.levels.TRACE, persist); - }; - - self.disableAll = function(persist) { - self.setLevel(self.levels.SILENT, persist); - }; - - // Initialize with the right level - var initialLevel = getPersistedLevel(); - if (initialLevel == null) { - initialLevel = defaultLevel == null ? "WARN" : defaultLevel; - } - self.setLevel(initialLevel, false); - } - - /* - * - * Package-level API - * - */ - - var defaultLogger = new Logger(); - - var _loggersByName = {}; - defaultLogger.getLogger = function getLogger(name) { - if (typeof name !== "string" || name === "") { - throw new TypeError("You must supply a name when creating a logger."); - } - - var logger = _loggersByName[name]; - if (!logger) { - logger = _loggersByName[name] = new Logger( - name, defaultLogger.getLevel(), defaultLogger.methodFactory); - } - return logger; - }; - - // Grab the current global log variable in case of overwrite - var _log = (typeof window !== undefinedType) ? window.log : undefined; - defaultLogger.noConflict = function() { - if (typeof window !== undefinedType && - window.log === defaultLogger) { - window.log = _log; - } - - return defaultLogger; - }; - - return defaultLogger; -})); - - -/***/ }), - -/***/ "../../../../../node_modules/ms/index.js": -/***/ (function(module, exports) { - -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isNaN(val) === false) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - if (ms >= d) { - return Math.round(ms / d) + 'd'; - } - if (ms >= h) { - return Math.round(ms / h) + 'h'; - } - if (ms >= m) { - return Math.round(ms / m) + 'm'; - } - if (ms >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - return plural(ms, d, 'day') || - plural(ms, h, 'hour') || - plural(ms, m, 'minute') || - plural(ms, s, 'second') || - ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) { - return; - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + ' ' + name; - } - return Math.ceil(ms / n) + ' ' + name + 's'; -} - - -/***/ }), - -/***/ "../../../../../node_modules/process/browser.js": -/***/ (function(module, exports) { - -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - - -/***/ }), - -/***/ "../../../../../node_modules/punycode/punycode.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports && - !exports.nodeType && exports; - var freeModule = typeof module == 'object' && module && - !module.nodeType && module; - var freeGlobal = typeof global == 'object' && global; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw new RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see <https://mathiasbynens.be/notes/javascript-encoding> - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.4.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see <https://mathiasbynens.be/notes/javascript-encoding> - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - true - ) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - return punycode; - }.call(exports, __webpack_require__, exports, module), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (freeExports && freeModule) { - if (module.exports == freeExports) { - // in Node.js, io.js, or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { - // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/module.js")(module), __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/querystring-es3/decode.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -// If obj.hasOwnProperty has been overridden, then calling -// obj.hasOwnProperty(prop) will break. -// See: https://github.com/joyent/node/issues/1707 -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -module.exports = function(qs, sep, eq, options) { - sep = sep || '&'; - eq = eq || '='; - var obj = {}; - - if (typeof qs !== 'string' || qs.length === 0) { - return obj; - } - - var regexp = /\+/g; - qs = qs.split(sep); - - var maxKeys = 1000; - if (options && typeof options.maxKeys === 'number') { - maxKeys = options.maxKeys; - } - - var len = qs.length; - // maxKeys <= 0 means that we should not limit keys count - if (maxKeys > 0 && len > maxKeys) { - len = maxKeys; - } - - for (var i = 0; i < len; ++i) { - var x = qs[i].replace(regexp, '%20'), - idx = x.indexOf(eq), - kstr, vstr, k, v; - - if (idx >= 0) { - kstr = x.substr(0, idx); - vstr = x.substr(idx + 1); - } else { - kstr = x; - vstr = ''; - } - - k = decodeURIComponent(kstr); - v = decodeURIComponent(vstr); - - if (!hasOwnProperty(obj, k)) { - obj[k] = v; - } else if (isArray(obj[k])) { - obj[k].push(v); - } else { - obj[k] = [obj[k], v]; - } - } - - return obj; -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/querystring-es3/encode.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -var stringifyPrimitive = function(v) { - switch (typeof v) { - case 'string': - return v; - - case 'boolean': - return v ? 'true' : 'false'; - - case 'number': - return isFinite(v) ? v : ''; - - default: - return ''; - } -}; - -module.exports = function(obj, sep, eq, name) { - sep = sep || '&'; - eq = eq || '='; - if (obj === null) { - obj = undefined; - } - - if (typeof obj === 'object') { - return map(objectKeys(obj), function(k) { - var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; - if (isArray(obj[k])) { - return map(obj[k], function(v) { - return ks + encodeURIComponent(stringifyPrimitive(v)); - }).join(sep); - } else { - return ks + encodeURIComponent(stringifyPrimitive(obj[k])); - } - }).join(sep); - - } - - if (!name) return ''; - return encodeURIComponent(stringifyPrimitive(name)) + eq + - encodeURIComponent(stringifyPrimitive(obj)); -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - -function map (xs, f) { - if (xs.map) return xs.map(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - res.push(f(xs[i], i)); - } - return res; -} - -var objectKeys = Object.keys || function (obj) { - var res = []; - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); - } - return res; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/querystring-es3/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.decode = exports.parse = __webpack_require__("../../../../../node_modules/querystring-es3/decode.js"); -exports.encode = exports.stringify = __webpack_require__("../../../../../node_modules/querystring-es3/encode.js"); - - -/***/ }), - -/***/ "../../../../../node_modules/requires-port/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Check if we're required to add a port number. - * - * @see https://url.spec.whatwg.org/#default-port - * @param {Number|String} port Port number we need to check - * @param {String} protocol Protocol we need to check against. - * @returns {Boolean} Is it a default port for the given protocol - * @api private - */ -module.exports = function required(port, protocol) { - protocol = protocol.split(':')[0]; - port = +port; - - if (!port) return false; - - switch (protocol) { - case 'http': - case 'ws': - return port !== 80; - - case 'https': - case 'wss': - return port !== 443; - - case 'ftp': - return port !== 21; - - case 'gopher': - return port !== 70; - - case 'file': - return false; - } - - return port !== 0; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/entry.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var transportList = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport-list.js"); - -module.exports = __webpack_require__("../../../../../node_modules/sockjs-client/lib/main.js")(transportList); - -// TODO can't get rid of this until all servers do -if ('_sockjs_onload' in global) { - setTimeout(global._sockjs_onload, 1); -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/event/close.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , Event = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/event.js") - ; - -function CloseEvent() { - Event.call(this); - this.initEvent('close', false, false); - this.wasClean = false; - this.code = 0; - this.reason = ''; -} - -inherits(CloseEvent, Event); - -module.exports = CloseEvent; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/event/emitter.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , EventTarget = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/eventtarget.js") - ; - -function EventEmitter() { - EventTarget.call(this); -} - -inherits(EventEmitter, EventTarget); - -EventEmitter.prototype.removeAllListeners = function(type) { - if (type) { - delete this._listeners[type]; - } else { - this._listeners = {}; - } -}; - -EventEmitter.prototype.once = function(type, listener) { - var self = this - , fired = false; - - function g() { - self.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - this.on(type, g); -}; - -EventEmitter.prototype.emit = function() { - var type = arguments[0]; - var listeners = this._listeners[type]; - if (!listeners) { - return; - } - // equivalent of Array.prototype.slice.call(arguments, 1); - var l = arguments.length; - var args = new Array(l - 1); - for (var ai = 1; ai < l; ai++) { - args[ai - 1] = arguments[ai]; - } - for (var i = 0; i < listeners.length; i++) { - listeners[i].apply(this, args); - } -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener; -EventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener; - -module.exports.EventEmitter = EventEmitter; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/event/event.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function Event(eventType) { - this.type = eventType; -} - -Event.prototype.initEvent = function(eventType, canBubble, cancelable) { - this.type = eventType; - this.bubbles = canBubble; - this.cancelable = cancelable; - this.timeStamp = +new Date(); - return this; -}; - -Event.prototype.stopPropagation = function() {}; -Event.prototype.preventDefault = function() {}; - -Event.CAPTURING_PHASE = 1; -Event.AT_TARGET = 2; -Event.BUBBLING_PHASE = 3; - -module.exports = Event; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/event/eventtarget.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/* Simplified implementation of DOM2 EventTarget. - * http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget - */ - -function EventTarget() { - this._listeners = {}; -} - -EventTarget.prototype.addEventListener = function(eventType, listener) { - if (!(eventType in this._listeners)) { - this._listeners[eventType] = []; - } - var arr = this._listeners[eventType]; - // #4 - if (arr.indexOf(listener) === -1) { - // Make a copy so as not to interfere with a current dispatchEvent. - arr = arr.concat([listener]); - } - this._listeners[eventType] = arr; -}; - -EventTarget.prototype.removeEventListener = function(eventType, listener) { - var arr = this._listeners[eventType]; - if (!arr) { - return; - } - var idx = arr.indexOf(listener); - if (idx !== -1) { - if (arr.length > 1) { - // Make a copy so as not to interfere with a current dispatchEvent. - this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1)); - } else { - delete this._listeners[eventType]; - } - return; - } -}; - -EventTarget.prototype.dispatchEvent = function() { - var event = arguments[0]; - var t = event.type; - // equivalent of Array.prototype.slice.call(arguments, 0); - var args = arguments.length === 1 ? [event] : Array.apply(null, arguments); - // TODO: This doesn't match the real behavior; per spec, onfoo get - // their place in line from the /first/ time they're set from - // non-null. Although WebKit bumps it to the end every time it's - // set. - if (this['on' + t]) { - this['on' + t].apply(this, args); - } - if (t in this._listeners) { - // Grab a reference to the listeners list. removeEventListener may alter the list. - var listeners = this._listeners[t]; - for (var i = 0; i < listeners.length; i++) { - listeners[i].apply(this, args); - } - } -}; - -module.exports = EventTarget; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/event/trans-message.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , Event = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/event.js") - ; - -function TransportMessageEvent(data) { - Event.call(this); - this.initEvent('message', false, false); - this.data = data; -} - -inherits(TransportMessageEvent, Event); - -module.exports = TransportMessageEvent; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/facade.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js") - , iframeUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/iframe.js") - ; - -function FacadeJS(transport) { - this._transport = transport; - transport.on('message', this._transportMessage.bind(this)); - transport.on('close', this._transportClose.bind(this)); -} - -FacadeJS.prototype._transportClose = function(code, reason) { - iframeUtils.postMessage('c', JSON3.stringify([code, reason])); -}; -FacadeJS.prototype._transportMessage = function(frame) { - iframeUtils.postMessage('t', frame); -}; -FacadeJS.prototype._send = function(data) { - this._transport.send(data); -}; -FacadeJS.prototype._close = function() { - this._transport.close(); - this._transport.removeAllListeners(); -}; - -module.exports = FacadeJS; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/iframe-bootstrap.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , eventUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/event.js") - , JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js") - , FacadeJS = __webpack_require__("../../../../../node_modules/sockjs-client/lib/facade.js") - , InfoIframeReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/info-iframe-receiver.js") - , iframeUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/iframe.js") - , loc = __webpack_require__("../../../../../node_modules/sockjs-client/lib/location.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:iframe-bootstrap'); -} - -module.exports = function(SockJS, availableTransports) { - var transportMap = {}; - availableTransports.forEach(function(at) { - if (at.facadeTransport) { - transportMap[at.facadeTransport.transportName] = at.facadeTransport; - } - }); - - // hard-coded for the info iframe - // TODO see if we can make this more dynamic - transportMap[InfoIframeReceiver.transportName] = InfoIframeReceiver; - var parentOrigin; - - /* eslint-disable camelcase */ - SockJS.bootstrap_iframe = function() { - /* eslint-enable camelcase */ - var facade; - iframeUtils.currentWindowId = loc.hash.slice(1); - var onMessage = function(e) { - if (e.source !== parent) { - return; - } - if (typeof parentOrigin === 'undefined') { - parentOrigin = e.origin; - } - if (e.origin !== parentOrigin) { - return; - } - - var iframeMessage; - try { - iframeMessage = JSON3.parse(e.data); - } catch (ignored) { - debug('bad json', e.data); - return; - } - - if (iframeMessage.windowId !== iframeUtils.currentWindowId) { - return; - } - switch (iframeMessage.type) { - case 's': - var p; - try { - p = JSON3.parse(iframeMessage.data); - } catch (ignored) { - debug('bad json', iframeMessage.data); - break; - } - var version = p[0]; - var transport = p[1]; - var transUrl = p[2]; - var baseUrl = p[3]; - debug(version, transport, transUrl, baseUrl); - // change this to semver logic - if (version !== SockJS.version) { - throw new Error('Incompatible SockJS! Main site uses:' + - ' "' + version + '", the iframe:' + - ' "' + SockJS.version + '".'); - } - - if (!urlUtils.isOriginEqual(transUrl, loc.href) || - !urlUtils.isOriginEqual(baseUrl, loc.href)) { - throw new Error('Can\'t connect to different domain from within an ' + - 'iframe. (' + loc.href + ', ' + transUrl + ', ' + baseUrl + ')'); - } - facade = new FacadeJS(new transportMap[transport](transUrl, baseUrl)); - break; - case 'm': - facade._send(iframeMessage.data); - break; - case 'c': - if (facade) { - facade._close(); - } - facade = null; - break; - } - }; - - eventUtils.attachEvent('message', onMessage); - - // Start - iframeUtils.postMessage('s'); - }; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/info-ajax.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js") - , objectUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/object.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:info-ajax'); -} - -function InfoAjax(url, AjaxObject) { - EventEmitter.call(this); - - var self = this; - var t0 = +new Date(); - this.xo = new AjaxObject('GET', url); - - this.xo.once('finish', function(status, text) { - var info, rtt; - if (status === 200) { - rtt = (+new Date()) - t0; - if (text) { - try { - info = JSON3.parse(text); - } catch (e) { - debug('bad json', text); - } - } - - if (!objectUtils.isObject(info)) { - info = {}; - } - } - self.emit('finish', info, rtt); - self.removeAllListeners(); - }); -} - -inherits(InfoAjax, EventEmitter); - -InfoAjax.prototype.close = function() { - this.removeAllListeners(); - this.xo.close(); -}; - -module.exports = InfoAjax; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/info-iframe-receiver.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js") - , XHRLocalObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-local.js") - , InfoAjax = __webpack_require__("../../../../../node_modules/sockjs-client/lib/info-ajax.js") - ; - -function InfoReceiverIframe(transUrl) { - var self = this; - EventEmitter.call(this); - - this.ir = new InfoAjax(transUrl, XHRLocalObject); - this.ir.once('finish', function(info, rtt) { - self.ir = null; - self.emit('message', JSON3.stringify([info, rtt])); - }); -} - -inherits(InfoReceiverIframe, EventEmitter); - -InfoReceiverIframe.transportName = 'iframe-info-receiver'; - -InfoReceiverIframe.prototype.close = function() { - if (this.ir) { - this.ir.close(); - this.ir = null; - } - this.removeAllListeners(); -}; - -module.exports = InfoReceiverIframe; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/info-iframe.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js") - , utils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/event.js") - , IframeTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/iframe.js") - , InfoReceiverIframe = __webpack_require__("../../../../../node_modules/sockjs-client/lib/info-iframe-receiver.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:info-iframe'); -} - -function InfoIframe(baseUrl, url) { - var self = this; - EventEmitter.call(this); - - var go = function() { - var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl); - - ifr.once('message', function(msg) { - if (msg) { - var d; - try { - d = JSON3.parse(msg); - } catch (e) { - debug('bad json', msg); - self.emit('finish'); - self.close(); - return; - } - - var info = d[0], rtt = d[1]; - self.emit('finish', info, rtt); - } - self.close(); - }); - - ifr.once('close', function() { - self.emit('finish'); - self.close(); - }); - }; - - // TODO this seems the same as the 'needBody' from transports - if (!global.document.body) { - utils.attachEvent('load', go); - } else { - go(); - } -} - -inherits(InfoIframe, EventEmitter); - -InfoIframe.enabled = function() { - return IframeTransport.enabled(); -}; - -InfoIframe.prototype.close = function() { - if (this.ifr) { - this.ifr.close(); - } - this.removeAllListeners(); - this.ifr = null; -}; - -module.exports = InfoIframe; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/info-receiver.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , XDR = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xdr.js") - , XHRCors = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-cors.js") - , XHRLocal = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-local.js") - , XHRFake = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-fake.js") - , InfoIframe = __webpack_require__("../../../../../node_modules/sockjs-client/lib/info-iframe.js") - , InfoAjax = __webpack_require__("../../../../../node_modules/sockjs-client/lib/info-ajax.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:info-receiver'); -} - -function InfoReceiver(baseUrl, urlInfo) { - debug(baseUrl); - var self = this; - EventEmitter.call(this); - - setTimeout(function() { - self.doXhr(baseUrl, urlInfo); - }, 0); -} - -inherits(InfoReceiver, EventEmitter); - -// TODO this is currently ignoring the list of available transports and the whitelist - -InfoReceiver._getReceiver = function(baseUrl, url, urlInfo) { - // determine method of CORS support (if needed) - if (urlInfo.sameOrigin) { - return new InfoAjax(url, XHRLocal); - } - if (XHRCors.enabled) { - return new InfoAjax(url, XHRCors); - } - if (XDR.enabled && urlInfo.sameScheme) { - return new InfoAjax(url, XDR); - } - if (InfoIframe.enabled()) { - return new InfoIframe(baseUrl, url); - } - return new InfoAjax(url, XHRFake); -}; - -InfoReceiver.prototype.doXhr = function(baseUrl, urlInfo) { - var self = this - , url = urlUtils.addPath(baseUrl, '/info') - ; - debug('doXhr', url); - - this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo); - - this.timeoutRef = setTimeout(function() { - debug('timeout'); - self._cleanup(false); - self.emit('finish'); - }, InfoReceiver.timeout); - - this.xo.once('finish', function(info, rtt) { - debug('finish', info, rtt); - self._cleanup(true); - self.emit('finish', info, rtt); - }); -}; - -InfoReceiver.prototype._cleanup = function(wasClean) { - debug('_cleanup'); - clearTimeout(this.timeoutRef); - this.timeoutRef = null; - if (!wasClean && this.xo) { - this.xo.close(); - } - this.xo = null; -}; - -InfoReceiver.prototype.close = function() { - debug('close'); - this.removeAllListeners(); - this._cleanup(false); -}; - -InfoReceiver.timeout = 8000; - -module.exports = InfoReceiver; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/location.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -module.exports = global.location || { - origin: 'http://localhost:80' -, protocol: 'http' -, host: 'localhost' -, port: 80 -, href: 'http://localhost/' -, hash: '' -}; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/main.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -__webpack_require__("../../../../../node_modules/sockjs-client/lib/shims.js"); - -var URL = __webpack_require__("../../../../../node_modules/url-parse/index.js") - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js") - , random = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/random.js") - , escape = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/escape.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , eventUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/event.js") - , transport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/transport.js") - , objectUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/object.js") - , browser = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/browser.js") - , log = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/log.js") - , Event = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/event.js") - , EventTarget = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/eventtarget.js") - , loc = __webpack_require__("../../../../../node_modules/sockjs-client/lib/location.js") - , CloseEvent = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/close.js") - , TransportMessageEvent = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/trans-message.js") - , InfoReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/info-receiver.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:main'); -} - -var transports; - -// follow constructor steps defined at http://dev.w3.org/html5/websockets/#the-websocket-interface -function SockJS(url, protocols, options) { - if (!(this instanceof SockJS)) { - return new SockJS(url, protocols, options); - } - if (arguments.length < 1) { - throw new TypeError("Failed to construct 'SockJS: 1 argument required, but only 0 present"); - } - EventTarget.call(this); - - this.readyState = SockJS.CONNECTING; - this.extensions = ''; - this.protocol = ''; - - // non-standard extension - options = options || {}; - if (options.protocols_whitelist) { - log.warn("'protocols_whitelist' is DEPRECATED. Use 'transports' instead."); - } - this._transportsWhitelist = options.transports; - this._transportOptions = options.transportOptions || {}; - - var sessionId = options.sessionId || 8; - if (typeof sessionId === 'function') { - this._generateSessionId = sessionId; - } else if (typeof sessionId === 'number') { - this._generateSessionId = function() { - return random.string(sessionId); - }; - } else { - throw new TypeError('If sessionId is used in the options, it needs to be a number or a function.'); - } - - this._server = options.server || random.numberString(1000); - - // Step 1 of WS spec - parse and validate the url. Issue #8 - var parsedUrl = new URL(url); - if (!parsedUrl.host || !parsedUrl.protocol) { - throw new SyntaxError("The URL '" + url + "' is invalid"); - } else if (parsedUrl.hash) { - throw new SyntaxError('The URL must not contain a fragment'); - } else if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') { - throw new SyntaxError("The URL's scheme must be either 'http:' or 'https:'. '" + parsedUrl.protocol + "' is not allowed."); - } - - var secure = parsedUrl.protocol === 'https:'; - // Step 2 - don't allow secure origin with an insecure protocol - if (loc.protocol === 'https' && !secure) { - throw new Error('SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS'); - } - - // Step 3 - check port access - no need here - // Step 4 - parse protocols argument - if (!protocols) { - protocols = []; - } else if (!Array.isArray(protocols)) { - protocols = [protocols]; - } - - // Step 5 - check protocols argument - var sortedProtocols = protocols.sort(); - sortedProtocols.forEach(function(proto, i) { - if (!proto) { - throw new SyntaxError("The protocols entry '" + proto + "' is invalid."); - } - if (i < (sortedProtocols.length - 1) && proto === sortedProtocols[i + 1]) { - throw new SyntaxError("The protocols entry '" + proto + "' is duplicated."); - } - }); - - // Step 6 - convert origin - var o = urlUtils.getOrigin(loc.href); - this._origin = o ? o.toLowerCase() : null; - - // remove the trailing slash - parsedUrl.set('pathname', parsedUrl.pathname.replace(/\/+$/, '')); - - // store the sanitized url - this.url = parsedUrl.href; - debug('using url', this.url); - - // Step 7 - start connection in background - // obtain server info - // http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html#section-26 - this._urlInfo = { - nullOrigin: !browser.hasDomain() - , sameOrigin: urlUtils.isOriginEqual(this.url, loc.href) - , sameScheme: urlUtils.isSchemeEqual(this.url, loc.href) - }; - - this._ir = new InfoReceiver(this.url, this._urlInfo); - this._ir.once('finish', this._receiveInfo.bind(this)); -} - -inherits(SockJS, EventTarget); - -function userSetCode(code) { - return code === 1000 || (code >= 3000 && code <= 4999); -} - -SockJS.prototype.close = function(code, reason) { - // Step 1 - if (code && !userSetCode(code)) { - throw new Error('InvalidAccessError: Invalid code'); - } - // Step 2.4 states the max is 123 bytes, but we are just checking length - if (reason && reason.length > 123) { - throw new SyntaxError('reason argument has an invalid length'); - } - - // Step 3.1 - if (this.readyState === SockJS.CLOSING || this.readyState === SockJS.CLOSED) { - return; - } - - // TODO look at docs to determine how to set this - var wasClean = true; - this._close(code || 1000, reason || 'Normal closure', wasClean); -}; - -SockJS.prototype.send = function(data) { - // #13 - convert anything non-string to string - // TODO this currently turns objects into [object Object] - if (typeof data !== 'string') { - data = '' + data; - } - if (this.readyState === SockJS.CONNECTING) { - throw new Error('InvalidStateError: The connection has not been established yet'); - } - if (this.readyState !== SockJS.OPEN) { - return; - } - this._transport.send(escape.quote(data)); -}; - -SockJS.version = __webpack_require__("../../../../../node_modules/sockjs-client/lib/version.js"); - -SockJS.CONNECTING = 0; -SockJS.OPEN = 1; -SockJS.CLOSING = 2; -SockJS.CLOSED = 3; - -SockJS.prototype._receiveInfo = function(info, rtt) { - debug('_receiveInfo', rtt); - this._ir = null; - if (!info) { - this._close(1002, 'Cannot connect to server'); - return; - } - - // establish a round-trip timeout (RTO) based on the - // round-trip time (RTT) - this._rto = this.countRTO(rtt); - // allow server to override url used for the actual transport - this._transUrl = info.base_url ? info.base_url : this.url; - info = objectUtils.extend(info, this._urlInfo); - debug('info', info); - // determine list of desired and supported transports - var enabledTransports = transports.filterToEnabled(this._transportsWhitelist, info); - this._transports = enabledTransports.main; - debug(this._transports.length + ' enabled transports'); - - this._connect(); -}; - -SockJS.prototype._connect = function() { - for (var Transport = this._transports.shift(); Transport; Transport = this._transports.shift()) { - debug('attempt', Transport.transportName); - if (Transport.needBody) { - if (!global.document.body || - (typeof global.document.readyState !== 'undefined' && - global.document.readyState !== 'complete' && - global.document.readyState !== 'interactive')) { - debug('waiting for body'); - this._transports.unshift(Transport); - eventUtils.attachEvent('load', this._connect.bind(this)); - return; - } - } - - // calculate timeout based on RTO and round trips. Default to 5s - var timeoutMs = (this._rto * Transport.roundTrips) || 5000; - this._transportTimeoutId = setTimeout(this._transportTimeout.bind(this), timeoutMs); - debug('using timeout', timeoutMs); - - var transportUrl = urlUtils.addPath(this._transUrl, '/' + this._server + '/' + this._generateSessionId()); - var options = this._transportOptions[Transport.transportName]; - debug('transport url', transportUrl); - var transportObj = new Transport(transportUrl, this._transUrl, options); - transportObj.on('message', this._transportMessage.bind(this)); - transportObj.once('close', this._transportClose.bind(this)); - transportObj.transportName = Transport.transportName; - this._transport = transportObj; - - return; - } - this._close(2000, 'All transports failed', false); -}; - -SockJS.prototype._transportTimeout = function() { - debug('_transportTimeout'); - if (this.readyState === SockJS.CONNECTING) { - this._transportClose(2007, 'Transport timed out'); - } -}; - -SockJS.prototype._transportMessage = function(msg) { - debug('_transportMessage', msg); - var self = this - , type = msg.slice(0, 1) - , content = msg.slice(1) - , payload - ; - - // first check for messages that don't need a payload - switch (type) { - case 'o': - this._open(); - return; - case 'h': - this.dispatchEvent(new Event('heartbeat')); - debug('heartbeat', this.transport); - return; - } - - if (content) { - try { - payload = JSON3.parse(content); - } catch (e) { - debug('bad json', content); - } - } - - if (typeof payload === 'undefined') { - debug('empty payload', content); - return; - } - - switch (type) { - case 'a': - if (Array.isArray(payload)) { - payload.forEach(function(p) { - debug('message', self.transport, p); - self.dispatchEvent(new TransportMessageEvent(p)); - }); - } - break; - case 'm': - debug('message', this.transport, payload); - this.dispatchEvent(new TransportMessageEvent(payload)); - break; - case 'c': - if (Array.isArray(payload) && payload.length === 2) { - this._close(payload[0], payload[1], true); - } - break; - } -}; - -SockJS.prototype._transportClose = function(code, reason) { - debug('_transportClose', this.transport, code, reason); - if (this._transport) { - this._transport.removeAllListeners(); - this._transport = null; - this.transport = null; - } - - if (!userSetCode(code) && code !== 2000 && this.readyState === SockJS.CONNECTING) { - this._connect(); - return; - } - - this._close(code, reason); -}; - -SockJS.prototype._open = function() { - debug('_open', this._transport.transportName, this.readyState); - if (this.readyState === SockJS.CONNECTING) { - if (this._transportTimeoutId) { - clearTimeout(this._transportTimeoutId); - this._transportTimeoutId = null; - } - this.readyState = SockJS.OPEN; - this.transport = this._transport.transportName; - this.dispatchEvent(new Event('open')); - debug('connected', this.transport); - } else { - // The server might have been restarted, and lost track of our - // connection. - this._close(1006, 'Server lost session'); - } -}; - -SockJS.prototype._close = function(code, reason, wasClean) { - debug('_close', this.transport, code, reason, wasClean, this.readyState); - var forceFail = false; - - if (this._ir) { - forceFail = true; - this._ir.close(); - this._ir = null; - } - if (this._transport) { - this._transport.close(); - this._transport = null; - this.transport = null; - } - - if (this.readyState === SockJS.CLOSED) { - throw new Error('InvalidStateError: SockJS has already been closed'); - } - - this.readyState = SockJS.CLOSING; - setTimeout(function() { - this.readyState = SockJS.CLOSED; - - if (forceFail) { - this.dispatchEvent(new Event('error')); - } - - var e = new CloseEvent('close'); - e.wasClean = wasClean || false; - e.code = code || 1000; - e.reason = reason; - - this.dispatchEvent(e); - this.onmessage = this.onclose = this.onerror = null; - debug('disconnected'); - }.bind(this), 0); -}; - -// See: http://www.erg.abdn.ac.uk/~gerrit/dccp/notes/ccid2/rto_estimator/ -// and RFC 2988. -SockJS.prototype.countRTO = function(rtt) { - // In a local environment, when using IE8/9 and the `jsonp-polling` - // transport the time needed to establish a connection (the time that pass - // from the opening of the transport to the call of `_dispatchOpen`) is - // around 200msec (the lower bound used in the article above) and this - // causes spurious timeouts. For this reason we calculate a value slightly - // larger than that used in the article. - if (rtt > 100) { - return 4 * rtt; // rto > 400msec - } - return 300 + rtt; // 300msec < rto <= 400msec -}; - -module.exports = function(availableTransports) { - transports = transport(availableTransports); - __webpack_require__("../../../../../node_modules/sockjs-client/lib/iframe-bootstrap.js")(SockJS, availableTransports); - return SockJS; -}; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/shims.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* eslint-disable */ -/* jscs: disable */ - - -// pulled specific shims from https://github.com/es-shims/es5-shim - -var ArrayPrototype = Array.prototype; -var ObjectPrototype = Object.prototype; -var FunctionPrototype = Function.prototype; -var StringPrototype = String.prototype; -var array_slice = ArrayPrototype.slice; - -var _toString = ObjectPrototype.toString; -var isFunction = function (val) { - return ObjectPrototype.toString.call(val) === '[object Function]'; -}; -var isArray = function isArray(obj) { - return _toString.call(obj) === '[object Array]'; -}; -var isString = function isString(obj) { - return _toString.call(obj) === '[object String]'; -}; - -var supportsDescriptors = Object.defineProperty && (function () { - try { - Object.defineProperty({}, 'x', {}); - return true; - } catch (e) { /* this is ES3 */ - return false; - } -}()); - -// Define configurable, writable and non-enumerable props -// if they don't exist. -var defineProperty; -if (supportsDescriptors) { - defineProperty = function (object, name, method, forceAssign) { - if (!forceAssign && (name in object)) { return; } - Object.defineProperty(object, name, { - configurable: true, - enumerable: false, - writable: true, - value: method - }); - }; -} else { - defineProperty = function (object, name, method, forceAssign) { - if (!forceAssign && (name in object)) { return; } - object[name] = method; - }; -} -var defineProperties = function (object, map, forceAssign) { - for (var name in map) { - if (ObjectPrototype.hasOwnProperty.call(map, name)) { - defineProperty(object, name, map[name], forceAssign); - } - } -}; - -var toObject = function (o) { - if (o == null) { // this matches both null and undefined - throw new TypeError("can't convert " + o + ' to object'); - } - return Object(o); -}; - -// -// Util -// ====== -// - -// ES5 9.4 -// http://es5.github.com/#x9.4 -// http://jsperf.com/to-integer - -function toInteger(num) { - var n = +num; - if (n !== n) { // isNaN - n = 0; - } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - return n; -} - -function ToUint32(x) { - return x >>> 0; -} - -// -// Function -// ======== -// - -// ES-5 15.3.4.5 -// http://es5.github.com/#x15.3.4.5 - -function Empty() {} - -defineProperties(FunctionPrototype, { - bind: function bind(that) { // .length is 1 - // 1. Let Target be the this value. - var target = this; - // 2. If IsCallable(Target) is false, throw a TypeError exception. - if (!isFunction(target)) { - throw new TypeError('Function.prototype.bind called on incompatible ' + target); - } - // 3. Let A be a new (possibly empty) internal list of all of the - // argument values provided after thisArg (arg1, arg2 etc), in order. - // XXX slicedArgs will stand in for "A" if used - var args = array_slice.call(arguments, 1); // for normal call - // 4. Let F be a new native ECMAScript object. - // 11. Set the [[Prototype]] internal property of F to the standard - // built-in Function prototype object as specified in 15.3.3.1. - // 12. Set the [[Call]] internal property of F as described in - // 15.3.4.5.1. - // 13. Set the [[Construct]] internal property of F as described in - // 15.3.4.5.2. - // 14. Set the [[HasInstance]] internal property of F as described in - // 15.3.4.5.3. - var binder = function () { - - if (this instanceof bound) { - // 15.3.4.5.2 [[Construct]] - // When the [[Construct]] internal method of a function object, - // F that was created using the bind function is called with a - // list of arguments ExtraArgs, the following steps are taken: - // 1. Let target be the value of F's [[TargetFunction]] - // internal property. - // 2. If target has no [[Construct]] internal method, a - // TypeError exception is thrown. - // 3. Let boundArgs be the value of F's [[BoundArgs]] internal - // property. - // 4. Let args be a new list containing the same values as the - // list boundArgs in the same order followed by the same - // values as the list ExtraArgs in the same order. - // 5. Return the result of calling the [[Construct]] internal - // method of target providing args as the arguments. - - var result = target.apply( - this, - args.concat(array_slice.call(arguments)) - ); - if (Object(result) === result) { - return result; - } - return this; - - } else { - // 15.3.4.5.1 [[Call]] - // When the [[Call]] internal method of a function object, F, - // which was created using the bind function is called with a - // this value and a list of arguments ExtraArgs, the following - // steps are taken: - // 1. Let boundArgs be the value of F's [[BoundArgs]] internal - // property. - // 2. Let boundThis be the value of F's [[BoundThis]] internal - // property. - // 3. Let target be the value of F's [[TargetFunction]] internal - // property. - // 4. Let args be a new list containing the same values as the - // list boundArgs in the same order followed by the same - // values as the list ExtraArgs in the same order. - // 5. Return the result of calling the [[Call]] internal method - // of target providing boundThis as the this value and - // providing args as the arguments. - - // equiv: target.call(this, ...boundArgs, ...args) - return target.apply( - that, - args.concat(array_slice.call(arguments)) - ); - - } - - }; - - // 15. If the [[Class]] internal property of Target is "Function", then - // a. Let L be the length property of Target minus the length of A. - // b. Set the length own property of F to either 0 or L, whichever is - // larger. - // 16. Else set the length own property of F to 0. - - var boundLength = Math.max(0, target.length - args.length); - - // 17. Set the attributes of the length own property of F to the values - // specified in 15.3.5.1. - var boundArgs = []; - for (var i = 0; i < boundLength; i++) { - boundArgs.push('$' + i); - } - - // XXX Build a dynamic function with desired amount of arguments is the only - // way to set the length property of a function. - // In environments where Content Security Policies enabled (Chrome extensions, - // for ex.) all use of eval or Function costructor throws an exception. - // However in all of these environments Function.prototype.bind exists - // and so this code will never be executed. - var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder); - - if (target.prototype) { - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - // Clean up dangling references. - Empty.prototype = null; - } - - // TODO - // 18. Set the [[Extensible]] internal property of F to true. - - // TODO - // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3). - // 20. Call the [[DefineOwnProperty]] internal method of F with - // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]: - // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and - // false. - // 21. Call the [[DefineOwnProperty]] internal method of F with - // arguments "arguments", PropertyDescriptor {[[Get]]: thrower, - // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false}, - // and false. - - // TODO - // NOTE Function objects created using Function.prototype.bind do not - // have a prototype property or the [[Code]], [[FormalParameters]], and - // [[Scope]] internal properties. - // XXX can't delete prototype in pure-js. - - // 22. Return F. - return bound; - } -}); - -// -// Array -// ===== -// - -// ES5 15.4.3.2 -// http://es5.github.com/#x15.4.3.2 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray -defineProperties(Array, { isArray: isArray }); - - -var boxedString = Object('a'); -var splitString = boxedString[0] !== 'a' || !(0 in boxedString); - -var properlyBoxesContext = function properlyBoxed(method) { - // Check node 0.6.21 bug where third parameter is not boxed - var properlyBoxesNonStrict = true; - var properlyBoxesStrict = true; - if (method) { - method.call('foo', function (_, __, context) { - if (typeof context !== 'object') { properlyBoxesNonStrict = false; } - }); - - method.call([1], function () { - 'use strict'; - properlyBoxesStrict = typeof this === 'string'; - }, 'x'); - } - return !!method && properlyBoxesNonStrict && properlyBoxesStrict; -}; - -defineProperties(ArrayPrototype, { - forEach: function forEach(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && isString(this) ? this.split('') : object, - thisp = arguments[1], - i = -1, - length = self.length >>> 0; - - // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(); // TODO message - } - - while (++i < length) { - if (i in self) { - // Invoke the callback function with call, passing arguments: - // context, property value, property key, thisArg object - // context - fun.call(thisp, self[i], i, object); - } - } - } -}, !properlyBoxesContext(ArrayPrototype.forEach)); - -// ES5 15.4.4.14 -// http://es5.github.com/#x15.4.4.14 -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf -var hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1; -defineProperties(ArrayPrototype, { - indexOf: function indexOf(sought /*, fromIndex */ ) { - var self = splitString && isString(this) ? this.split('') : toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - - var i = 0; - if (arguments.length > 1) { - i = toInteger(arguments[1]); - } - - // handle negative indices - i = i >= 0 ? i : Math.max(0, length + i); - for (; i < length; i++) { - if (i in self && self[i] === sought) { - return i; - } - } - return -1; - } -}, hasFirefox2IndexOfBug); - -// -// String -// ====== -// - -// ES5 15.5.4.14 -// http://es5.github.com/#x15.5.4.14 - -// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers] -// Many browsers do not split properly with regular expressions or they -// do not perform the split correctly under obscure conditions. -// See http://blog.stevenlevithan.com/archives/cross-browser-split -// I've tested in many browsers and this seems to cover the deviant ones: -// 'ab'.split(/(?:ab)*/) should be ["", ""], not [""] -// '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""] -// 'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not -// [undefined, "t", undefined, "e", ...] -// ''.split(/.?/) should be [], not [""] -// '.'.split(/()()/) should be ["."], not ["", "", "."] - -var string_split = StringPrototype.split; -if ( - 'ab'.split(/(?:ab)*/).length !== 2 || - '.'.split(/(.?)(.?)/).length !== 4 || - 'tesst'.split(/(s)*/)[1] === 't' || - 'test'.split(/(?:)/, -1).length !== 4 || - ''.split(/.?/).length || - '.'.split(/()()/).length > 1 -) { - (function () { - var compliantExecNpcg = /()??/.exec('')[1] === void 0; // NPCG: nonparticipating capturing group - - StringPrototype.split = function (separator, limit) { - var string = this; - if (separator === void 0 && limit === 0) { - return []; - } - - // If `separator` is not a regex, use native split - if (_toString.call(separator) !== '[object RegExp]') { - return string_split.call(this, separator, limit); - } - - var output = [], - flags = (separator.ignoreCase ? 'i' : '') + - (separator.multiline ? 'm' : '') + - (separator.extended ? 'x' : '') + // Proposed for ES6 - (separator.sticky ? 'y' : ''), // Firefox 3+ - lastLastIndex = 0, - // Make `global` and avoid `lastIndex` issues by working with a copy - separator2, match, lastIndex, lastLength; - separator = new RegExp(separator.source, flags + 'g'); - string += ''; // Type-convert - if (!compliantExecNpcg) { - // Doesn't need flags gy, but they don't hurt - separator2 = new RegExp('^' + separator.source + '$(?!\\s)', flags); - } - /* Values for `limit`, per the spec: - * If undefined: 4294967295 // Math.pow(2, 32) - 1 - * If 0, Infinity, or NaN: 0 - * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296; - * If negative number: 4294967296 - Math.floor(Math.abs(limit)) - * If other: Type-convert, then use the above rules - */ - limit = limit === void 0 ? - -1 >>> 0 : // Math.pow(2, 32) - 1 - ToUint32(limit); - while (match = separator.exec(string)) { - // `separator.lastIndex` is not reliable cross-browser - lastIndex = match.index + match[0].length; - if (lastIndex > lastLastIndex) { - output.push(string.slice(lastLastIndex, match.index)); - // Fix browsers whose `exec` methods don't consistently return `undefined` for - // nonparticipating capturing groups - if (!compliantExecNpcg && match.length > 1) { - match[0].replace(separator2, function () { - for (var i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === void 0) { - match[i] = void 0; - } - } - }); - } - if (match.length > 1 && match.index < string.length) { - ArrayPrototype.push.apply(output, match.slice(1)); - } - lastLength = match[0].length; - lastLastIndex = lastIndex; - if (output.length >= limit) { - break; - } - } - if (separator.lastIndex === match.index) { - separator.lastIndex++; // Avoid an infinite loop - } - } - if (lastLastIndex === string.length) { - if (lastLength || !separator.test('')) { - output.push(''); - } - } else { - output.push(string.slice(lastLastIndex)); - } - return output.length > limit ? output.slice(0, limit) : output; - }; - }()); - -// [bugfix, chrome] -// If separator is undefined, then the result array contains just one String, -// which is the this value (converted to a String). If limit is not undefined, -// then the output array is truncated so that it contains no more than limit -// elements. -// "0".split(undefined, 0) -> [] -} else if ('0'.split(void 0, 0).length) { - StringPrototype.split = function split(separator, limit) { - if (separator === void 0 && limit === 0) { return []; } - return string_split.call(this, separator, limit); - }; -} - -// ECMA-262, 3rd B.2.3 -// Not an ECMAScript standard, although ECMAScript 3rd Edition has a -// non-normative section suggesting uniform semantics and it should be -// normalized across all browsers -// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE -var string_substr = StringPrototype.substr; -var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b'; -defineProperties(StringPrototype, { - substr: function substr(start, length) { - return string_substr.call( - this, - start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start, - length - ); - } -}, hasNegativeSubstrBug); - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport-list.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = [ - // streaming transports - __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/websocket.js") -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/xhr-streaming.js") -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/xdr-streaming.js") -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/eventsource.js") -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/iframe-wrap.js")(__webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/eventsource.js")) - - // polling transports -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/htmlfile.js") -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/iframe-wrap.js")(__webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/htmlfile.js")) -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/xhr-polling.js") -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/xdr-polling.js") -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/iframe-wrap.js")(__webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/xhr-polling.js")) -, __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/jsonp-polling.js") -]; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/browser/abstract-xhr.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , utils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/event.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , XHR = global.XMLHttpRequest - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:browser:xhr'); -} - -function AbstractXHRObject(method, url, payload, opts) { - debug(method, url); - var self = this; - EventEmitter.call(this); - - setTimeout(function () { - self._start(method, url, payload, opts); - }, 0); -} - -inherits(AbstractXHRObject, EventEmitter); - -AbstractXHRObject.prototype._start = function(method, url, payload, opts) { - var self = this; - - try { - this.xhr = new XHR(); - } catch (x) { - // intentionally empty - } - - if (!this.xhr) { - debug('no xhr'); - this.emit('finish', 0, 'no xhr support'); - this._cleanup(); - return; - } - - // several browsers cache POSTs - url = urlUtils.addQuery(url, 't=' + (+new Date())); - - // Explorer tends to keep connection open, even after the - // tab gets closed: http://bugs.jquery.com/ticket/5280 - this.unloadRef = utils.unloadAdd(function() { - debug('unload cleanup'); - self._cleanup(true); - }); - try { - this.xhr.open(method, url, true); - if (this.timeout && 'timeout' in this.xhr) { - this.xhr.timeout = this.timeout; - this.xhr.ontimeout = function() { - debug('xhr timeout'); - self.emit('finish', 0, ''); - self._cleanup(false); - }; - } - } catch (e) { - debug('exception', e); - // IE raises an exception on wrong port. - this.emit('finish', 0, ''); - this._cleanup(false); - return; - } - - if ((!opts || !opts.noCredentials) && AbstractXHRObject.supportsCORS) { - debug('withCredentials'); - // Mozilla docs says https://developer.mozilla.org/en/XMLHttpRequest : - // "This never affects same-site requests." - - this.xhr.withCredentials = 'true'; - } - if (opts && opts.headers) { - for (var key in opts.headers) { - this.xhr.setRequestHeader(key, opts.headers[key]); - } - } - - this.xhr.onreadystatechange = function() { - if (self.xhr) { - var x = self.xhr; - var text, status; - debug('readyState', x.readyState); - switch (x.readyState) { - case 3: - // IE doesn't like peeking into responseText or status - // on Microsoft.XMLHTTP and readystate=3 - try { - status = x.status; - text = x.responseText; - } catch (e) { - // intentionally empty - } - debug('status', status); - // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450 - if (status === 1223) { - status = 204; - } - - // IE does return readystate == 3 for 404 answers. - if (status === 200 && text && text.length > 0) { - debug('chunk'); - self.emit('chunk', status, text); - } - break; - case 4: - status = x.status; - debug('status', status); - // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450 - if (status === 1223) { - status = 204; - } - // IE returns this for a bad port - // http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx - if (status === 12005 || status === 12029) { - status = 0; - } - - debug('finish', status, x.responseText); - self.emit('finish', status, x.responseText); - self._cleanup(false); - break; - } - } - }; - - try { - self.xhr.send(payload); - } catch (e) { - self.emit('finish', 0, ''); - self._cleanup(false); - } -}; - -AbstractXHRObject.prototype._cleanup = function(abort) { - debug('cleanup'); - if (!this.xhr) { - return; - } - this.removeAllListeners(); - utils.unloadDel(this.unloadRef); - - // IE needs this field to be a function - this.xhr.onreadystatechange = function() {}; - if (this.xhr.ontimeout) { - this.xhr.ontimeout = null; - } - - if (abort) { - try { - this.xhr.abort(); - } catch (x) { - // intentionally empty - } - } - this.unloadRef = this.xhr = null; -}; - -AbstractXHRObject.prototype.close = function() { - debug('close'); - this._cleanup(true); -}; - -AbstractXHRObject.enabled = !!XHR; -// override XMLHttpRequest for IE6/7 -// obfuscate to avoid firewalls -var axo = ['Active'].concat('Object').join('X'); -if (!AbstractXHRObject.enabled && (axo in global)) { - debug('overriding xmlhttprequest'); - XHR = function() { - try { - return new global[axo]('Microsoft.XMLHTTP'); - } catch (e) { - return null; - } - }; - AbstractXHRObject.enabled = !!new XHR(); -} - -var cors = false; -try { - cors = 'withCredentials' in new XHR(); -} catch (ignored) { - // intentionally empty -} - -AbstractXHRObject.supportsCORS = cors; - -module.exports = AbstractXHRObject; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/browser/eventsource.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {module.exports = global.EventSource; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/browser/websocket.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var Driver = global.WebSocket || global.MozWebSocket; -if (Driver) { - module.exports = function WebSocketBrowserDriver(url) { - return new Driver(url); - }; -} else { - module.exports = undefined; -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/eventsource.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , AjaxBasedTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/ajax-based.js") - , EventSourceReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/receiver/eventsource.js") - , XHRCorsObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-cors.js") - , EventSourceDriver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/browser/eventsource.js") - ; - -function EventSourceTransport(transUrl) { - if (!EventSourceTransport.enabled()) { - throw new Error('Transport created when disabled'); - } - - AjaxBasedTransport.call(this, transUrl, '/eventsource', EventSourceReceiver, XHRCorsObject); -} - -inherits(EventSourceTransport, AjaxBasedTransport); - -EventSourceTransport.enabled = function() { - return !!EventSourceDriver; -}; - -EventSourceTransport.transportName = 'eventsource'; -EventSourceTransport.roundTrips = 2; - -module.exports = EventSourceTransport; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/htmlfile.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , HtmlfileReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/receiver/htmlfile.js") - , XHRLocalObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-local.js") - , AjaxBasedTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/ajax-based.js") - ; - -function HtmlFileTransport(transUrl) { - if (!HtmlfileReceiver.enabled) { - throw new Error('Transport created when disabled'); - } - AjaxBasedTransport.call(this, transUrl, '/htmlfile', HtmlfileReceiver, XHRLocalObject); -} - -inherits(HtmlFileTransport, AjaxBasedTransport); - -HtmlFileTransport.enabled = function(info) { - return HtmlfileReceiver.enabled && info.sameOrigin; -}; - -HtmlFileTransport.transportName = 'htmlfile'; -HtmlFileTransport.roundTrips = 2; - -module.exports = HtmlFileTransport; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/iframe.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -// Few cool transports do work only for same-origin. In order to make -// them work cross-domain we shall use iframe, served from the -// remote domain. New browsers have capabilities to communicate with -// cross domain iframe using postMessage(). In IE it was implemented -// from IE 8+, but of course, IE got some details wrong: -// http://msdn.microsoft.com/en-us/library/cc197015(v=VS.85).aspx -// http://stevesouders.com/misc/test-postmessage.php - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , version = __webpack_require__("../../../../../node_modules/sockjs-client/lib/version.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , iframeUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/iframe.js") - , eventUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/event.js") - , random = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/random.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:transport:iframe'); -} - -function IframeTransport(transport, transUrl, baseUrl) { - if (!IframeTransport.enabled()) { - throw new Error('Transport created when disabled'); - } - EventEmitter.call(this); - - var self = this; - this.origin = urlUtils.getOrigin(baseUrl); - this.baseUrl = baseUrl; - this.transUrl = transUrl; - this.transport = transport; - this.windowId = random.string(8); - - var iframeUrl = urlUtils.addPath(baseUrl, '/iframe.html') + '#' + this.windowId; - debug(transport, transUrl, iframeUrl); - - this.iframeObj = iframeUtils.createIframe(iframeUrl, function(r) { - debug('err callback'); - self.emit('close', 1006, 'Unable to load an iframe (' + r + ')'); - self.close(); - }); - - this.onmessageCallback = this._message.bind(this); - eventUtils.attachEvent('message', this.onmessageCallback); -} - -inherits(IframeTransport, EventEmitter); - -IframeTransport.prototype.close = function() { - debug('close'); - this.removeAllListeners(); - if (this.iframeObj) { - eventUtils.detachEvent('message', this.onmessageCallback); - try { - // When the iframe is not loaded, IE raises an exception - // on 'contentWindow'. - this.postMessage('c'); - } catch (x) { - // intentionally empty - } - this.iframeObj.cleanup(); - this.iframeObj = null; - this.onmessageCallback = this.iframeObj = null; - } -}; - -IframeTransport.prototype._message = function(e) { - debug('message', e.data); - if (!urlUtils.isOriginEqual(e.origin, this.origin)) { - debug('not same origin', e.origin, this.origin); - return; - } - - var iframeMessage; - try { - iframeMessage = JSON3.parse(e.data); - } catch (ignored) { - debug('bad json', e.data); - return; - } - - if (iframeMessage.windowId !== this.windowId) { - debug('mismatched window id', iframeMessage.windowId, this.windowId); - return; - } - - switch (iframeMessage.type) { - case 's': - this.iframeObj.loaded(); - // window global dependency - this.postMessage('s', JSON3.stringify([ - version - , this.transport - , this.transUrl - , this.baseUrl - ])); - break; - case 't': - this.emit('message', iframeMessage.data); - break; - case 'c': - var cdata; - try { - cdata = JSON3.parse(iframeMessage.data); - } catch (ignored) { - debug('bad json', iframeMessage.data); - return; - } - this.emit('close', cdata[0], cdata[1]); - this.close(); - break; - } -}; - -IframeTransport.prototype.postMessage = function(type, data) { - debug('postMessage', type, data); - this.iframeObj.post(JSON3.stringify({ - windowId: this.windowId - , type: type - , data: data || '' - }), this.origin); -}; - -IframeTransport.prototype.send = function(message) { - debug('send', message); - this.postMessage('m', message); -}; - -IframeTransport.enabled = function() { - return iframeUtils.iframeEnabled; -}; - -IframeTransport.transportName = 'iframe'; -IframeTransport.roundTrips = 2; - -module.exports = IframeTransport; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/jsonp-polling.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -// The simplest and most robust transport, using the well-know cross -// domain hack - JSONP. This transport is quite inefficient - one -// message could use up to one http request. But at least it works almost -// everywhere. -// Known limitations: -// o you will get a spinning cursor -// o for Konqueror a dumb timer is needed to detect errors - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , SenderReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/sender-receiver.js") - , JsonpReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/receiver/jsonp.js") - , jsonpSender = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/jsonp.js") - ; - -function JsonPTransport(transUrl) { - if (!JsonPTransport.enabled()) { - throw new Error('Transport created when disabled'); - } - SenderReceiver.call(this, transUrl, '/jsonp', jsonpSender, JsonpReceiver); -} - -inherits(JsonPTransport, SenderReceiver); - -JsonPTransport.enabled = function() { - return !!global.document; -}; - -JsonPTransport.transportName = 'jsonp-polling'; -JsonPTransport.roundTrips = 1; -JsonPTransport.needBody = true; - -module.exports = JsonPTransport; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/lib/ajax-based.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , SenderReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/sender-receiver.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:ajax-based'); -} - -function createAjaxSender(AjaxObject) { - return function(url, payload, callback) { - debug('create ajax sender', url, payload); - var opt = {}; - if (typeof payload === 'string') { - opt.headers = {'Content-type': 'text/plain'}; - } - var ajaxUrl = urlUtils.addPath(url, '/xhr_send'); - var xo = new AjaxObject('POST', ajaxUrl, payload, opt); - xo.once('finish', function(status) { - debug('finish', status); - xo = null; - - if (status !== 200 && status !== 204) { - return callback(new Error('http status ' + status)); - } - callback(); - }); - return function() { - debug('abort'); - xo.close(); - xo = null; - - var err = new Error('Aborted'); - err.code = 1000; - callback(err); - }; - }; -} - -function AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) { - SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject); -} - -inherits(AjaxBasedTransport, SenderReceiver); - -module.exports = AjaxBasedTransport; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/lib/buffered-sender.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:buffered-sender'); -} - -function BufferedSender(url, sender) { - debug(url); - EventEmitter.call(this); - this.sendBuffer = []; - this.sender = sender; - this.url = url; -} - -inherits(BufferedSender, EventEmitter); - -BufferedSender.prototype.send = function(message) { - debug('send', message); - this.sendBuffer.push(message); - if (!this.sendStop) { - this.sendSchedule(); - } -}; - -// For polling transports in a situation when in the message callback, -// new message is being send. If the sending connection was started -// before receiving one, it is possible to saturate the network and -// timeout due to the lack of receiving socket. To avoid that we delay -// sending messages by some small time, in order to let receiving -// connection be started beforehand. This is only a halfmeasure and -// does not fix the big problem, but it does make the tests go more -// stable on slow networks. -BufferedSender.prototype.sendScheduleWait = function() { - debug('sendScheduleWait'); - var self = this; - var tref; - this.sendStop = function() { - debug('sendStop'); - self.sendStop = null; - clearTimeout(tref); - }; - tref = setTimeout(function() { - debug('timeout'); - self.sendStop = null; - self.sendSchedule(); - }, 25); -}; - -BufferedSender.prototype.sendSchedule = function() { - debug('sendSchedule', this.sendBuffer.length); - var self = this; - if (this.sendBuffer.length > 0) { - var payload = '[' + this.sendBuffer.join(',') + ']'; - this.sendStop = this.sender(this.url, payload, function(err) { - self.sendStop = null; - if (err) { - debug('error', err); - self.emit('close', err.code || 1006, 'Sending error: ' + err); - self.close(); - } else { - self.sendScheduleWait(); - } - }); - this.sendBuffer = []; - } -}; - -BufferedSender.prototype._cleanup = function() { - debug('_cleanup'); - this.removeAllListeners(); -}; - -BufferedSender.prototype.close = function() { - debug('close'); - this._cleanup(); - if (this.sendStop) { - this.sendStop(); - this.sendStop = null; - } -}; - -module.exports = BufferedSender; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/lib/iframe-wrap.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , IframeTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/iframe.js") - , objectUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/object.js") - ; - -module.exports = function(transport) { - - function IframeWrapTransport(transUrl, baseUrl) { - IframeTransport.call(this, transport.transportName, transUrl, baseUrl); - } - - inherits(IframeWrapTransport, IframeTransport); - - IframeWrapTransport.enabled = function(url, info) { - if (!global.document) { - return false; - } - - var iframeInfo = objectUtils.extend({}, info); - iframeInfo.sameOrigin = true; - return transport.enabled(iframeInfo) && IframeTransport.enabled(); - }; - - IframeWrapTransport.transportName = 'iframe-' + transport.transportName; - IframeWrapTransport.needBody = true; - IframeWrapTransport.roundTrips = IframeTransport.roundTrips + transport.roundTrips - 1; // html, javascript (2) + transport - no CORS (1) - - IframeWrapTransport.facadeTransport = transport; - - return IframeWrapTransport; -}; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/lib/polling.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:polling'); -} - -function Polling(Receiver, receiveUrl, AjaxObject) { - debug(receiveUrl); - EventEmitter.call(this); - this.Receiver = Receiver; - this.receiveUrl = receiveUrl; - this.AjaxObject = AjaxObject; - this._scheduleReceiver(); -} - -inherits(Polling, EventEmitter); - -Polling.prototype._scheduleReceiver = function() { - debug('_scheduleReceiver'); - var self = this; - var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject); - - poll.on('message', function(msg) { - debug('message', msg); - self.emit('message', msg); - }); - - poll.once('close', function(code, reason) { - debug('close', code, reason, self.pollIsClosing); - self.poll = poll = null; - - if (!self.pollIsClosing) { - if (reason === 'network') { - self._scheduleReceiver(); - } else { - self.emit('close', code || 1006, reason); - self.removeAllListeners(); - } - } - }); -}; - -Polling.prototype.abort = function() { - debug('abort'); - this.removeAllListeners(); - this.pollIsClosing = true; - if (this.poll) { - this.poll.abort(); - } -}; - -module.exports = Polling; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/lib/sender-receiver.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , BufferedSender = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/buffered-sender.js") - , Polling = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/polling.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:sender-receiver'); -} - -function SenderReceiver(transUrl, urlSuffix, senderFunc, Receiver, AjaxObject) { - var pollUrl = urlUtils.addPath(transUrl, urlSuffix); - debug(pollUrl); - var self = this; - BufferedSender.call(this, transUrl, senderFunc); - - this.poll = new Polling(Receiver, pollUrl, AjaxObject); - this.poll.on('message', function(msg) { - debug('poll message', msg); - self.emit('message', msg); - }); - this.poll.once('close', function(code, reason) { - debug('poll close', code, reason); - self.poll = null; - self.emit('close', code, reason); - self.close(); - }); -} - -inherits(SenderReceiver, BufferedSender); - -SenderReceiver.prototype.close = function() { - BufferedSender.prototype.close.call(this); - debug('close'); - this.removeAllListeners(); - if (this.poll) { - this.poll.abort(); - this.poll = null; - } -}; - -module.exports = SenderReceiver; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/receiver/eventsource.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , EventSourceDriver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/browser/eventsource.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:receiver:eventsource'); -} - -function EventSourceReceiver(url) { - debug(url); - EventEmitter.call(this); - - var self = this; - var es = this.es = new EventSourceDriver(url); - es.onmessage = function(e) { - debug('message', e.data); - self.emit('message', decodeURI(e.data)); - }; - es.onerror = function(e) { - debug('error', es.readyState, e); - // ES on reconnection has readyState = 0 or 1. - // on network error it's CLOSED = 2 - var reason = (es.readyState !== 2 ? 'network' : 'permanent'); - self._cleanup(); - self._close(reason); - }; -} - -inherits(EventSourceReceiver, EventEmitter); - -EventSourceReceiver.prototype.abort = function() { - debug('abort'); - this._cleanup(); - this._close('user'); -}; - -EventSourceReceiver.prototype._cleanup = function() { - debug('cleanup'); - var es = this.es; - if (es) { - es.onmessage = es.onerror = null; - es.close(); - this.es = null; - } -}; - -EventSourceReceiver.prototype._close = function(reason) { - debug('close', reason); - var self = this; - // Safari and chrome < 15 crash if we close window before - // waiting for ES cleanup. See: - // https://code.google.com/p/chromium/issues/detail?id=89155 - setTimeout(function() { - self.emit('close', null, reason); - self.removeAllListeners(); - }, 200); -}; - -module.exports = EventSourceReceiver; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/receiver/htmlfile.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , iframeUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/iframe.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , random = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/random.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:receiver:htmlfile'); -} - -function HtmlfileReceiver(url) { - debug(url); - EventEmitter.call(this); - var self = this; - iframeUtils.polluteGlobalNamespace(); - - this.id = 'a' + random.string(6); - url = urlUtils.addQuery(url, 'c=' + decodeURIComponent(iframeUtils.WPrefix + '.' + this.id)); - - debug('using htmlfile', HtmlfileReceiver.htmlfileEnabled); - var constructFunc = HtmlfileReceiver.htmlfileEnabled ? - iframeUtils.createHtmlfile : iframeUtils.createIframe; - - global[iframeUtils.WPrefix][this.id] = { - start: function() { - debug('start'); - self.iframeObj.loaded(); - } - , message: function(data) { - debug('message', data); - self.emit('message', data); - } - , stop: function() { - debug('stop'); - self._cleanup(); - self._close('network'); - } - }; - this.iframeObj = constructFunc(url, function() { - debug('callback'); - self._cleanup(); - self._close('permanent'); - }); -} - -inherits(HtmlfileReceiver, EventEmitter); - -HtmlfileReceiver.prototype.abort = function() { - debug('abort'); - this._cleanup(); - this._close('user'); -}; - -HtmlfileReceiver.prototype._cleanup = function() { - debug('_cleanup'); - if (this.iframeObj) { - this.iframeObj.cleanup(); - this.iframeObj = null; - } - delete global[iframeUtils.WPrefix][this.id]; -}; - -HtmlfileReceiver.prototype._close = function(reason) { - debug('_close', reason); - this.emit('close', null, reason); - this.removeAllListeners(); -}; - -HtmlfileReceiver.htmlfileEnabled = false; - -// obfuscate to avoid firewalls -var axo = ['Active'].concat('Object').join('X'); -if (axo in global) { - try { - HtmlfileReceiver.htmlfileEnabled = !!new global[axo]('htmlfile'); - } catch (x) { - // intentionally empty - } -} - -HtmlfileReceiver.enabled = HtmlfileReceiver.htmlfileEnabled || iframeUtils.iframeEnabled; - -module.exports = HtmlfileReceiver; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/receiver/jsonp.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var utils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/iframe.js") - , random = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/random.js") - , browser = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/browser.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:receiver:jsonp'); -} - -function JsonpReceiver(url) { - debug(url); - var self = this; - EventEmitter.call(this); - - utils.polluteGlobalNamespace(); - - this.id = 'a' + random.string(6); - var urlWithId = urlUtils.addQuery(url, 'c=' + encodeURIComponent(utils.WPrefix + '.' + this.id)); - - global[utils.WPrefix][this.id] = this._callback.bind(this); - this._createScript(urlWithId); - - // Fallback mostly for Konqueror - stupid timer, 35 seconds shall be plenty. - this.timeoutId = setTimeout(function() { - debug('timeout'); - self._abort(new Error('JSONP script loaded abnormally (timeout)')); - }, JsonpReceiver.timeout); -} - -inherits(JsonpReceiver, EventEmitter); - -JsonpReceiver.prototype.abort = function() { - debug('abort'); - if (global[utils.WPrefix][this.id]) { - var err = new Error('JSONP user aborted read'); - err.code = 1000; - this._abort(err); - } -}; - -JsonpReceiver.timeout = 35000; -JsonpReceiver.scriptErrorTimeout = 1000; - -JsonpReceiver.prototype._callback = function(data) { - debug('_callback', data); - this._cleanup(); - - if (this.aborting) { - return; - } - - if (data) { - debug('message', data); - this.emit('message', data); - } - this.emit('close', null, 'network'); - this.removeAllListeners(); -}; - -JsonpReceiver.prototype._abort = function(err) { - debug('_abort', err); - this._cleanup(); - this.aborting = true; - this.emit('close', err.code, err.message); - this.removeAllListeners(); -}; - -JsonpReceiver.prototype._cleanup = function() { - debug('_cleanup'); - clearTimeout(this.timeoutId); - if (this.script2) { - this.script2.parentNode.removeChild(this.script2); - this.script2 = null; - } - if (this.script) { - var script = this.script; - // Unfortunately, you can't really abort script loading of - // the script. - script.parentNode.removeChild(script); - script.onreadystatechange = script.onerror = - script.onload = script.onclick = null; - this.script = null; - } - delete global[utils.WPrefix][this.id]; -}; - -JsonpReceiver.prototype._scriptError = function() { - debug('_scriptError'); - var self = this; - if (this.errorTimer) { - return; - } - - this.errorTimer = setTimeout(function() { - if (!self.loadedOkay) { - self._abort(new Error('JSONP script loaded abnormally (onerror)')); - } - }, JsonpReceiver.scriptErrorTimeout); -}; - -JsonpReceiver.prototype._createScript = function(url) { - debug('_createScript', url); - var self = this; - var script = this.script = global.document.createElement('script'); - var script2; // Opera synchronous load trick. - - script.id = 'a' + random.string(8); - script.src = url; - script.type = 'text/javascript'; - script.charset = 'UTF-8'; - script.onerror = this._scriptError.bind(this); - script.onload = function() { - debug('onload'); - self._abort(new Error('JSONP script loaded abnormally (onload)')); - }; - - // IE9 fires 'error' event after onreadystatechange or before, in random order. - // Use loadedOkay to determine if actually errored - script.onreadystatechange = function() { - debug('onreadystatechange', script.readyState); - if (/loaded|closed/.test(script.readyState)) { - if (script && script.htmlFor && script.onclick) { - self.loadedOkay = true; - try { - // In IE, actually execute the script. - script.onclick(); - } catch (x) { - // intentionally empty - } - } - if (script) { - self._abort(new Error('JSONP script loaded abnormally (onreadystatechange)')); - } - } - }; - // IE: event/htmlFor/onclick trick. - // One can't rely on proper order for onreadystatechange. In order to - // make sure, set a 'htmlFor' and 'event' properties, so that - // script code will be installed as 'onclick' handler for the - // script object. Later, onreadystatechange, manually execute this - // code. FF and Chrome doesn't work with 'event' and 'htmlFor' - // set. For reference see: - // http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html - // Also, read on that about script ordering: - // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order - if (typeof script.async === 'undefined' && global.document.attachEvent) { - // According to mozilla docs, in recent browsers script.async defaults - // to 'true', so we may use it to detect a good browser: - // https://developer.mozilla.org/en/HTML/Element/script - if (!browser.isOpera()) { - // Naively assume we're in IE - try { - script.htmlFor = script.id; - script.event = 'onclick'; - } catch (x) { - // intentionally empty - } - script.async = true; - } else { - // Opera, second sync script hack - script2 = this.script2 = global.document.createElement('script'); - script2.text = "try{var a = document.getElementById('" + script.id + "'); if(a)a.onerror();}catch(x){};"; - script.async = script2.async = false; - } - } - if (typeof script.async !== 'undefined') { - script.async = true; - } - - var head = global.document.getElementsByTagName('head')[0]; - head.insertBefore(script, head.firstChild); - if (script2) { - head.insertBefore(script2, head.firstChild); - } -}; - -module.exports = JsonpReceiver; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/receiver/xhr.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:receiver:xhr'); -} - -function XhrReceiver(url, AjaxObject) { - debug(url); - EventEmitter.call(this); - var self = this; - - this.bufferPosition = 0; - - this.xo = new AjaxObject('POST', url, null); - this.xo.on('chunk', this._chunkHandler.bind(this)); - this.xo.once('finish', function(status, text) { - debug('finish', status, text); - self._chunkHandler(status, text); - self.xo = null; - var reason = status === 200 ? 'network' : 'permanent'; - debug('close', reason); - self.emit('close', null, reason); - self._cleanup(); - }); -} - -inherits(XhrReceiver, EventEmitter); - -XhrReceiver.prototype._chunkHandler = function(status, text) { - debug('_chunkHandler', status); - if (status !== 200 || !text) { - return; - } - - for (var idx = -1; ; this.bufferPosition += idx + 1) { - var buf = text.slice(this.bufferPosition); - idx = buf.indexOf('\n'); - if (idx === -1) { - break; - } - var msg = buf.slice(0, idx); - if (msg) { - debug('message', msg); - this.emit('message', msg); - } - } -}; - -XhrReceiver.prototype._cleanup = function() { - debug('_cleanup'); - this.removeAllListeners(); -}; - -XhrReceiver.prototype.abort = function() { - debug('abort'); - if (this.xo) { - this.xo.close(); - debug('close'); - this.emit('close', null, 'user'); - this.xo = null; - } - this._cleanup(); -}; - -module.exports = XhrReceiver; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/sender/jsonp.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var random = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/random.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:sender:jsonp'); -} - -var form, area; - -function createIframe(id) { - debug('createIframe', id); - try { - // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) - return global.document.createElement('<iframe name="' + id + '">'); - } catch (x) { - var iframe = global.document.createElement('iframe'); - iframe.name = id; - return iframe; - } -} - -function createForm() { - debug('createForm'); - form = global.document.createElement('form'); - form.style.display = 'none'; - form.style.position = 'absolute'; - form.method = 'POST'; - form.enctype = 'application/x-www-form-urlencoded'; - form.acceptCharset = 'UTF-8'; - - area = global.document.createElement('textarea'); - area.name = 'd'; - form.appendChild(area); - - global.document.body.appendChild(form); -} - -module.exports = function(url, payload, callback) { - debug(url, payload); - if (!form) { - createForm(); - } - var id = 'a' + random.string(8); - form.target = id; - form.action = urlUtils.addQuery(urlUtils.addPath(url, '/jsonp_send'), 'i=' + id); - - var iframe = createIframe(id); - iframe.id = id; - iframe.style.display = 'none'; - form.appendChild(iframe); - - try { - area.value = payload; - } catch (e) { - // seriously broken browsers get here - } - form.submit(); - - var completed = function(err) { - debug('completed', id, err); - if (!iframe.onerror) { - return; - } - iframe.onreadystatechange = iframe.onerror = iframe.onload = null; - // Opera mini doesn't like if we GC iframe - // immediately, thus this timeout. - setTimeout(function() { - debug('cleaning up', id); - iframe.parentNode.removeChild(iframe); - iframe = null; - }, 500); - area.value = ''; - // It is not possible to detect if the iframe succeeded or - // failed to submit our form. - callback(err); - }; - iframe.onerror = function() { - debug('onerror', id); - completed(); - }; - iframe.onload = function() { - debug('onload', id); - completed(); - }; - iframe.onreadystatechange = function(e) { - debug('onreadystatechange', id, iframe.readyState, e); - if (iframe.readyState === 'complete') { - completed(); - } - }; - return function() { - debug('aborted', id); - completed(new Error('Aborted')); - }; -}; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/sender/xdr.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , eventUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/event.js") - , browser = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/browser.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:sender:xdr'); -} - -// References: -// http://ajaxian.com/archives/100-line-ajax-wrapper -// http://msdn.microsoft.com/en-us/library/cc288060(v=VS.85).aspx - -function XDRObject(method, url, payload) { - debug(method, url); - var self = this; - EventEmitter.call(this); - - setTimeout(function() { - self._start(method, url, payload); - }, 0); -} - -inherits(XDRObject, EventEmitter); - -XDRObject.prototype._start = function(method, url, payload) { - debug('_start'); - var self = this; - var xdr = new global.XDomainRequest(); - // IE caches even POSTs - url = urlUtils.addQuery(url, 't=' + (+new Date())); - - xdr.onerror = function() { - debug('onerror'); - self._error(); - }; - xdr.ontimeout = function() { - debug('ontimeout'); - self._error(); - }; - xdr.onprogress = function() { - debug('progress', xdr.responseText); - self.emit('chunk', 200, xdr.responseText); - }; - xdr.onload = function() { - debug('load'); - self.emit('finish', 200, xdr.responseText); - self._cleanup(false); - }; - this.xdr = xdr; - this.unloadRef = eventUtils.unloadAdd(function() { - self._cleanup(true); - }); - try { - // Fails with AccessDenied if port number is bogus - this.xdr.open(method, url); - if (this.timeout) { - this.xdr.timeout = this.timeout; - } - this.xdr.send(payload); - } catch (x) { - this._error(); - } -}; - -XDRObject.prototype._error = function() { - this.emit('finish', 0, ''); - this._cleanup(false); -}; - -XDRObject.prototype._cleanup = function(abort) { - debug('cleanup', abort); - if (!this.xdr) { - return; - } - this.removeAllListeners(); - eventUtils.unloadDel(this.unloadRef); - - this.xdr.ontimeout = this.xdr.onerror = this.xdr.onprogress = this.xdr.onload = null; - if (abort) { - try { - this.xdr.abort(); - } catch (x) { - // intentionally empty - } - } - this.unloadRef = this.xdr = null; -}; - -XDRObject.prototype.close = function() { - debug('close'); - this._cleanup(true); -}; - -// IE 8/9 if the request target uses the same scheme - #79 -XDRObject.enabled = !!(global.XDomainRequest && browser.hasDomain()); - -module.exports = XDRObject; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-cors.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , XhrDriver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/browser/abstract-xhr.js") - ; - -function XHRCorsObject(method, url, payload, opts) { - XhrDriver.call(this, method, url, payload, opts); -} - -inherits(XHRCorsObject, XhrDriver); - -XHRCorsObject.enabled = XhrDriver.enabled && XhrDriver.supportsCORS; - -module.exports = XHRCorsObject; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-fake.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - ; - -function XHRFake(/* method, url, payload, opts */) { - var self = this; - EventEmitter.call(this); - - this.to = setTimeout(function() { - self.emit('finish', 200, '{}'); - }, XHRFake.timeout); -} - -inherits(XHRFake, EventEmitter); - -XHRFake.prototype.close = function() { - clearTimeout(this.to); -}; - -XHRFake.timeout = 2000; - -module.exports = XHRFake; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-local.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , XhrDriver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/browser/abstract-xhr.js") - ; - -function XHRLocalObject(method, url, payload /*, opts */) { - XhrDriver.call(this, method, url, payload, { - noCredentials: true - }); -} - -inherits(XHRLocalObject, XhrDriver); - -XHRLocalObject.enabled = XhrDriver.enabled; - -module.exports = XHRLocalObject; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/websocket.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/event.js") - , urlUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/url.js") - , inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , EventEmitter = __webpack_require__("../../../../../node_modules/sockjs-client/lib/event/emitter.js").EventEmitter - , WebsocketDriver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/browser/websocket.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:websocket'); -} - -function WebSocketTransport(transUrl, ignore, options) { - if (!WebSocketTransport.enabled()) { - throw new Error('Transport created when disabled'); - } - - EventEmitter.call(this); - debug('constructor', transUrl); - - var self = this; - var url = urlUtils.addPath(transUrl, '/websocket'); - if (url.slice(0, 5) === 'https') { - url = 'wss' + url.slice(5); - } else { - url = 'ws' + url.slice(4); - } - this.url = url; - - this.ws = new WebsocketDriver(this.url, [], options); - this.ws.onmessage = function(e) { - debug('message event', e.data); - self.emit('message', e.data); - }; - // Firefox has an interesting bug. If a websocket connection is - // created after onunload, it stays alive even when user - // navigates away from the page. In such situation let's lie - - // let's not open the ws connection at all. See: - // https://github.com/sockjs/sockjs-client/issues/28 - // https://bugzilla.mozilla.org/show_bug.cgi?id=696085 - this.unloadRef = utils.unloadAdd(function() { - debug('unload'); - self.ws.close(); - }); - this.ws.onclose = function(e) { - debug('close event', e.code, e.reason); - self.emit('close', e.code, e.reason); - self._cleanup(); - }; - this.ws.onerror = function(e) { - debug('error event', e); - self.emit('close', 1006, 'WebSocket connection broken'); - self._cleanup(); - }; -} - -inherits(WebSocketTransport, EventEmitter); - -WebSocketTransport.prototype.send = function(data) { - var msg = '[' + data + ']'; - debug('send', msg); - this.ws.send(msg); -}; - -WebSocketTransport.prototype.close = function() { - debug('close'); - var ws = this.ws; - this._cleanup(); - if (ws) { - ws.close(); - } -}; - -WebSocketTransport.prototype._cleanup = function() { - debug('_cleanup'); - var ws = this.ws; - if (ws) { - ws.onmessage = ws.onclose = ws.onerror = null; - } - utils.unloadDel(this.unloadRef); - this.unloadRef = this.ws = null; - this.removeAllListeners(); -}; - -WebSocketTransport.enabled = function() { - debug('enabled'); - return !!WebsocketDriver; -}; -WebSocketTransport.transportName = 'websocket'; - -// In theory, ws should require 1 round trip. But in chrome, this is -// not very stable over SSL. Most likely a ws connection requires a -// separate SSL connection, in which case 2 round trips are an -// absolute minumum. -WebSocketTransport.roundTrips = 2; - -module.exports = WebSocketTransport; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/xdr-polling.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , AjaxBasedTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/ajax-based.js") - , XdrStreamingTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/xdr-streaming.js") - , XhrReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/receiver/xhr.js") - , XDRObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xdr.js") - ; - -function XdrPollingTransport(transUrl) { - if (!XDRObject.enabled) { - throw new Error('Transport created when disabled'); - } - AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XDRObject); -} - -inherits(XdrPollingTransport, AjaxBasedTransport); - -XdrPollingTransport.enabled = XdrStreamingTransport.enabled; -XdrPollingTransport.transportName = 'xdr-polling'; -XdrPollingTransport.roundTrips = 2; // preflight, ajax - -module.exports = XdrPollingTransport; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/xdr-streaming.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , AjaxBasedTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/ajax-based.js") - , XhrReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/receiver/xhr.js") - , XDRObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xdr.js") - ; - -// According to: -// http://stackoverflow.com/questions/1641507/detect-browser-support-for-cross-domain-xmlhttprequests -// http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ - -function XdrStreamingTransport(transUrl) { - if (!XDRObject.enabled) { - throw new Error('Transport created when disabled'); - } - AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XDRObject); -} - -inherits(XdrStreamingTransport, AjaxBasedTransport); - -XdrStreamingTransport.enabled = function(info) { - if (info.cookie_needed || info.nullOrigin) { - return false; - } - return XDRObject.enabled && info.sameScheme; -}; - -XdrStreamingTransport.transportName = 'xdr-streaming'; -XdrStreamingTransport.roundTrips = 2; // preflight, ajax - -module.exports = XdrStreamingTransport; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/xhr-polling.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , AjaxBasedTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/ajax-based.js") - , XhrReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/receiver/xhr.js") - , XHRCorsObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-cors.js") - , XHRLocalObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-local.js") - ; - -function XhrPollingTransport(transUrl) { - if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) { - throw new Error('Transport created when disabled'); - } - AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XHRCorsObject); -} - -inherits(XhrPollingTransport, AjaxBasedTransport); - -XhrPollingTransport.enabled = function(info) { - if (info.nullOrigin) { - return false; - } - - if (XHRLocalObject.enabled && info.sameOrigin) { - return true; - } - return XHRCorsObject.enabled; -}; - -XhrPollingTransport.transportName = 'xhr-polling'; -XhrPollingTransport.roundTrips = 2; // preflight, ajax - -module.exports = XhrPollingTransport; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/transport/xhr-streaming.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var inherits = __webpack_require__("../../../../../node_modules/inherits/inherits_browser.js") - , AjaxBasedTransport = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/lib/ajax-based.js") - , XhrReceiver = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/receiver/xhr.js") - , XHRCorsObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-cors.js") - , XHRLocalObject = __webpack_require__("../../../../../node_modules/sockjs-client/lib/transport/sender/xhr-local.js") - , browser = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/browser.js") - ; - -function XhrStreamingTransport(transUrl) { - if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) { - throw new Error('Transport created when disabled'); - } - AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XHRCorsObject); -} - -inherits(XhrStreamingTransport, AjaxBasedTransport); - -XhrStreamingTransport.enabled = function(info) { - if (info.nullOrigin) { - return false; - } - // Opera doesn't support xhr-streaming #60 - // But it might be able to #92 - if (browser.isOpera()) { - return false; - } - - return XHRCorsObject.enabled; -}; - -XhrStreamingTransport.transportName = 'xhr-streaming'; -XhrStreamingTransport.roundTrips = 2; // preflight, ajax - -// Safari gets confused when a streaming ajax request is started -// before onload. This causes the load indicator to spin indefinetely. -// Only require body when used in a browser -XhrStreamingTransport.needBody = !!global.document; - -module.exports = XhrStreamingTransport; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/browser-crypto.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -if (global.crypto && global.crypto.getRandomValues) { - module.exports.randomBytes = function(length) { - var bytes = new Uint8Array(length); - global.crypto.getRandomValues(bytes); - return bytes; - }; -} else { - module.exports.randomBytes = function(length) { - var bytes = new Array(length); - for (var i = 0; i < length; i++) { - bytes[i] = Math.floor(Math.random() * 256); - } - return bytes; - }; -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/browser.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -module.exports = { - isOpera: function() { - return global.navigator && - /opera/i.test(global.navigator.userAgent); - } - -, isKonqueror: function() { - return global.navigator && - /konqueror/i.test(global.navigator.userAgent); - } - - // #187 wrap document.domain in try/catch because of WP8 from file:/// -, hasDomain: function () { - // non-browser client always has a domain - if (!global.document) { - return true; - } - - try { - return !!global.document.domain; - } catch (e) { - return false; - } - } -}; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/escape.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js"); - -// Some extra characters that Chrome gets wrong, and substitutes with -// something else on the wire. -// eslint-disable-next-line no-control-regex -var extraEscapable = /[\x00-\x1f\ud800-\udfff\ufffe\uffff\u0300-\u0333\u033d-\u0346\u034a-\u034c\u0350-\u0352\u0357-\u0358\u035c-\u0362\u0374\u037e\u0387\u0591-\u05af\u05c4\u0610-\u0617\u0653-\u0654\u0657-\u065b\u065d-\u065e\u06df-\u06e2\u06eb-\u06ec\u0730\u0732-\u0733\u0735-\u0736\u073a\u073d\u073f-\u0741\u0743\u0745\u0747\u07eb-\u07f1\u0951\u0958-\u095f\u09dc-\u09dd\u09df\u0a33\u0a36\u0a59-\u0a5b\u0a5e\u0b5c-\u0b5d\u0e38-\u0e39\u0f43\u0f4d\u0f52\u0f57\u0f5c\u0f69\u0f72-\u0f76\u0f78\u0f80-\u0f83\u0f93\u0f9d\u0fa2\u0fa7\u0fac\u0fb9\u1939-\u193a\u1a17\u1b6b\u1cda-\u1cdb\u1dc0-\u1dcf\u1dfc\u1dfe\u1f71\u1f73\u1f75\u1f77\u1f79\u1f7b\u1f7d\u1fbb\u1fbe\u1fc9\u1fcb\u1fd3\u1fdb\u1fe3\u1feb\u1fee-\u1fef\u1ff9\u1ffb\u1ffd\u2000-\u2001\u20d0-\u20d1\u20d4-\u20d7\u20e7-\u20e9\u2126\u212a-\u212b\u2329-\u232a\u2adc\u302b-\u302c\uaab2-\uaab3\uf900-\ufa0d\ufa10\ufa12\ufa15-\ufa1e\ufa20\ufa22\ufa25-\ufa26\ufa2a-\ufa2d\ufa30-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4e\ufff0-\uffff]/g - , extraLookup; - -// This may be quite slow, so let's delay until user actually uses bad -// characters. -var unrollLookup = function(escapable) { - var i; - var unrolled = {}; - var c = []; - for (i = 0; i < 65536; i++) { - c.push( String.fromCharCode(i) ); - } - escapable.lastIndex = 0; - c.join('').replace(escapable, function(a) { - unrolled[ a ] = '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - return ''; - }); - escapable.lastIndex = 0; - return unrolled; -}; - -// Quote string, also taking care of unicode characters that browsers -// often break. Especially, take care of unicode surrogates: -// http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates -module.exports = { - quote: function(string) { - var quoted = JSON3.stringify(string); - - // In most cases this should be very fast and good enough. - extraEscapable.lastIndex = 0; - if (!extraEscapable.test(quoted)) { - return quoted; - } - - if (!extraLookup) { - extraLookup = unrollLookup(extraEscapable); - } - - return quoted.replace(extraEscapable, function(a) { - return extraLookup[a]; - }); - } -}; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/event.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var random = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/random.js"); - -var onUnload = {} - , afterUnload = false - // detect google chrome packaged apps because they don't allow the 'unload' event - , isChromePackagedApp = global.chrome && global.chrome.app && global.chrome.app.runtime - ; - -module.exports = { - attachEvent: function(event, listener) { - if (typeof global.addEventListener !== 'undefined') { - global.addEventListener(event, listener, false); - } else if (global.document && global.attachEvent) { - // IE quirks. - // According to: http://stevesouders.com/misc/test-postmessage.php - // the message gets delivered only to 'document', not 'window'. - global.document.attachEvent('on' + event, listener); - // I get 'window' for ie8. - global.attachEvent('on' + event, listener); - } - } - -, detachEvent: function(event, listener) { - if (typeof global.addEventListener !== 'undefined') { - global.removeEventListener(event, listener, false); - } else if (global.document && global.detachEvent) { - global.document.detachEvent('on' + event, listener); - global.detachEvent('on' + event, listener); - } - } - -, unloadAdd: function(listener) { - if (isChromePackagedApp) { - return null; - } - - var ref = random.string(8); - onUnload[ref] = listener; - if (afterUnload) { - setTimeout(this.triggerUnloadCallbacks, 0); - } - return ref; - } - -, unloadDel: function(ref) { - if (ref in onUnload) { - delete onUnload[ref]; - } - } - -, triggerUnloadCallbacks: function() { - for (var ref in onUnload) { - onUnload[ref](); - delete onUnload[ref]; - } - } -}; - -var unloadTriggered = function() { - if (afterUnload) { - return; - } - afterUnload = true; - module.exports.triggerUnloadCallbacks(); -}; - -// 'unload' alone is not reliable in opera within an iframe, but we -// can't use `beforeunload` as IE fires it on javascript: links. -if (!isChromePackagedApp) { - module.exports.attachEvent('unload', unloadTriggered); -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/iframe.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var eventUtils = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/event.js") - , JSON3 = __webpack_require__("../../../../../node_modules/json3/lib/json3.js") - , browser = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/browser.js") - ; - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:utils:iframe'); -} - -module.exports = { - WPrefix: '_jp' -, currentWindowId: null - -, polluteGlobalNamespace: function() { - if (!(module.exports.WPrefix in global)) { - global[module.exports.WPrefix] = {}; - } - } - -, postMessage: function(type, data) { - if (global.parent !== global) { - global.parent.postMessage(JSON3.stringify({ - windowId: module.exports.currentWindowId - , type: type - , data: data || '' - }), '*'); - } else { - debug('Cannot postMessage, no parent window.', type, data); - } - } - -, createIframe: function(iframeUrl, errorCallback) { - var iframe = global.document.createElement('iframe'); - var tref, unloadRef; - var unattach = function() { - debug('unattach'); - clearTimeout(tref); - // Explorer had problems with that. - try { - iframe.onload = null; - } catch (x) { - // intentionally empty - } - iframe.onerror = null; - }; - var cleanup = function() { - debug('cleanup'); - if (iframe) { - unattach(); - // This timeout makes chrome fire onbeforeunload event - // within iframe. Without the timeout it goes straight to - // onunload. - setTimeout(function() { - if (iframe) { - iframe.parentNode.removeChild(iframe); - } - iframe = null; - }, 0); - eventUtils.unloadDel(unloadRef); - } - }; - var onerror = function(err) { - debug('onerror', err); - if (iframe) { - cleanup(); - errorCallback(err); - } - }; - var post = function(msg, origin) { - debug('post', msg, origin); - try { - // When the iframe is not loaded, IE raises an exception - // on 'contentWindow'. - setTimeout(function() { - if (iframe && iframe.contentWindow) { - iframe.contentWindow.postMessage(msg, origin); - } - }, 0); - } catch (x) { - // intentionally empty - } - }; - - iframe.src = iframeUrl; - iframe.style.display = 'none'; - iframe.style.position = 'absolute'; - iframe.onerror = function() { - onerror('onerror'); - }; - iframe.onload = function() { - debug('onload'); - // `onload` is triggered before scripts on the iframe are - // executed. Give it few seconds to actually load stuff. - clearTimeout(tref); - tref = setTimeout(function() { - onerror('onload timeout'); - }, 2000); - }; - global.document.body.appendChild(iframe); - tref = setTimeout(function() { - onerror('timeout'); - }, 15000); - unloadRef = eventUtils.unloadAdd(cleanup); - return { - post: post - , cleanup: cleanup - , loaded: unattach - }; - } - -/* eslint no-undef: "off", new-cap: "off" */ -, createHtmlfile: function(iframeUrl, errorCallback) { - var axo = ['Active'].concat('Object').join('X'); - var doc = new global[axo]('htmlfile'); - var tref, unloadRef; - var iframe; - var unattach = function() { - clearTimeout(tref); - iframe.onerror = null; - }; - var cleanup = function() { - if (doc) { - unattach(); - eventUtils.unloadDel(unloadRef); - iframe.parentNode.removeChild(iframe); - iframe = doc = null; - CollectGarbage(); - } - }; - var onerror = function(r) { - debug('onerror', r); - if (doc) { - cleanup(); - errorCallback(r); - } - }; - var post = function(msg, origin) { - try { - // When the iframe is not loaded, IE raises an exception - // on 'contentWindow'. - setTimeout(function() { - if (iframe && iframe.contentWindow) { - iframe.contentWindow.postMessage(msg, origin); - } - }, 0); - } catch (x) { - // intentionally empty - } - }; - - doc.open(); - doc.write('<html><s' + 'cript>' + - 'document.domain="' + global.document.domain + '";' + - '</s' + 'cript></html>'); - doc.close(); - doc.parentWindow[module.exports.WPrefix] = global[module.exports.WPrefix]; - var c = doc.createElement('div'); - doc.body.appendChild(c); - iframe = doc.createElement('iframe'); - c.appendChild(iframe); - iframe.src = iframeUrl; - iframe.onerror = function() { - onerror('onerror'); - }; - tref = setTimeout(function() { - onerror('timeout'); - }, 15000); - unloadRef = eventUtils.unloadAdd(cleanup); - return { - post: post - , cleanup: cleanup - , loaded: unattach - }; - } -}; - -module.exports.iframeEnabled = false; -if (global.document) { - // postMessage misbehaves in konqueror 4.6.5 - the messages are delivered with - // huge delay, or not at all. - module.exports.iframeEnabled = (typeof global.postMessage === 'function' || - typeof global.postMessage === 'object') && (!browser.isKonqueror()); -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/log.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var logObject = {}; -['log', 'debug', 'warn'].forEach(function (level) { - var levelExists; - - try { - levelExists = global.console && global.console[level] && global.console[level].apply; - } catch(e) { - // do nothing - } - - logObject[level] = levelExists ? function () { - return global.console[level].apply(global.console, arguments); - } : (level === 'log' ? function () {} : logObject.log); -}); - -module.exports = logObject; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/object.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = { - isObject: function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - } - -, extend: function(obj) { - if (!this.isObject(obj)) { - return obj; - } - var source, prop; - for (var i = 1, length = arguments.length; i < length; i++) { - source = arguments[i]; - for (prop in source) { - if (Object.prototype.hasOwnProperty.call(source, prop)) { - obj[prop] = source[prop]; - } - } - } - return obj; - } -}; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/random.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/* global crypto:true */ -var crypto = __webpack_require__("../../../../../node_modules/sockjs-client/lib/utils/browser-crypto.js"); - -// This string has length 32, a power of 2, so the modulus doesn't introduce a -// bias. -var _randomStringChars = 'abcdefghijklmnopqrstuvwxyz012345'; -module.exports = { - string: function(length) { - var max = _randomStringChars.length; - var bytes = crypto.randomBytes(length); - var ret = []; - for (var i = 0; i < length; i++) { - ret.push(_randomStringChars.substr(bytes[i] % max, 1)); - } - return ret.join(''); - } - -, number: function(max) { - return Math.floor(Math.random() * max); - } - -, numberString: function(max) { - var t = ('' + (max - 1)).length; - var p = new Array(t + 1).join('0'); - return (p + this.number(max)).slice(-t); - } -}; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/transport.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:utils:transport'); -} - -module.exports = function(availableTransports) { - return { - filterToEnabled: function(transportsWhitelist, info) { - var transports = { - main: [] - , facade: [] - }; - if (!transportsWhitelist) { - transportsWhitelist = []; - } else if (typeof transportsWhitelist === 'string') { - transportsWhitelist = [transportsWhitelist]; - } - - availableTransports.forEach(function(trans) { - if (!trans) { - return; - } - - if (trans.transportName === 'websocket' && info.websocket === false) { - debug('disabled from server', 'websocket'); - return; - } - - if (transportsWhitelist.length && - transportsWhitelist.indexOf(trans.transportName) === -1) { - debug('not in whitelist', trans.transportName); - return; - } - - if (trans.enabled(info)) { - debug('enabled', trans.transportName); - transports.main.push(trans); - if (trans.facadeTransport) { - transports.facade.push(trans.facadeTransport); - } - } else { - debug('disabled', trans.transportName); - } - }); - return transports; - } - }; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/utils/url.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var URL = __webpack_require__("../../../../../node_modules/url-parse/index.js"); - -var debug = function() {}; -if (true) { - debug = __webpack_require__("../../../../../node_modules/debug/src/browser.js")('sockjs-client:utils:url'); -} - -module.exports = { - getOrigin: function(url) { - if (!url) { - return null; - } - - var p = new URL(url); - if (p.protocol === 'file:') { - return null; - } - - var port = p.port; - if (!port) { - port = (p.protocol === 'https:') ? '443' : '80'; - } - - return p.protocol + '//' + p.hostname + ':' + port; - } - -, isOriginEqual: function(a, b) { - var res = this.getOrigin(a) === this.getOrigin(b); - debug('same', a, b, res); - return res; - } - -, isSchemeEqual: function(a, b) { - return (a.split(':')[0] === b.split(':')[0]); - } - -, addPath: function (url, path) { - var qs = url.split('?'); - return qs[0] + path + (qs[1] ? '?' + qs[1] : ''); - } - -, addQuery: function (url, q) { - return url + (url.indexOf('?') === -1 ? ('?' + q) : ('&' + q)); - } -}; - - -/***/ }), - -/***/ "../../../../../node_modules/sockjs-client/lib/version.js": -/***/ (function(module, exports) { - -module.exports = '1.1.4'; - - -/***/ }), - -/***/ "../../../../../node_modules/strip-ansi/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var ansiRegex = __webpack_require__("../../../../../node_modules/ansi-regex/index.js")(); - -module.exports = function (str) { - return typeof str === 'string' ? str.replace(ansiRegex, '') : str; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/url-parse/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(global) { - -var required = __webpack_require__("../../../../../node_modules/requires-port/index.js") - , qs = __webpack_require__("../../../../../node_modules/url-parse/node_modules/querystringify/index.js") - , protocolre = /^([a-z][a-z0-9.+-]*:)?(\/\/)?([\S\s]*)/i - , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\/\//; - -/** - * These are the parse rules for the URL parser, it informs the parser - * about: - * - * 0. The char it Needs to parse, if it's a string it should be done using - * indexOf, RegExp using exec and NaN means set as current value. - * 1. The property we should set when parsing this value. - * 2. Indication if it's backwards or forward parsing, when set as number it's - * the value of extra chars that should be split off. - * 3. Inherit from location if non existing in the parser. - * 4. `toLowerCase` the resulting value. - */ -var rules = [ - ['#', 'hash'], // Extract from the back. - ['?', 'query'], // Extract from the back. - ['/', 'pathname'], // Extract from the back. - ['@', 'auth', 1], // Extract from the front. - [NaN, 'host', undefined, 1, 1], // Set left over value. - [/:(\d+)$/, 'port', undefined, 1], // RegExp the back. - [NaN, 'hostname', undefined, 1, 1] // Set left over. -]; - -/** - * These properties should not be copied or inherited from. This is only needed - * for all non blob URL's as a blob URL does not include a hash, only the - * origin. - * - * @type {Object} - * @private - */ -var ignore = { hash: 1, query: 1 }; - -/** - * The location object differs when your code is loaded through a normal page, - * Worker or through a worker using a blob. And with the blobble begins the - * trouble as the location object will contain the URL of the blob, not the - * location of the page where our code is loaded in. The actual origin is - * encoded in the `pathname` so we can thankfully generate a good "default" - * location from it so we can generate proper relative URL's again. - * - * @param {Object|String} loc Optional default location object. - * @returns {Object} lolcation object. - * @api public - */ -function lolcation(loc) { - loc = loc || global.location || {}; - - var finaldestination = {} - , type = typeof loc - , key; - - if ('blob:' === loc.protocol) { - finaldestination = new URL(unescape(loc.pathname), {}); - } else if ('string' === type) { - finaldestination = new URL(loc, {}); - for (key in ignore) delete finaldestination[key]; - } else if ('object' === type) { - for (key in loc) { - if (key in ignore) continue; - finaldestination[key] = loc[key]; - } - - if (finaldestination.slashes === undefined) { - finaldestination.slashes = slashes.test(loc.href); - } - } - - return finaldestination; -} - -/** - * @typedef ProtocolExtract - * @type Object - * @property {String} protocol Protocol matched in the URL, in lowercase. - * @property {Boolean} slashes `true` if protocol is followed by "//", else `false`. - * @property {String} rest Rest of the URL that is not part of the protocol. - */ - -/** - * Extract protocol information from a URL with/without double slash ("//"). - * - * @param {String} address URL we want to extract from. - * @return {ProtocolExtract} Extracted information. - * @api private - */ -function extractProtocol(address) { - var match = protocolre.exec(address); - - return { - protocol: match[1] ? match[1].toLowerCase() : '', - slashes: !!match[2], - rest: match[3] - }; -} - -/** - * Resolve a relative URL pathname against a base URL pathname. - * - * @param {String} relative Pathname of the relative URL. - * @param {String} base Pathname of the base URL. - * @return {String} Resolved pathname. - * @api private - */ -function resolve(relative, base) { - var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/')) - , i = path.length - , last = path[i - 1] - , unshift = false - , up = 0; - - while (i--) { - if (path[i] === '.') { - path.splice(i, 1); - } else if (path[i] === '..') { - path.splice(i, 1); - up++; - } else if (up) { - if (i === 0) unshift = true; - path.splice(i, 1); - up--; - } - } - - if (unshift) path.unshift(''); - if (last === '.' || last === '..') path.push(''); - - return path.join('/'); -} - -/** - * The actual URL instance. Instead of returning an object we've opted-in to - * create an actual constructor as it's much more memory efficient and - * faster and it pleases my OCD. - * - * @constructor - * @param {String} address URL we want to parse. - * @param {Object|String} location Location defaults for relative paths. - * @param {Boolean|Function} parser Parser for the query string. - * @api public - */ -function URL(address, location, parser) { - if (!(this instanceof URL)) { - return new URL(address, location, parser); - } - - var relative, extracted, parse, instruction, index, key - , instructions = rules.slice() - , type = typeof location - , url = this - , i = 0; - - // - // The following if statements allows this module two have compatibility with - // 2 different API: - // - // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments - // where the boolean indicates that the query string should also be parsed. - // - // 2. The `URL` interface of the browser which accepts a URL, object as - // arguments. The supplied object will be used as default values / fall-back - // for relative paths. - // - if ('object' !== type && 'string' !== type) { - parser = location; - location = null; - } - - if (parser && 'function' !== typeof parser) parser = qs.parse; - - location = lolcation(location); - - // - // Extract protocol information before running the instructions. - // - extracted = extractProtocol(address || ''); - relative = !extracted.protocol && !extracted.slashes; - url.slashes = extracted.slashes || relative && location.slashes; - url.protocol = extracted.protocol || location.protocol || ''; - address = extracted.rest; - - // - // When the authority component is absent the URL starts with a path - // component. - // - if (!extracted.slashes) instructions[2] = [/(.*)/, 'pathname']; - - for (; i < instructions.length; i++) { - instruction = instructions[i]; - parse = instruction[0]; - key = instruction[1]; - - if (parse !== parse) { - url[key] = address; - } else if ('string' === typeof parse) { - if (~(index = address.indexOf(parse))) { - if ('number' === typeof instruction[2]) { - url[key] = address.slice(0, index); - address = address.slice(index + instruction[2]); - } else { - url[key] = address.slice(index); - address = address.slice(0, index); - } - } - } else if ((index = parse.exec(address))) { - url[key] = index[1]; - address = address.slice(0, index.index); - } - - url[key] = url[key] || ( - relative && instruction[3] ? location[key] || '' : '' - ); - - // - // Hostname, host and protocol should be lowercased so they can be used to - // create a proper `origin`. - // - if (instruction[4]) url[key] = url[key].toLowerCase(); - } - - // - // Also parse the supplied query string in to an object. If we're supplied - // with a custom parser as function use that instead of the default build-in - // parser. - // - if (parser) url.query = parser(url.query); - - // - // If the URL is relative, resolve the pathname against the base URL. - // - if ( - relative - && location.slashes - && url.pathname.charAt(0) !== '/' - && (url.pathname !== '' || location.pathname !== '') - ) { - url.pathname = resolve(url.pathname, location.pathname); - } - - // - // We should not add port numbers if they are already the default port number - // for a given protocol. As the host also contains the port number we're going - // override it with the hostname which contains no port number. - // - if (!required(url.port, url.protocol)) { - url.host = url.hostname; - url.port = ''; - } - - // - // Parse down the `auth` for the username and password. - // - url.username = url.password = ''; - if (url.auth) { - instruction = url.auth.split(':'); - url.username = instruction[0] || ''; - url.password = instruction[1] || ''; - } - - url.origin = url.protocol && url.host && url.protocol !== 'file:' - ? url.protocol +'//'+ url.host - : 'null'; - - // - // The href is just the compiled result. - // - url.href = url.toString(); -} - -/** - * This is convenience method for changing properties in the URL instance to - * insure that they all propagate correctly. - * - * @param {String} part Property we need to adjust. - * @param {Mixed} value The newly assigned value. - * @param {Boolean|Function} fn When setting the query, it will be the function - * used to parse the query. - * When setting the protocol, double slash will be - * removed from the final url if it is true. - * @returns {URL} - * @api public - */ -function set(part, value, fn) { - var url = this; - - switch (part) { - case 'query': - if ('string' === typeof value && value.length) { - value = (fn || qs.parse)(value); - } - - url[part] = value; - break; - - case 'port': - url[part] = value; - - if (!required(value, url.protocol)) { - url.host = url.hostname; - url[part] = ''; - } else if (value) { - url.host = url.hostname +':'+ value; - } - - break; - - case 'hostname': - url[part] = value; - - if (url.port) value += ':'+ url.port; - url.host = value; - break; - - case 'host': - url[part] = value; - - if (/:\d+$/.test(value)) { - value = value.split(':'); - url.port = value.pop(); - url.hostname = value.join(':'); - } else { - url.hostname = value; - url.port = ''; - } - - break; - - case 'protocol': - url.protocol = value.toLowerCase(); - url.slashes = !fn; - break; - - case 'pathname': - url.pathname = value.length && value.charAt(0) !== '/' ? '/' + value : value; - - break; - - default: - url[part] = value; - } - - for (var i = 0; i < rules.length; i++) { - var ins = rules[i]; - - if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase(); - } - - url.origin = url.protocol && url.host && url.protocol !== 'file:' - ? url.protocol +'//'+ url.host - : 'null'; - - url.href = url.toString(); - - return url; -} - -/** - * Transform the properties back in to a valid and full URL string. - * - * @param {Function} stringify Optional query stringify function. - * @returns {String} - * @api public - */ -function toString(stringify) { - if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify; - - var query - , url = this - , protocol = url.protocol; - - if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':'; - - var result = protocol + (url.slashes ? '//' : ''); - - if (url.username) { - result += url.username; - if (url.password) result += ':'+ url.password; - result += '@'; - } - - result += url.host + url.pathname; - - query = 'object' === typeof url.query ? stringify(url.query) : url.query; - if (query) result += '?' !== query.charAt(0) ? '?'+ query : query; - - if (url.hash) result += url.hash; - - return result; -} - -URL.prototype = { set: set, toString: toString }; - -// -// Expose the URL parser and some additional properties that might be useful for -// others or testing. -// -URL.extractProtocol = extractProtocol; -URL.location = lolcation; -URL.qs = qs; - -module.exports = URL; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/url-parse/node_modules/querystringify/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var has = Object.prototype.hasOwnProperty; - -/** - * Decode a URI encoded string. - * - * @param {String} input The URI encoded string. - * @returns {String} The decoded string. - * @api private - */ -function decode(input) { - return decodeURIComponent(input.replace(/\+/g, ' ')); -} - -/** - * Simple query string parser. - * - * @param {String} query The query string that needs to be parsed. - * @returns {Object} - * @api public - */ -function querystring(query) { - var parser = /([^=?&]+)=?([^&]*)/g - , result = {} - , part; - - // - // Little nifty parsing hack, leverage the fact that RegExp.exec increments - // the lastIndex property so we can continue executing this loop until we've - // parsed all results. - // - for (; - part = parser.exec(query); - result[decode(part[1])] = decode(part[2]) - ); - - return result; -} - -/** - * Transform a query string to an object. - * - * @param {Object} obj Object that should be transformed. - * @param {String} prefix Optional prefix. - * @returns {String} - * @api public - */ -function querystringify(obj, prefix) { - prefix = prefix || ''; - - var pairs = []; - - // - // Optionally prefix with a '?' if needed - // - if ('string' !== typeof prefix) prefix = '?'; - - for (var key in obj) { - if (has.call(obj, key)) { - pairs.push(encodeURIComponent(key) +'='+ encodeURIComponent(obj[key])); - } - } - - return pairs.length ? prefix + pairs.join('&') : ''; -} - -// -// Expose the module. -// -exports.stringify = querystringify; -exports.parse = querystring; - - -/***/ }), - -/***/ "../../../../../node_modules/url/url.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -var punycode = __webpack_require__("../../../../../node_modules/punycode/punycode.js"); -var util = __webpack_require__("../../../../../node_modules/url/util.js"); - -exports.parse = urlParse; -exports.resolve = urlResolve; -exports.resolveObject = urlResolveObject; -exports.format = urlFormat; - -exports.Url = Url; - -function Url() { - this.protocol = null; - this.slashes = null; - this.auth = null; - this.host = null; - this.port = null; - this.hostname = null; - this.hash = null; - this.search = null; - this.query = null; - this.pathname = null; - this.path = null; - this.href = null; -} - -// Reference: RFC 3986, RFC 1808, RFC 2396 - -// define these here so at least they only have to be -// compiled once on the first module load. -var protocolPattern = /^([a-z0-9.+-]+:)/i, - portPattern = /:[0-9]*$/, - - // Special case for a simple path URL - simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, - - // RFC 2396: characters reserved for delimiting URLs. - // We actually just auto-escape these. - delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], - - // RFC 2396: characters not allowed for various reasons. - unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), - - // Allowed by RFCs, but cause of XSS attacks. Always escape these. - autoEscape = ['\''].concat(unwise), - // Characters that are never ever allowed in a hostname. - // Note that any invalid chars are also handled, but these - // are the ones that are *expected* to be seen, so we fast-path - // them. - nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), - hostEndingChars = ['/', '?', '#'], - hostnameMaxLen = 255, - hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, - hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, - // protocols that can allow "unsafe" and "unwise" chars. - unsafeProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that never have a hostname. - hostlessProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that always contain a // bit. - slashedProtocol = { - 'http': true, - 'https': true, - 'ftp': true, - 'gopher': true, - 'file': true, - 'http:': true, - 'https:': true, - 'ftp:': true, - 'gopher:': true, - 'file:': true - }, - querystring = __webpack_require__("../../../../../node_modules/querystring-es3/index.js"); - -function urlParse(url, parseQueryString, slashesDenoteHost) { - if (url && util.isObject(url) && url instanceof Url) return url; - - var u = new Url; - u.parse(url, parseQueryString, slashesDenoteHost); - return u; -} - -Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { - if (!util.isString(url)) { - throw new TypeError("Parameter 'url' must be a string, not " + typeof url); - } - - // Copy chrome, IE, opera backslash-handling behavior. - // Back slashes before the query string get converted to forward slashes - // See: https://code.google.com/p/chromium/issues/detail?id=25916 - var queryIndex = url.indexOf('?'), - splitter = - (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', - uSplit = url.split(splitter), - slashRegex = /\\/g; - uSplit[0] = uSplit[0].replace(slashRegex, '/'); - url = uSplit.join(splitter); - - var rest = url; - - // trim before proceeding. - // This is to support parse stuff like " http://foo.com \n" - rest = rest.trim(); - - if (!slashesDenoteHost && url.split('#').length === 1) { - // Try fast path regexp - var simplePath = simplePathPattern.exec(rest); - if (simplePath) { - this.path = rest; - this.href = rest; - this.pathname = simplePath[1]; - if (simplePath[2]) { - this.search = simplePath[2]; - if (parseQueryString) { - this.query = querystring.parse(this.search.substr(1)); - } else { - this.query = this.search.substr(1); - } - } else if (parseQueryString) { - this.search = ''; - this.query = {}; - } - return this; - } - } - - var proto = protocolPattern.exec(rest); - if (proto) { - proto = proto[0]; - var lowerProto = proto.toLowerCase(); - this.protocol = lowerProto; - rest = rest.substr(proto.length); - } - - // figure out if it's got a host - // user@server is *always* interpreted as a hostname, and url - // resolution will treat //foo/bar as host=foo,path=bar because that's - // how the browser resolves relative URLs. - if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { - var slashes = rest.substr(0, 2) === '//'; - if (slashes && !(proto && hostlessProtocol[proto])) { - rest = rest.substr(2); - this.slashes = true; - } - } - - if (!hostlessProtocol[proto] && - (slashes || (proto && !slashedProtocol[proto]))) { - - // there's a hostname. - // the first instance of /, ?, ;, or # ends the host. - // - // If there is an @ in the hostname, then non-host chars *are* allowed - // to the left of the last @ sign, unless some host-ending character - // comes *before* the @-sign. - // URLs are obnoxious. - // - // ex: - // http://a@b@c/ => user:a@b host:c - // http://a@b?@c => user:a host:c path:/?@c - - // v0.12 TODO(isaacs): This is not quite how Chrome does things. - // Review our test case against browsers more comprehensively. - - // find the first instance of any hostEndingChars - var hostEnd = -1; - for (var i = 0; i < hostEndingChars.length; i++) { - var hec = rest.indexOf(hostEndingChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } - - // at this point, either we have an explicit point where the - // auth portion cannot go past, or the last @ char is the decider. - var auth, atSign; - if (hostEnd === -1) { - // atSign can be anywhere. - atSign = rest.lastIndexOf('@'); - } else { - // atSign must be in auth portion. - // http://a@b/c@d => host:b auth:a path:/c@d - atSign = rest.lastIndexOf('@', hostEnd); - } - - // Now we have a portion which is definitely the auth. - // Pull that off. - if (atSign !== -1) { - auth = rest.slice(0, atSign); - rest = rest.slice(atSign + 1); - this.auth = decodeURIComponent(auth); - } - - // the host is the remaining to the left of the first non-host char - hostEnd = -1; - for (var i = 0; i < nonHostChars.length; i++) { - var hec = rest.indexOf(nonHostChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } - // if we still have not hit it, then the entire thing is a host. - if (hostEnd === -1) - hostEnd = rest.length; - - this.host = rest.slice(0, hostEnd); - rest = rest.slice(hostEnd); - - // pull out port. - this.parseHost(); - - // we've indicated that there is a hostname, - // so even if it's empty, it has to be present. - this.hostname = this.hostname || ''; - - // if hostname begins with [ and ends with ] - // assume that it's an IPv6 address. - var ipv6Hostname = this.hostname[0] === '[' && - this.hostname[this.hostname.length - 1] === ']'; - - // validate a little. - if (!ipv6Hostname) { - var hostparts = this.hostname.split(/\./); - for (var i = 0, l = hostparts.length; i < l; i++) { - var part = hostparts[i]; - if (!part) continue; - if (!part.match(hostnamePartPattern)) { - var newpart = ''; - for (var j = 0, k = part.length; j < k; j++) { - if (part.charCodeAt(j) > 127) { - // we replace non-ASCII char with a temporary placeholder - // we need this to make sure size of hostname is not - // broken by replacing non-ASCII by nothing - newpart += 'x'; - } else { - newpart += part[j]; - } - } - // we test again with ASCII char only - if (!newpart.match(hostnamePartPattern)) { - var validParts = hostparts.slice(0, i); - var notHost = hostparts.slice(i + 1); - var bit = part.match(hostnamePartStart); - if (bit) { - validParts.push(bit[1]); - notHost.unshift(bit[2]); - } - if (notHost.length) { - rest = '/' + notHost.join('.') + rest; - } - this.hostname = validParts.join('.'); - break; - } - } - } - } - - if (this.hostname.length > hostnameMaxLen) { - this.hostname = ''; - } else { - // hostnames are always lower case. - this.hostname = this.hostname.toLowerCase(); - } - - if (!ipv6Hostname) { - // IDNA Support: Returns a punycoded representation of "domain". - // It only converts parts of the domain name that - // have non-ASCII characters, i.e. it doesn't matter if - // you call it with a domain that already is ASCII-only. - this.hostname = punycode.toASCII(this.hostname); - } - - var p = this.port ? ':' + this.port : ''; - var h = this.hostname || ''; - this.host = h + p; - this.href += this.host; - - // strip [ and ] from the hostname - // the host field still retains them, though - if (ipv6Hostname) { - this.hostname = this.hostname.substr(1, this.hostname.length - 2); - if (rest[0] !== '/') { - rest = '/' + rest; - } - } - } - - // now rest is set to the post-host stuff. - // chop off any delim chars. - if (!unsafeProtocol[lowerProto]) { - - // First, make 100% sure that any "autoEscape" chars get - // escaped, even if encodeURIComponent doesn't think they - // need to be. - for (var i = 0, l = autoEscape.length; i < l; i++) { - var ae = autoEscape[i]; - if (rest.indexOf(ae) === -1) - continue; - var esc = encodeURIComponent(ae); - if (esc === ae) { - esc = escape(ae); - } - rest = rest.split(ae).join(esc); - } - } - - - // chop off from the tail first. - var hash = rest.indexOf('#'); - if (hash !== -1) { - // got a fragment string. - this.hash = rest.substr(hash); - rest = rest.slice(0, hash); - } - var qm = rest.indexOf('?'); - if (qm !== -1) { - this.search = rest.substr(qm); - this.query = rest.substr(qm + 1); - if (parseQueryString) { - this.query = querystring.parse(this.query); - } - rest = rest.slice(0, qm); - } else if (parseQueryString) { - // no query string, but parseQueryString still requested - this.search = ''; - this.query = {}; - } - if (rest) this.pathname = rest; - if (slashedProtocol[lowerProto] && - this.hostname && !this.pathname) { - this.pathname = '/'; - } - - //to support http.request - if (this.pathname || this.search) { - var p = this.pathname || ''; - var s = this.search || ''; - this.path = p + s; - } - - // finally, reconstruct the href based on what has been validated. - this.href = this.format(); - return this; -}; - -// format a parsed object into a url string -function urlFormat(obj) { - // ensure it's an object, and not a string url. - // If it's an obj, this is a no-op. - // this way, you can call url_format() on strings - // to clean up potentially wonky urls. - if (util.isString(obj)) obj = urlParse(obj); - if (!(obj instanceof Url)) return Url.prototype.format.call(obj); - return obj.format(); -} - -Url.prototype.format = function() { - var auth = this.auth || ''; - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ':'); - auth += '@'; - } - - var protocol = this.protocol || '', - pathname = this.pathname || '', - hash = this.hash || '', - host = false, - query = ''; - - if (this.host) { - host = auth + this.host; - } else if (this.hostname) { - host = auth + (this.hostname.indexOf(':') === -1 ? - this.hostname : - '[' + this.hostname + ']'); - if (this.port) { - host += ':' + this.port; - } - } - - if (this.query && - util.isObject(this.query) && - Object.keys(this.query).length) { - query = querystring.stringify(this.query); - } - - var search = this.search || (query && ('?' + query)) || ''; - - if (protocol && protocol.substr(-1) !== ':') protocol += ':'; - - // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. - // unless they had them to begin with. - if (this.slashes || - (!protocol || slashedProtocol[protocol]) && host !== false) { - host = '//' + (host || ''); - if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; - } else if (!host) { - host = ''; - } - - if (hash && hash.charAt(0) !== '#') hash = '#' + hash; - if (search && search.charAt(0) !== '?') search = '?' + search; - - pathname = pathname.replace(/[?#]/g, function(match) { - return encodeURIComponent(match); - }); - search = search.replace('#', '%23'); - - return protocol + host + pathname + search + hash; -}; - -function urlResolve(source, relative) { - return urlParse(source, false, true).resolve(relative); -} - -Url.prototype.resolve = function(relative) { - return this.resolveObject(urlParse(relative, false, true)).format(); -}; - -function urlResolveObject(source, relative) { - if (!source) return relative; - return urlParse(source, false, true).resolveObject(relative); -} - -Url.prototype.resolveObject = function(relative) { - if (util.isString(relative)) { - var rel = new Url(); - rel.parse(relative, false, true); - relative = rel; - } - - var result = new Url(); - var tkeys = Object.keys(this); - for (var tk = 0; tk < tkeys.length; tk++) { - var tkey = tkeys[tk]; - result[tkey] = this[tkey]; - } - - // hash is always overridden, no matter what. - // even href="" will remove it. - result.hash = relative.hash; - - // if the relative url is empty, then there's nothing left to do here. - if (relative.href === '') { - result.href = result.format(); - return result; - } - - // hrefs like //foo/bar always cut to the protocol. - if (relative.slashes && !relative.protocol) { - // take everything except the protocol from relative - var rkeys = Object.keys(relative); - for (var rk = 0; rk < rkeys.length; rk++) { - var rkey = rkeys[rk]; - if (rkey !== 'protocol') - result[rkey] = relative[rkey]; - } - - //urlParse appends trailing / to urls like http://www.example.com - if (slashedProtocol[result.protocol] && - result.hostname && !result.pathname) { - result.path = result.pathname = '/'; - } - - result.href = result.format(); - return result; - } - - if (relative.protocol && relative.protocol !== result.protocol) { - // if it's a known url protocol, then changing - // the protocol does weird things - // first, if it's not file:, then we MUST have a host, - // and if there was a path - // to begin with, then we MUST have a path. - // if it is file:, then the host is dropped, - // because that's known to be hostless. - // anything else is assumed to be absolute. - if (!slashedProtocol[relative.protocol]) { - var keys = Object.keys(relative); - for (var v = 0; v < keys.length; v++) { - var k = keys[v]; - result[k] = relative[k]; - } - result.href = result.format(); - return result; - } - - result.protocol = relative.protocol; - if (!relative.host && !hostlessProtocol[relative.protocol]) { - var relPath = (relative.pathname || '').split('/'); - while (relPath.length && !(relative.host = relPath.shift())); - if (!relative.host) relative.host = ''; - if (!relative.hostname) relative.hostname = ''; - if (relPath[0] !== '') relPath.unshift(''); - if (relPath.length < 2) relPath.unshift(''); - result.pathname = relPath.join('/'); - } else { - result.pathname = relative.pathname; - } - result.search = relative.search; - result.query = relative.query; - result.host = relative.host || ''; - result.auth = relative.auth; - result.hostname = relative.hostname || relative.host; - result.port = relative.port; - // to support http.request - if (result.pathname || result.search) { - var p = result.pathname || ''; - var s = result.search || ''; - result.path = p + s; - } - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; - } - - var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), - isRelAbs = ( - relative.host || - relative.pathname && relative.pathname.charAt(0) === '/' - ), - mustEndAbs = (isRelAbs || isSourceAbs || - (result.host && relative.pathname)), - removeAllDots = mustEndAbs, - srcPath = result.pathname && result.pathname.split('/') || [], - relPath = relative.pathname && relative.pathname.split('/') || [], - psychotic = result.protocol && !slashedProtocol[result.protocol]; - - // if the url is a non-slashed url, then relative - // links like ../.. should be able - // to crawl up to the hostname, as well. This is strange. - // result.protocol has already been set by now. - // Later on, put the first path part into the host field. - if (psychotic) { - result.hostname = ''; - result.port = null; - if (result.host) { - if (srcPath[0] === '') srcPath[0] = result.host; - else srcPath.unshift(result.host); - } - result.host = ''; - if (relative.protocol) { - relative.hostname = null; - relative.port = null; - if (relative.host) { - if (relPath[0] === '') relPath[0] = relative.host; - else relPath.unshift(relative.host); - } - relative.host = null; - } - mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); - } - - if (isRelAbs) { - // it's absolute. - result.host = (relative.host || relative.host === '') ? - relative.host : result.host; - result.hostname = (relative.hostname || relative.hostname === '') ? - relative.hostname : result.hostname; - result.search = relative.search; - result.query = relative.query; - srcPath = relPath; - // fall through to the dot-handling below. - } else if (relPath.length) { - // it's relative - // throw away the existing file, and take the new path instead. - if (!srcPath) srcPath = []; - srcPath.pop(); - srcPath = srcPath.concat(relPath); - result.search = relative.search; - result.query = relative.query; - } else if (!util.isNullOrUndefined(relative.search)) { - // just pull out the search. - // like href='?foo'. - // Put this after the other two cases because it simplifies the booleans - if (psychotic) { - result.hostname = result.host = srcPath.shift(); - //occationaly the auth can get stuck only in host - //this especially happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } - } - result.search = relative.search; - result.query = relative.query; - //to support http.request - if (!util.isNull(result.pathname) || !util.isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.href = result.format(); - return result; - } - - if (!srcPath.length) { - // no path at all. easy. - // we've already handled the other stuff above. - result.pathname = null; - //to support http.request - if (result.search) { - result.path = '/' + result.search; - } else { - result.path = null; - } - result.href = result.format(); - return result; - } - - // if a url ENDs in . or .., then it must get a trailing slash. - // however, if it ends in anything else non-slashy, - // then it must NOT get a trailing slash. - var last = srcPath.slice(-1)[0]; - var hasTrailingSlash = ( - (result.host || relative.host || srcPath.length > 1) && - (last === '.' || last === '..') || last === ''); - - // strip single dots, resolve double dots to parent dir - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = srcPath.length; i >= 0; i--) { - last = srcPath[i]; - if (last === '.') { - srcPath.splice(i, 1); - } else if (last === '..') { - srcPath.splice(i, 1); - up++; - } else if (up) { - srcPath.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (!mustEndAbs && !removeAllDots) { - for (; up--; up) { - srcPath.unshift('..'); - } - } - - if (mustEndAbs && srcPath[0] !== '' && - (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { - srcPath.unshift(''); - } - - if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { - srcPath.push(''); - } - - var isAbsolute = srcPath[0] === '' || - (srcPath[0] && srcPath[0].charAt(0) === '/'); - - // put the host back - if (psychotic) { - result.hostname = result.host = isAbsolute ? '' : - srcPath.length ? srcPath.shift() : ''; - //occationaly the auth can get stuck only in host - //this especially happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } - } - - mustEndAbs = mustEndAbs || (result.host && srcPath.length); - - if (mustEndAbs && !isAbsolute) { - srcPath.unshift(''); - } - - if (!srcPath.length) { - result.pathname = null; - result.path = null; - } else { - result.pathname = srcPath.join('/'); - } - - //to support request.http - if (!util.isNull(result.pathname) || !util.isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.auth = relative.auth || result.auth; - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; -}; - -Url.prototype.parseHost = function() { - var host = this.host; - var port = portPattern.exec(host); - if (port) { - port = port[0]; - if (port !== ':') { - this.port = port.substr(1); - } - host = host.substr(0, host.length - port.length); - } - if (host) this.hostname = host; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/url/util.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = { - isString: function(arg) { - return typeof(arg) === 'string'; - }, - isObject: function(arg) { - return typeof(arg) === 'object' && arg !== null; - }, - isNull: function(arg) { - return arg === null; - }, - isNullOrUndefined: function(arg) { - return arg == null; - } -}; - - -/***/ }), - -/***/ "../../../../../node_modules/webpack-dev-server/client/index.js?http:/0.0.0.0:8000": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(__resourceQuery) {/* global __resourceQuery WorkerGlobalScope */ -var url = __webpack_require__("../../../../../node_modules/url/url.js"); -var stripAnsi = __webpack_require__("../../../../../node_modules/strip-ansi/index.js"); -var log = __webpack_require__("../../../../../node_modules/loglevel/lib/loglevel.js") -var socket = __webpack_require__("../../../../../node_modules/webpack-dev-server/client/socket.js"); -var overlay = __webpack_require__("../../../../../node_modules/webpack-dev-server/client/overlay.js"); - -function getCurrentScriptSource() { - // `document.currentScript` is the most accurate way to find the current script, - // but is not supported in all browsers. - if(document.currentScript) - return document.currentScript.getAttribute("src"); - // Fall back to getting all scripts in the document. - var scriptElements = document.scripts || []; - var currentScript = scriptElements[scriptElements.length - 1]; - if(currentScript) - return currentScript.getAttribute("src"); - // Fail as there was no script to use. - throw new Error("[WDS] Failed to get current script source"); -} - -var urlParts; -if(true) { - // If this bundle is inlined, use the resource query to get the correct url. - urlParts = url.parse(__resourceQuery.substr(1)); -} else { - // Else, get the url from the <script> this file was called with. - var scriptHost = getCurrentScriptSource(); - scriptHost = scriptHost.replace(/\/[^\/]+$/, ""); - urlParts = url.parse((scriptHost ? scriptHost : "/"), false, true); -} - -var hot = false; -var initial = true; -var currentHash = ""; -var useWarningOverlay = false; -var useErrorOverlay = false; - -var INFO = "info"; -var WARNING = "warning"; -var ERROR = "error"; -var NONE = "none"; - -// Set the default log level -log.setDefaultLevel(INFO); - -// Send messages to the outside, so plugins can consume it. -function sendMsg(type, data) { - if( - typeof self !== "undefined" && - (typeof WorkerGlobalScope === "undefined" || - !(self instanceof WorkerGlobalScope)) - ) { - self.postMessage({ - type: "webpack" + type, - data: data - }, "*"); - } -} - -var onSocketMsg = { - hot: function() { - hot = true; - log.info("[WDS] Hot Module Replacement enabled."); - }, - invalid: function() { - log.info("[WDS] App updated. Recompiling..."); - sendMsg("Invalid"); - }, - hash: function(hash) { - currentHash = hash; - }, - "still-ok": function() { - log.info("[WDS] Nothing changed.") - if(useWarningOverlay || useErrorOverlay) overlay.clear(); - sendMsg("StillOk"); - }, - "log-level": function(level) { - var hotCtx = __webpack_require__("../../../../../node_modules/webpack/hot ^\\.\\/log$"); - if(hotCtx.keys().length > 0) { - hotCtx("./log").setLogLevel(level); - } - switch(level) { - case INFO: - case ERROR: - log.setLevel(level); - break; - case WARNING: - log.setLevel("warn"); // loglevel's warning name is different from webpack's - break; - case NONE: - log.disableAll(); - break; - default: - log.error("[WDS] Unknown clientLogLevel '" + level + "'"); - } - }, - "overlay": function(overlay) { - if(typeof document !== "undefined") { - if(typeof(overlay) === "boolean") { - useWarningOverlay = false; - useErrorOverlay = overlay; - } else if(overlay) { - useWarningOverlay = overlay.warnings; - useErrorOverlay = overlay.errors; - } - } - }, - ok: function() { - sendMsg("Ok"); - if(useWarningOverlay || useErrorOverlay) overlay.clear(); - if(initial) return initial = false; - reloadApp(); - }, - "content-changed": function() { - log.info("[WDS] Content base changed. Reloading...") - self.location.reload(); - }, - warnings: function(warnings) { - log.warn("[WDS] Warnings while compiling."); - var strippedWarnings = warnings.map(function(warning) { - return stripAnsi(warning); - }); - sendMsg("Warnings", strippedWarnings); - for(var i = 0; i < strippedWarnings.length; i++) - log.warn(strippedWarnings[i]); - if(useWarningOverlay) overlay.showMessage(warnings); - - if(initial) return initial = false; - reloadApp(); - }, - errors: function(errors) { - log.error("[WDS] Errors while compiling. Reload prevented."); - var strippedErrors = errors.map(function(error) { - return stripAnsi(error); - }); - sendMsg("Errors", strippedErrors); - for(var i = 0; i < strippedErrors.length; i++) - log.error(strippedErrors[i]); - if(useErrorOverlay) overlay.showMessage(errors); - }, - error: function(error) { - log.error(error); - }, - close: function() { - log.error("[WDS] Disconnected!"); - sendMsg("Close"); - } -}; - -var hostname = urlParts.hostname; -var protocol = urlParts.protocol; - - -//check ipv4 and ipv6 `all hostname` -if(hostname === "0.0.0.0" || hostname === "::") { - // why do we need this check? - // hostname n/a for file protocol (example, when using electron, ionic) - // see: https://github.com/webpack/webpack-dev-server/pull/384 - if(self.location.hostname && !!~self.location.protocol.indexOf("http")) { - hostname = self.location.hostname; - } -} - -// `hostname` can be empty when the script path is relative. In that case, specifying -// a protocol would result in an invalid URL. -// When https is used in the app, secure websockets are always necessary -// because the browser doesn't accept non-secure websockets. -if(hostname && (self.location.protocol === "https:" || urlParts.hostname === "0.0.0.0")) { - protocol = self.location.protocol; -} - -var socketUrl = url.format({ - protocol: protocol, - auth: urlParts.auth, - hostname: hostname, - port: (urlParts.port === "0") ? self.location.port : urlParts.port, - pathname: urlParts.path == null || urlParts.path === "/" ? "/sockjs-node" : urlParts.path -}); - -socket(socketUrl, onSocketMsg); - -var isUnloading = false; -self.addEventListener("beforeunload", function() { - isUnloading = true; -}); - -function reloadApp() { - if(isUnloading) { - return; - } - if(hot) { - log.info("[WDS] App hot update..."); - var hotEmitter = __webpack_require__("../../../../../node_modules/webpack/hot/emitter.js"); - hotEmitter.emit("webpackHotUpdate", currentHash); - if(typeof self !== "undefined" && self.window) { - // broadcast update to window - self.postMessage("webpackHotUpdate" + currentHash, "*"); - } - } else { - log.info("[WDS] App updated. Reloading..."); - self.location.reload(); - } -} - -/* WEBPACK VAR INJECTION */}.call(exports, "?http://0.0.0.0:8000")) - -/***/ }), - -/***/ "../../../../../node_modules/webpack-dev-server/client/overlay.js": -/***/ (function(module, exports, __webpack_require__) { - -// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app) -// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware). -var ansiHTML = __webpack_require__("../../../../../node_modules/ansi-html/index.js"); -var Entities = __webpack_require__("../../../../../node_modules/html-entities/index.js").AllHtmlEntities; -var entities = new Entities(); - -var colors = { - reset: ["transparent", "transparent"], - black: "181818", - red: "E36049", - green: "B3CB74", - yellow: "FFD080", - blue: "7CAFC2", - magenta: "7FACCA", - cyan: "C3C2EF", - lightgrey: "EBE7E3", - darkgrey: "6D7891" -}; -ansiHTML.setColors(colors); - -function createOverlayIframe(onIframeLoad) { - var iframe = document.createElement("iframe"); - iframe.id = "webpack-dev-server-client-overlay"; - iframe.src = "about:blank"; - iframe.style.position = "fixed"; - iframe.style.left = 0; - iframe.style.top = 0; - iframe.style.right = 0; - iframe.style.bottom = 0; - iframe.style.width = "100vw"; - iframe.style.height = "100vh"; - iframe.style.border = "none"; - iframe.style.zIndex = 9999999999; - iframe.onload = onIframeLoad; - return iframe; -} - -function addOverlayDivTo(iframe) { - var div = iframe.contentDocument.createElement("div"); - div.id = "webpack-dev-server-client-overlay-div"; - div.style.position = "fixed"; - div.style.boxSizing = "border-box"; - div.style.left = 0; - div.style.top = 0; - div.style.right = 0; - div.style.bottom = 0; - div.style.width = "100vw"; - div.style.height = "100vh"; - div.style.backgroundColor = "black"; - div.style.color = "#E8E8E8"; - div.style.fontFamily = "Menlo, Consolas, monospace"; - div.style.fontSize = "large"; - div.style.padding = "2rem"; - div.style.lineHeight = "1.2"; - div.style.whiteSpace = "pre-wrap"; - div.style.overflow = "auto"; - iframe.contentDocument.body.appendChild(div); - return div; -} - -var overlayIframe = null; -var overlayDiv = null; -var lastOnOverlayDivReady = null; - -function ensureOverlayDivExists(onOverlayDivReady) { - if(overlayDiv) { - // Everything is ready, call the callback right away. - onOverlayDivReady(overlayDiv); - return; - } - - // Creating an iframe may be asynchronous so we'll schedule the callback. - // In case of multiple calls, last callback wins. - lastOnOverlayDivReady = onOverlayDivReady; - - if(overlayIframe) { - // We're already creating it. - return; - } - - // Create iframe and, when it is ready, a div inside it. - overlayIframe = createOverlayIframe(function onIframeLoad() { - overlayDiv = addOverlayDivTo(overlayIframe); - // Now we can talk! - lastOnOverlayDivReady(overlayDiv); - }); - - // Zalgo alert: onIframeLoad() will be called either synchronously - // or asynchronously depending on the browser. - // We delay adding it so `overlayIframe` is set when `onIframeLoad` fires. - document.body.appendChild(overlayIframe); -} - -function showMessageOverlay(message) { - ensureOverlayDivExists(function onOverlayDivReady(overlayDiv) { - // Make it look similar to our terminal. - overlayDiv.innerHTML = - "<span style=\"color: #" + - colors.red + - "\">Failed to compile.</span><br><br>" + - ansiHTML(entities.encode(message)); - }); -} - -function destroyErrorOverlay() { - if(!overlayDiv) { - // It is not there in the first place. - return; - } - - // Clean up and reset internal state. - document.body.removeChild(overlayIframe); - overlayDiv = null; - overlayIframe = null; - lastOnOverlayDivReady = null; -} - -// Successful compilation. -exports.clear = function handleSuccess() { - destroyErrorOverlay(); -} - -// Compilation with errors (e.g. syntax error or missing modules). -exports.showMessage = function handleMessage(messages) { - showMessageOverlay(messages[0]); -} - - -/***/ }), - -/***/ "../../../../../node_modules/webpack-dev-server/client/socket.js": -/***/ (function(module, exports, __webpack_require__) { - -var SockJS = __webpack_require__("../../../../../node_modules/sockjs-client/lib/entry.js"); - -var retries = 0; -var sock = null; - -function socket(url, handlers) { - sock = new SockJS(url); - - sock.onopen = function() { - retries = 0; - } - - sock.onclose = function() { - if(retries === 0) - handlers.close(); - - // Try to reconnect. - sock = null; - - // After 10 retries stop trying, to prevent logspam. - if(retries <= 10) { - // Exponentially increase timeout to reconnect. - // Respectfully copied from the package `got`. - var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100; - retries += 1; - - setTimeout(function() { - socket(url, handlers); - }, retryInMs); - } - }; - - sock.onmessage = function(e) { - // This assumes that all data sent via the websocket is JSON. - var msg = JSON.parse(e.data); - if(handlers[msg.type]) - handlers[msg.type](msg.data); - }; -} - -module.exports = socket; - - -/***/ }), - -/***/ "../../../../../node_modules/webpack/buildin/amd-options.js": -/***/ (function(module, exports) { - -/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */ -module.exports = __webpack_amd_options__; - -/* WEBPACK VAR INJECTION */}.call(exports, {})) - -/***/ }), - -/***/ "../../../../../node_modules/webpack/buildin/global.js": -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), - -/***/ "../../../../../node_modules/webpack/buildin/module.js": -/***/ (function(module, exports) { - -module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if(!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/webpack/hot ^\\.\\/log$": -/***/ (function(module, exports) { - -function webpackEmptyContext(req) { - throw new Error("Cannot find module '" + req + "'."); -} -webpackEmptyContext.keys = function() { return []; }; -webpackEmptyContext.resolve = webpackEmptyContext; -module.exports = webpackEmptyContext; -webpackEmptyContext.id = "../../../../../node_modules/webpack/hot ^\\.\\/log$"; - -/***/ }), - -/***/ "../../../../../node_modules/webpack/hot/dev-server.js": -/***/ (function(module, exports, __webpack_require__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -/*globals window __webpack_hash__ */ -if(true) { - var lastHash; - var upToDate = function upToDate() { - return lastHash.indexOf(__webpack_require__.h()) >= 0; - }; - var check = function check() { - module.hot.check(true).then(function(updatedModules) { - if(!updatedModules) { - console.warn("[HMR] Cannot find update. Need to do a full reload!"); - console.warn("[HMR] (Probably because of restarting the webpack-dev-server)"); - window.location.reload(); - return; - } - - if(!upToDate()) { - check(); - } - - __webpack_require__("../../../../../node_modules/webpack/hot/log-apply-result.js")(updatedModules, updatedModules); - - if(upToDate()) { - console.log("[HMR] App is up to date."); - } - - }).catch(function(err) { - var status = module.hot.status(); - if(["abort", "fail"].indexOf(status) >= 0) { - console.warn("[HMR] Cannot apply update. Need to do a full reload!"); - console.warn("[HMR] " + err.stack || err.message); - window.location.reload(); - } else { - console.warn("[HMR] Update failed: " + err.stack || err.message); - } - }); - }; - var hotEmitter = __webpack_require__("../../../../../node_modules/webpack/hot/emitter.js"); - hotEmitter.on("webpackHotUpdate", function(currentHash) { - lastHash = currentHash; - if(!upToDate() && module.hot.status() === "idle") { - console.log("[HMR] Checking for updates on the server..."); - check(); - } - }); - console.log("[HMR] Waiting for update signal from WDS..."); -} else { - throw new Error("[HMR] Hot Module Replacement is disabled."); -} - - -/***/ }), - -/***/ "../../../../../node_modules/webpack/hot/emitter.js": -/***/ (function(module, exports, __webpack_require__) { - -var EventEmitter = __webpack_require__("../../../../../node_modules/events/events.js"); -module.exports = new EventEmitter(); - - -/***/ }), - -/***/ "../../../../../node_modules/webpack/hot/log-apply-result.js": -/***/ (function(module, exports) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -module.exports = function(updatedModules, renewedModules) { - var unacceptedModules = updatedModules.filter(function(moduleId) { - return renewedModules && renewedModules.indexOf(moduleId) < 0; - }); - - if(unacceptedModules.length > 0) { - console.warn("[HMR] The following modules couldn't be hot updated: (They would need a full reload!)"); - unacceptedModules.forEach(function(moduleId) { - console.warn("[HMR] - " + moduleId); - }); - } - - if(!renewedModules || renewedModules.length === 0) { - console.log("[HMR] Nothing hot updated."); - } else { - console.log("[HMR] Updated modules:"); - renewedModules.forEach(function(moduleId) { - console.log("[HMR] - " + moduleId); - }); - var numberIds = renewedModules.every(function(moduleId) { - return typeof moduleId === "number"; - }); - if(numberIds) - console.log("[HMR] Consider using the NamedModulesPlugin for module names."); - } -}; - - -/***/ }), - -/***/ 0: -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__("../../../../../node_modules/webpack/hot/dev-server.js"); -__webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"); -module.exports = __webpack_require__("../../../../../node_modules/lightgallery/dist/js/lightgallery.js"); - - -/***/ }) - -},[0]); diff --git a/assets/js/main.js b/assets/js/main.js index 2f0b1a2c7cae8b0bda3ce331c4470e1bac228f2c..38833ef64b255582d1a8c749b56cb671d717371b 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -1,10669 +1,58 @@ -webpackJsonp([1],{ - -/***/ "../../../../../node_modules/asap/asap.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(process, setImmediate) { -// Use the fastest possible means to execute a task in a future turn -// of the event loop. - -// linked list of tasks (single, with head node) -var head = {task: void 0, next: null}; -var tail = head; -var flushing = false; -var requestFlush = void 0; -var isNodeJS = false; - -function flush() { - /* jshint loopfunc: true */ - - while (head.next) { - head = head.next; - var task = head.task; - head.task = void 0; - var domain = head.domain; - - if (domain) { - head.domain = void 0; - domain.enter(); - } - - try { - task(); - - } catch (e) { - if (isNodeJS) { - // In node, uncaught exceptions are considered fatal errors. - // Re-throw them synchronously to interrupt flushing! - - // Ensure continuation if the uncaught exception is suppressed - // listening "uncaughtException" events (as domains does). - // Continue in next event to avoid tick recursion. - if (domain) { - domain.exit(); - } - setTimeout(flush, 0); - if (domain) { - domain.enter(); - } - - throw e; - - } else { - // In browsers, uncaught exceptions are not fatal. - // Re-throw them asynchronously to avoid slow-downs. - setTimeout(function() { - throw e; - }, 0); - } - } - - if (domain) { - domain.exit(); - } - } - - flushing = false; -} - -if (typeof process !== "undefined" && process.nextTick) { - // Node.js before 0.9. Note that some fake-Node environments, like the - // Mocha test runner, introduce a `process` global without a `nextTick`. - isNodeJS = true; - - requestFlush = function () { - process.nextTick(flush); - }; - -} else if (typeof setImmediate === "function") { - // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate - if (typeof window !== "undefined") { - requestFlush = setImmediate.bind(window, flush); - } else { - requestFlush = function () { - setImmediate(flush); - }; - } - -} else if (typeof MessageChannel !== "undefined") { - // modern browsers - // http://www.nonblocking.io/2011/06/windownexttick.html - var channel = new MessageChannel(); - channel.port1.onmessage = flush; - requestFlush = function () { - channel.port2.postMessage(0); - }; - -} else { - // old browsers - requestFlush = function () { - setTimeout(flush, 0); - }; -} - -function asap(task) { - tail = tail.next = { - task: task, - domain: isNodeJS && process.domain, - next: null - }; - - if (!flushing) { - flushing = true; - requestFlush(); - } -}; - -module.exports = asap; - - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/process/browser.js"), __webpack_require__("../../../../../node_modules/timers-browserify/main.js").setImmediate)) - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!../../../../../node_modules/lightgallery/dist/css/lightgallery.css": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/blog.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/careers.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/contact.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/documentation.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/get-framac.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/home.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports -exports.i(__webpack_require__("../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!./style/lib/swiper.css"), ""); - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/main.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports -exports.push([module.i, "@import url(https://fonts.googleapis.com/css?family=Muli:300,300i,400,400i,600,600i,700,700i,800,800i,900,900i);", ""]); - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/page.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/plugin.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!./style/terms.less": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("../../../../../node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!./style/lib/swiper.css": -/***/ (function(module, exports, __webpack_require__) { - -// imports - - -// module - -// exports - - -/***/ }), - -/***/ "../../../../../node_modules/css-loader/lib/css-base.js": -/***/ (function(module, exports) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -// css base code, injected by the css-loader -module.exports = function(useSourceMap) { - var list = []; - - // return the list of modules as css string - list.toString = function toString() { - return this.map(function (item) { - var content = cssWithMappingToString(item, useSourceMap); - if(item[2]) { - return "@media " + item[2] + "{" + content + "}"; - } else { - return content; - } - }).join(""); - }; - - // import a list of modules into the list - list.i = function(modules, mediaQuery) { - if(typeof modules === "string") - modules = [[null, modules, ""]]; - var alreadyImportedModules = {}; - for(var i = 0; i < this.length; i++) { - var id = this[i][0]; - if(typeof id === "number") - alreadyImportedModules[id] = true; - } - for(i = 0; i < modules.length; i++) { - var item = modules[i]; - // skip already imported module - // this implementation is not 100% perfect for weird media query combinations - // when a module is imported multiple times with different media queries. - // I hope this will never occur (Hey this way we have smaller bundles) - if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) { - if(mediaQuery && !item[2]) { - item[2] = mediaQuery; - } else if(mediaQuery) { - item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"; - } - list.push(item); - } - } - }; - return list; -}; - -function cssWithMappingToString(item, useSourceMap) { - var content = item[1] || ''; - var cssMapping = item[3]; - if (!cssMapping) { - return content; - } - - if (useSourceMap && typeof btoa === 'function') { - var sourceMapping = toComment(cssMapping); - var sourceURLs = cssMapping.sources.map(function (source) { - return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */' - }); - - return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); - } - - return [content].join('\n'); -} - -// Adapted from convert-source-map (MIT) -function toComment(sourceMap) { - // eslint-disable-next-line no-undef - var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); - var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64; - - return '/*# ' + data + ' */'; -} - - -/***/ }), - -/***/ "../../../../../node_modules/google-maps-api/index.js": -/***/ (function(module, exports, __webpack_require__) { - -/** @module google-maps-api */ - -var script = __webpack_require__( "../../../../../node_modules/scriptjs/dist/script.js" ), - promise = __webpack_require__( "../../../../../node_modules/promise/index.js" ); - -var maps = null, - callBacks = [], - key; - -window.$$mapsCB = function() { - - maps = google.maps; - - for( var i = 0, len = callBacks.length; i < len; i++ ) { - - resolve.apply( undefined, callBacks[ i ] ); - } -}; - -function resolve( onOk, onErr, onComplete, err ) { - - if( !err ) { - - onOk( maps ); - - if( onComplete ) - onComplete( undefined, maps ); - } else { - - onErr( err ); - - if( onComplete ) - onComplete( err ); - } -} - - -/** - * Load a Google Maps API Object asynchronously. This module will return a Promise. - * Which will on resolved will return the "google.maps" object. - * - * Or if you prefer you can simply use the callback instead. - * - * @param {String} apikey Your Google Maps API Key - * @param {Function} [onComplete] A callback which will return the google.maps object - * @return {Promise} When this promise resolves it will return the google.maps object - * - * @example using via promise - * - * ```javascript - * var mapsapi = require( 'google-maps-api' )( 'your api key' ); - * - * mapsapi().then( function( maps ) { - * - * //use the google.maps object as you please - * }); - * ``` - * - * @example using via callback - * ```javascript - * require( 'google-maps-api' )( 'your api key', function( maps ) { - * - * //use the google.maps object as you please - * }) - * ``` - */ -module.exports = function( apikey, libraries, onComplete ) { - - key = apikey || key; - if (typeof libraries == 'function') { - onComplete = libraries; - libraries = []; - } - - return function() { - - return new promise( function( onOk, onErr ) { - - if( !key ) { - - resolve( onOk, onErr, onComplete, new Error( 'No API key passed to require(\'google-maps-api\')' ) ); - } else { - - if( maps ) { - - resolve( onOk, onErr, onComplete ); - } else { - - callBacks.push( [ onOk, onErr, onComplete ] ); - - if (callBacks.length == 1) { - var auth = ''; - if (typeof key == 'string') { - - auth = '&key=' + key; - } else if (typeof key == 'object') { - - auth = '&' + Object.keys(key).map(function (k) { - return k + '=' + encodeURIComponent(key[k]); - }).join('&'); - } - - var url = 'https://maps.googleapis.com/maps/api/js?v=3&callback=$$mapsCB' + auth; - if (Array.isArray(libraries) && libraries.length > 0) { - url+='&libraries='+libraries.join(','); - } - script( url ); - } - } - } - }); - }; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/css/lightgallery.css": -/***/ (function(module, exports, __webpack_require__) { - -// style-loader: Adds some css to the DOM by adding a <style> tag - -// load the styles -var content = __webpack_require__("../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!../../../../../node_modules/lightgallery/dist/css/lightgallery.css"); -if(typeof content === 'string') content = [[module.i, content, '']]; -// Prepare cssTransformation -var transform; - -var options = {} -options.transform = transform -// add the styles to the DOM -var update = __webpack_require__("../../../../../node_modules/style-loader/lib/addStyles.js")(content, options); -if(content.locals) module.exports = content.locals; -// Hot Module Replacement -if(true) { - // When the styles change, update the <style> tags - if(!content.locals) { - module.hot.accept("../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!../../../../../node_modules/lightgallery/dist/css/lightgallery.css", function() { - var newContent = __webpack_require__("../../../../../node_modules/css-loader/index.js?{\"sourceMap\":true,\"minimize\":false}!../../../../../node_modules/postcss-loader/lib/index.js?{\"sourceMap\":true}!../../../../../node_modules/less-loader/dist/cjs.js?{\"sourceMap\":true}!../../../../../node_modules/lightgallery/dist/css/lightgallery.css"); - if(typeof newContent === 'string') newContent = [[module.i, newContent, '']]; - update(newContent); - }); - } - // When the module is disposed, remove the <style> tags - module.hot.dispose(function() { update(); }); -} - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/fonts/lg.eot": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "font/lg.ecff1170.eot"; - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/fonts/lg.eot?n1z373": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "font/lg.ecff1170.eot"; - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/fonts/lg.svg?n1z373": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/lg.0cb1b8af.svg"; - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/fonts/lg.ttf?n1z373": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "font/lg.4fe6f9ca.ttf"; - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/fonts/lg.woff?n1z373": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "font/lg.5fd4c338.woff"; - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/img/loading.gif": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/loading.bbdac9cd.gif"; - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/img/video-play.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/video-play.dc34cc9c.png"; - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/img/vimeo-play.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/vimeo-play.dfe7764b.png"; - -/***/ }), - -/***/ "../../../../../node_modules/lightgallery/dist/img/youtube-play.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/youtube-play.e6f0c233.png"; - -/***/ }), - -/***/ "../../../../../node_modules/parsleyjs/dist/parsley.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {/*! -* Parsley.js -* Version 2.7.2 - built Tue, May 9th 2017, 11:21 am -* http://parsleyjs.org -* Guillaume Potier - <guillaume@wisembly.com> -* Marc-Andre Lafortune - <petroselinum@marc-andre.ca> -* MIT Licensed -*/ - -// The source code below is generated by babel as -// Parsley is written in ECMAScript 6 -// -var _slice = Array.prototype.slice; - -var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } - -(function (global, factory) { - true ? module.exports = factory(__webpack_require__("../../../../../node_modules/jquery/dist/jquery.js")) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : global.parsley = factory(global.jQuery); -})(this, function ($) { - 'use strict'; - - var globalID = 1; - var pastWarnings = {}; - - var Utils = { - // Parsley DOM-API - // returns object from dom attributes and values - attr: function attr(element, namespace, obj) { - var i; - var attribute; - var attributes; - var regex = new RegExp('^' + namespace, 'i'); - - if ('undefined' === typeof obj) obj = {};else { - // Clear all own properties. This won't affect prototype's values - for (i in obj) { - if (obj.hasOwnProperty(i)) delete obj[i]; - } - } - - if (!element) return obj; - - attributes = element.attributes; - for (i = attributes.length; i--;) { - attribute = attributes[i]; - - if (attribute && attribute.specified && regex.test(attribute.name)) { - obj[this.camelize(attribute.name.slice(namespace.length))] = this.deserializeValue(attribute.value); - } - } - - return obj; - }, - - checkAttr: function checkAttr(element, namespace, _checkAttr) { - return element.hasAttribute(namespace + _checkAttr); - }, - - setAttr: function setAttr(element, namespace, attr, value) { - element.setAttribute(this.dasherize(namespace + attr), String(value)); - }, - - generateID: function generateID() { - return '' + globalID++; - }, - - /** Third party functions **/ - // Zepto deserialize function - deserializeValue: function deserializeValue(value) { - var num; - - try { - return value ? value == "true" || (value == "false" ? false : value == "null" ? null : !isNaN(num = Number(value)) ? num : /^[\[\{]/.test(value) ? $.parseJSON(value) : value) : value; - } catch (e) { - return value; - } - }, - - // Zepto camelize function - camelize: function camelize(str) { - return str.replace(/-+(.)?/g, function (match, chr) { - return chr ? chr.toUpperCase() : ''; - }); - }, - - // Zepto dasherize function - dasherize: function dasherize(str) { - return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\d])([A-Z])/g, '$1_$2').replace(/_/g, '-').toLowerCase(); - }, - - warn: function warn() { - var _window$console; - - if (window.console && 'function' === typeof window.console.warn) (_window$console = window.console).warn.apply(_window$console, arguments); - }, - - warnOnce: function warnOnce(msg) { - if (!pastWarnings[msg]) { - pastWarnings[msg] = true; - this.warn.apply(this, arguments); - } - }, - - _resetWarnings: function _resetWarnings() { - pastWarnings = {}; - }, - - trimString: function trimString(string) { - return string.replace(/^\s+|\s+$/g, ''); - }, - - parse: { - date: function date(string) { - var parsed = string.match(/^(\d{4,})-(\d\d)-(\d\d)$/); - if (!parsed) return null; - - var _parsed$map = parsed.map(function (x) { - return parseInt(x, 10); - }); - - var _parsed$map2 = _slicedToArray(_parsed$map, 4); - - var _ = _parsed$map2[0]; - var year = _parsed$map2[1]; - var month = _parsed$map2[2]; - var day = _parsed$map2[3]; - - var date = new Date(year, month - 1, day); - if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) return null; - return date; - }, - string: function string(_string) { - return _string; - }, - integer: function integer(string) { - if (isNaN(string)) return null; - return parseInt(string, 10); - }, - number: function number(string) { - if (isNaN(string)) throw null; - return parseFloat(string); - }, - 'boolean': function _boolean(string) { - return !/^\s*false\s*$/i.test(string); - }, - object: function object(string) { - return Utils.deserializeValue(string); - }, - regexp: function regexp(_regexp) { - var flags = ''; - - // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern - if (/^\/.*\/(?:[gimy]*)$/.test(_regexp)) { - // Replace the regexp literal string with the first match group: ([gimy]*) - // If no flag is present, this will be a blank string - flags = _regexp.replace(/.*\/([gimy]*)$/, '$1'); - // Again, replace the regexp literal string with the first match group: - // everything excluding the opening and closing slashes and the flags - _regexp = _regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1'); - } else { - // Anchor regexp: - _regexp = '^' + _regexp + '$'; - } - return new RegExp(_regexp, flags); - } - }, - - parseRequirement: function parseRequirement(requirementType, string) { - var converter = this.parse[requirementType || 'string']; - if (!converter) throw 'Unknown requirement specification: "' + requirementType + '"'; - var converted = converter(string); - if (converted === null) throw 'Requirement is not a ' + requirementType + ': "' + string + '"'; - return converted; - }, - - namespaceEvents: function namespaceEvents(events, namespace) { - events = this.trimString(events || '').split(/\s+/); - if (!events[0]) return ''; - return $.map(events, function (evt) { - return evt + '.' + namespace; - }).join(' '); - }, - - difference: function difference(array, remove) { - // This is O(N^2), should be optimized - var result = []; - $.each(array, function (_, elem) { - if (remove.indexOf(elem) == -1) result.push(elem); - }); - return result; - }, - - // Alter-ego to native Promise.all, but for jQuery - all: function all(promises) { - // jQuery treats $.when() and $.when(singlePromise) differently; let's avoid that and add spurious elements - return $.when.apply($, _toConsumableArray(promises).concat([42, 42])); - }, - - // Object.create polyfill, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill - objectCreate: Object.create || (function () { - var Object = function Object() {}; - return function (prototype) { - if (arguments.length > 1) { - throw Error('Second argument not supported'); - } - if (typeof prototype != 'object') { - throw TypeError('Argument must be an object'); - } - Object.prototype = prototype; - var result = new Object(); - Object.prototype = null; - return result; - }; - })(), - - _SubmitSelector: 'input[type="submit"], button:submit' - }; - - // All these options could be overriden and specified directly in DOM using - // `data-parsley-` default DOM-API - // eg: `inputs` can be set in DOM using `data-parsley-inputs="input, textarea"` - // eg: `data-parsley-stop-on-first-failing-constraint="false"` - - var Defaults = { - // ### General - - // Default data-namespace for DOM API - namespace: 'data-parsley-', - - // Supported inputs by default - inputs: 'input, textarea, select', - - // Excluded inputs by default - excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden]', - - // Stop validating field on highest priority failing constraint - priorityEnabled: true, - - // ### Field only - - // identifier used to group together inputs (e.g. radio buttons...) - multiple: null, - - // identifier (or array of identifiers) used to validate only a select group of inputs - group: null, - - // ### UI - // Enable\Disable error messages - uiEnabled: true, - - // Key events threshold before validation - validationThreshold: 3, - - // Focused field on form validation error. 'first'|'last'|'none' - focus: 'first', - - // event(s) that will trigger validation before first failure. eg: `input`... - trigger: false, - - // event(s) that will trigger validation after first failure. - triggerAfterFailure: 'input', - - // Class that would be added on every failing validation Parsley field - errorClass: 'parsley-error', - - // Same for success validation - successClass: 'parsley-success', - - // Return the `$element` that will receive these above success or error classes - // Could also be (and given directly from DOM) a valid selector like `'#div'` - classHandler: function classHandler(Field) {}, - - // Return the `$element` where errors will be appended - // Could also be (and given directly from DOM) a valid selector like `'#div'` - errorsContainer: function errorsContainer(Field) {}, - - // ul elem that would receive errors' list - errorsWrapper: '<ul class="parsley-errors-list"></ul>', - - // li elem that would receive error message - errorTemplate: '<li></li>' - }; - - var Base = function Base() { - this.__id__ = Utils.generateID(); - }; - - Base.prototype = { - asyncSupport: true, // Deprecated - - _pipeAccordingToValidationResult: function _pipeAccordingToValidationResult() { - var _this = this; - - var pipe = function pipe() { - var r = $.Deferred(); - if (true !== _this.validationResult) r.reject(); - return r.resolve().promise(); - }; - return [pipe, pipe]; - }, - - actualizeOptions: function actualizeOptions() { - Utils.attr(this.element, this.options.namespace, this.domOptions); - if (this.parent && this.parent.actualizeOptions) this.parent.actualizeOptions(); - return this; - }, - - _resetOptions: function _resetOptions(initOptions) { - this.domOptions = Utils.objectCreate(this.parent.options); - this.options = Utils.objectCreate(this.domOptions); - // Shallow copy of ownProperties of initOptions: - for (var i in initOptions) { - if (initOptions.hasOwnProperty(i)) this.options[i] = initOptions[i]; - } - this.actualizeOptions(); - }, - - _listeners: null, - - // Register a callback for the given event name - // Callback is called with context as the first argument and the `this` - // The context is the current parsley instance, or window.Parsley if global - // A return value of `false` will interrupt the calls - on: function on(name, fn) { - this._listeners = this._listeners || {}; - var queue = this._listeners[name] = this._listeners[name] || []; - queue.push(fn); - - return this; - }, - - // Deprecated. Use `on` instead - subscribe: function subscribe(name, fn) { - $.listenTo(this, name.toLowerCase(), fn); - }, - - // Unregister a callback (or all if none is given) for the given event name - off: function off(name, fn) { - var queue = this._listeners && this._listeners[name]; - if (queue) { - if (!fn) { - delete this._listeners[name]; - } else { - for (var i = queue.length; i--;) if (queue[i] === fn) queue.splice(i, 1); - } - } - return this; - }, - - // Deprecated. Use `off` - unsubscribe: function unsubscribe(name, fn) { - $.unsubscribeTo(this, name.toLowerCase()); - }, - - // Trigger an event of the given name - // A return value of `false` interrupts the callback chain - // Returns false if execution was interrupted - trigger: function trigger(name, target, extraArg) { - target = target || this; - var queue = this._listeners && this._listeners[name]; - var result; - var parentResult; - if (queue) { - for (var i = queue.length; i--;) { - result = queue[i].call(target, target, extraArg); - if (result === false) return result; - } - } - if (this.parent) { - return this.parent.trigger(name, target, extraArg); - } - return true; - }, - - asyncIsValid: function asyncIsValid(group, force) { - Utils.warnOnce("asyncIsValid is deprecated; please use whenValid instead"); - return this.whenValid({ group: group, force: force }); - }, - - _findRelated: function _findRelated() { - return this.options.multiple ? $(this.parent.element.querySelectorAll('[' + this.options.namespace + 'multiple="' + this.options.multiple + '"]')) : this.$element; - } - }; - - var convertArrayRequirement = function convertArrayRequirement(string, length) { - var m = string.match(/^\s*\[(.*)\]\s*$/); - if (!m) throw 'Requirement is not an array: "' + string + '"'; - var values = m[1].split(',').map(Utils.trimString); - if (values.length !== length) throw 'Requirement has ' + values.length + ' values when ' + length + ' are needed'; - return values; - }; - - var convertExtraOptionRequirement = function convertExtraOptionRequirement(requirementSpec, string, extraOptionReader) { - var main = null; - var extra = {}; - for (var key in requirementSpec) { - if (key) { - var value = extraOptionReader(key); - if ('string' === typeof value) value = Utils.parseRequirement(requirementSpec[key], value); - extra[key] = value; - } else { - main = Utils.parseRequirement(requirementSpec[key], string); - } - } - return [main, extra]; - }; - - // A Validator needs to implement the methods `validate` and `parseRequirements` - - var Validator = function Validator(spec) { - $.extend(true, this, spec); - }; - - Validator.prototype = { - // Returns `true` iff the given `value` is valid according the given requirements. - validate: function validate(value, requirementFirstArg) { - if (this.fn) { - // Legacy style validator - - if (arguments.length > 3) // If more args then value, requirement, instance... - requirementFirstArg = [].slice.call(arguments, 1, -1); // Skip first arg (value) and last (instance), combining the rest - return this.fn(value, requirementFirstArg); - } - - if (Array.isArray(value)) { - if (!this.validateMultiple) throw 'Validator `' + this.name + '` does not handle multiple values'; - return this.validateMultiple.apply(this, arguments); - } else { - var instance = arguments[arguments.length - 1]; - if (this.validateDate && instance._isDateInput()) { - arguments[0] = Utils.parse.date(arguments[0]); - if (arguments[0] === null) return false; - return this.validateDate.apply(this, arguments); - } - if (this.validateNumber) { - if (isNaN(value)) return false; - arguments[0] = parseFloat(arguments[0]); - return this.validateNumber.apply(this, arguments); - } - if (this.validateString) { - return this.validateString.apply(this, arguments); - } - throw 'Validator `' + this.name + '` only handles multiple values'; - } - }, - - // Parses `requirements` into an array of arguments, - // according to `this.requirementType` - parseRequirements: function parseRequirements(requirements, extraOptionReader) { - if ('string' !== typeof requirements) { - // Assume requirement already parsed - // but make sure we return an array - return Array.isArray(requirements) ? requirements : [requirements]; - } - var type = this.requirementType; - if (Array.isArray(type)) { - var values = convertArrayRequirement(requirements, type.length); - for (var i = 0; i < values.length; i++) values[i] = Utils.parseRequirement(type[i], values[i]); - return values; - } else if ($.isPlainObject(type)) { - return convertExtraOptionRequirement(type, requirements, extraOptionReader); - } else { - return [Utils.parseRequirement(type, requirements)]; - } - }, - // Defaults: - requirementType: 'string', - - priority: 2 - - }; - - var ValidatorRegistry = function ValidatorRegistry(validators, catalog) { - this.__class__ = 'ValidatorRegistry'; - - // Default Parsley locale is en - this.locale = 'en'; - - this.init(validators || {}, catalog || {}); - }; - - var typeTesters = { - email: /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i, - - // Follow https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers - number: /^-?(\d*\.)?\d+(e[-+]?\d+)?$/i, - - integer: /^-?\d+$/, - - digits: /^\d+$/, - - alphanum: /^\w+$/i, - - date: { - test: function test(value) { - return Utils.parse.date(value) !== null; - } - }, - - url: new RegExp("^" + - // protocol identifier - "(?:(?:https?|ftp)://)?" + // ** mod: make scheme optional - // user:pass authentication - "(?:\\S+(?::\\S*)?@)?" + "(?:" + - // IP address exclusion - // private & local networks - // "(?!(?:10|127)(?:\\.\\d{1,3}){3})" + // ** mod: allow local networks - // "(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})" + // ** mod: allow local networks - // "(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})" + // ** mod: allow local networks - // IP address dotted notation octets - // excludes loopback network 0.0.0.0 - // excludes reserved space >= 224.0.0.0 - // excludes network & broacast addresses - // (first & last IP address of each class) - "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" + "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" + "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" + "|" + - // host name - '(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)' + - // domain name - '(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*' + - // TLD identifier - '(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))' + ")" + - // port number - "(?::\\d{2,5})?" + - // resource path - "(?:/\\S*)?" + "$", 'i') - }; - typeTesters.range = typeTesters.number; - - // See http://stackoverflow.com/a/10454560/8279 - var decimalPlaces = function decimalPlaces(num) { - var match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/); - if (!match) { - return 0; - } - return Math.max(0, - // Number of digits right of decimal point. - (match[1] ? match[1].length : 0) - ( - // Adjust for scientific notation. - match[2] ? +match[2] : 0)); - }; - - // parseArguments('number', ['1', '2']) => [1, 2] - var ValidatorRegistry__parseArguments = function ValidatorRegistry__parseArguments(type, args) { - return args.map(Utils.parse[type]); - }; - // operatorToValidator returns a validating function for an operator function, applied to the given type - var ValidatorRegistry__operatorToValidator = function ValidatorRegistry__operatorToValidator(type, operator) { - return function (value) { - for (var _len = arguments.length, requirementsAndInput = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - requirementsAndInput[_key - 1] = arguments[_key]; - } - - requirementsAndInput.pop(); // Get rid of `input` argument - return operator.apply(undefined, [value].concat(_toConsumableArray(ValidatorRegistry__parseArguments(type, requirementsAndInput)))); - }; - }; - - var ValidatorRegistry__comparisonOperator = function ValidatorRegistry__comparisonOperator(operator) { - return { - validateDate: ValidatorRegistry__operatorToValidator('date', operator), - validateNumber: ValidatorRegistry__operatorToValidator('number', operator), - requirementType: operator.length <= 2 ? 'string' : ['string', 'string'], // Support operators with a 1 or 2 requirement(s) - priority: 30 - }; - }; - - ValidatorRegistry.prototype = { - init: function init(validators, catalog) { - this.catalog = catalog; - // Copy prototype's validators: - this.validators = _extends({}, this.validators); - - for (var name in validators) this.addValidator(name, validators[name].fn, validators[name].priority); - - window.Parsley.trigger('parsley:validator:init'); - }, - - // Set new messages locale if we have dictionary loaded in ParsleyConfig.i18n - setLocale: function setLocale(locale) { - if ('undefined' === typeof this.catalog[locale]) throw new Error(locale + ' is not available in the catalog'); - - this.locale = locale; - - return this; - }, - - // Add a new messages catalog for a given locale. Set locale for this catalog if set === `true` - addCatalog: function addCatalog(locale, messages, set) { - if ('object' === typeof messages) this.catalog[locale] = messages; - - if (true === set) return this.setLocale(locale); - - return this; - }, - - // Add a specific message for a given constraint in a given locale - addMessage: function addMessage(locale, name, message) { - if ('undefined' === typeof this.catalog[locale]) this.catalog[locale] = {}; - - this.catalog[locale][name] = message; - - return this; - }, - - // Add messages for a given locale - addMessages: function addMessages(locale, nameMessageObject) { - for (var name in nameMessageObject) this.addMessage(locale, name, nameMessageObject[name]); - - return this; - }, - - // Add a new validator - // - // addValidator('custom', { - // requirementType: ['integer', 'integer'], - // validateString: function(value, from, to) {}, - // priority: 22, - // messages: { - // en: "Hey, that's no good", - // fr: "Aye aye, pas bon du tout", - // } - // }) - // - // Old API was addValidator(name, function, priority) - // - addValidator: function addValidator(name, arg1, arg2) { - if (this.validators[name]) Utils.warn('Validator "' + name + '" is already defined.');else if (Defaults.hasOwnProperty(name)) { - Utils.warn('"' + name + '" is a restricted keyword and is not a valid validator name.'); - return; - } - return this._setValidator.apply(this, arguments); - }, - - updateValidator: function updateValidator(name, arg1, arg2) { - if (!this.validators[name]) { - Utils.warn('Validator "' + name + '" is not already defined.'); - return this.addValidator.apply(this, arguments); - } - return this._setValidator.apply(this, arguments); - }, - - removeValidator: function removeValidator(name) { - if (!this.validators[name]) Utils.warn('Validator "' + name + '" is not defined.'); - - delete this.validators[name]; - - return this; - }, - - _setValidator: function _setValidator(name, validator, priority) { - if ('object' !== typeof validator) { - // Old style validator, with `fn` and `priority` - validator = { - fn: validator, - priority: priority - }; - } - if (!validator.validate) { - validator = new Validator(validator); - } - this.validators[name] = validator; - - for (var locale in validator.messages || {}) this.addMessage(locale, name, validator.messages[locale]); - - return this; - }, - - getErrorMessage: function getErrorMessage(constraint) { - var message; - - // Type constraints are a bit different, we have to match their requirements too to find right error message - if ('type' === constraint.name) { - var typeMessages = this.catalog[this.locale][constraint.name] || {}; - message = typeMessages[constraint.requirements]; - } else message = this.formatMessage(this.catalog[this.locale][constraint.name], constraint.requirements); - - return message || this.catalog[this.locale].defaultMessage || this.catalog.en.defaultMessage; - }, - - // Kind of light `sprintf()` implementation - formatMessage: function formatMessage(string, parameters) { - if ('object' === typeof parameters) { - for (var i in parameters) string = this.formatMessage(string, parameters[i]); - - return string; - } - - return 'string' === typeof string ? string.replace(/%s/i, parameters) : ''; - }, - - // Here is the Parsley default validators list. - // A validator is an object with the following key values: - // - priority: an integer - // - requirement: 'string' (default), 'integer', 'number', 'regexp' or an Array of these - // - validateString, validateMultiple, validateNumber: functions returning `true`, `false` or a promise - // Alternatively, a validator can be a function that returns such an object - // - validators: { - notblank: { - validateString: function validateString(value) { - return (/\S/.test(value) - ); - }, - priority: 2 - }, - required: { - validateMultiple: function validateMultiple(values) { - return values.length > 0; - }, - validateString: function validateString(value) { - return (/\S/.test(value) - ); - }, - priority: 512 - }, - type: { - validateString: function validateString(value, type) { - var _ref = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - var _ref$step = _ref.step; - var step = _ref$step === undefined ? 'any' : _ref$step; - var _ref$base = _ref.base; - var base = _ref$base === undefined ? 0 : _ref$base; - - var tester = typeTesters[type]; - if (!tester) { - throw new Error('validator type `' + type + '` is not supported'); - } - if (!tester.test(value)) return false; - if ('number' === type) { - if (!/^any$/i.test(step || '')) { - var nb = Number(value); - var decimals = Math.max(decimalPlaces(step), decimalPlaces(base)); - if (decimalPlaces(nb) > decimals) // Value can't have too many decimals - return false; - // Be careful of rounding errors by using integers. - var toInt = function toInt(f) { - return Math.round(f * Math.pow(10, decimals)); - }; - if ((toInt(nb) - toInt(base)) % toInt(step) != 0) return false; - } - } - return true; - }, - requirementType: { - '': 'string', - step: 'string', - base: 'number' - }, - priority: 256 - }, - pattern: { - validateString: function validateString(value, regexp) { - return regexp.test(value); - }, - requirementType: 'regexp', - priority: 64 - }, - minlength: { - validateString: function validateString(value, requirement) { - return value.length >= requirement; - }, - requirementType: 'integer', - priority: 30 - }, - maxlength: { - validateString: function validateString(value, requirement) { - return value.length <= requirement; - }, - requirementType: 'integer', - priority: 30 - }, - length: { - validateString: function validateString(value, min, max) { - return value.length >= min && value.length <= max; - }, - requirementType: ['integer', 'integer'], - priority: 30 - }, - mincheck: { - validateMultiple: function validateMultiple(values, requirement) { - return values.length >= requirement; - }, - requirementType: 'integer', - priority: 30 - }, - maxcheck: { - validateMultiple: function validateMultiple(values, requirement) { - return values.length <= requirement; - }, - requirementType: 'integer', - priority: 30 - }, - check: { - validateMultiple: function validateMultiple(values, min, max) { - return values.length >= min && values.length <= max; - }, - requirementType: ['integer', 'integer'], - priority: 30 - }, - min: ValidatorRegistry__comparisonOperator(function (value, requirement) { - return value >= requirement; - }), - max: ValidatorRegistry__comparisonOperator(function (value, requirement) { - return value <= requirement; - }), - range: ValidatorRegistry__comparisonOperator(function (value, min, max) { - return value >= min && value <= max; - }), - equalto: { - validateString: function validateString(value, refOrValue) { - var $reference = $(refOrValue); - if ($reference.length) return value === $reference.val();else return value === refOrValue; - }, - priority: 256 - } - } - }; - - var UI = {}; - - var diffResults = function diffResults(newResult, oldResult, deep) { - var added = []; - var kept = []; - - for (var i = 0; i < newResult.length; i++) { - var found = false; - - for (var j = 0; j < oldResult.length; j++) if (newResult[i].assert.name === oldResult[j].assert.name) { - found = true; - break; - } - - if (found) kept.push(newResult[i]);else added.push(newResult[i]); - } - - return { - kept: kept, - added: added, - removed: !deep ? diffResults(oldResult, newResult, true).added : [] - }; - }; - - UI.Form = { - - _actualizeTriggers: function _actualizeTriggers() { - var _this2 = this; - - this.$element.on('submit.Parsley', function (evt) { - _this2.onSubmitValidate(evt); - }); - this.$element.on('click.Parsley', Utils._SubmitSelector, function (evt) { - _this2.onSubmitButton(evt); - }); - - // UI could be disabled - if (false === this.options.uiEnabled) return; - - this.element.setAttribute('novalidate', ''); - }, - - focus: function focus() { - this._focusedField = null; - - if (true === this.validationResult || 'none' === this.options.focus) return null; - - for (var i = 0; i < this.fields.length; i++) { - var field = this.fields[i]; - if (true !== field.validationResult && field.validationResult.length > 0 && 'undefined' === typeof field.options.noFocus) { - this._focusedField = field.$element; - if ('first' === this.options.focus) break; - } - } - - if (null === this._focusedField) return null; - - return this._focusedField.focus(); - }, - - _destroyUI: function _destroyUI() { - // Reset all event listeners - this.$element.off('.Parsley'); - } - - }; - - UI.Field = { - - _reflowUI: function _reflowUI() { - this._buildUI(); - - // If this field doesn't have an active UI don't bother doing something - if (!this._ui) return; - - // Diff between two validation results - var diff = diffResults(this.validationResult, this._ui.lastValidationResult); - - // Then store current validation result for next reflow - this._ui.lastValidationResult = this.validationResult; - - // Handle valid / invalid / none field class - this._manageStatusClass(); - - // Add, remove, updated errors messages - this._manageErrorsMessages(diff); - - // Triggers impl - this._actualizeTriggers(); - - // If field is not valid for the first time, bind keyup trigger to ease UX and quickly inform user - if ((diff.kept.length || diff.added.length) && !this._failedOnce) { - this._failedOnce = true; - this._actualizeTriggers(); - } - }, - - // Returns an array of field's error message(s) - getErrorsMessages: function getErrorsMessages() { - // No error message, field is valid - if (true === this.validationResult) return []; - - var messages = []; - - for (var i = 0; i < this.validationResult.length; i++) messages.push(this.validationResult[i].errorMessage || this._getErrorMessage(this.validationResult[i].assert)); - - return messages; - }, - - // It's a goal of Parsley that this method is no longer required [#1073] - addError: function addError(name) { - var _ref2 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var message = _ref2.message; - var assert = _ref2.assert; - var _ref2$updateClass = _ref2.updateClass; - var updateClass = _ref2$updateClass === undefined ? true : _ref2$updateClass; - - this._buildUI(); - this._addError(name, { message: message, assert: assert }); - - if (updateClass) this._errorClass(); - }, - - // It's a goal of Parsley that this method is no longer required [#1073] - updateError: function updateError(name) { - var _ref3 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var message = _ref3.message; - var assert = _ref3.assert; - var _ref3$updateClass = _ref3.updateClass; - var updateClass = _ref3$updateClass === undefined ? true : _ref3$updateClass; - - this._buildUI(); - this._updateError(name, { message: message, assert: assert }); - - if (updateClass) this._errorClass(); - }, - - // It's a goal of Parsley that this method is no longer required [#1073] - removeError: function removeError(name) { - var _ref4 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var _ref4$updateClass = _ref4.updateClass; - var updateClass = _ref4$updateClass === undefined ? true : _ref4$updateClass; - - this._buildUI(); - this._removeError(name); - - // edge case possible here: remove a standard Parsley error that is still failing in this.validationResult - // but highly improbable cuz' manually removing a well Parsley handled error makes no sense. - if (updateClass) this._manageStatusClass(); - }, - - _manageStatusClass: function _manageStatusClass() { - if (this.hasConstraints() && this.needsValidation() && true === this.validationResult) this._successClass();else if (this.validationResult.length > 0) this._errorClass();else this._resetClass(); - }, - - _manageErrorsMessages: function _manageErrorsMessages(diff) { - if ('undefined' !== typeof this.options.errorsMessagesDisabled) return; - - // Case where we have errorMessage option that configure an unique field error message, regardless failing validators - if ('undefined' !== typeof this.options.errorMessage) { - if (diff.added.length || diff.kept.length) { - this._insertErrorWrapper(); - - if (0 === this._ui.$errorsWrapper.find('.parsley-custom-error-message').length) this._ui.$errorsWrapper.append($(this.options.errorTemplate).addClass('parsley-custom-error-message')); - - return this._ui.$errorsWrapper.addClass('filled').find('.parsley-custom-error-message').html(this.options.errorMessage); - } - - return this._ui.$errorsWrapper.removeClass('filled').find('.parsley-custom-error-message').remove(); - } - - // Show, hide, update failing constraints messages - for (var i = 0; i < diff.removed.length; i++) this._removeError(diff.removed[i].assert.name); - - for (i = 0; i < diff.added.length; i++) this._addError(diff.added[i].assert.name, { message: diff.added[i].errorMessage, assert: diff.added[i].assert }); - - for (i = 0; i < diff.kept.length; i++) this._updateError(diff.kept[i].assert.name, { message: diff.kept[i].errorMessage, assert: diff.kept[i].assert }); - }, - - _addError: function _addError(name, _ref5) { - var message = _ref5.message; - var assert = _ref5.assert; - - this._insertErrorWrapper(); - this._ui.$errorsWrapper.addClass('filled').append($(this.options.errorTemplate).addClass('parsley-' + name).html(message || this._getErrorMessage(assert))); - }, - - _updateError: function _updateError(name, _ref6) { - var message = _ref6.message; - var assert = _ref6.assert; - - this._ui.$errorsWrapper.addClass('filled').find('.parsley-' + name).html(message || this._getErrorMessage(assert)); - }, - - _removeError: function _removeError(name) { - this._ui.$errorsWrapper.removeClass('filled').find('.parsley-' + name).remove(); - }, - - _getErrorMessage: function _getErrorMessage(constraint) { - var customConstraintErrorMessage = constraint.name + 'Message'; - - if ('undefined' !== typeof this.options[customConstraintErrorMessage]) return window.Parsley.formatMessage(this.options[customConstraintErrorMessage], constraint.requirements); - - return window.Parsley.getErrorMessage(constraint); - }, - - _buildUI: function _buildUI() { - // UI could be already built or disabled - if (this._ui || false === this.options.uiEnabled) return; - - var _ui = {}; - - // Give field its Parsley id in DOM - this.element.setAttribute(this.options.namespace + 'id', this.__id__); - - /** Generate important UI elements and store them in this **/ - // $errorClassHandler is the $element that woul have parsley-error and parsley-success classes - _ui.$errorClassHandler = this._manageClassHandler(); - - // $errorsWrapper is a div that would contain the various field errors, it will be appended into $errorsContainer - _ui.errorsWrapperId = 'parsley-id-' + (this.options.multiple ? 'multiple-' + this.options.multiple : this.__id__); - _ui.$errorsWrapper = $(this.options.errorsWrapper).attr('id', _ui.errorsWrapperId); - - // ValidationResult UI storage to detect what have changed bwt two validations, and update DOM accordingly - _ui.lastValidationResult = []; - _ui.validationInformationVisible = false; - - // Store it in this for later - this._ui = _ui; - }, - - // Determine which element will have `parsley-error` and `parsley-success` classes - _manageClassHandler: function _manageClassHandler() { - // An element selector could be passed through DOM with `data-parsley-class-handler=#foo` - if ('string' === typeof this.options.classHandler) { - if ($(this.options.classHandler).length === 0) ParsleyUtils.warn('No elements found that match the selector `' + this.options.classHandler + '` set in options.classHandler or data-parsley-class-handler'); - - //return element or empty set - return $(this.options.classHandler); - } - - // Class handled could also be determined by function given in Parsley options - if ('function' === typeof this.options.classHandler) var $handler = this.options.classHandler.call(this, this); - - // If this function returned a valid existing DOM element, go for it - if ('undefined' !== typeof $handler && $handler.length) return $handler; - - return this._inputHolder(); - }, - - _inputHolder: function _inputHolder() { - // if simple element (input, texatrea, select...) it will perfectly host the classes and precede the error container - if (!this.options.multiple || this.element.nodeName === 'SELECT') return this.$element; - - // But if multiple element (radio, checkbox), that would be their parent - return this.$element.parent(); - }, - - _insertErrorWrapper: function _insertErrorWrapper() { - var $errorsContainer; - - // Nothing to do if already inserted - if (0 !== this._ui.$errorsWrapper.parent().length) return this._ui.$errorsWrapper.parent(); - - if ('string' === typeof this.options.errorsContainer) { - if ($(this.options.errorsContainer).length) return $(this.options.errorsContainer).append(this._ui.$errorsWrapper);else Utils.warn('The errors container `' + this.options.errorsContainer + '` does not exist in DOM'); - } else if ('function' === typeof this.options.errorsContainer) $errorsContainer = this.options.errorsContainer.call(this, this); - - if ('undefined' !== typeof $errorsContainer && $errorsContainer.length) return $errorsContainer.append(this._ui.$errorsWrapper); - - return this._inputHolder().after(this._ui.$errorsWrapper); - }, - - _actualizeTriggers: function _actualizeTriggers() { - var _this3 = this; - - var $toBind = this._findRelated(); - var trigger; - - // Remove Parsley events already bound on this field - $toBind.off('.Parsley'); - if (this._failedOnce) $toBind.on(Utils.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), function () { - _this3._validateIfNeeded(); - });else if (trigger = Utils.namespaceEvents(this.options.trigger, 'Parsley')) { - $toBind.on(trigger, function (event) { - _this3._validateIfNeeded(event); - }); - } - }, - - _validateIfNeeded: function _validateIfNeeded(event) { - var _this4 = this; - - // For keyup, keypress, keydown, input... events that could be a little bit obstrusive - // do not validate if val length < min threshold on first validation. Once field have been validated once and info - // about success or failure have been displayed, always validate with this trigger to reflect every yalidation change. - if (event && /key|input/.test(event.type)) if (!(this._ui && this._ui.validationInformationVisible) && this.getValue().length <= this.options.validationThreshold) return; - - if (this.options.debounce) { - window.clearTimeout(this._debounced); - this._debounced = window.setTimeout(function () { - return _this4.validate(); - }, this.options.debounce); - } else this.validate(); - }, - - _resetUI: function _resetUI() { - // Reset all event listeners - this._failedOnce = false; - this._actualizeTriggers(); - - // Nothing to do if UI never initialized for this field - if ('undefined' === typeof this._ui) return; - - // Reset all errors' li - this._ui.$errorsWrapper.removeClass('filled').children().remove(); - - // Reset validation class - this._resetClass(); - - // Reset validation flags and last validation result - this._ui.lastValidationResult = []; - this._ui.validationInformationVisible = false; - }, - - _destroyUI: function _destroyUI() { - this._resetUI(); - - if ('undefined' !== typeof this._ui) this._ui.$errorsWrapper.remove(); - - delete this._ui; - }, - - _successClass: function _successClass() { - this._ui.validationInformationVisible = true; - this._ui.$errorClassHandler.removeClass(this.options.errorClass).addClass(this.options.successClass); - }, - _errorClass: function _errorClass() { - this._ui.validationInformationVisible = true; - this._ui.$errorClassHandler.removeClass(this.options.successClass).addClass(this.options.errorClass); - }, - _resetClass: function _resetClass() { - this._ui.$errorClassHandler.removeClass(this.options.successClass).removeClass(this.options.errorClass); - } - }; - - var Form = function Form(element, domOptions, options) { - this.__class__ = 'Form'; - - this.element = element; - this.$element = $(element); - this.domOptions = domOptions; - this.options = options; - this.parent = window.Parsley; - - this.fields = []; - this.validationResult = null; - }; - - var Form__statusMapping = { pending: null, resolved: true, rejected: false }; - - Form.prototype = { - onSubmitValidate: function onSubmitValidate(event) { - var _this5 = this; - - // This is a Parsley generated submit event, do not validate, do not prevent, simply exit and keep normal behavior - if (true === event.parsley) return; - - // If we didn't come here through a submit button, use the first one in the form - var submitSource = this._submitSource || this.$element.find(Utils._SubmitSelector)[0]; - this._submitSource = null; - this.$element.find('.parsley-synthetic-submit-button').prop('disabled', true); - if (submitSource && null !== submitSource.getAttribute('formnovalidate')) return; - - window.Parsley._remoteCache = {}; - - var promise = this.whenValidate({ event: event }); - - if ('resolved' === promise.state() && false !== this._trigger('submit')) { - // All good, let event go through. We make this distinction because browsers - // differ in their handling of `submit` being called from inside a submit event [#1047] - } else { - // Rejected or pending: cancel this submit - event.stopImmediatePropagation(); - event.preventDefault(); - if ('pending' === promise.state()) promise.done(function () { - _this5._submit(submitSource); - }); - } - }, - - onSubmitButton: function onSubmitButton(event) { - this._submitSource = event.currentTarget; - }, - // internal - // _submit submits the form, this time without going through the validations. - // Care must be taken to "fake" the actual submit button being clicked. - _submit: function _submit(submitSource) { - if (false === this._trigger('submit')) return; - // Add submit button's data - if (submitSource) { - var $synthetic = this.$element.find('.parsley-synthetic-submit-button').prop('disabled', false); - if (0 === $synthetic.length) $synthetic = $('<input class="parsley-synthetic-submit-button" type="hidden">').appendTo(this.$element); - $synthetic.attr({ - name: submitSource.getAttribute('name'), - value: submitSource.getAttribute('value') - }); - } - - this.$element.trigger(_extends($.Event('submit'), { parsley: true })); - }, - - // Performs validation on fields while triggering events. - // @returns `true` if all validations succeeds, `false` - // if a failure is immediately detected, or `null` - // if dependant on a promise. - // Consider using `whenValidate` instead. - validate: function validate(options) { - if (arguments.length >= 1 && !$.isPlainObject(options)) { - Utils.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.'); - - var _arguments = _slice.call(arguments); - - var group = _arguments[0]; - var force = _arguments[1]; - var event = _arguments[2]; - - options = { group: group, force: force, event: event }; - } - return Form__statusMapping[this.whenValidate(options).state()]; - }, - - whenValidate: function whenValidate() { - var _Utils$all$done$fail$always, - _this6 = this; - - var _ref7 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - var group = _ref7.group; - var force = _ref7.force; - var event = _ref7.event; - - this.submitEvent = event; - if (event) { - this.submitEvent = _extends({}, event, { preventDefault: function preventDefault() { - Utils.warnOnce("Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`"); - _this6.validationResult = false; - } }); - } - this.validationResult = true; - - // fire validate event to eventually modify things before every validation - this._trigger('validate'); - - // Refresh form DOM options and form's fields that could have changed - this._refreshFields(); - - var promises = this._withoutReactualizingFormOptions(function () { - return $.map(_this6.fields, function (field) { - return field.whenValidate({ force: force, group: group }); - }); - }); - - return (_Utils$all$done$fail$always = Utils.all(promises).done(function () { - _this6._trigger('success'); - }).fail(function () { - _this6.validationResult = false; - _this6.focus(); - _this6._trigger('error'); - }).always(function () { - _this6._trigger('validated'); - })).pipe.apply(_Utils$all$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult())); - }, - - // Iterate over refreshed fields, and stop on first failure. - // Returns `true` if all fields are valid, `false` if a failure is detected - // or `null` if the result depends on an unresolved promise. - // Prefer using `whenValid` instead. - isValid: function isValid(options) { - if (arguments.length >= 1 && !$.isPlainObject(options)) { - Utils.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.'); - - var _arguments2 = _slice.call(arguments); - - var group = _arguments2[0]; - var force = _arguments2[1]; - - options = { group: group, force: force }; - } - return Form__statusMapping[this.whenValid(options).state()]; - }, - - // Iterate over refreshed fields and validate them. - // Returns a promise. - // A validation that immediately fails will interrupt the validations. - whenValid: function whenValid() { - var _this7 = this; - - var _ref8 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - var group = _ref8.group; - var force = _ref8.force; - - this._refreshFields(); - - var promises = this._withoutReactualizingFormOptions(function () { - return $.map(_this7.fields, function (field) { - return field.whenValid({ group: group, force: force }); - }); - }); - return Utils.all(promises); - }, - - // Reset UI - reset: function reset() { - // Form case: emit a reset event for each field - for (var i = 0; i < this.fields.length; i++) this.fields[i].reset(); - - this._trigger('reset'); - }, - - // Destroy Parsley instance (+ UI) - destroy: function destroy() { - // Field case: emit destroy event to clean UI and then destroy stored instance - this._destroyUI(); - - // Form case: destroy all its fields and then destroy stored instance - for (var i = 0; i < this.fields.length; i++) this.fields[i].destroy(); - - this.$element.removeData('Parsley'); - this._trigger('destroy'); - }, - - _refreshFields: function _refreshFields() { - return this.actualizeOptions()._bindFields(); - }, - - _bindFields: function _bindFields() { - var _this8 = this; - - var oldFields = this.fields; - - this.fields = []; - this.fieldsMappedById = {}; - - this._withoutReactualizingFormOptions(function () { - _this8.$element.find(_this8.options.inputs).not(_this8.options.excluded).each(function (_, element) { - var fieldInstance = new window.Parsley.Factory(element, {}, _this8); - - // Only add valid and not excluded `Field` and `FieldMultiple` children - if (('Field' === fieldInstance.__class__ || 'FieldMultiple' === fieldInstance.__class__) && true !== fieldInstance.options.excluded) { - var uniqueId = fieldInstance.__class__ + '-' + fieldInstance.__id__; - if ('undefined' === typeof _this8.fieldsMappedById[uniqueId]) { - _this8.fieldsMappedById[uniqueId] = fieldInstance; - _this8.fields.push(fieldInstance); - } - } - }); - - $.each(Utils.difference(oldFields, _this8.fields), function (_, field) { - field.reset(); - }); - }); - return this; - }, - - // Internal only. - // Looping on a form's fields to do validation or similar - // will trigger reactualizing options on all of them, which - // in turn will reactualize the form's options. - // To avoid calling actualizeOptions so many times on the form - // for nothing, _withoutReactualizingFormOptions temporarily disables - // the method actualizeOptions on this form while `fn` is called. - _withoutReactualizingFormOptions: function _withoutReactualizingFormOptions(fn) { - var oldActualizeOptions = this.actualizeOptions; - this.actualizeOptions = function () { - return this; - }; - var result = fn(); - this.actualizeOptions = oldActualizeOptions; - return result; - }, - - // Internal only. - // Shortcut to trigger an event - // Returns true iff event is not interrupted and default not prevented. - _trigger: function _trigger(eventName) { - return this.trigger('form:' + eventName); - } - - }; - - var Constraint = function Constraint(parsleyField, name, requirements, priority, isDomConstraint) { - var validatorSpec = window.Parsley._validatorRegistry.validators[name]; - var validator = new Validator(validatorSpec); - priority = priority || parsleyField.options[name + 'Priority'] || validator.priority; - isDomConstraint = true === isDomConstraint; - - _extends(this, { - validator: validator, - name: name, - requirements: requirements, - priority: priority, - isDomConstraint: isDomConstraint - }); - this._parseRequirements(parsleyField.options); - }; - - var capitalize = function capitalize(str) { - var cap = str[0].toUpperCase(); - return cap + str.slice(1); - }; - - Constraint.prototype = { - validate: function validate(value, instance) { - var _validator; - - return (_validator = this.validator).validate.apply(_validator, [value].concat(_toConsumableArray(this.requirementList), [instance])); - }, - - _parseRequirements: function _parseRequirements(options) { - var _this9 = this; - - this.requirementList = this.validator.parseRequirements(this.requirements, function (key) { - return options[_this9.name + capitalize(key)]; - }); - } - }; - - var Field = function Field(field, domOptions, options, parsleyFormInstance) { - this.__class__ = 'Field'; - - this.element = field; - this.$element = $(field); - - // Set parent if we have one - if ('undefined' !== typeof parsleyFormInstance) { - this.parent = parsleyFormInstance; - } - - this.options = options; - this.domOptions = domOptions; - - // Initialize some properties - this.constraints = []; - this.constraintsByName = {}; - this.validationResult = true; - - // Bind constraints - this._bindConstraints(); - }; - - var parsley_field__statusMapping = { pending: null, resolved: true, rejected: false }; - - Field.prototype = { - // # Public API - // Validate field and trigger some events for mainly `UI` - // @returns `true`, an array of the validators that failed, or - // `null` if validation is not finished. Prefer using whenValidate - validate: function validate(options) { - if (arguments.length >= 1 && !$.isPlainObject(options)) { - Utils.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.'); - options = { options: options }; - } - var promise = this.whenValidate(options); - if (!promise) // If excluded with `group` option - return true; - switch (promise.state()) { - case 'pending': - return null; - case 'resolved': - return true; - case 'rejected': - return this.validationResult; - } - }, - - // Validate field and trigger some events for mainly `UI` - // @returns a promise that succeeds only when all validations do - // or `undefined` if field is not in the given `group`. - whenValidate: function whenValidate() { - var _whenValid$always$done$fail$always, - _this10 = this; - - var _ref9 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - var force = _ref9.force; - var group = _ref9.group; - - // do not validate a field if not the same as given validation group - this.refreshConstraints(); - if (group && !this._isInGroup(group)) return; - - this.value = this.getValue(); - - // Field Validate event. `this.value` could be altered for custom needs - this._trigger('validate'); - - return (_whenValid$always$done$fail$always = this.whenValid({ force: force, value: this.value, _refreshed: true }).always(function () { - _this10._reflowUI(); - }).done(function () { - _this10._trigger('success'); - }).fail(function () { - _this10._trigger('error'); - }).always(function () { - _this10._trigger('validated'); - })).pipe.apply(_whenValid$always$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult())); - }, - - hasConstraints: function hasConstraints() { - return 0 !== this.constraints.length; - }, - - // An empty optional field does not need validation - needsValidation: function needsValidation(value) { - if ('undefined' === typeof value) value = this.getValue(); - - // If a field is empty and not required, it is valid - // Except if `data-parsley-validate-if-empty` explicitely added, useful for some custom validators - if (!value.length && !this._isRequired() && 'undefined' === typeof this.options.validateIfEmpty) return false; - - return true; - }, - - _isInGroup: function _isInGroup(group) { - if (Array.isArray(this.options.group)) return -1 !== $.inArray(group, this.options.group); - return this.options.group === group; - }, - - // Just validate field. Do not trigger any event. - // Returns `true` iff all constraints pass, `false` if there are failures, - // or `null` if the result can not be determined yet (depends on a promise) - // See also `whenValid`. - isValid: function isValid(options) { - if (arguments.length >= 1 && !$.isPlainObject(options)) { - Utils.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.'); - - var _arguments3 = _slice.call(arguments); - - var force = _arguments3[0]; - var value = _arguments3[1]; - - options = { force: force, value: value }; - } - var promise = this.whenValid(options); - if (!promise) // Excluded via `group` - return true; - return parsley_field__statusMapping[promise.state()]; - }, - - // Just validate field. Do not trigger any event. - // @returns a promise that succeeds only when all validations do - // or `undefined` if the field is not in the given `group`. - // The argument `force` will force validation of empty fields. - // If a `value` is given, it will be validated instead of the value of the input. - whenValid: function whenValid() { - var _this11 = this; - - var _ref10 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - var _ref10$force = _ref10.force; - var force = _ref10$force === undefined ? false : _ref10$force; - var value = _ref10.value; - var group = _ref10.group; - var _refreshed = _ref10._refreshed; - - // Recompute options and rebind constraints to have latest changes - if (!_refreshed) this.refreshConstraints(); - // do not validate a field if not the same as given validation group - if (group && !this._isInGroup(group)) return; - - this.validationResult = true; - - // A field without constraint is valid - if (!this.hasConstraints()) return $.when(); - - // Value could be passed as argument, needed to add more power to 'field:validate' - if ('undefined' === typeof value || null === value) value = this.getValue(); - - if (!this.needsValidation(value) && true !== force) return $.when(); - - var groupedConstraints = this._getGroupedConstraints(); - var promises = []; - $.each(groupedConstraints, function (_, constraints) { - // Process one group of constraints at a time, we validate the constraints - // and combine the promises together. - var promise = Utils.all($.map(constraints, function (constraint) { - return _this11._validateConstraint(value, constraint); - })); - promises.push(promise); - if (promise.state() === 'rejected') return false; // Interrupt processing if a group has already failed - }); - return Utils.all(promises); - }, - - // @returns a promise - _validateConstraint: function _validateConstraint(value, constraint) { - var _this12 = this; - - var result = constraint.validate(value, this); - // Map false to a failed promise - if (false === result) result = $.Deferred().reject(); - // Make sure we return a promise and that we record failures - return Utils.all([result]).fail(function (errorMessage) { - if (!(_this12.validationResult instanceof Array)) _this12.validationResult = []; - _this12.validationResult.push({ - assert: constraint, - errorMessage: 'string' === typeof errorMessage && errorMessage - }); - }); - }, - - // @returns Parsley field computed value that could be overrided or configured in DOM - getValue: function getValue() { - var value; - - // Value could be overriden in DOM or with explicit options - if ('function' === typeof this.options.value) value = this.options.value(this);else if ('undefined' !== typeof this.options.value) value = this.options.value;else value = this.$element.val(); - - // Handle wrong DOM or configurations - if ('undefined' === typeof value || null === value) return ''; - - return this._handleWhitespace(value); - }, - - // Reset UI - reset: function reset() { - this._resetUI(); - return this._trigger('reset'); - }, - - // Destroy Parsley instance (+ UI) - destroy: function destroy() { - // Field case: emit destroy event to clean UI and then destroy stored instance - this._destroyUI(); - this.$element.removeData('Parsley'); - this.$element.removeData('FieldMultiple'); - this._trigger('destroy'); - }, - - // Actualize options that could have change since previous validation - // Re-bind accordingly constraints (could be some new, removed or updated) - refreshConstraints: function refreshConstraints() { - return this.actualizeOptions()._bindConstraints(); - }, - - /** - * Add a new constraint to a field - * - * @param {String} name - * @param {Mixed} requirements optional - * @param {Number} priority optional - * @param {Boolean} isDomConstraint optional - */ - addConstraint: function addConstraint(name, requirements, priority, isDomConstraint) { - - if (window.Parsley._validatorRegistry.validators[name]) { - var constraint = new Constraint(this, name, requirements, priority, isDomConstraint); - - // if constraint already exist, delete it and push new version - if ('undefined' !== this.constraintsByName[constraint.name]) this.removeConstraint(constraint.name); - - this.constraints.push(constraint); - this.constraintsByName[constraint.name] = constraint; - } - - return this; - }, - - // Remove a constraint - removeConstraint: function removeConstraint(name) { - for (var i = 0; i < this.constraints.length; i++) if (name === this.constraints[i].name) { - this.constraints.splice(i, 1); - break; - } - delete this.constraintsByName[name]; - return this; - }, - - // Update a constraint (Remove + re-add) - updateConstraint: function updateConstraint(name, parameters, priority) { - return this.removeConstraint(name).addConstraint(name, parameters, priority); - }, - - // # Internals - - // Internal only. - // Bind constraints from config + options + DOM - _bindConstraints: function _bindConstraints() { - var constraints = []; - var constraintsByName = {}; - - // clean all existing DOM constraints to only keep javascript user constraints - for (var i = 0; i < this.constraints.length; i++) if (false === this.constraints[i].isDomConstraint) { - constraints.push(this.constraints[i]); - constraintsByName[this.constraints[i].name] = this.constraints[i]; - } - - this.constraints = constraints; - this.constraintsByName = constraintsByName; - - // then re-add Parsley DOM-API constraints - for (var name in this.options) this.addConstraint(name, this.options[name], undefined, true); - - // finally, bind special HTML5 constraints - return this._bindHtml5Constraints(); - }, - - // Internal only. - // Bind specific HTML5 constraints to be HTML5 compliant - _bindHtml5Constraints: function _bindHtml5Constraints() { - // html5 required - if (null !== this.element.getAttribute('required')) this.addConstraint('required', true, undefined, true); - - // html5 pattern - if (null !== this.element.getAttribute('pattern')) this.addConstraint('pattern', this.element.getAttribute('pattern'), undefined, true); - - // range - var min = this.element.getAttribute('min'); - var max = this.element.getAttribute('max'); - if (null !== min && null !== max) this.addConstraint('range', [min, max], undefined, true); - - // HTML5 min - else if (null !== min) this.addConstraint('min', min, undefined, true); - - // HTML5 max - else if (null !== max) this.addConstraint('max', max, undefined, true); - - // length - if (null !== this.element.getAttribute('minlength') && null !== this.element.getAttribute('maxlength')) this.addConstraint('length', [this.element.getAttribute('minlength'), this.element.getAttribute('maxlength')], undefined, true); - - // HTML5 minlength - else if (null !== this.element.getAttribute('minlength')) this.addConstraint('minlength', this.element.getAttribute('minlength'), undefined, true); - - // HTML5 maxlength - else if (null !== this.element.getAttribute('maxlength')) this.addConstraint('maxlength', this.element.getAttribute('maxlength'), undefined, true); - - // html5 types - var type = this.element.type; - - // Small special case here for HTML5 number: integer validator if step attribute is undefined or an integer value, number otherwise - if ('number' === type) { - return this.addConstraint('type', ['number', { - step: this.element.getAttribute('step') || '1', - base: min || this.element.getAttribute('value') - }], undefined, true); - // Regular other HTML5 supported types - } else if (/^(email|url|range|date)$/i.test(type)) { - return this.addConstraint('type', type, undefined, true); - } - return this; - }, - - // Internal only. - // Field is required if have required constraint without `false` value - _isRequired: function _isRequired() { - if ('undefined' === typeof this.constraintsByName.required) return false; - - return false !== this.constraintsByName.required.requirements; - }, - - // Internal only. - // Shortcut to trigger an event - _trigger: function _trigger(eventName) { - return this.trigger('field:' + eventName); - }, - - // Internal only - // Handles whitespace in a value - // Use `data-parsley-whitespace="squish"` to auto squish input value - // Use `data-parsley-whitespace="trim"` to auto trim input value - _handleWhitespace: function _handleWhitespace(value) { - if (true === this.options.trimValue) Utils.warnOnce('data-parsley-trim-value="true" is deprecated, please use data-parsley-whitespace="trim"'); - - if ('squish' === this.options.whitespace) value = value.replace(/\s{2,}/g, ' '); - - if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value = Utils.trimString(value); - - return value; - }, - - _isDateInput: function _isDateInput() { - var c = this.constraintsByName.type; - return c && c.requirements === 'date'; - }, - - // Internal only. - // Returns the constraints, grouped by descending priority. - // The result is thus an array of arrays of constraints. - _getGroupedConstraints: function _getGroupedConstraints() { - if (false === this.options.priorityEnabled) return [this.constraints]; - - var groupedConstraints = []; - var index = {}; - - // Create array unique of priorities - for (var i = 0; i < this.constraints.length; i++) { - var p = this.constraints[i].priority; - if (!index[p]) groupedConstraints.push(index[p] = []); - index[p].push(this.constraints[i]); - } - // Sort them by priority DESC - groupedConstraints.sort(function (a, b) { - return b[0].priority - a[0].priority; - }); - - return groupedConstraints; - } - - }; - - var parsley_field = Field; - - var Multiple = function Multiple() { - this.__class__ = 'FieldMultiple'; - }; - - Multiple.prototype = { - // Add new `$element` sibling for multiple field - addElement: function addElement($element) { - this.$elements.push($element); - - return this; - }, - - // See `Field.refreshConstraints()` - refreshConstraints: function refreshConstraints() { - var fieldConstraints; - - this.constraints = []; - - // Select multiple special treatment - if (this.element.nodeName === 'SELECT') { - this.actualizeOptions()._bindConstraints(); - - return this; - } - - // Gather all constraints for each input in the multiple group - for (var i = 0; i < this.$elements.length; i++) { - - // Check if element have not been dynamically removed since last binding - if (!$('html').has(this.$elements[i]).length) { - this.$elements.splice(i, 1); - continue; - } - - fieldConstraints = this.$elements[i].data('FieldMultiple').refreshConstraints().constraints; - - for (var j = 0; j < fieldConstraints.length; j++) this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint); - } - - return this; - }, - - // See `Field.getValue()` - getValue: function getValue() { - // Value could be overriden in DOM - if ('function' === typeof this.options.value) return this.options.value(this);else if ('undefined' !== typeof this.options.value) return this.options.value; - - // Radio input case - if (this.element.nodeName === 'INPUT') { - if (this.element.type === 'radio') return this._findRelated().filter(':checked').val() || ''; - - // checkbox input case - if (this.element.type === 'checkbox') { - var values = []; - - this._findRelated().filter(':checked').each(function () { - values.push($(this).val()); - }); - - return values; - } - } - - // Select multiple case - if (this.element.nodeName === 'SELECT' && null === this.$element.val()) return []; - - // Default case that should never happen - return this.$element.val(); - }, - - _init: function _init() { - this.$elements = [this.$element]; - - return this; - } - }; - - var Factory = function Factory(element, options, parsleyFormInstance) { - this.element = element; - this.$element = $(element); - - // If the element has already been bound, returns its saved Parsley instance - var savedparsleyFormInstance = this.$element.data('Parsley'); - if (savedparsleyFormInstance) { - - // If the saved instance has been bound without a Form parent and there is one given in this call, add it - if ('undefined' !== typeof parsleyFormInstance && savedparsleyFormInstance.parent === window.Parsley) { - savedparsleyFormInstance.parent = parsleyFormInstance; - savedparsleyFormInstance._resetOptions(savedparsleyFormInstance.options); - } - - if ('object' === typeof options) { - _extends(savedparsleyFormInstance.options, options); - } - - return savedparsleyFormInstance; - } - - // Parsley must be instantiated with a DOM element or jQuery $element - if (!this.$element.length) throw new Error('You must bind Parsley on an existing element.'); - - if ('undefined' !== typeof parsleyFormInstance && 'Form' !== parsleyFormInstance.__class__) throw new Error('Parent instance must be a Form instance'); - - this.parent = parsleyFormInstance || window.Parsley; - return this.init(options); - }; - - Factory.prototype = { - init: function init(options) { - this.__class__ = 'Parsley'; - this.__version__ = '2.7.2'; - this.__id__ = Utils.generateID(); - - // Pre-compute options - this._resetOptions(options); - - // A Form instance is obviously a `<form>` element but also every node that is not an input and has the `data-parsley-validate` attribute - if (this.element.nodeName === 'FORM' || Utils.checkAttr(this.element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)) return this.bind('parsleyForm'); - - // Every other element is bound as a `Field` or `FieldMultiple` - return this.isMultiple() ? this.handleMultiple() : this.bind('parsleyField'); - }, - - isMultiple: function isMultiple() { - return this.element.type === 'radio' || this.element.type === 'checkbox' || this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple'); - }, - - // Multiples fields are a real nightmare :( - // Maybe some refactoring would be appreciated here... - handleMultiple: function handleMultiple() { - var _this13 = this; - - var name; - var multiple; - var parsleyMultipleInstance; - - // Handle multiple name - this.options.multiple = this.options.multiple || (name = this.element.getAttribute('name')) || this.element.getAttribute('id'); - - // Special select multiple input - if (this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple')) { - this.options.multiple = this.options.multiple || this.__id__; - return this.bind('parsleyFieldMultiple'); - - // Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it - } else if (!this.options.multiple) { - Utils.warn('To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element); - return this; - } - - // Remove special chars - this.options.multiple = this.options.multiple.replace(/(:|\.|\[|\]|\{|\}|\$)/g, ''); - - // Add proper `data-parsley-multiple` to siblings if we have a valid multiple name - if (name) { - $('input[name="' + name + '"]').each(function (i, input) { - if (input.type === 'radio' || input.type === 'checkbox') input.setAttribute(_this13.options.namespace + 'multiple', _this13.options.multiple); - }); - } - - // Check here if we don't already have a related multiple instance saved - var $previouslyRelated = this._findRelated(); - for (var i = 0; i < $previouslyRelated.length; i++) { - parsleyMultipleInstance = $($previouslyRelated.get(i)).data('Parsley'); - if ('undefined' !== typeof parsleyMultipleInstance) { - - if (!this.$element.data('FieldMultiple')) { - parsleyMultipleInstance.addElement(this.$element); - } - - break; - } - } - - // Create a secret Field instance for every multiple field. It will be stored in `data('FieldMultiple')` - // And will be useful later to access classic `Field` stuff while being in a `FieldMultiple` instance - this.bind('parsleyField', true); - - return parsleyMultipleInstance || this.bind('parsleyFieldMultiple'); - }, - - // Return proper `Form`, `Field` or `FieldMultiple` - bind: function bind(type, doNotStore) { - var parsleyInstance; - - switch (type) { - case 'parsleyForm': - parsleyInstance = $.extend(new Form(this.element, this.domOptions, this.options), new Base(), window.ParsleyExtend)._bindFields(); - break; - case 'parsleyField': - parsleyInstance = $.extend(new parsley_field(this.element, this.domOptions, this.options, this.parent), new Base(), window.ParsleyExtend); - break; - case 'parsleyFieldMultiple': - parsleyInstance = $.extend(new parsley_field(this.element, this.domOptions, this.options, this.parent), new Multiple(), new Base(), window.ParsleyExtend)._init(); - break; - default: - throw new Error(type + 'is not a supported Parsley type'); - } - - if (this.options.multiple) Utils.setAttr(this.element, this.options.namespace, 'multiple', this.options.multiple); - - if ('undefined' !== typeof doNotStore) { - this.$element.data('FieldMultiple', parsleyInstance); - - return parsleyInstance; - } - - // Store the freshly bound instance in a DOM element for later access using jQuery `data()` - this.$element.data('Parsley', parsleyInstance); - - // Tell the world we have a new Form or Field instance! - parsleyInstance._actualizeTriggers(); - parsleyInstance._trigger('init'); - - return parsleyInstance; - } - }; - - var vernums = $.fn.jquery.split('.'); - if (parseInt(vernums[0]) <= 1 && parseInt(vernums[1]) < 8) { - throw "The loaded version of jQuery is too old. Please upgrade to 1.8.x or better."; - } - if (!vernums.forEach) { - Utils.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim'); - } - // Inherit `on`, `off` & `trigger` to Parsley: - var Parsley = _extends(new Base(), { - element: document, - $element: $(document), - actualizeOptions: null, - _resetOptions: null, - Factory: Factory, - version: '2.7.2' - }); - - // Supplement Field and Form with Base - // This way, the constructors will have access to those methods - _extends(parsley_field.prototype, UI.Field, Base.prototype); - _extends(Form.prototype, UI.Form, Base.prototype); - // Inherit actualizeOptions and _resetOptions: - _extends(Factory.prototype, Base.prototype); - - // ### jQuery API - // `$('.elem').parsley(options)` or `$('.elem').psly(options)` - $.fn.parsley = $.fn.psly = function (options) { - if (this.length > 1) { - var instances = []; - - this.each(function () { - instances.push($(this).parsley(options)); - }); - - return instances; - } - - // Return undefined if applied to non existing DOM element - if (!$(this).length) { - Utils.warn('You must bind Parsley on an existing element.'); - - return; - } - - return new Factory(this[0], options); - }; - - // ### Field and Form extension - // Ensure the extension is now defined if it wasn't previously - if ('undefined' === typeof window.ParsleyExtend) window.ParsleyExtend = {}; - - // ### Parsley config - // Inherit from ParsleyDefault, and copy over any existing values - Parsley.options = _extends(Utils.objectCreate(Defaults), window.ParsleyConfig); - window.ParsleyConfig = Parsley.options; // Old way of accessing global options - - // ### Globals - window.Parsley = window.psly = Parsley; - Parsley.Utils = Utils; - window.ParsleyUtils = {}; - $.each(Utils, function (key, value) { - if ('function' === typeof value) { - window.ParsleyUtils[key] = function () { - Utils.warnOnce('Accessing `window.ParsleyUtils` is deprecated. Use `window.Parsley.Utils` instead.'); - return Utils[key].apply(Utils, arguments); - }; - } - }); - - // ### Define methods that forward to the registry, and deprecate all access except through window.Parsley - var registry = window.Parsley._validatorRegistry = new ValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n); - window.ParsleyValidator = {}; - $.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator'.split(' '), function (i, method) { - window.Parsley[method] = function () { - return registry[method].apply(registry, arguments); - }; - window.ParsleyValidator[method] = function () { - var _window$Parsley; - - Utils.warnOnce('Accessing the method \'' + method + '\' through Validator is deprecated. Simply call \'window.Parsley.' + method + '(...)\''); - return (_window$Parsley = window.Parsley)[method].apply(_window$Parsley, arguments); - }; - }); - - // ### UI - // Deprecated global object - window.Parsley.UI = UI; - window.ParsleyUI = { - removeError: function removeError(instance, name, doNotUpdateClass) { - var updateClass = true !== doNotUpdateClass; - Utils.warnOnce('Accessing UI is deprecated. Call \'removeError\' on the instance directly. Please comment in issue 1073 as to your need to call this method.'); - return instance.removeError(name, { updateClass: updateClass }); - }, - getErrorsMessages: function getErrorsMessages(instance) { - Utils.warnOnce('Accessing UI is deprecated. Call \'getErrorsMessages\' on the instance directly.'); - return instance.getErrorsMessages(); - } - }; - $.each('addError updateError'.split(' '), function (i, method) { - window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) { - var updateClass = true !== doNotUpdateClass; - Utils.warnOnce('Accessing UI is deprecated. Call \'' + method + '\' on the instance directly. Please comment in issue 1073 as to your need to call this method.'); - return instance[method](name, { message: message, assert: assert, updateClass: updateClass }); - }; - }); - - // ### PARSLEY auto-binding - // Prevent it by setting `ParsleyConfig.autoBind` to `false` - if (false !== window.ParsleyConfig.autoBind) { - $(function () { - // Works only on `data-parsley-validate`. - if ($('[data-parsley-validate]').length) $('[data-parsley-validate]').parsley(); - }); - } - - var o = $({}); - var deprecated = function deprecated() { - Utils.warnOnce("Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley"); - }; - - // Returns an event handler that calls `fn` with the arguments it expects - function adapt(fn, context) { - // Store to allow unbinding - if (!fn.parsleyAdaptedCallback) { - fn.parsleyAdaptedCallback = function () { - var args = Array.prototype.slice.call(arguments, 0); - args.unshift(this); - fn.apply(context || o, args); - }; - } - return fn.parsleyAdaptedCallback; - } - - var eventPrefix = 'parsley:'; - // Converts 'parsley:form:validate' into 'form:validate' - function eventName(name) { - if (name.lastIndexOf(eventPrefix, 0) === 0) return name.substr(eventPrefix.length); - return name; - } - - // $.listen is deprecated. Use Parsley.on instead. - $.listen = function (name, callback) { - var context; - deprecated(); - if ('object' === typeof arguments[1] && 'function' === typeof arguments[2]) { - context = arguments[1]; - callback = arguments[2]; - } - - if ('function' !== typeof callback) throw new Error('Wrong parameters'); - - window.Parsley.on(eventName(name), adapt(callback, context)); - }; - - $.listenTo = function (instance, name, fn) { - deprecated(); - if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance'); - - if ('string' !== typeof name || 'function' !== typeof fn) throw new Error('Wrong parameters'); - - instance.on(eventName(name), adapt(fn)); - }; - - $.unsubscribe = function (name, fn) { - deprecated(); - if ('string' !== typeof name || 'function' !== typeof fn) throw new Error('Wrong arguments'); - window.Parsley.off(eventName(name), fn.parsleyAdaptedCallback); - }; - - $.unsubscribeTo = function (instance, name) { - deprecated(); - if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance'); - instance.off(eventName(name)); - }; - - $.unsubscribeAll = function (name) { - deprecated(); - window.Parsley.off(eventName(name)); - $('form,input,textarea,select').each(function () { - var instance = $(this).data('Parsley'); - if (instance) { - instance.off(eventName(name)); - } - }); - }; - - // $.emit is deprecated. Use jQuery events instead. - $.emit = function (name, instance) { - var _instance; - - deprecated(); - var instanceGiven = instance instanceof parsley_field || instance instanceof Form; - var args = Array.prototype.slice.call(arguments, instanceGiven ? 2 : 1); - args.unshift(eventName(name)); - if (!instanceGiven) { - instance = window.Parsley; - } - (_instance = instance).trigger.apply(_instance, _toConsumableArray(args)); - }; - - var pubsub = {}; - - $.extend(true, Parsley, { - asyncValidators: { - 'default': { - fn: function fn(xhr) { - // By default, only status 2xx are deemed successful. - // Note: we use status instead of state() because responses with status 200 - // but invalid messages (e.g. an empty body for content type set to JSON) will - // result in state() === 'rejected'. - return xhr.status >= 200 && xhr.status < 300; - }, - url: false - }, - reverse: { - fn: function fn(xhr) { - // If reverse option is set, a failing ajax request is considered successful - return xhr.status < 200 || xhr.status >= 300; - }, - url: false - } - }, - - addAsyncValidator: function addAsyncValidator(name, fn, url, options) { - Parsley.asyncValidators[name] = { - fn: fn, - url: url || false, - options: options || {} - }; - - return this; - } - - }); - - Parsley.addValidator('remote', { - requirementType: { - '': 'string', - 'validator': 'string', - 'reverse': 'boolean', - 'options': 'object' - }, - - validateString: function validateString(value, url, options, instance) { - var data = {}; - var ajaxOptions; - var csr; - var validator = options.validator || (true === options.reverse ? 'reverse' : 'default'); - - if ('undefined' === typeof Parsley.asyncValidators[validator]) throw new Error('Calling an undefined async validator: `' + validator + '`'); - - url = Parsley.asyncValidators[validator].url || url; - - // Fill current value - if (url.indexOf('{value}') > -1) { - url = url.replace('{value}', encodeURIComponent(value)); - } else { - data[instance.element.getAttribute('name') || instance.element.getAttribute('id')] = value; - } - - // Merge options passed in from the function with the ones in the attribute - var remoteOptions = $.extend(true, options.options || {}, Parsley.asyncValidators[validator].options); - - // All `$.ajax(options)` could be overridden or extended directly from DOM in `data-parsley-remote-options` - ajaxOptions = $.extend(true, {}, { - url: url, - data: data, - type: 'GET' - }, remoteOptions); - - // Generate store key based on ajax options - instance.trigger('field:ajaxoptions', instance, ajaxOptions); - - csr = $.param(ajaxOptions); - - // Initialise querry cache - if ('undefined' === typeof Parsley._remoteCache) Parsley._remoteCache = {}; - - // Try to retrieve stored xhr - var xhr = Parsley._remoteCache[csr] = Parsley._remoteCache[csr] || $.ajax(ajaxOptions); - - var handleXhr = function handleXhr() { - var result = Parsley.asyncValidators[validator].fn.call(instance, xhr, url, options); - if (!result) // Map falsy results to rejected promise - result = $.Deferred().reject(); - return $.when(result); - }; - - return xhr.then(handleXhr, handleXhr); - }, - - priority: -1 - }); - - Parsley.on('form:submit', function () { - Parsley._remoteCache = {}; - }); - - Base.prototype.addAsyncValidator = function () { - Utils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`'); - return Parsley.addAsyncValidator.apply(Parsley, arguments); - }; - - // This is included with the Parsley library itself, - // thus there is no use in adding it to your project. - Parsley.addMessages('en', { - defaultMessage: "This value seems to be invalid.", - type: { - email: "This value should be a valid email.", - url: "This value should be a valid url.", - number: "This value should be a valid number.", - integer: "This value should be a valid integer.", - digits: "This value should be digits.", - alphanum: "This value should be alphanumeric." - }, - notblank: "This value should not be blank.", - required: "This value is required.", - pattern: "This value seems to be invalid.", - min: "This value should be greater than or equal to %s.", - max: "This value should be lower than or equal to %s.", - range: "This value should be between %s and %s.", - minlength: "This value is too short. It should have %s characters or more.", - maxlength: "This value is too long. It should have %s characters or fewer.", - length: "This value length is invalid. It should be between %s and %s characters long.", - mincheck: "You must select at least %s choices.", - maxcheck: "You must select %s choices or fewer.", - check: "You must select between %s and %s choices.", - equalto: "This value should be the same." - }); - - Parsley.setLocale('en'); - - /** - * inputevent - Alleviate browser bugs for input events - * https://github.com/marcandre/inputevent - * @version v0.0.3 - (built Thu, Apr 14th 2016, 5:58 pm) - * @author Marc-Andre Lafortune <github@marc-andre.ca> - * @license MIT - */ - - function InputEvent() { - var _this14 = this; - - var globals = window || global; - - // Slightly odd way construct our object. This way methods are force bound. - // Used to test for duplicate library. - _extends(this, { - - // For browsers that do not support isTrusted, assumes event is native. - isNativeEvent: function isNativeEvent(evt) { - return evt.originalEvent && evt.originalEvent.isTrusted !== false; - }, - - fakeInputEvent: function fakeInputEvent(evt) { - if (_this14.isNativeEvent(evt)) { - $(evt.target).trigger('input'); - } - }, - - misbehaves: function misbehaves(evt) { - if (_this14.isNativeEvent(evt)) { - _this14.behavesOk(evt); - $(document).on('change.inputevent', evt.data.selector, _this14.fakeInputEvent); - _this14.fakeInputEvent(evt); - } - }, - - behavesOk: function behavesOk(evt) { - if (_this14.isNativeEvent(evt)) { - $(document) // Simply unbinds the testing handler - .off('input.inputevent', evt.data.selector, _this14.behavesOk).off('change.inputevent', evt.data.selector, _this14.misbehaves); - } - }, - - // Bind the testing handlers - install: function install() { - if (globals.inputEventPatched) { - return; - } - globals.inputEventPatched = '0.0.3'; - var _arr = ['select', 'input[type="checkbox"]', 'input[type="radio"]', 'input[type="file"]']; - for (var _i = 0; _i < _arr.length; _i++) { - var selector = _arr[_i]; - $(document).on('input.inputevent', selector, { selector: selector }, _this14.behavesOk).on('change.inputevent', selector, { selector: selector }, _this14.misbehaves); - } - }, - - uninstall: function uninstall() { - delete globals.inputEventPatched; - $(document).off('.inputevent'); - } - - }); - }; - - var inputevent = new InputEvent(); - - inputevent.install(); - - var parsley = Parsley; - - return parsley; -}); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/promise/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = __webpack_require__("../../../../../node_modules/promise/lib/core.js") -__webpack_require__("../../../../../node_modules/promise/lib/done.js") -__webpack_require__("../../../../../node_modules/promise/lib/es6-extensions.js") -__webpack_require__("../../../../../node_modules/promise/lib/node-extensions.js") - -/***/ }), - -/***/ "../../../../../node_modules/promise/lib/core.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var asap = __webpack_require__("../../../../../node_modules/asap/asap.js") - -module.exports = Promise; -function Promise(fn) { - if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new') - if (typeof fn !== 'function') throw new TypeError('not a function') - var state = null - var value = null - var deferreds = [] - var self = this - - this.then = function(onFulfilled, onRejected) { - return new self.constructor(function(resolve, reject) { - handle(new Handler(onFulfilled, onRejected, resolve, reject)) - }) - } - - function handle(deferred) { - if (state === null) { - deferreds.push(deferred) - return - } - asap(function() { - var cb = state ? deferred.onFulfilled : deferred.onRejected - if (cb === null) { - (state ? deferred.resolve : deferred.reject)(value) - return - } - var ret - try { - ret = cb(value) - } - catch (e) { - deferred.reject(e) - return - } - deferred.resolve(ret) - }) - } - - function resolve(newValue) { - try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.') - if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { - var then = newValue.then - if (typeof then === 'function') { - doResolve(then.bind(newValue), resolve, reject) - return - } - } - state = true - value = newValue - finale() - } catch (e) { reject(e) } - } - - function reject(newValue) { - state = false - value = newValue - finale() - } - - function finale() { - for (var i = 0, len = deferreds.length; i < len; i++) - handle(deferreds[i]) - deferreds = null - } - - doResolve(fn, resolve, reject) -} - - -function Handler(onFulfilled, onRejected, resolve, reject){ - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null - this.onRejected = typeof onRejected === 'function' ? onRejected : null - this.resolve = resolve - this.reject = reject -} - -/** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ -function doResolve(fn, onFulfilled, onRejected) { - var done = false; - try { - fn(function (value) { - if (done) return - done = true - onFulfilled(value) - }, function (reason) { - if (done) return - done = true - onRejected(reason) - }) - } catch (ex) { - if (done) return - done = true - onRejected(ex) - } -} - - -/***/ }), - -/***/ "../../../../../node_modules/promise/lib/done.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Promise = __webpack_require__("../../../../../node_modules/promise/lib/core.js") -var asap = __webpack_require__("../../../../../node_modules/asap/asap.js") - -module.exports = Promise -Promise.prototype.done = function (onFulfilled, onRejected) { - var self = arguments.length ? this.then.apply(this, arguments) : this - self.then(null, function (err) { - asap(function () { - throw err - }) - }) -} - -/***/ }), - -/***/ "../../../../../node_modules/promise/lib/es6-extensions.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -//This file contains the ES6 extensions to the core Promises/A+ API - -var Promise = __webpack_require__("../../../../../node_modules/promise/lib/core.js") -var asap = __webpack_require__("../../../../../node_modules/asap/asap.js") - -module.exports = Promise - -/* Static Functions */ - -function ValuePromise(value) { - this.then = function (onFulfilled) { - if (typeof onFulfilled !== 'function') return this - return new Promise(function (resolve, reject) { - asap(function () { - try { - resolve(onFulfilled(value)) - } catch (ex) { - reject(ex); - } - }) - }) - } -} -ValuePromise.prototype = Promise.prototype - -var TRUE = new ValuePromise(true) -var FALSE = new ValuePromise(false) -var NULL = new ValuePromise(null) -var UNDEFINED = new ValuePromise(undefined) -var ZERO = new ValuePromise(0) -var EMPTYSTRING = new ValuePromise('') - -Promise.resolve = function (value) { - if (value instanceof Promise) return value - - if (value === null) return NULL - if (value === undefined) return UNDEFINED - if (value === true) return TRUE - if (value === false) return FALSE - if (value === 0) return ZERO - if (value === '') return EMPTYSTRING - - if (typeof value === 'object' || typeof value === 'function') { - try { - var then = value.then - if (typeof then === 'function') { - return new Promise(then.bind(value)) - } - } catch (ex) { - return new Promise(function (resolve, reject) { - reject(ex) - }) - } - } - - return new ValuePromise(value) -} - -Promise.all = function (arr) { - var args = Array.prototype.slice.call(arr) - - return new Promise(function (resolve, reject) { - if (args.length === 0) return resolve([]) - var remaining = args.length - function res(i, val) { - try { - if (val && (typeof val === 'object' || typeof val === 'function')) { - var then = val.then - if (typeof then === 'function') { - then.call(val, function (val) { res(i, val) }, reject) - return - } - } - args[i] = val - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex) - } - } - for (var i = 0; i < args.length; i++) { - res(i, args[i]) - } - }) -} - -Promise.reject = function (value) { - return new Promise(function (resolve, reject) { - reject(value); - }); -} - -Promise.race = function (values) { - return new Promise(function (resolve, reject) { - values.forEach(function(value){ - Promise.resolve(value).then(resolve, reject); - }) - }); -} - -/* Prototype Methods */ - -Promise.prototype['catch'] = function (onRejected) { - return this.then(null, onRejected); -} - - -/***/ }), - -/***/ "../../../../../node_modules/promise/lib/node-extensions.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -//This file contains then/promise specific extensions that are only useful for node.js interop - -var Promise = __webpack_require__("../../../../../node_modules/promise/lib/core.js") -var asap = __webpack_require__("../../../../../node_modules/asap/asap.js") - -module.exports = Promise - -/* Static Functions */ - -Promise.denodeify = function (fn, argumentCount) { - argumentCount = argumentCount || Infinity - return function () { - var self = this - var args = Array.prototype.slice.call(arguments) - return new Promise(function (resolve, reject) { - while (args.length && args.length > argumentCount) { - args.pop() - } - args.push(function (err, res) { - if (err) reject(err) - else resolve(res) - }) - var res = fn.apply(self, args) - if (res && (typeof res === 'object' || typeof res === 'function') && typeof res.then === 'function') { - resolve(res) - } - }) - } -} -Promise.nodeify = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments) - var callback = typeof args[args.length - 1] === 'function' ? args.pop() : null - var ctx = this - try { - return fn.apply(this, arguments).nodeify(callback, ctx) - } catch (ex) { - if (callback === null || typeof callback == 'undefined') { - return new Promise(function (resolve, reject) { reject(ex) }) - } else { - asap(function () { - callback.call(ctx, ex) - }) - } - } - } -} - -Promise.prototype.nodeify = function (callback, ctx) { - if (typeof callback != 'function') return this - - this.then(function (value) { - asap(function () { - callback.call(ctx, null, value) - }) - }, function (err) { - asap(function () { - callback.call(ctx, err) - }) - }) -} - - -/***/ }), - -/***/ "../../../../../node_modules/scriptjs/dist/script.js": -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - * $script.js JS loader & dependency manager - * https://github.com/ded/script.js - * (c) Dustin Diaz 2014 | License MIT - */ - -(function (name, definition) { - if (typeof module != 'undefined' && module.exports) module.exports = definition() - else if (true) !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : - __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) - else this[name] = definition() -})('$script', function () { - var doc = document - , head = doc.getElementsByTagName('head')[0] - , s = 'string' - , f = false - , push = 'push' - , readyState = 'readyState' - , onreadystatechange = 'onreadystatechange' - , list = {} - , ids = {} - , delay = {} - , scripts = {} - , scriptpath - , urlArgs - - function every(ar, fn) { - for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f - return 1 - } - function each(ar, fn) { - every(ar, function (el) { - return !fn(el) - }) - } - - function $script(paths, idOrDone, optDone) { - paths = paths[push] ? paths : [paths] - var idOrDoneIsDone = idOrDone && idOrDone.call - , done = idOrDoneIsDone ? idOrDone : optDone - , id = idOrDoneIsDone ? paths.join('') : idOrDone - , queue = paths.length - function loopFn(item) { - return item.call ? item() : list[item] - } - function callback() { - if (!--queue) { - list[id] = 1 - done && done() - for (var dset in delay) { - every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = []) - } - } - } - setTimeout(function () { - each(paths, function loading(path, force) { - if (path === null) return callback() - - if (!force && !/^https?:\/\//.test(path) && scriptpath) { - path = (path.indexOf('.js') === -1) ? scriptpath + path + '.js' : scriptpath + path; - } - - if (scripts[path]) { - if (id) ids[id] = 1 - return (scripts[path] == 2) ? callback() : setTimeout(function () { loading(path, true) }, 0) - } - - scripts[path] = 1 - if (id) ids[id] = 1 - create(path, callback) - }) - }, 0) - return $script - } - - function create(path, fn) { - var el = doc.createElement('script'), loaded - el.onload = el.onerror = el[onreadystatechange] = function () { - if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return; - el.onload = el[onreadystatechange] = null - loaded = 1 - scripts[path] = 2 - fn() - } - el.async = 1 - el.src = urlArgs ? path + (path.indexOf('?') === -1 ? '?' : '&') + urlArgs : path; - head.insertBefore(el, head.lastChild) - } - - $script.get = create - - $script.order = function (scripts, id, done) { - (function callback(s) { - s = scripts.shift() - !scripts.length ? $script(s, id, done) : $script(s, callback) - }()) - } - - $script.path = function (p) { - scriptpath = p - } - $script.urlArgs = function (str) { - urlArgs = str; - } - $script.ready = function (deps, ready, req) { - deps = deps[push] ? deps : [deps] - var missing = []; - !each(deps, function (dep) { - list[dep] || missing[push](dep); - }) && every(deps, function (dep) {return list[dep]}) ? - ready() : !function (key) { - delay[key] = delay[key] || [] - delay[key][push](ready) - req && req(missing) - }(deps.join('|')) - return $script - } - - $script.done = function (idOrDone) { - $script([null], idOrDone) - } - - return $script -}); - - -/***/ }), - -/***/ "../../../../../node_modules/setimmediate/setImmediate.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { - "use strict"; - - if (global.setImmediate) { - return; - } - - var nextHandle = 1; // Spec says greater than zero - var tasksByHandle = {}; - var currentlyRunningATask = false; - var doc = global.document; - var registerImmediate; - - function setImmediate(callback) { - // Callback can either be a function or a string - if (typeof callback !== "function") { - callback = new Function("" + callback); - } - // Copy function arguments - var args = new Array(arguments.length - 1); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i + 1]; - } - // Store and register the task - var task = { callback: callback, args: args }; - tasksByHandle[nextHandle] = task; - registerImmediate(nextHandle); - return nextHandle++; - } - - function clearImmediate(handle) { - delete tasksByHandle[handle]; - } - - function run(task) { - var callback = task.callback; - var args = task.args; - switch (args.length) { - case 0: - callback(); - break; - case 1: - callback(args[0]); - break; - case 2: - callback(args[0], args[1]); - break; - case 3: - callback(args[0], args[1], args[2]); - break; - default: - callback.apply(undefined, args); - break; - } - } - - function runIfPresent(handle) { - // From the spec: "Wait until any invocations of this algorithm started before this one have completed." - // So if we're currently running a task, we'll need to delay this invocation. - if (currentlyRunningATask) { - // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a - // "too much recursion" error. - setTimeout(runIfPresent, 0, handle); - } else { - var task = tasksByHandle[handle]; - if (task) { - currentlyRunningATask = true; - try { - run(task); - } finally { - clearImmediate(handle); - currentlyRunningATask = false; - } - } - } - } - - function installNextTickImplementation() { - registerImmediate = function(handle) { - process.nextTick(function () { runIfPresent(handle); }); - }; - } - - function canUsePostMessage() { - // The test against `importScripts` prevents this implementation from being installed inside a web worker, - // where `global.postMessage` means something completely different and can't be used for this purpose. - if (global.postMessage && !global.importScripts) { - var postMessageIsAsynchronous = true; - var oldOnMessage = global.onmessage; - global.onmessage = function() { - postMessageIsAsynchronous = false; - }; - global.postMessage("", "*"); - global.onmessage = oldOnMessage; - return postMessageIsAsynchronous; - } - } - - function installPostMessageImplementation() { - // Installs an event handler on `global` for the `message` event: see - // * https://developer.mozilla.org/en/DOM/window.postMessage - // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages - - var messagePrefix = "setImmediate$" + Math.random() + "$"; - var onGlobalMessage = function(event) { - if (event.source === global && - typeof event.data === "string" && - event.data.indexOf(messagePrefix) === 0) { - runIfPresent(+event.data.slice(messagePrefix.length)); - } - }; - - if (global.addEventListener) { - global.addEventListener("message", onGlobalMessage, false); - } else { - global.attachEvent("onmessage", onGlobalMessage); - } - - registerImmediate = function(handle) { - global.postMessage(messagePrefix + handle, "*"); - }; - } - - function installMessageChannelImplementation() { - var channel = new MessageChannel(); - channel.port1.onmessage = function(event) { - var handle = event.data; - runIfPresent(handle); - }; - - registerImmediate = function(handle) { - channel.port2.postMessage(handle); - }; - } - - function installReadyStateChangeImplementation() { - var html = doc.documentElement; - registerImmediate = function(handle) { - // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted - // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. - var script = doc.createElement("script"); - script.onreadystatechange = function () { - runIfPresent(handle); - script.onreadystatechange = null; - html.removeChild(script); - script = null; - }; - html.appendChild(script); - }; - } - - function installSetTimeoutImplementation() { - registerImmediate = function(handle) { - setTimeout(runIfPresent, 0, handle); - }; - } - - // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live. - var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global); - attachTo = attachTo && attachTo.setTimeout ? attachTo : global; - - // Don't get fooled by e.g. browserify environments. - if ({}.toString.call(global.process) === "[object process]") { - // For Node.js before 0.9 - installNextTickImplementation(); - - } else if (canUsePostMessage()) { - // For non-IE10 modern browsers - installPostMessageImplementation(); - - } else if (global.MessageChannel) { - // For web workers, where supported - installMessageChannelImplementation(); - - } else if (doc && "onreadystatechange" in doc.createElement("script")) { - // For IE 6–8 - installReadyStateChangeImplementation(); - - } else { - // For older browsers - installSetTimeoutImplementation(); - } - - attachTo.setImmediate = setImmediate; - attachTo.clearImmediate = clearImmediate; -}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self)); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/webpack/buildin/global.js"), __webpack_require__("../../../../../node_modules/process/browser.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/style-loader/lib/addStyles.js": -/***/ (function(module, exports, __webpack_require__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - -var stylesInDom = {}; - -var memoize = function (fn) { - var memo; - - return function () { - if (typeof memo === "undefined") memo = fn.apply(this, arguments); - return memo; - }; -}; - -var isOldIE = memoize(function () { - // Test for IE <= 9 as proposed by Browserhacks - // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 - // Tests for existence of standard globals is to allow style-loader - // to operate correctly into non-standard environments - // @see https://github.com/webpack-contrib/style-loader/issues/177 - return window && document && document.all && !window.atob; -}); - -var getElement = (function (fn) { - var memo = {}; - - return function(selector) { - if (typeof memo[selector] === "undefined") { - memo[selector] = fn.call(this, selector); - } - - return memo[selector] - }; -})(function (target) { - return document.querySelector(target) -}); - -var singleton = null; -var singletonCounter = 0; -var stylesInsertedAtTop = []; - -var fixUrls = __webpack_require__("../../../../../node_modules/style-loader/lib/urls.js"); - -module.exports = function(list, options) { - if (typeof DEBUG !== "undefined" && DEBUG) { - if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); - } - - options = options || {}; - - options.attrs = typeof options.attrs === "object" ? options.attrs : {}; - - // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> - // tags it will allow on a page - if (!options.singleton) options.singleton = isOldIE(); - - // By default, add <style> tags to the <head> element - if (!options.insertInto) options.insertInto = "head"; - - // By default, add <style> tags to the bottom of the target - if (!options.insertAt) options.insertAt = "bottom"; - - var styles = listToStyles(list, options); - - addStylesToDom(styles, options); - - return function update (newList) { - var mayRemove = []; - - for (var i = 0; i < styles.length; i++) { - var item = styles[i]; - var domStyle = stylesInDom[item.id]; - - domStyle.refs--; - mayRemove.push(domStyle); - } - - if(newList) { - var newStyles = listToStyles(newList, options); - addStylesToDom(newStyles, options); - } - - for (var i = 0; i < mayRemove.length; i++) { - var domStyle = mayRemove[i]; - - if(domStyle.refs === 0) { - for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j](); - - delete stylesInDom[domStyle.id]; - } - } - }; -}; - -function addStylesToDom (styles, options) { - for (var i = 0; i < styles.length; i++) { - var item = styles[i]; - var domStyle = stylesInDom[item.id]; - - if(domStyle) { - domStyle.refs++; - - for(var j = 0; j < domStyle.parts.length; j++) { - domStyle.parts[j](item.parts[j]); - } - - for(; j < item.parts.length; j++) { - domStyle.parts.push(addStyle(item.parts[j], options)); - } - } else { - var parts = []; - - for(var j = 0; j < item.parts.length; j++) { - parts.push(addStyle(item.parts[j], options)); - } - - stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts}; - } - } -} - -function listToStyles (list, options) { - var styles = []; - var newStyles = {}; - - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var id = options.base ? item[0] + options.base : item[0]; - var css = item[1]; - var media = item[2]; - var sourceMap = item[3]; - var part = {css: css, media: media, sourceMap: sourceMap}; - - if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]}); - else newStyles[id].parts.push(part); - } - - return styles; -} - -function insertStyleElement (options, style) { - var target = getElement(options.insertInto) - - if (!target) { - throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid."); - } - - var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1]; - - if (options.insertAt === "top") { - if (!lastStyleElementInsertedAtTop) { - target.insertBefore(style, target.firstChild); - } else if (lastStyleElementInsertedAtTop.nextSibling) { - target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling); - } else { - target.appendChild(style); - } - stylesInsertedAtTop.push(style); - } else if (options.insertAt === "bottom") { - target.appendChild(style); - } else { - throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'."); - } -} - -function removeStyleElement (style) { - if (style.parentNode === null) return false; - style.parentNode.removeChild(style); - - var idx = stylesInsertedAtTop.indexOf(style); - if(idx >= 0) { - stylesInsertedAtTop.splice(idx, 1); - } -} - -function createStyleElement (options) { - var style = document.createElement("style"); - - options.attrs.type = "text/css"; - - addAttrs(style, options.attrs); - insertStyleElement(options, style); - - return style; -} - -function createLinkElement (options) { - var link = document.createElement("link"); - - options.attrs.type = "text/css"; - options.attrs.rel = "stylesheet"; - - addAttrs(link, options.attrs); - insertStyleElement(options, link); - - return link; -} - -function addAttrs (el, attrs) { - Object.keys(attrs).forEach(function (key) { - el.setAttribute(key, attrs[key]); - }); -} - -function addStyle (obj, options) { - var style, update, remove, result; - - // If a transform function was defined, run it on the css - if (options.transform && obj.css) { - result = options.transform(obj.css); - - if (result) { - // If transform returns a value, use that instead of the original css. - // This allows running runtime transformations on the css. - obj.css = result; - } else { - // If the transform function returns a falsy value, don't add this css. - // This allows conditional loading of css - return function() { - // noop - }; - } - } - - if (options.singleton) { - var styleIndex = singletonCounter++; - - style = singleton || (singleton = createStyleElement(options)); - - update = applyToSingletonTag.bind(null, style, styleIndex, false); - remove = applyToSingletonTag.bind(null, style, styleIndex, true); - - } else if ( - obj.sourceMap && - typeof URL === "function" && - typeof URL.createObjectURL === "function" && - typeof URL.revokeObjectURL === "function" && - typeof Blob === "function" && - typeof btoa === "function" - ) { - style = createLinkElement(options); - update = updateLink.bind(null, style, options); - remove = function () { - removeStyleElement(style); - - if(style.href) URL.revokeObjectURL(style.href); - }; - } else { - style = createStyleElement(options); - update = applyToTag.bind(null, style); - remove = function () { - removeStyleElement(style); - }; - } - - update(obj); - - return function updateStyle (newObj) { - if (newObj) { - if ( - newObj.css === obj.css && - newObj.media === obj.media && - newObj.sourceMap === obj.sourceMap - ) { - return; - } - - update(obj = newObj); - } else { - remove(); - } - }; -} - -var replaceText = (function () { - var textStore = []; - - return function (index, replacement) { - textStore[index] = replacement; - - return textStore.filter(Boolean).join('\n'); - }; -})(); - -function applyToSingletonTag (style, index, remove, obj) { - var css = remove ? "" : obj.css; - - if (style.styleSheet) { - style.styleSheet.cssText = replaceText(index, css); - } else { - var cssNode = document.createTextNode(css); - var childNodes = style.childNodes; - - if (childNodes[index]) style.removeChild(childNodes[index]); - - if (childNodes.length) { - style.insertBefore(cssNode, childNodes[index]); - } else { - style.appendChild(cssNode); - } - } -} - -function applyToTag (style, obj) { - var css = obj.css; - var media = obj.media; - - if(media) { - style.setAttribute("media", media) - } - - if(style.styleSheet) { - style.styleSheet.cssText = css; - } else { - while(style.firstChild) { - style.removeChild(style.firstChild); - } - - style.appendChild(document.createTextNode(css)); - } -} - -function updateLink (link, options, obj) { - var css = obj.css; - var sourceMap = obj.sourceMap; - - /* - If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled - and there is no publicPath defined then lets turn convertToAbsoluteUrls - on by default. Otherwise default to the convertToAbsoluteUrls option - directly - */ - var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap; - - if (options.convertToAbsoluteUrls || autoFixUrls) { - css = fixUrls(css); - } - - if (sourceMap) { - // http://stackoverflow.com/a/26603875 - css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */"; - } - - var blob = new Blob([css], { type: "text/css" }); - - var oldSrc = link.href; - - link.href = URL.createObjectURL(blob); - - if(oldSrc) URL.revokeObjectURL(oldSrc); -} - - -/***/ }), - -/***/ "../../../../../node_modules/style-loader/lib/urls.js": -/***/ (function(module, exports) { - - -/** - * When source maps are enabled, `style-loader` uses a link element with a data-uri to - * embed the css on the page. This breaks all relative urls because now they are relative to a - * bundle instead of the current page. - * - * One solution is to only use full urls, but that may be impossible. - * - * Instead, this function "fixes" the relative urls to be absolute according to the current page location. - * - * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command. - * - */ - -module.exports = function (css) { - // get current location - var location = typeof window !== "undefined" && window.location; - - if (!location) { - throw new Error("fixUrls requires window.location"); - } - - // blank or null? - if (!css || typeof css !== "string") { - return css; - } - - var baseUrl = location.protocol + "//" + location.host; - var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/"); - - // convert each url(...) - /* - This regular expression is just a way to recursively match brackets within - a string. - - /url\s*\( = Match on the word "url" with any whitespace after it and then a parens - ( = Start a capturing group - (?: = Start a non-capturing group - [^)(] = Match anything that isn't a parentheses - | = OR - \( = Match a start parentheses - (?: = Start another non-capturing groups - [^)(]+ = Match anything that isn't a parentheses - | = OR - \( = Match a start parentheses - [^)(]* = Match anything that isn't a parentheses - \) = Match a end parentheses - ) = End Group - *\) = Match anything and then a close parens - ) = Close non-capturing group - * = Match anything - ) = Close capturing group - \) = Match a close parens - - /gi = Get all matches, not the first. Be case insensitive. - */ - var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) { - // strip quotes (if they exist) - var unquotedOrigUrl = origUrl - .trim() - .replace(/^"(.*)"$/, function(o, $1){ return $1; }) - .replace(/^'(.*)'$/, function(o, $1){ return $1; }); - - // already a full url? no change - if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(unquotedOrigUrl)) { - return fullMatch; - } - - // convert the url to a full url - var newUrl; - - if (unquotedOrigUrl.indexOf("//") === 0) { - //TODO: should we add protocol? - newUrl = unquotedOrigUrl; - } else if (unquotedOrigUrl.indexOf("/") === 0) { - // path should be relative to the base url - newUrl = baseUrl + unquotedOrigUrl; // already starts with '/' - } else { - // path should be relative to current directory - newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './' - } - - // send back the fixed url(...) - return "url(" + JSON.stringify(newUrl) + ")"; - }); - - // send back the fixed css - return fixedCss; -}; - - -/***/ }), - -/***/ "../../../../../node_modules/swiper/dist/js/swiper.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(jQuery) {/** - * Swiper 3.4.2 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2017, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: March 10, 2017 - */ -(function () { - 'use strict'; - var $; - - /*=========================== - Swiper - ===========================*/ - var Swiper = function (container, params) { - if (!(this instanceof Swiper)) return new Swiper(container, params); - - - var defaults = { - direction: 'horizontal', - touchEventsTarget: 'container', - initialSlide: 0, - speed: 300, - // autoplay - autoplay: false, - autoplayDisableOnInteraction: true, - autoplayStopOnLast: false, - // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView). - iOSEdgeSwipeDetection: false, - iOSEdgeSwipeThreshold: 20, - // Free mode - freeMode: false, - freeModeMomentum: true, - freeModeMomentumRatio: 1, - freeModeMomentumBounce: true, - freeModeMomentumBounceRatio: 1, - freeModeMomentumVelocityRatio: 1, - freeModeSticky: false, - freeModeMinimumVelocity: 0.02, - // Autoheight - autoHeight: false, - // Set wrapper width - setWrapperSize: false, - // Virtual Translate - virtualTranslate: false, - // Effects - effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' - coverflow: { - rotate: 50, - stretch: 0, - depth: 100, - modifier: 1, - slideShadows : true - }, - flip: { - slideShadows : true, - limitRotation: true - }, - cube: { - slideShadows: true, - shadow: true, - shadowOffset: 20, - shadowScale: 0.94 - }, - fade: { - crossFade: false - }, - // Parallax - parallax: false, - // Zoom - zoom: false, - zoomMax: 3, - zoomMin: 1, - zoomToggle: true, - // Scrollbar - scrollbar: null, - scrollbarHide: true, - scrollbarDraggable: false, - scrollbarSnapOnRelease: false, - // Keyboard Mousewheel - keyboardControl: false, - mousewheelControl: false, - mousewheelReleaseOnEdges: false, - mousewheelInvert: false, - mousewheelForceToAxis: false, - mousewheelSensitivity: 1, - mousewheelEventsTarged: 'container', - // Hash Navigation - hashnav: false, - hashnavWatchState: false, - // History - history: false, - // Commong Nav State - replaceState: false, - // Breakpoints - breakpoints: undefined, - // Slides grid - spaceBetween: 0, - slidesPerView: 1, - slidesPerColumn: 1, - slidesPerColumnFill: 'column', - slidesPerGroup: 1, - centeredSlides: false, - slidesOffsetBefore: 0, // in px - slidesOffsetAfter: 0, // in px - // Round length - roundLengths: false, - // Touches - touchRatio: 1, - touchAngle: 45, - simulateTouch: true, - shortSwipes: true, - longSwipes: true, - longSwipesRatio: 0.5, - longSwipesMs: 300, - followFinger: true, - onlyExternal: false, - threshold: 0, - touchMoveStopPropagation: true, - touchReleaseOnEdges: false, - // Unique Navigation Elements - uniqueNavElements: true, - // Pagination - pagination: null, - paginationElement: 'span', - paginationClickable: false, - paginationHide: false, - paginationBulletRender: null, - paginationProgressRender: null, - paginationFractionRender: null, - paginationCustomRender: null, - paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom' - // Resistance - resistance: true, - resistanceRatio: 0.85, - // Next/prev buttons - nextButton: null, - prevButton: null, - // Progress - watchSlidesProgress: false, - watchSlidesVisibility: false, - // Cursor - grabCursor: false, - // Clicks - preventClicks: true, - preventClicksPropagation: true, - slideToClickedSlide: false, - // Lazy Loading - lazyLoading: false, - lazyLoadingInPrevNext: false, - lazyLoadingInPrevNextAmount: 1, - lazyLoadingOnTransitionStart: false, - // Images - preloadImages: true, - updateOnImagesReady: true, - // loop - loop: false, - loopAdditionalSlides: 0, - loopedSlides: null, - // Control - control: undefined, - controlInverse: false, - controlBy: 'slide', //or 'container' - normalizeSlideIndex: true, - // Swiping/no swiping - allowSwipeToPrev: true, - allowSwipeToNext: true, - swipeHandler: null, //'.swipe-handler', - noSwiping: true, - noSwipingClass: 'swiper-no-swiping', - // Passive Listeners - passiveListeners: true, - // NS - containerModifierClass: 'swiper-container-', // NEW - slideClass: 'swiper-slide', - slideActiveClass: 'swiper-slide-active', - slideDuplicateActiveClass: 'swiper-slide-duplicate-active', - slideVisibleClass: 'swiper-slide-visible', - slideDuplicateClass: 'swiper-slide-duplicate', - slideNextClass: 'swiper-slide-next', - slideDuplicateNextClass: 'swiper-slide-duplicate-next', - slidePrevClass: 'swiper-slide-prev', - slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', - wrapperClass: 'swiper-wrapper', - bulletClass: 'swiper-pagination-bullet', - bulletActiveClass: 'swiper-pagination-bullet-active', - buttonDisabledClass: 'swiper-button-disabled', - paginationCurrentClass: 'swiper-pagination-current', - paginationTotalClass: 'swiper-pagination-total', - paginationHiddenClass: 'swiper-pagination-hidden', - paginationProgressbarClass: 'swiper-pagination-progressbar', - paginationClickableClass: 'swiper-pagination-clickable', // NEW - paginationModifierClass: 'swiper-pagination-', // NEW - lazyLoadingClass: 'swiper-lazy', - lazyStatusLoadingClass: 'swiper-lazy-loading', - lazyStatusLoadedClass: 'swiper-lazy-loaded', - lazyPreloaderClass: 'swiper-lazy-preloader', - notificationClass: 'swiper-notification', - preloaderClass: 'preloader', - zoomContainerClass: 'swiper-zoom-container', - - // Observer - observer: false, - observeParents: false, - // Accessibility - a11y: false, - prevSlideMessage: 'Previous slide', - nextSlideMessage: 'Next slide', - firstSlideMessage: 'This is the first slide', - lastSlideMessage: 'This is the last slide', - paginationBulletMessage: 'Go to slide {{index}}', - // Callbacks - runCallbacksOnInit: true - /* - Callbacks: - onInit: function (swiper) - onDestroy: function (swiper) - onBeforeResize: function (swiper) - onAfterResize: function (swiper) - onClick: function (swiper, e) - onTap: function (swiper, e) - onDoubleTap: function (swiper, e) - onSliderMove: function (swiper, e) - onSlideChangeStart: function (swiper) - onSlideChangeEnd: function (swiper) - onTransitionStart: function (swiper) - onTransitionEnd: function (swiper) - onImagesReady: function (swiper) - onProgress: function (swiper, progress) - onTouchStart: function (swiper, e) - onTouchMove: function (swiper, e) - onTouchMoveOpposite: function (swiper, e) - onTouchEnd: function (swiper, e) - onReachBeginning: function (swiper) - onReachEnd: function (swiper) - onSetTransition: function (swiper, duration) - onSetTranslate: function (swiper, translate) - onAutoplayStart: function (swiper) - onAutoplayStop: function (swiper), - onLazyImageLoad: function (swiper, slide, image) - onLazyImageReady: function (swiper, slide, image) - onKeyPress: function (swiper, keyCode) - */ - - }; - var initialVirtualTranslate = params && params.virtualTranslate; - - params = params || {}; - var originalParams = {}; - for (var param in params) { - if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) { - originalParams[param] = {}; - for (var deepParam in params[param]) { - originalParams[param][deepParam] = params[param][deepParam]; - } - } - else { - originalParams[param] = params[param]; - } - } - for (var def in defaults) { - if (typeof params[def] === 'undefined') { - params[def] = defaults[def]; - } - else if (typeof params[def] === 'object') { - for (var deepDef in defaults[def]) { - if (typeof params[def][deepDef] === 'undefined') { - params[def][deepDef] = defaults[def][deepDef]; - } - } - } - } - - // Swiper - var s = this; - - // Params - s.params = params; - s.originalParams = originalParams; - - // Classname - s.classNames = []; - /*========================= - Dom Library and plugins - ===========================*/ - if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){ - $ = Dom7; - } - if (typeof $ === 'undefined') { - if (typeof Dom7 === 'undefined') { - $ = window.Dom7 || window.Zepto || window.jQuery; - } - else { - $ = Dom7; - } - if (!$) return; - } - // Export it to Swiper instance - s.$ = $; - - /*========================= - Breakpoints - ===========================*/ - s.currentBreakpoint = undefined; - s.getActiveBreakpoint = function () { - //Get breakpoint for window width - if (!s.params.breakpoints) return false; - var breakpoint = false; - var points = [], point; - for ( point in s.params.breakpoints ) { - if (s.params.breakpoints.hasOwnProperty(point)) { - points.push(point); - } - } - points.sort(function (a, b) { - return parseInt(a, 10) > parseInt(b, 10); - }); - for (var i = 0; i < points.length; i++) { - point = points[i]; - if (point >= window.innerWidth && !breakpoint) { - breakpoint = point; - } - } - return breakpoint || 'max'; - }; - s.setBreakpoint = function () { - //Set breakpoint for window width and update parameters - var breakpoint = s.getActiveBreakpoint(); - if (breakpoint && s.currentBreakpoint !== breakpoint) { - var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams; - var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView); - for ( var param in breakPointsParams ) { - s.params[param] = breakPointsParams[param]; - } - s.currentBreakpoint = breakpoint; - if(needsReLoop && s.destroyLoop) { - s.reLoop(true); - } - } - }; - // Set breakpoint on load - if (s.params.breakpoints) { - s.setBreakpoint(); - } - - /*========================= - Preparation - Define Container, Wrapper and Pagination - ===========================*/ - s.container = $(container); - if (s.container.length === 0) return; - if (s.container.length > 1) { - var swipers = []; - s.container.each(function () { - var container = this; - swipers.push(new Swiper(this, params)); - }); - return swipers; - } - - // Save instance in container HTML Element and in data - s.container[0].swiper = s; - s.container.data('swiper', s); - - s.classNames.push(s.params.containerModifierClass + s.params.direction); - - if (s.params.freeMode) { - s.classNames.push(s.params.containerModifierClass + 'free-mode'); - } - if (!s.support.flexbox) { - s.classNames.push(s.params.containerModifierClass + 'no-flexbox'); - s.params.slidesPerColumn = 1; - } - if (s.params.autoHeight) { - s.classNames.push(s.params.containerModifierClass + 'autoheight'); - } - // Enable slides progress when required - if (s.params.parallax || s.params.watchSlidesVisibility) { - s.params.watchSlidesProgress = true; - } - // Max resistance when touchReleaseOnEdges - if (s.params.touchReleaseOnEdges) { - s.params.resistanceRatio = 0; - } - // Coverflow / 3D - if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) { - if (s.support.transforms3d) { - s.params.watchSlidesProgress = true; - s.classNames.push(s.params.containerModifierClass + '3d'); - } - else { - s.params.effect = 'slide'; - } - } - if (s.params.effect !== 'slide') { - s.classNames.push(s.params.containerModifierClass + s.params.effect); - } - if (s.params.effect === 'cube') { - s.params.resistanceRatio = 0; - s.params.slidesPerView = 1; - s.params.slidesPerColumn = 1; - s.params.slidesPerGroup = 1; - s.params.centeredSlides = false; - s.params.spaceBetween = 0; - s.params.virtualTranslate = true; - } - if (s.params.effect === 'fade' || s.params.effect === 'flip') { - s.params.slidesPerView = 1; - s.params.slidesPerColumn = 1; - s.params.slidesPerGroup = 1; - s.params.watchSlidesProgress = true; - s.params.spaceBetween = 0; - if (typeof initialVirtualTranslate === 'undefined') { - s.params.virtualTranslate = true; - } - } - - // Grab Cursor - if (s.params.grabCursor && s.support.touch) { - s.params.grabCursor = false; - } - - // Wrapper - s.wrapper = s.container.children('.' + s.params.wrapperClass); - - // Pagination - if (s.params.pagination) { - s.paginationContainer = $(s.params.pagination); - if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) { - s.paginationContainer = s.container.find(s.params.pagination); - } - - if (s.params.paginationType === 'bullets' && s.params.paginationClickable) { - s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable'); - } - else { - s.params.paginationClickable = false; - } - s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType); - } - // Next/Prev Buttons - if (s.params.nextButton || s.params.prevButton) { - if (s.params.nextButton) { - s.nextButton = $(s.params.nextButton); - if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) { - s.nextButton = s.container.find(s.params.nextButton); - } - } - if (s.params.prevButton) { - s.prevButton = $(s.params.prevButton); - if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) { - s.prevButton = s.container.find(s.params.prevButton); - } - } - } - - // Is Horizontal - s.isHorizontal = function () { - return s.params.direction === 'horizontal'; - }; - // s.isH = isH; - - // RTL - s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl'); - if (s.rtl) { - s.classNames.push(s.params.containerModifierClass + 'rtl'); - } - - // Wrong RTL support - if (s.rtl) { - s.wrongRTL = s.wrapper.css('display') === '-webkit-box'; - } - - // Columns - if (s.params.slidesPerColumn > 1) { - s.classNames.push(s.params.containerModifierClass + 'multirow'); - } - - // Check for Android - if (s.device.android) { - s.classNames.push(s.params.containerModifierClass + 'android'); - } - - // Add classes - s.container.addClass(s.classNames.join(' ')); - - // Translate - s.translate = 0; - - // Progress - s.progress = 0; - - // Velocity - s.velocity = 0; - - /*========================= - Locks, unlocks - ===========================*/ - s.lockSwipeToNext = function () { - s.params.allowSwipeToNext = false; - if (s.params.allowSwipeToPrev === false && s.params.grabCursor) { - s.unsetGrabCursor(); - } - }; - s.lockSwipeToPrev = function () { - s.params.allowSwipeToPrev = false; - if (s.params.allowSwipeToNext === false && s.params.grabCursor) { - s.unsetGrabCursor(); - } - }; - s.lockSwipes = function () { - s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false; - if (s.params.grabCursor) s.unsetGrabCursor(); - }; - s.unlockSwipeToNext = function () { - s.params.allowSwipeToNext = true; - if (s.params.allowSwipeToPrev === true && s.params.grabCursor) { - s.setGrabCursor(); - } - }; - s.unlockSwipeToPrev = function () { - s.params.allowSwipeToPrev = true; - if (s.params.allowSwipeToNext === true && s.params.grabCursor) { - s.setGrabCursor(); - } - }; - s.unlockSwipes = function () { - s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true; - if (s.params.grabCursor) s.setGrabCursor(); - }; - - /*========================= - Round helper - ===========================*/ - function round(a) { - return Math.floor(a); - } - /*========================= - Set grab cursor - ===========================*/ - s.setGrabCursor = function(moving) { - s.container[0].style.cursor = 'move'; - s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; - s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; - s.container[0].style.cursor = moving ? 'grabbing': 'grab'; - }; - s.unsetGrabCursor = function () { - s.container[0].style.cursor = ''; - }; - if (s.params.grabCursor) { - s.setGrabCursor(); - } - /*========================= - Update on Images Ready - ===========================*/ - s.imagesToLoad = []; - s.imagesLoaded = 0; - - s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) { - var image; - function onReady () { - if (callback) callback(); - } - if (!imgElement.complete || !checkForComplete) { - if (src) { - image = new window.Image(); - image.onload = onReady; - image.onerror = onReady; - if (sizes) { - image.sizes = sizes; - } - if (srcset) { - image.srcset = srcset; - } - if (src) { - image.src = src; - } - } else { - onReady(); - } - - } else {//image already loaded... - onReady(); - } - }; - s.preloadImages = function () { - s.imagesToLoad = s.container.find('img'); - function _onReady() { - if (typeof s === 'undefined' || s === null || !s) return; - if (s.imagesLoaded !== undefined) s.imagesLoaded++; - if (s.imagesLoaded === s.imagesToLoad.length) { - if (s.params.updateOnImagesReady) s.update(); - s.emit('onImagesReady', s); - } - } - for (var i = 0; i < s.imagesToLoad.length; i++) { - s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady); - } - }; - - /*========================= - Autoplay - ===========================*/ - s.autoplayTimeoutId = undefined; - s.autoplaying = false; - s.autoplayPaused = false; - function autoplay() { - var autoplayDelay = s.params.autoplay; - var activeSlide = s.slides.eq(s.activeIndex); - if (activeSlide.attr('data-swiper-autoplay')) { - autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay; - } - s.autoplayTimeoutId = setTimeout(function () { - if (s.params.loop) { - s.fixLoop(); - s._slideNext(); - s.emit('onAutoplay', s); - } - else { - if (!s.isEnd) { - s._slideNext(); - s.emit('onAutoplay', s); - } - else { - if (!params.autoplayStopOnLast) { - s._slideTo(0); - s.emit('onAutoplay', s); - } - else { - s.stopAutoplay(); - } - } - } - }, autoplayDelay); - } - s.startAutoplay = function () { - if (typeof s.autoplayTimeoutId !== 'undefined') return false; - if (!s.params.autoplay) return false; - if (s.autoplaying) return false; - s.autoplaying = true; - s.emit('onAutoplayStart', s); - autoplay(); - }; - s.stopAutoplay = function (internal) { - if (!s.autoplayTimeoutId) return; - if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); - s.autoplaying = false; - s.autoplayTimeoutId = undefined; - s.emit('onAutoplayStop', s); - }; - s.pauseAutoplay = function (speed) { - if (s.autoplayPaused) return; - if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); - s.autoplayPaused = true; - if (speed === 0) { - s.autoplayPaused = false; - autoplay(); - } - else { - s.wrapper.transitionEnd(function () { - if (!s) return; - s.autoplayPaused = false; - if (!s.autoplaying) { - s.stopAutoplay(); - } - else { - autoplay(); - } - }); - } - }; - /*========================= - Min/Max Translate - ===========================*/ - s.minTranslate = function () { - return (-s.snapGrid[0]); - }; - s.maxTranslate = function () { - return (-s.snapGrid[s.snapGrid.length - 1]); - }; - /*========================= - Slider/slides sizes - ===========================*/ - s.updateAutoHeight = function () { - var activeSlides = []; - var newHeight = 0; - var i; - - // Find slides currently in view - if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) { - for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) { - var index = s.activeIndex + i; - if(index > s.slides.length) break; - activeSlides.push(s.slides.eq(index)[0]); - } - } else { - activeSlides.push(s.slides.eq(s.activeIndex)[0]); - } - - // Find new height from heighest slide in view - for (i = 0; i < activeSlides.length; i++) { - if (typeof activeSlides[i] !== 'undefined') { - var height = activeSlides[i].offsetHeight; - newHeight = height > newHeight ? height : newHeight; - } - } - - // Update Height - if (newHeight) s.wrapper.css('height', newHeight + 'px'); - }; - s.updateContainerSize = function () { - var width, height; - if (typeof s.params.width !== 'undefined') { - width = s.params.width; - } - else { - width = s.container[0].clientWidth; - } - if (typeof s.params.height !== 'undefined') { - height = s.params.height; - } - else { - height = s.container[0].clientHeight; - } - if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) { - return; - } - - //Subtract paddings - width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10); - height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10); - - // Store values - s.width = width; - s.height = height; - s.size = s.isHorizontal() ? s.width : s.height; - }; - - s.updateSlidesSize = function () { - s.slides = s.wrapper.children('.' + s.params.slideClass); - s.snapGrid = []; - s.slidesGrid = []; - s.slidesSizesGrid = []; - - var spaceBetween = s.params.spaceBetween, - slidePosition = -s.params.slidesOffsetBefore, - i, - prevSlideSize = 0, - index = 0; - if (typeof s.size === 'undefined') return; - if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { - spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size; - } - - s.virtualSize = -spaceBetween; - // reset margins - if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''}); - else s.slides.css({marginRight: '', marginBottom: ''}); - - var slidesNumberEvenToRows; - if (s.params.slidesPerColumn > 1) { - if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) { - slidesNumberEvenToRows = s.slides.length; - } - else { - slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn; - } - if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') { - slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn); - } - } - - // Calc slides - var slideSize; - var slidesPerColumn = s.params.slidesPerColumn; - var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; - var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length); - for (i = 0; i < s.slides.length; i++) { - slideSize = 0; - var slide = s.slides.eq(i); - if (s.params.slidesPerColumn > 1) { - // Set slides order - var newSlideOrderIndex; - var column, row; - if (s.params.slidesPerColumnFill === 'column') { - column = Math.floor(i / slidesPerColumn); - row = i - column * slidesPerColumn; - if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) { - if (++row >= slidesPerColumn) { - row = 0; - column++; - } - } - newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; - slide - .css({ - '-webkit-box-ordinal-group': newSlideOrderIndex, - '-moz-box-ordinal-group': newSlideOrderIndex, - '-ms-flex-order': newSlideOrderIndex, - '-webkit-order': newSlideOrderIndex, - 'order': newSlideOrderIndex - }); - } - else { - row = Math.floor(i / slidesPerRow); - column = i - row * slidesPerRow; - } - slide - .css( - 'margin-' + (s.isHorizontal() ? 'top' : 'left'), - (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px') - ) - .attr('data-swiper-column', column) - .attr('data-swiper-row', row); - - } - if (slide.css('display') === 'none') continue; - if (s.params.slidesPerView === 'auto') { - slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); - if (s.params.roundLengths) slideSize = round(slideSize); - } - else { - slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView; - if (s.params.roundLengths) slideSize = round(slideSize); - - if (s.isHorizontal()) { - s.slides[i].style.width = slideSize + 'px'; - } - else { - s.slides[i].style.height = slideSize + 'px'; - } - } - s.slides[i].swiperSlideSize = slideSize; - s.slidesSizesGrid.push(slideSize); - - - if (s.params.centeredSlides) { - slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; - if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; - if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; - if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; - if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); - s.slidesGrid.push(slidePosition); - } - else { - if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); - s.slidesGrid.push(slidePosition); - slidePosition = slidePosition + slideSize + spaceBetween; - } - - s.virtualSize += slideSize + spaceBetween; - - prevSlideSize = slideSize; - - index ++; - } - s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter; - var newSlidesGrid; - - if ( - s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) { - s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - } - if (!s.support.flexbox || s.params.setWrapperSize) { - if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); - } - - if (s.params.slidesPerColumn > 1) { - s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows; - s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween; - if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); - else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); - if (s.params.centeredSlides) { - newSlidesGrid = []; - for (i = 0; i < s.snapGrid.length; i++) { - if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]); - } - s.snapGrid = newSlidesGrid; - } - } - - // Remove last grid elements depending on width - if (!s.params.centeredSlides) { - newSlidesGrid = []; - for (i = 0; i < s.snapGrid.length; i++) { - if (s.snapGrid[i] <= s.virtualSize - s.size) { - newSlidesGrid.push(s.snapGrid[i]); - } - } - s.snapGrid = newSlidesGrid; - if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) { - s.snapGrid.push(s.virtualSize - s.size); - } - } - if (s.snapGrid.length === 0) s.snapGrid = [0]; - - if (s.params.spaceBetween !== 0) { - if (s.isHorizontal()) { - if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'}); - else s.slides.css({marginRight: spaceBetween + 'px'}); - } - else s.slides.css({marginBottom: spaceBetween + 'px'}); - } - if (s.params.watchSlidesProgress) { - s.updateSlidesOffset(); - } - }; - s.updateSlidesOffset = function () { - for (var i = 0; i < s.slides.length; i++) { - s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop; - } - }; - - /*========================= - Dynamic Slides Per View - ===========================*/ - s.currentSlidesPerView = function () { - var spv = 1, i, j; - if (s.params.centeredSlides) { - var size = s.slides[s.activeIndex].swiperSlideSize; - var breakLoop; - for (i = s.activeIndex + 1; i < s.slides.length; i++) { - if (s.slides[i] && !breakLoop) { - size += s.slides[i].swiperSlideSize; - spv ++; - if (size > s.size) breakLoop = true; - } - } - for (j = s.activeIndex - 1; j >= 0; j--) { - if (s.slides[j] && !breakLoop) { - size += s.slides[j].swiperSlideSize; - spv ++; - if (size > s.size) breakLoop = true; - } - } - } - else { - for (i = s.activeIndex + 1; i < s.slides.length; i++) { - if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) { - spv++; - } - } - } - return spv; - }; - /*========================= - Slider/slides progress - ===========================*/ - s.updateSlidesProgress = function (translate) { - if (typeof translate === 'undefined') { - translate = s.translate || 0; - } - if (s.slides.length === 0) return; - if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset(); - - var offsetCenter = -translate; - if (s.rtl) offsetCenter = translate; - - // Visible Slides - s.slides.removeClass(s.params.slideVisibleClass); - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides[i]; - var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween); - if (s.params.watchSlidesVisibility) { - var slideBefore = -(offsetCenter - slide.swiperSlideOffset); - var slideAfter = slideBefore + s.slidesSizesGrid[i]; - var isVisible = - (slideBefore >= 0 && slideBefore < s.size) || - (slideAfter > 0 && slideAfter <= s.size) || - (slideBefore <= 0 && slideAfter >= s.size); - if (isVisible) { - s.slides.eq(i).addClass(s.params.slideVisibleClass); - } - } - slide.progress = s.rtl ? -slideProgress : slideProgress; - } - }; - s.updateProgress = function (translate) { - if (typeof translate === 'undefined') { - translate = s.translate || 0; - } - var translatesDiff = s.maxTranslate() - s.minTranslate(); - var wasBeginning = s.isBeginning; - var wasEnd = s.isEnd; - if (translatesDiff === 0) { - s.progress = 0; - s.isBeginning = s.isEnd = true; - } - else { - s.progress = (translate - s.minTranslate()) / (translatesDiff); - s.isBeginning = s.progress <= 0; - s.isEnd = s.progress >= 1; - } - if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s); - if (s.isEnd && !wasEnd) s.emit('onReachEnd', s); - - if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate); - s.emit('onProgress', s, s.progress); - }; - s.updateActiveIndex = function () { - var translate = s.rtl ? s.translate : -s.translate; - var newActiveIndex, i, snapIndex; - for (i = 0; i < s.slidesGrid.length; i ++) { - if (typeof s.slidesGrid[i + 1] !== 'undefined') { - if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) { - newActiveIndex = i; - } - else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) { - newActiveIndex = i + 1; - } - } - else { - if (translate >= s.slidesGrid[i]) { - newActiveIndex = i; - } - } - } - // Normalize slideIndex - if(s.params.normalizeSlideIndex){ - if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0; - } - // for (i = 0; i < s.slidesGrid.length; i++) { - // if (- translate >= s.slidesGrid[i]) { - // newActiveIndex = i; - // } - // } - snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup); - if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1; - - if (newActiveIndex === s.activeIndex) { - return; - } - s.snapIndex = snapIndex; - s.previousIndex = s.activeIndex; - s.activeIndex = newActiveIndex; - s.updateClasses(); - s.updateRealIndex(); - }; - s.updateRealIndex = function(){ - s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10); - }; - - /*========================= - Classes - ===========================*/ - s.updateClasses = function () { - s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass); - var activeSlide = s.slides.eq(s.activeIndex); - // Active classes - activeSlide.addClass(s.params.slideActiveClass); - if (params.loop) { - // Duplicate to all looped slides - if (activeSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass); - } - } - // Next Slide - var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); - if (s.params.loop && nextSlide.length === 0) { - nextSlide = s.slides.eq(0); - nextSlide.addClass(s.params.slideNextClass); - } - // Prev Slide - var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); - if (s.params.loop && prevSlide.length === 0) { - prevSlide = s.slides.eq(-1); - prevSlide.addClass(s.params.slidePrevClass); - } - if (params.loop) { - // Duplicate to all looped slides - if (nextSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass); - } - if (prevSlide.hasClass(s.params.slideDuplicateClass)) { - s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass); - } - else { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass); - } - } - - // Pagination - if (s.paginationContainer && s.paginationContainer.length > 0) { - // Current/Total - var current, - total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; - if (s.params.loop) { - current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup); - if (current > s.slides.length - 1 - s.loopedSlides * 2) { - current = current - (s.slides.length - s.loopedSlides * 2); - } - if (current > total - 1) current = current - total; - if (current < 0 && s.params.paginationType !== 'bullets') current = total + current; - } - else { - if (typeof s.snapIndex !== 'undefined') { - current = s.snapIndex; - } - else { - current = s.activeIndex || 0; - } - } - // Types - if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) { - s.bullets.removeClass(s.params.bulletActiveClass); - if (s.paginationContainer.length > 1) { - s.bullets.each(function () { - if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass); - }); - } - else { - s.bullets.eq(current).addClass(s.params.bulletActiveClass); - } - } - if (s.params.paginationType === 'fraction') { - s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1); - s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total); - } - if (s.params.paginationType === 'progress') { - var scale = (current + 1) / total, - scaleX = scale, - scaleY = 1; - if (!s.isHorizontal()) { - scaleY = scale; - scaleX = 1; - } - s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed); - } - if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) { - s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total)); - s.emit('onPaginationRendered', s, s.paginationContainer[0]); - } - } - - // Next/active buttons - if (!s.params.loop) { - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - if (s.isBeginning) { - s.prevButton.addClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton); - } - else { - s.prevButton.removeClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton); - } - } - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - if (s.isEnd) { - s.nextButton.addClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton); - } - else { - s.nextButton.removeClass(s.params.buttonDisabledClass); - if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton); - } - } - } - }; - - /*========================= - Pagination - ===========================*/ - s.updatePagination = function () { - if (!s.params.pagination) return; - if (s.paginationContainer && s.paginationContainer.length > 0) { - var paginationHTML = ''; - if (s.params.paginationType === 'bullets') { - var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; - for (var i = 0; i < numberOfBullets; i++) { - if (s.params.paginationBulletRender) { - paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass); - } - else { - paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '"></' + s.params.paginationElement + '>'; - } - } - s.paginationContainer.html(paginationHTML); - s.bullets = s.paginationContainer.find('.' + s.params.bulletClass); - if (s.params.paginationClickable && s.params.a11y && s.a11y) { - s.a11y.initPagination(); - } - } - if (s.params.paginationType === 'fraction') { - if (s.params.paginationFractionRender) { - paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass); - } - else { - paginationHTML = - '<span class="' + s.params.paginationCurrentClass + '"></span>' + - ' / ' + - '<span class="' + s.params.paginationTotalClass+'"></span>'; - } - s.paginationContainer.html(paginationHTML); - } - if (s.params.paginationType === 'progress') { - if (s.params.paginationProgressRender) { - paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass); - } - else { - paginationHTML = '<span class="' + s.params.paginationProgressbarClass + '"></span>'; - } - s.paginationContainer.html(paginationHTML); - } - if (s.params.paginationType !== 'custom') { - s.emit('onPaginationRendered', s, s.paginationContainer[0]); - } - } - }; - /*========================= - Common update method - ===========================*/ - s.update = function (updateTranslate) { - if (!s) return; - s.updateContainerSize(); - s.updateSlidesSize(); - s.updateProgress(); - s.updatePagination(); - s.updateClasses(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - } - var newTranslate; - function forceSetTranslate() { - var translate = s.rtl ? -s.translate : s.translate; - newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); - s.setWrapperTranslate(newTranslate); - s.updateActiveIndex(); - s.updateClasses(); - } - if (updateTranslate) { - var translated; - if (s.controller && s.controller.spline) { - s.controller.spline = undefined; - } - if (s.params.freeMode) { - forceSetTranslate(); - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - } - else { - if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { - translated = s.slideTo(s.slides.length - 1, 0, false, true); - } - else { - translated = s.slideTo(s.activeIndex, 0, false, true); - } - if (!translated) { - forceSetTranslate(); - } - } - } - else if (s.params.autoHeight) { - s.updateAutoHeight(); - } - }; - - /*========================= - Resize Handler - ===========================*/ - s.onResize = function (forceUpdatePagination) { - if (s.params.onBeforeResize) s.params.onBeforeResize(s); - //Breakpoints - if (s.params.breakpoints) { - s.setBreakpoint(); - } - - // Disable locks on resize - var allowSwipeToPrev = s.params.allowSwipeToPrev; - var allowSwipeToNext = s.params.allowSwipeToNext; - s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true; - - s.updateContainerSize(); - s.updateSlidesSize(); - if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - } - if (s.controller && s.controller.spline) { - s.controller.spline = undefined; - } - var slideChangedBySlideTo = false; - if (s.params.freeMode) { - var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); - s.setWrapperTranslate(newTranslate); - s.updateActiveIndex(); - s.updateClasses(); - - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - } - else { - s.updateClasses(); - if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { - slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true); - } - else { - slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true); - } - } - if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) { - s.lazy.load(); - } - // Return locks after resize - s.params.allowSwipeToPrev = allowSwipeToPrev; - s.params.allowSwipeToNext = allowSwipeToNext; - if (s.params.onAfterResize) s.params.onAfterResize(s); - }; - - /*========================= - Events - ===========================*/ - - //Define Touch Events - s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'}; - if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'}; - else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'}; - s.touchEvents = { - start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start, - move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move, - end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end - }; - - - // WP8 Touch Events Fix - if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) { - (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction); - } - - // Attach/detach events - s.initEvents = function (detach) { - var actionDom = detach ? 'off' : 'on'; - var action = detach ? 'removeEventListener' : 'addEventListener'; - var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0]; - var target = s.support.touch ? touchEventsTarget : document; - - var moveCapture = s.params.nested ? true : false; - - //Touch Events - if (s.browser.ie) { - touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); - target[action](s.touchEvents.move, s.onTouchMove, moveCapture); - target[action](s.touchEvents.end, s.onTouchEnd, false); - } - else { - if (s.support.touch) { - var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false; - touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener); - touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture); - touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener); - } - if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) { - touchEventsTarget[action]('mousedown', s.onTouchStart, false); - document[action]('mousemove', s.onTouchMove, moveCapture); - document[action]('mouseup', s.onTouchEnd, false); - } - } - window[action]('resize', s.onResize); - - // Next, Prev, Index - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - s.nextButton[actionDom]('click', s.onClickNext); - if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey); - } - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - s.prevButton[actionDom]('click', s.onClickPrev); - if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey); - } - if (s.params.pagination && s.params.paginationClickable) { - s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex); - if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey); - } - - // Prevent Links Clicks - if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true); - }; - s.attachEvents = function () { - s.initEvents(); - }; - s.detachEvents = function () { - s.initEvents(true); - }; - - /*========================= - Handle Clicks - ===========================*/ - // Prevent Clicks - s.allowClick = true; - s.preventClicks = function (e) { - if (!s.allowClick) { - if (s.params.preventClicks) e.preventDefault(); - if (s.params.preventClicksPropagation && s.animating) { - e.stopPropagation(); - e.stopImmediatePropagation(); - } - } - }; - // Clicks - s.onClickNext = function (e) { - e.preventDefault(); - if (s.isEnd && !s.params.loop) return; - s.slideNext(); - }; - s.onClickPrev = function (e) { - e.preventDefault(); - if (s.isBeginning && !s.params.loop) return; - s.slidePrev(); - }; - s.onClickIndex = function (e) { - e.preventDefault(); - var index = $(this).index() * s.params.slidesPerGroup; - if (s.params.loop) index = index + s.loopedSlides; - s.slideTo(index); - }; - - /*========================= - Handle Touches - ===========================*/ - function findElementInEvent(e, selector) { - var el = $(e.target); - if (!el.is(selector)) { - if (typeof selector === 'string') { - el = el.parents(selector); - } - else if (selector.nodeType) { - var found; - el.parents().each(function (index, _el) { - if (_el === selector) found = selector; - }); - if (!found) return undefined; - else return selector; - } - } - if (el.length === 0) { - return undefined; - } - return el[0]; - } - s.updateClickedSlide = function (e) { - var slide = findElementInEvent(e, '.' + s.params.slideClass); - var slideFound = false; - if (slide) { - for (var i = 0; i < s.slides.length; i++) { - if (s.slides[i] === slide) slideFound = true; - } - } - - if (slide && slideFound) { - s.clickedSlide = slide; - s.clickedIndex = $(slide).index(); - } - else { - s.clickedSlide = undefined; - s.clickedIndex = undefined; - return; - } - if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) { - var slideToIndex = s.clickedIndex, - realIndex, - duplicatedSlides, - slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView; - if (s.params.loop) { - if (s.animating) return; - realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10); - if (s.params.centeredSlides) { - if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) { - s.fixLoop(); - slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index(); - setTimeout(function () { - s.slideTo(slideToIndex); - }, 0); - } - else { - s.slideTo(slideToIndex); - } - } - else { - if (slideToIndex > s.slides.length - slidesPerView) { - s.fixLoop(); - slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index(); - setTimeout(function () { - s.slideTo(slideToIndex); - }, 0); - } - else { - s.slideTo(slideToIndex); - } - } - } - else { - s.slideTo(slideToIndex); - } - } - }; - - var isTouched, - isMoved, - allowTouchCallbacks, - touchStartTime, - isScrolling, - currentTranslate, - startTranslate, - allowThresholdMove, - // Form elements to match - formElements = 'input, select, textarea, button, video', - // Last click time - lastClickTime = Date.now(), clickTimeout, - //Velocities - velocities = [], - allowMomentumBounce; - - // Animating Flag - s.animating = false; - - // Touches information - s.touches = { - startX: 0, - startY: 0, - currentX: 0, - currentY: 0, - diff: 0 - }; - - // Touch handlers - var isTouchEvent, startMoving; - s.onTouchStart = function (e) { - if (e.originalEvent) e = e.originalEvent; - isTouchEvent = e.type === 'touchstart'; - if (!isTouchEvent && 'which' in e && e.which === 3) return; - if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) { - s.allowClick = true; - return; - } - if (s.params.swipeHandler) { - if (!findElementInEvent(e, s.params.swipeHandler)) return; - } - - var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; - var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; - - // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore - if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) { - return; - } - - isTouched = true; - isMoved = false; - allowTouchCallbacks = true; - isScrolling = undefined; - startMoving = undefined; - s.touches.startX = startX; - s.touches.startY = startY; - touchStartTime = Date.now(); - s.allowClick = true; - s.updateContainerSize(); - s.swipeDirection = undefined; - if (s.params.threshold > 0) allowThresholdMove = false; - if (e.type !== 'touchstart') { - var preventDefault = true; - if ($(e.target).is(formElements)) preventDefault = false; - if (document.activeElement && $(document.activeElement).is(formElements)) { - document.activeElement.blur(); - } - if (preventDefault) { - e.preventDefault(); - } - } - s.emit('onTouchStart', s, e); - }; - - s.onTouchMove = function (e) { - if (e.originalEvent) e = e.originalEvent; - if (isTouchEvent && e.type === 'mousemove') return; - if (e.preventedByNestedSwiper) { - s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - return; - } - if (s.params.onlyExternal) { - // isMoved = true; - s.allowClick = false; - if (isTouched) { - s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - touchStartTime = Date.now(); - } - return; - } - if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) { - if (!s.isHorizontal()) { - // Vertical - if ( - (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) || - (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate()) - ) { - return; - } - } - else { - if ( - (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) || - (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate()) - ) { - return; - } - } - } - if (isTouchEvent && document.activeElement) { - if (e.target === document.activeElement && $(e.target).is(formElements)) { - isMoved = true; - s.allowClick = false; - return; - } - } - if (allowTouchCallbacks) { - s.emit('onTouchMove', s, e); - } - if (e.targetTouches && e.targetTouches.length > 1) return; - - s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - - if (typeof isScrolling === 'undefined') { - var touchAngle; - if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) { - isScrolling = false; - } - else { - touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI; - isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle); - } - } - if (isScrolling) { - s.emit('onTouchMoveOpposite', s, e); - } - if (typeof startMoving === 'undefined') { - if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) { - startMoving = true; - } - } - if (!isTouched) return; - if (isScrolling) { - isTouched = false; - return; - } - if (!startMoving) { - return; - } - s.allowClick = false; - s.emit('onSliderMove', s, e); - e.preventDefault(); - if (s.params.touchMoveStopPropagation && !s.params.nested) { - e.stopPropagation(); - } - - if (!isMoved) { - if (params.loop) { - s.fixLoop(); - } - startTranslate = s.getWrapperTranslate(); - s.setWrapperTransition(0); - if (s.animating) { - s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd'); - } - if (s.params.autoplay && s.autoplaying) { - if (s.params.autoplayDisableOnInteraction) { - s.stopAutoplay(); - } - else { - s.pauseAutoplay(); - } - } - allowMomentumBounce = false; - //Grab Cursor - if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) { - s.setGrabCursor(true); - } - } - isMoved = true; - - var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; - - diff = diff * s.params.touchRatio; - if (s.rtl) diff = -diff; - - s.swipeDirection = diff > 0 ? 'prev' : 'next'; - currentTranslate = diff + startTranslate; - - var disableParentSwiper = true; - if ((diff > 0 && currentTranslate > s.minTranslate())) { - disableParentSwiper = false; - if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio); - } - else if (diff < 0 && currentTranslate < s.maxTranslate()) { - disableParentSwiper = false; - if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio); - } - - if (disableParentSwiper) { - e.preventedByNestedSwiper = true; - } - - // Directions locks - if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) { - currentTranslate = startTranslate; - } - if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) { - currentTranslate = startTranslate; - } - - - // Threshold - if (s.params.threshold > 0) { - if (Math.abs(diff) > s.params.threshold || allowThresholdMove) { - if (!allowThresholdMove) { - allowThresholdMove = true; - s.touches.startX = s.touches.currentX; - s.touches.startY = s.touches.currentY; - currentTranslate = startTranslate; - s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; - return; - } - } - else { - currentTranslate = startTranslate; - return; - } - } - - if (!s.params.followFinger) return; - - // Update active index in free mode - if (s.params.freeMode || s.params.watchSlidesProgress) { - s.updateActiveIndex(); - } - if (s.params.freeMode) { - //Velocity - if (velocities.length === 0) { - velocities.push({ - position: s.touches[s.isHorizontal() ? 'startX' : 'startY'], - time: touchStartTime - }); - } - velocities.push({ - position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'], - time: (new window.Date()).getTime() - }); - } - // Update progress - s.updateProgress(currentTranslate); - // Update translate - s.setWrapperTranslate(currentTranslate); - }; - s.onTouchEnd = function (e) { - if (e.originalEvent) e = e.originalEvent; - if (allowTouchCallbacks) { - s.emit('onTouchEnd', s, e); - } - allowTouchCallbacks = false; - if (!isTouched) return; - //Return Grab Cursor - if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) { - s.setGrabCursor(false); - } - - // Time diff - var touchEndTime = Date.now(); - var timeDiff = touchEndTime - touchStartTime; - - // Tap, doubleTap, Click - if (s.allowClick) { - s.updateClickedSlide(e); - s.emit('onTap', s, e); - if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) { - if (clickTimeout) clearTimeout(clickTimeout); - clickTimeout = setTimeout(function () { - if (!s) return; - if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) { - s.paginationContainer.toggleClass(s.params.paginationHiddenClass); - } - s.emit('onClick', s, e); - }, 300); - - } - if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) { - if (clickTimeout) clearTimeout(clickTimeout); - s.emit('onDoubleTap', s, e); - } - } - - lastClickTime = Date.now(); - setTimeout(function () { - if (s) s.allowClick = true; - }, 0); - - if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) { - isTouched = isMoved = false; - return; - } - isTouched = isMoved = false; - - var currentPos; - if (s.params.followFinger) { - currentPos = s.rtl ? s.translate : -s.translate; - } - else { - currentPos = -currentTranslate; - } - if (s.params.freeMode) { - if (currentPos < -s.minTranslate()) { - s.slideTo(s.activeIndex); - return; - } - else if (currentPos > -s.maxTranslate()) { - if (s.slides.length < s.snapGrid.length) { - s.slideTo(s.snapGrid.length - 1); - } - else { - s.slideTo(s.slides.length - 1); - } - return; - } - - if (s.params.freeModeMomentum) { - if (velocities.length > 1) { - var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop(); - - var distance = lastMoveEvent.position - velocityEvent.position; - var time = lastMoveEvent.time - velocityEvent.time; - s.velocity = distance / time; - s.velocity = s.velocity / 2; - if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) { - s.velocity = 0; - } - // this implies that the user stopped moving a finger then released. - // There would be no events with distance zero, so the last event is stale. - if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) { - s.velocity = 0; - } - } else { - s.velocity = 0; - } - s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio; - - velocities.length = 0; - var momentumDuration = 1000 * s.params.freeModeMomentumRatio; - var momentumDistance = s.velocity * momentumDuration; - - var newPosition = s.translate + momentumDistance; - if (s.rtl) newPosition = - newPosition; - var doBounce = false; - var afterBouncePosition; - var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio; - if (newPosition < s.maxTranslate()) { - if (s.params.freeModeMomentumBounce) { - if (newPosition + s.maxTranslate() < -bounceAmount) { - newPosition = s.maxTranslate() - bounceAmount; - } - afterBouncePosition = s.maxTranslate(); - doBounce = true; - allowMomentumBounce = true; - } - else { - newPosition = s.maxTranslate(); - } - } - else if (newPosition > s.minTranslate()) { - if (s.params.freeModeMomentumBounce) { - if (newPosition - s.minTranslate() > bounceAmount) { - newPosition = s.minTranslate() + bounceAmount; - } - afterBouncePosition = s.minTranslate(); - doBounce = true; - allowMomentumBounce = true; - } - else { - newPosition = s.minTranslate(); - } - } - else if (s.params.freeModeSticky) { - var j = 0, - nextSlide; - for (j = 0; j < s.snapGrid.length; j += 1) { - if (s.snapGrid[j] > -newPosition) { - nextSlide = j; - break; - } - - } - if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') { - newPosition = s.snapGrid[nextSlide]; - } else { - newPosition = s.snapGrid[nextSlide - 1]; - } - if (!s.rtl) newPosition = - newPosition; - } - //Fix duration - if (s.velocity !== 0) { - if (s.rtl) { - momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity); - } - else { - momentumDuration = Math.abs((newPosition - s.translate) / s.velocity); - } - } - else if (s.params.freeModeSticky) { - s.slideReset(); - return; - } - - if (s.params.freeModeMomentumBounce && doBounce) { - s.updateProgress(afterBouncePosition); - s.setWrapperTransition(momentumDuration); - s.setWrapperTranslate(newPosition); - s.onTransitionStart(); - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s || !allowMomentumBounce) return; - s.emit('onMomentumBounce', s); - - s.setWrapperTransition(s.params.speed); - s.setWrapperTranslate(afterBouncePosition); - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(); - }); - }); - } else if (s.velocity) { - s.updateProgress(newPosition); - s.setWrapperTransition(momentumDuration); - s.setWrapperTranslate(newPosition); - s.onTransitionStart(); - if (!s.animating) { - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(); - }); - } - - } else { - s.updateProgress(newPosition); - } - - s.updateActiveIndex(); - } - if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) { - s.updateProgress(); - s.updateActiveIndex(); - } - return; - } - - // Find current slide - var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0]; - for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) { - if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') { - if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) { - stopIndex = i; - groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i]; - } - } - else { - if (currentPos >= s.slidesGrid[i]) { - stopIndex = i; - groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2]; - } - } - } - - // Find current slide size - var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize; - - if (timeDiff > s.params.longSwipesMs) { - // Long touches - if (!s.params.longSwipes) { - s.slideTo(s.activeIndex); - return; - } - if (s.swipeDirection === 'next') { - if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup); - else s.slideTo(stopIndex); - - } - if (s.swipeDirection === 'prev') { - if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup); - else s.slideTo(stopIndex); - } - } - else { - // Short swipes - if (!s.params.shortSwipes) { - s.slideTo(s.activeIndex); - return; - } - if (s.swipeDirection === 'next') { - s.slideTo(stopIndex + s.params.slidesPerGroup); - - } - if (s.swipeDirection === 'prev') { - s.slideTo(stopIndex); - } - } - }; - /*========================= - Transitions - ===========================*/ - s._slideTo = function (slideIndex, speed) { - return s.slideTo(slideIndex, speed, true, true); - }; - s.slideTo = function (slideIndex, speed, runCallbacks, internal) { - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (typeof slideIndex === 'undefined') slideIndex = 0; - if (slideIndex < 0) slideIndex = 0; - s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup); - if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1; - - var translate = - s.snapGrid[s.snapIndex]; - // Stop autoplay - if (s.params.autoplay && s.autoplaying) { - if (internal || !s.params.autoplayDisableOnInteraction) { - s.pauseAutoplay(speed); - } - else { - s.stopAutoplay(); - } - } - // Update progress - s.updateProgress(translate); - - // Normalize slideIndex - if(s.params.normalizeSlideIndex){ - for (var i = 0; i < s.slidesGrid.length; i++) { - if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) { - slideIndex = i; - } - } - } - - // Directions locks - if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) { - return false; - } - if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) { - if ((s.activeIndex || 0) !== slideIndex ) return false; - } - - // Update Index - if (typeof speed === 'undefined') speed = s.params.speed; - s.previousIndex = s.activeIndex || 0; - s.activeIndex = slideIndex; - s.updateRealIndex(); - if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) { - // Update Height - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - s.updateClasses(); - if (s.params.effect !== 'slide') { - s.setWrapperTranslate(translate); - } - return false; - } - s.updateClasses(); - s.onTransitionStart(runCallbacks); - - if (speed === 0 || s.browser.lteIE9) { - s.setWrapperTranslate(translate); - s.setWrapperTransition(0); - s.onTransitionEnd(runCallbacks); - } - else { - s.setWrapperTranslate(translate); - s.setWrapperTransition(speed); - if (!s.animating) { - s.animating = true; - s.wrapper.transitionEnd(function () { - if (!s) return; - s.onTransitionEnd(runCallbacks); - }); - } - - } - - return true; - }; - - s.onTransitionStart = function (runCallbacks) { - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (s.params.autoHeight) { - s.updateAutoHeight(); - } - if (s.lazy) s.lazy.onTransitionStart(); - if (runCallbacks) { - s.emit('onTransitionStart', s); - if (s.activeIndex !== s.previousIndex) { - s.emit('onSlideChangeStart', s); - if (s.activeIndex > s.previousIndex) { - s.emit('onSlideNextStart', s); - } - else { - s.emit('onSlidePrevStart', s); - } - } - - } - }; - s.onTransitionEnd = function (runCallbacks) { - s.animating = false; - s.setWrapperTransition(0); - if (typeof runCallbacks === 'undefined') runCallbacks = true; - if (s.lazy) s.lazy.onTransitionEnd(); - if (runCallbacks) { - s.emit('onTransitionEnd', s); - if (s.activeIndex !== s.previousIndex) { - s.emit('onSlideChangeEnd', s); - if (s.activeIndex > s.previousIndex) { - s.emit('onSlideNextEnd', s); - } - else { - s.emit('onSlidePrevEnd', s); - } - } - } - if (s.params.history && s.history) { - s.history.setHistory(s.params.history, s.activeIndex); - } - if (s.params.hashnav && s.hashnav) { - s.hashnav.setHash(); - } - - }; - s.slideNext = function (runCallbacks, speed, internal) { - if (s.params.loop) { - if (s.animating) return false; - s.fixLoop(); - var clientLeft = s.container[0].clientLeft; - return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); - } - else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); - }; - s._slideNext = function (speed) { - return s.slideNext(true, speed, true); - }; - s.slidePrev = function (runCallbacks, speed, internal) { - if (s.params.loop) { - if (s.animating) return false; - s.fixLoop(); - var clientLeft = s.container[0].clientLeft; - return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); - } - else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); - }; - s._slidePrev = function (speed) { - return s.slidePrev(true, speed, true); - }; - s.slideReset = function (runCallbacks, speed, internal) { - return s.slideTo(s.activeIndex, speed, runCallbacks); - }; - - s.disableTouchControl = function () { - s.params.onlyExternal = true; - return true; - }; - s.enableTouchControl = function () { - s.params.onlyExternal = false; - return true; - }; - - /*========================= - Translate/transition helpers - ===========================*/ - s.setWrapperTransition = function (duration, byController) { - s.wrapper.transition(duration); - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - s.effects[s.params.effect].setTransition(duration); - } - if (s.params.parallax && s.parallax) { - s.parallax.setTransition(duration); - } - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.setTransition(duration); - } - if (s.params.control && s.controller) { - s.controller.setTransition(duration, byController); - } - s.emit('onSetTransition', s, duration); - }; - s.setWrapperTranslate = function (translate, updateActiveIndex, byController) { - var x = 0, y = 0, z = 0; - if (s.isHorizontal()) { - x = s.rtl ? -translate : translate; - } - else { - y = translate; - } - - if (s.params.roundLengths) { - x = round(x); - y = round(y); - } - - if (!s.params.virtualTranslate) { - if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)'); - else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)'); - } - - s.translate = s.isHorizontal() ? x : y; - - // Check if we need to update progress - var progress; - var translatesDiff = s.maxTranslate() - s.minTranslate(); - if (translatesDiff === 0) { - progress = 0; - } - else { - progress = (translate - s.minTranslate()) / (translatesDiff); - } - if (progress !== s.progress) { - s.updateProgress(translate); - } - - if (updateActiveIndex) s.updateActiveIndex(); - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - s.effects[s.params.effect].setTranslate(s.translate); - } - if (s.params.parallax && s.parallax) { - s.parallax.setTranslate(s.translate); - } - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.setTranslate(s.translate); - } - if (s.params.control && s.controller) { - s.controller.setTranslate(s.translate, byController); - } - s.emit('onSetTranslate', s, s.translate); - }; - - s.getTranslate = function (el, axis) { - var matrix, curTransform, curStyle, transformMatrix; - - // automatic axis detection - if (typeof axis === 'undefined') { - axis = 'x'; - } - - if (s.params.virtualTranslate) { - return s.rtl ? -s.translate : s.translate; - } - - curStyle = window.getComputedStyle(el, null); - if (window.WebKitCSSMatrix) { - curTransform = curStyle.transform || curStyle.webkitTransform; - if (curTransform.split(',').length > 6) { - curTransform = curTransform.split(', ').map(function(a){ - return a.replace(',','.'); - }).join(', '); - } - // Some old versions of Webkit choke when 'none' is passed; pass - // empty string instead in this case - transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); - } - else { - transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); - matrix = transformMatrix.toString().split(','); - } - - if (axis === 'x') { - //Latest Chrome and webkits Fix - if (window.WebKitCSSMatrix) - curTransform = transformMatrix.m41; - //Crazy IE10 Matrix - else if (matrix.length === 16) - curTransform = parseFloat(matrix[12]); - //Normal Browsers - else - curTransform = parseFloat(matrix[4]); - } - if (axis === 'y') { - //Latest Chrome and webkits Fix - if (window.WebKitCSSMatrix) - curTransform = transformMatrix.m42; - //Crazy IE10 Matrix - else if (matrix.length === 16) - curTransform = parseFloat(matrix[13]); - //Normal Browsers - else - curTransform = parseFloat(matrix[5]); - } - if (s.rtl && curTransform) curTransform = -curTransform; - return curTransform || 0; - }; - s.getWrapperTranslate = function (axis) { - if (typeof axis === 'undefined') { - axis = s.isHorizontal() ? 'x' : 'y'; - } - return s.getTranslate(s.wrapper[0], axis); - }; - - /*========================= - Observer - ===========================*/ - s.observers = []; - function initObserver(target, options) { - options = options || {}; - // create an observer instance - var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; - var observer = new ObserverFunc(function (mutations) { - mutations.forEach(function (mutation) { - s.onResize(true); - s.emit('onObserverUpdate', s, mutation); - }); - }); - - observer.observe(target, { - attributes: typeof options.attributes === 'undefined' ? true : options.attributes, - childList: typeof options.childList === 'undefined' ? true : options.childList, - characterData: typeof options.characterData === 'undefined' ? true : options.characterData - }); - - s.observers.push(observer); - } - s.initObservers = function () { - if (s.params.observeParents) { - var containerParents = s.container.parents(); - for (var i = 0; i < containerParents.length; i++) { - initObserver(containerParents[i]); - } - } - - // Observe container - initObserver(s.container[0], {childList: false}); - - // Observe wrapper - initObserver(s.wrapper[0], {attributes: false}); - }; - s.disconnectObservers = function () { - for (var i = 0; i < s.observers.length; i++) { - s.observers[i].disconnect(); - } - s.observers = []; - }; - /*========================= - Loop - ===========================*/ - // Create looped slides - s.createLoop = function () { - // Remove duplicated slides - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); - - var slides = s.wrapper.children('.' + s.params.slideClass); - - if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length; - - s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10); - s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides; - if (s.loopedSlides > slides.length) { - s.loopedSlides = slides.length; - } - - var prependSlides = [], appendSlides = [], i; - slides.each(function (index, el) { - var slide = $(this); - if (index < s.loopedSlides) appendSlides.push(el); - if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el); - slide.attr('data-swiper-slide-index', index); - }); - for (i = 0; i < appendSlides.length; i++) { - s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); - } - for (i = prependSlides.length - 1; i >= 0; i--) { - s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); - } - }; - s.destroyLoop = function () { - s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); - s.slides.removeAttr('data-swiper-slide-index'); - }; - s.reLoop = function (updatePosition) { - var oldIndex = s.activeIndex - s.loopedSlides; - s.destroyLoop(); - s.createLoop(); - s.updateSlidesSize(); - if (updatePosition) { - s.slideTo(oldIndex + s.loopedSlides, 0, false); - } - - }; - s.fixLoop = function () { - var newIndex; - //Fix For Negative Oversliding - if (s.activeIndex < s.loopedSlides) { - newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex; - newIndex = newIndex + s.loopedSlides; - s.slideTo(newIndex, 0, false, true); - } - //Fix For Positive Oversliding - else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) { - newIndex = -s.slides.length + s.activeIndex + s.loopedSlides; - newIndex = newIndex + s.loopedSlides; - s.slideTo(newIndex, 0, false, true); - } - }; - /*========================= - Append/Prepend/Remove Slides - ===========================*/ - s.appendSlide = function (slides) { - if (s.params.loop) { - s.destroyLoop(); - } - if (typeof slides === 'object' && slides.length) { - for (var i = 0; i < slides.length; i++) { - if (slides[i]) s.wrapper.append(slides[i]); - } - } - else { - s.wrapper.append(slides); - } - if (s.params.loop) { - s.createLoop(); - } - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - }; - s.prependSlide = function (slides) { - if (s.params.loop) { - s.destroyLoop(); - } - var newActiveIndex = s.activeIndex + 1; - if (typeof slides === 'object' && slides.length) { - for (var i = 0; i < slides.length; i++) { - if (slides[i]) s.wrapper.prepend(slides[i]); - } - newActiveIndex = s.activeIndex + slides.length; - } - else { - s.wrapper.prepend(slides); - } - if (s.params.loop) { - s.createLoop(); - } - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - s.slideTo(newActiveIndex, 0, false); - }; - s.removeSlide = function (slidesIndexes) { - if (s.params.loop) { - s.destroyLoop(); - s.slides = s.wrapper.children('.' + s.params.slideClass); - } - var newActiveIndex = s.activeIndex, - indexToRemove; - if (typeof slidesIndexes === 'object' && slidesIndexes.length) { - for (var i = 0; i < slidesIndexes.length; i++) { - indexToRemove = slidesIndexes[i]; - if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); - if (indexToRemove < newActiveIndex) newActiveIndex--; - } - newActiveIndex = Math.max(newActiveIndex, 0); - } - else { - indexToRemove = slidesIndexes; - if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); - if (indexToRemove < newActiveIndex) newActiveIndex--; - newActiveIndex = Math.max(newActiveIndex, 0); - } - - if (s.params.loop) { - s.createLoop(); - } - - if (!(s.params.observer && s.support.observer)) { - s.update(true); - } - if (s.params.loop) { - s.slideTo(newActiveIndex + s.loopedSlides, 0, false); - } - else { - s.slideTo(newActiveIndex, 0, false); - } - - }; - s.removeAllSlides = function () { - var slidesIndexes = []; - for (var i = 0; i < s.slides.length; i++) { - slidesIndexes.push(i); - } - s.removeSlide(slidesIndexes); - }; - - - /*========================= - Effects - ===========================*/ - s.effects = { - fade: { - setTranslate: function () { - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var offset = slide[0].swiperSlideOffset; - var tx = -offset; - if (!s.params.virtualTranslate) tx = tx - s.translate; - var ty = 0; - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - } - var slideOpacity = s.params.fade.crossFade ? - Math.max(1 - Math.abs(slide[0].progress), 0) : - 1 + Math.min(Math.max(slide[0].progress, -1), 0); - slide - .css({ - opacity: slideOpacity - }) - .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)'); - - } - - }, - setTransition: function (duration) { - s.slides.transition(duration); - if (s.params.virtualTranslate && duration !== 0) { - var eventTriggered = false; - s.slides.transitionEnd(function () { - if (eventTriggered) return; - if (!s) return; - eventTriggered = true; - s.animating = false; - var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; - for (var i = 0; i < triggerEvents.length; i++) { - s.wrapper.trigger(triggerEvents[i]); - } - }); - } - } - }, - flip: { - setTranslate: function () { - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var progress = slide[0].progress; - if (s.params.flip.limitRotation) { - progress = Math.max(Math.min(slide[0].progress, 1), -1); - } - var offset = slide[0].swiperSlideOffset; - var rotate = -180 * progress, - rotateY = rotate, - rotateX = 0, - tx = -offset, - ty = 0; - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - rotateX = -rotateY; - rotateY = 0; - } - else if (s.rtl) { - rotateY = -rotateY; - } - - slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length; - - if (s.params.flip.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'left' : 'top') + '"></div>'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'right' : 'bottom') + '"></div>'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); - if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); - } - - slide - .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'); - } - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - if (s.params.virtualTranslate && duration !== 0) { - var eventTriggered = false; - s.slides.eq(s.activeIndex).transitionEnd(function () { - if (eventTriggered) return; - if (!s) return; - if (!$(this).hasClass(s.params.slideActiveClass)) return; - eventTriggered = true; - s.animating = false; - var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; - for (var i = 0; i < triggerEvents.length; i++) { - s.wrapper.trigger(triggerEvents[i]); - } - }); - } - } - }, - cube: { - setTranslate: function () { - var wrapperRotate = 0, cubeShadow; - if (s.params.cube.shadow) { - if (s.isHorizontal()) { - cubeShadow = s.wrapper.find('.swiper-cube-shadow'); - if (cubeShadow.length === 0) { - cubeShadow = $('<div class="swiper-cube-shadow"></div>'); - s.wrapper.append(cubeShadow); - } - cubeShadow.css({height: s.width + 'px'}); - } - else { - cubeShadow = s.container.find('.swiper-cube-shadow'); - if (cubeShadow.length === 0) { - cubeShadow = $('<div class="swiper-cube-shadow"></div>'); - s.container.append(cubeShadow); - } - } - } - for (var i = 0; i < s.slides.length; i++) { - var slide = s.slides.eq(i); - var slideAngle = i * 90; - var round = Math.floor(slideAngle / 360); - if (s.rtl) { - slideAngle = -slideAngle; - round = Math.floor(-slideAngle / 360); - } - var progress = Math.max(Math.min(slide[0].progress, 1), -1); - var tx = 0, ty = 0, tz = 0; - if (i % 4 === 0) { - tx = - round * 4 * s.size; - tz = 0; - } - else if ((i - 1) % 4 === 0) { - tx = 0; - tz = - round * 4 * s.size; - } - else if ((i - 2) % 4 === 0) { - tx = s.size + round * 4 * s.size; - tz = s.size; - } - else if ((i - 3) % 4 === 0) { - tx = - s.size; - tz = 3 * s.size + s.size * 4 * round; - } - if (s.rtl) { - tx = -tx; - } - - if (!s.isHorizontal()) { - ty = tx; - tx = 0; - } - - var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)'; - if (progress <= 1 && progress > -1) { - wrapperRotate = i * 90 + progress * 90; - if (s.rtl) wrapperRotate = -i * 90 - progress * 90; - } - slide.transform(transform); - if (s.params.cube.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'left' : 'top') + '"></div>'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'right' : 'bottom') + '"></div>'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); - if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); - } - } - s.wrapper.css({ - '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px', - 'transform-origin': '50% 50% -' + (s.size / 2) + 'px' - }); - - if (s.params.cube.shadow) { - if (s.isHorizontal()) { - cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')'); - } - else { - var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; - var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); - var scale1 = s.params.cube.shadowScale, - scale2 = s.params.cube.shadowScale / multiplier, - offset = s.params.cube.shadowOffset; - cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)'); - } - } - var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0; - s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)'); - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - if (s.params.cube.shadow && !s.isHorizontal()) { - s.container.find('.swiper-cube-shadow').transition(duration); - } - } - }, - coverflow: { - setTranslate: function () { - var transform = s.translate; - var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2; - var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate; - var translate = s.params.coverflow.depth; - //Each slide offset from center - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideSize = s.slidesSizesGrid[i]; - var slideOffset = slide[0].swiperSlideOffset; - var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier; - - var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0; - var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier; - // var rotateZ = 0 - var translateZ = -translate * Math.abs(offsetMultiplier); - - var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier); - var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0; - - //Fix for ultra small values - if (Math.abs(translateX) < 0.001) translateX = 0; - if (Math.abs(translateY) < 0.001) translateY = 0; - if (Math.abs(translateZ) < 0.001) translateZ = 0; - if (Math.abs(rotateY) < 0.001) rotateY = 0; - if (Math.abs(rotateX) < 0.001) rotateX = 0; - - var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'; - - slide.transform(slideTransform); - slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; - if (s.params.coverflow.slideShadows) { - //Set shadows - var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); - var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); - if (shadowBefore.length === 0) { - shadowBefore = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'left' : 'top') + '"></div>'); - slide.append(shadowBefore); - } - if (shadowAfter.length === 0) { - shadowAfter = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'right' : 'bottom') + '"></div>'); - slide.append(shadowAfter); - } - if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; - if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; - } - } - - //Set correct perspective for IE10 - if (s.browser.ie) { - var ws = s.wrapper[0].style; - ws.perspectiveOrigin = center + 'px 50%'; - } - }, - setTransition: function (duration) { - s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); - } - } - }; - - - /*========================= - Images Lazy Loading - ===========================*/ - s.lazy = { - initialImageLoaded: false, - loadImageInSlide: function (index, loadInDuplicate) { - if (typeof index === 'undefined') return; - if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true; - if (s.slides.length === 0) return; - - var slide = s.slides.eq(index); - var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')'); - if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) { - img = img.add(slide[0]); - } - if (img.length === 0) return; - - img.each(function () { - var _img = $(this); - _img.addClass(s.params.lazyStatusLoadingClass); - var background = _img.attr('data-background'); - var src = _img.attr('data-src'), - srcset = _img.attr('data-srcset'), - sizes = _img.attr('data-sizes'); - s.loadImage(_img[0], (src || background), srcset, sizes, false, function () { - if (typeof s === 'undefined' || s === null || !s) return; - if (background) { - _img.css('background-image', 'url("' + background + '")'); - _img.removeAttr('data-background'); - } - else { - if (srcset) { - _img.attr('srcset', srcset); - _img.removeAttr('data-srcset'); - } - if (sizes) { - _img.attr('sizes', sizes); - _img.removeAttr('data-sizes'); - } - if (src) { - _img.attr('src', src); - _img.removeAttr('data-src'); - } - - } - - _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass); - slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove(); - if (s.params.loop && loadInDuplicate) { - var slideOriginalIndex = slide.attr('data-swiper-slide-index'); - if (slide.hasClass(s.params.slideDuplicateClass)) { - var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')'); - s.lazy.loadImageInSlide(originalSlide.index(), false); - } - else { - var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]'); - s.lazy.loadImageInSlide(duplicatedSlide.index(), false); - } - } - s.emit('onLazyImageReady', s, slide[0], _img[0]); - }); - - s.emit('onLazyImageLoad', s, slide[0], _img[0]); - }); - - }, - load: function () { - var i; - var slidesPerView = s.params.slidesPerView; - if (slidesPerView === 'auto') { - slidesPerView = 0; - } - if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true; - if (s.params.watchSlidesVisibility) { - s.wrapper.children('.' + s.params.slideVisibleClass).each(function () { - s.lazy.loadImageInSlide($(this).index()); - }); - } - else { - if (slidesPerView > 1) { - for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - } - else { - s.lazy.loadImageInSlide(s.activeIndex); - } - } - if (s.params.lazyLoadingInPrevNext) { - if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) { - var amount = s.params.lazyLoadingInPrevNextAmount; - var spv = slidesPerView; - var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length); - var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0); - // Next Slides - for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - // Prev Slides - for (i = minIndex; i < s.activeIndex ; i++) { - if (s.slides[i]) s.lazy.loadImageInSlide(i); - } - } - else { - var nextSlide = s.wrapper.children('.' + s.params.slideNextClass); - if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index()); - - var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass); - if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index()); - } - } - }, - onTransitionStart: function () { - if (s.params.lazyLoading) { - if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) { - s.lazy.load(); - } - } - }, - onTransitionEnd: function () { - if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) { - s.lazy.load(); - } - } - }; - - - /*========================= - Scrollbar - ===========================*/ - s.scrollbar = { - isTouched: false, - setDragPosition: function (e) { - var sb = s.scrollbar; - var x = 0, y = 0; - var translate; - var pointerPosition = s.isHorizontal() ? - ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) : - ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ; - var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2; - var positionMin = -s.minTranslate() * sb.moveDivider; - var positionMax = -s.maxTranslate() * sb.moveDivider; - if (position < positionMin) { - position = positionMin; - } - else if (position > positionMax) { - position = positionMax; - } - position = -position / sb.moveDivider; - s.updateProgress(position); - s.setWrapperTranslate(position, true); - }, - dragStart: function (e) { - var sb = s.scrollbar; - sb.isTouched = true; - e.preventDefault(); - e.stopPropagation(); - - sb.setDragPosition(e); - clearTimeout(sb.dragTimeout); - - sb.track.transition(0); - if (s.params.scrollbarHide) { - sb.track.css('opacity', 1); - } - s.wrapper.transition(100); - sb.drag.transition(100); - s.emit('onScrollbarDragStart', s); - }, - dragMove: function (e) { - var sb = s.scrollbar; - if (!sb.isTouched) return; - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - sb.setDragPosition(e); - s.wrapper.transition(0); - sb.track.transition(0); - sb.drag.transition(0); - s.emit('onScrollbarDragMove', s); - }, - dragEnd: function (e) { - var sb = s.scrollbar; - if (!sb.isTouched) return; - sb.isTouched = false; - if (s.params.scrollbarHide) { - clearTimeout(sb.dragTimeout); - sb.dragTimeout = setTimeout(function () { - sb.track.css('opacity', 0); - sb.track.transition(400); - }, 1000); - - } - s.emit('onScrollbarDragEnd', s); - if (s.params.scrollbarSnapOnRelease) { - s.slideReset(); - } - }, - draggableEvents: (function () { - if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop; - else return s.touchEvents; - })(), - enableDraggable: function () { - var sb = s.scrollbar; - var target = s.support.touch ? sb.track : document; - $(sb.track).on(sb.draggableEvents.start, sb.dragStart); - $(target).on(sb.draggableEvents.move, sb.dragMove); - $(target).on(sb.draggableEvents.end, sb.dragEnd); - }, - disableDraggable: function () { - var sb = s.scrollbar; - var target = s.support.touch ? sb.track : document; - $(sb.track).off(sb.draggableEvents.start, sb.dragStart); - $(target).off(sb.draggableEvents.move, sb.dragMove); - $(target).off(sb.draggableEvents.end, sb.dragEnd); - }, - set: function () { - if (!s.params.scrollbar) return; - var sb = s.scrollbar; - sb.track = $(s.params.scrollbar); - if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) { - sb.track = s.container.find(s.params.scrollbar); - } - sb.drag = sb.track.find('.swiper-scrollbar-drag'); - if (sb.drag.length === 0) { - sb.drag = $('<div class="swiper-scrollbar-drag"></div>'); - sb.track.append(sb.drag); - } - sb.drag[0].style.width = ''; - sb.drag[0].style.height = ''; - sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight; - - sb.divider = s.size / s.virtualSize; - sb.moveDivider = sb.divider * (sb.trackSize / s.size); - sb.dragSize = sb.trackSize * sb.divider; - - if (s.isHorizontal()) { - sb.drag[0].style.width = sb.dragSize + 'px'; - } - else { - sb.drag[0].style.height = sb.dragSize + 'px'; - } - - if (sb.divider >= 1) { - sb.track[0].style.display = 'none'; - } - else { - sb.track[0].style.display = ''; - } - if (s.params.scrollbarHide) { - sb.track[0].style.opacity = 0; - } - }, - setTranslate: function () { - if (!s.params.scrollbar) return; - var diff; - var sb = s.scrollbar; - var translate = s.translate || 0; - var newPos; - - var newSize = sb.dragSize; - newPos = (sb.trackSize - sb.dragSize) * s.progress; - if (s.rtl && s.isHorizontal()) { - newPos = -newPos; - if (newPos > 0) { - newSize = sb.dragSize - newPos; - newPos = 0; - } - else if (-newPos + sb.dragSize > sb.trackSize) { - newSize = sb.trackSize + newPos; - } - } - else { - if (newPos < 0) { - newSize = sb.dragSize + newPos; - newPos = 0; - } - else if (newPos + sb.dragSize > sb.trackSize) { - newSize = sb.trackSize - newPos; - } - } - if (s.isHorizontal()) { - if (s.support.transforms3d) { - sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)'); - } - else { - sb.drag.transform('translateX(' + (newPos) + 'px)'); - } - sb.drag[0].style.width = newSize + 'px'; - } - else { - if (s.support.transforms3d) { - sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)'); - } - else { - sb.drag.transform('translateY(' + (newPos) + 'px)'); - } - sb.drag[0].style.height = newSize + 'px'; - } - if (s.params.scrollbarHide) { - clearTimeout(sb.timeout); - sb.track[0].style.opacity = 1; - sb.timeout = setTimeout(function () { - sb.track[0].style.opacity = 0; - sb.track.transition(400); - }, 1000); - } - }, - setTransition: function (duration) { - if (!s.params.scrollbar) return; - s.scrollbar.drag.transition(duration); - } - }; - - - /*========================= - Controller - ===========================*/ - s.controller = { - LinearSpline: function (x, y) { - var binarySearch = (function() { - var maxIndex, minIndex, guess; - return function(array, val) { - minIndex = -1; - maxIndex = array.length; - while (maxIndex - minIndex > 1) - if (array[guess = maxIndex + minIndex >> 1] <= val) { - minIndex = guess; - } else { - maxIndex = guess; - } - return maxIndex; - }; - })(); - this.x = x; - this.y = y; - this.lastIndex = x.length - 1; - // Given an x value (x2), return the expected y2 value: - // (x1,y1) is the known point before given value, - // (x3,y3) is the known point after given value. - var i1, i3; - var l = this.x.length; - - this.interpolate = function (x2) { - if (!x2) return 0; - - // Get the indexes of x1 and x3 (the array indexes before and after given x2): - i3 = binarySearch(this.x, x2); - i1 = i3 - 1; - - // We have our indexes i1 & i3, so we can calculate already: - // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 - return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]; - }; - }, - //xxx: for now i will just save one spline function to to - getInterpolateFunction: function(c){ - if(!s.controller.spline) s.controller.spline = s.params.loop ? - new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) : - new s.controller.LinearSpline(s.snapGrid, c.snapGrid); - }, - setTranslate: function (translate, byController) { - var controlled = s.params.control; - var multiplier, controlledTranslate; - function setControlledTranslate(c) { - // this will create an Interpolate function based on the snapGrids - // x is the Grid of the scrolled scroller and y will be the controlled scroller - // it makes sense to create this only once and recall it for the interpolation - // the function does a lot of value caching for performance - translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate; - if (s.params.controlBy === 'slide') { - s.controller.getInterpolateFunction(c); - // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid - // but it did not work out - controlledTranslate = -s.controller.spline.interpolate(-translate); - } - - if(!controlledTranslate || s.params.controlBy === 'container'){ - multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate()); - controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate(); - } - - if (s.params.controlInverse) { - controlledTranslate = c.maxTranslate() - controlledTranslate; - } - c.updateProgress(controlledTranslate); - c.setWrapperTranslate(controlledTranslate, false, s); - c.updateActiveIndex(); - } - if (Array.isArray(controlled)) { - for (var i = 0; i < controlled.length; i++) { - if (controlled[i] !== byController && controlled[i] instanceof Swiper) { - setControlledTranslate(controlled[i]); - } - } - } - else if (controlled instanceof Swiper && byController !== controlled) { - - setControlledTranslate(controlled); - } - }, - setTransition: function (duration, byController) { - var controlled = s.params.control; - var i; - function setControlledTransition(c) { - c.setWrapperTransition(duration, s); - if (duration !== 0) { - c.onTransitionStart(); - c.wrapper.transitionEnd(function(){ - if (!controlled) return; - if (c.params.loop && s.params.controlBy === 'slide') { - c.fixLoop(); - } - c.onTransitionEnd(); - - }); - } - } - if (Array.isArray(controlled)) { - for (i = 0; i < controlled.length; i++) { - if (controlled[i] !== byController && controlled[i] instanceof Swiper) { - setControlledTransition(controlled[i]); - } - } - } - else if (controlled instanceof Swiper && byController !== controlled) { - setControlledTransition(controlled); - } - } - }; - - - /*========================= - Hash Navigation - ===========================*/ - s.hashnav = { - onHashCange: function (e, a) { - var newHash = document.location.hash.replace('#', ''); - var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash'); - if (newHash !== activeSlideHash) { - s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash="' + (newHash) + '"]').index()); - } - }, - attachEvents: function (detach) { - var action = detach ? 'off' : 'on'; - $(window)[action]('hashchange', s.hashnav.onHashCange); - }, - setHash: function () { - if (!s.hashnav.initialized || !s.params.hashnav) return; - if (s.params.replaceState && window.history && window.history.replaceState) { - window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || '')); - } else { - var slide = s.slides.eq(s.activeIndex); - var hash = slide.attr('data-hash') || slide.attr('data-history'); - document.location.hash = hash || ''; - } - }, - init: function () { - if (!s.params.hashnav || s.params.history) return; - s.hashnav.initialized = true; - var hash = document.location.hash.replace('#', ''); - if (hash) { - var speed = 0; - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideHash = slide.attr('data-hash') || slide.attr('data-history'); - if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) { - var index = slide.index(); - s.slideTo(index, speed, s.params.runCallbacksOnInit, true); - } - } - } - if (s.params.hashnavWatchState) s.hashnav.attachEvents(); - }, - destroy: function () { - if (s.params.hashnavWatchState) s.hashnav.attachEvents(true); - } - }; - - - /*========================= - History Api with fallback to Hashnav - ===========================*/ - s.history = { - init: function () { - if (!s.params.history) return; - if (!window.history || !window.history.pushState) { - s.params.history = false; - s.params.hashnav = true; - return; - } - s.history.initialized = true; - this.paths = this.getPathValues(); - if (!this.paths.key && !this.paths.value) return; - this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit); - if (!s.params.replaceState) { - window.addEventListener('popstate', this.setHistoryPopState); - } - }, - setHistoryPopState: function() { - s.history.paths = s.history.getPathValues(); - s.history.scrollToSlide(s.params.speed, s.history.paths.value, false); - }, - getPathValues: function() { - var pathArray = window.location.pathname.slice(1).split('/'); - var total = pathArray.length; - var key = pathArray[total - 2]; - var value = pathArray[total - 1]; - return { key: key, value: value }; - }, - setHistory: function (key, index) { - if (!s.history.initialized || !s.params.history) return; - var slide = s.slides.eq(index); - var value = this.slugify(slide.attr('data-history')); - if (!window.location.pathname.includes(key)) { - value = key + '/' + value; - } - if (s.params.replaceState) { - window.history.replaceState(null, null, value); - } else { - window.history.pushState(null, null, value); - } - }, - slugify: function(text) { - return text.toString().toLowerCase() - .replace(/\s+/g, '-') - .replace(/[^\w\-]+/g, '') - .replace(/\-\-+/g, '-') - .replace(/^-+/, '') - .replace(/-+$/, ''); - }, - scrollToSlide: function(speed, value, runCallbacks) { - if (value) { - for (var i = 0, length = s.slides.length; i < length; i++) { - var slide = s.slides.eq(i); - var slideHistory = this.slugify(slide.attr('data-history')); - if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) { - var index = slide.index(); - s.slideTo(index, speed, runCallbacks); - } - } - } else { - s.slideTo(0, speed, runCallbacks); - } - } - }; - - - /*========================= - Keyboard Control - ===========================*/ - function handleKeyboard(e) { - if (e.originalEvent) e = e.originalEvent; //jquery fix - var kc = e.keyCode || e.charCode; - // Directions locks - if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) { - return false; - } - if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) { - return false; - } - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { - return; - } - if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { - return; - } - if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { - var inView = false; - //Check that swiper should be inside of visible area of window - if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) { - return; - } - var windowScroll = { - left: window.pageXOffset, - top: window.pageYOffset - }; - var windowWidth = window.innerWidth; - var windowHeight = window.innerHeight; - var swiperOffset = s.container.offset(); - if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft; - var swiperCoord = [ - [swiperOffset.left, swiperOffset.top], - [swiperOffset.left + s.width, swiperOffset.top], - [swiperOffset.left, swiperOffset.top + s.height], - [swiperOffset.left + s.width, swiperOffset.top + s.height] - ]; - for (var i = 0; i < swiperCoord.length; i++) { - var point = swiperCoord[i]; - if ( - point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && - point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight - ) { - inView = true; - } - - } - if (!inView) return; - } - if (s.isHorizontal()) { - if (kc === 37 || kc === 39) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - } - if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext(); - if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev(); - } - else { - if (kc === 38 || kc === 40) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - } - if (kc === 40) s.slideNext(); - if (kc === 38) s.slidePrev(); - } - s.emit('onKeyPress', s, kc); - } - s.disableKeyboardControl = function () { - s.params.keyboardControl = false; - $(document).off('keydown', handleKeyboard); - }; - s.enableKeyboardControl = function () { - s.params.keyboardControl = true; - $(document).on('keydown', handleKeyboard); - }; - - - /*========================= - Mousewheel Control - ===========================*/ - s.mousewheel = { - event: false, - lastScrollTime: (new window.Date()).getTime() - }; - function isEventSupported() { - var eventName = 'onwheel'; - var isSupported = eventName in document; - - if (!isSupported) { - var element = document.createElement('div'); - element.setAttribute(eventName, 'return;'); - isSupported = typeof element[eventName] === 'function'; - } - - if (!isSupported && - document.implementation && - document.implementation.hasFeature && - // always returns true in newer browsers as per the standard. - // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature - document.implementation.hasFeature('', '') !== true ) { - // This is the only way to test support for the `wheel` event in IE9+. - isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); - } - - return isSupported; - } - /** - * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is - * complicated, thus this doc is long and (hopefully) detailed enough to answer - * your questions. - * - * If you need to react to the mouse wheel in a predictable way, this code is - * like your bestest friend. * hugs * - * - * As of today, there are 4 DOM event types you can listen to: - * - * 'wheel' -- Chrome(31+), FF(17+), IE(9+) - * 'mousewheel' -- Chrome, IE(6+), Opera, Safari - * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother! - * 'DOMMouseScroll' -- FF(0.9.7+) since 2003 - * - * So what to do? The is the best: - * - * normalizeWheel.getEventType(); - * - * In your event callback, use this code to get sane interpretation of the - * deltas. This code will return an object with properties: - * - * spinX -- normalized spin speed (use for zoom) - x plane - * spinY -- " - y plane - * pixelX -- normalized distance (to pixels) - x plane - * pixelY -- " - y plane - * - * Wheel values are provided by the browser assuming you are using the wheel to - * scroll a web page by a number of lines or pixels (or pages). Values can vary - * significantly on different platforms and browsers, forgetting that you can - * scroll at different speeds. Some devices (like trackpads) emit more events - * at smaller increments with fine granularity, and some emit massive jumps with - * linear speed or acceleration. - * - * This code does its best to normalize the deltas for you: - * - * - spin is trying to normalize how far the wheel was spun (or trackpad - * dragged). This is super useful for zoom support where you want to - * throw away the chunky scroll steps on the PC and make those equal to - * the slow and smooth tiny steps on the Mac. Key data: This code tries to - * resolve a single slow step on a wheel to 1. - * - * - pixel is normalizing the desired scroll delta in pixel units. You'll - * get the crazy differences between browsers, but at least it'll be in - * pixels! - * - * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This - * should translate to positive value zooming IN, negative zooming OUT. - * This matches the newer 'wheel' event. - * - * Why are there spinX, spinY (or pixels)? - * - * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn - * with a mouse. It results in side-scrolling in the browser by default. - * - * - spinY is what you expect -- it's the classic axis of a mouse wheel. - * - * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and - * probably is by browsers in conjunction with fancy 3D controllers .. but - * you know. - * - * Implementation info: - * - * Examples of 'wheel' event if you scroll slowly (down) by one step with an - * average mouse: - * - * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120) - * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12) - * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A) - * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120) - * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120) - * - * On the trackpad: - * - * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6) - * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A) - * - * On other/older browsers.. it's more complicated as there can be multiple and - * also missing delta values. - * - * The 'wheel' event is more standard: - * - * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents - * - * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and - * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain - * backward compatibility with older events. Those other values help us - * better normalize spin speed. Example of what the browsers provide: - * - * | event.wheelDelta | event.detail - * ------------------+------------------+-------------- - * Safari v5/OS X | -120 | 0 - * Safari v5/Win7 | -120 | 0 - * Chrome v17/OS X | -120 | 0 - * Chrome v17/Win7 | -120 | 0 - * IE9/Win7 | -120 | undefined - * Firefox v4/OS X | undefined | 1 - * Firefox v4/Win7 | undefined | 3 - * - */ - function normalizeWheel( /*object*/ event ) /*object*/ { - // Reasonable defaults - var PIXEL_STEP = 10; - var LINE_HEIGHT = 40; - var PAGE_HEIGHT = 800; - - var sX = 0, sY = 0, // spinX, spinY - pX = 0, pY = 0; // pixelX, pixelY - - // Legacy - if( 'detail' in event ) { - sY = event.detail; - } - if( 'wheelDelta' in event ) { - sY = -event.wheelDelta / 120; - } - if( 'wheelDeltaY' in event ) { - sY = -event.wheelDeltaY / 120; - } - if( 'wheelDeltaX' in event ) { - sX = -event.wheelDeltaX / 120; - } - - // side scrolling on FF with DOMMouseScroll - if( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) { - sX = sY; - sY = 0; - } - - pX = sX * PIXEL_STEP; - pY = sY * PIXEL_STEP; - - if( 'deltaY' in event ) { - pY = event.deltaY; - } - if( 'deltaX' in event ) { - pX = event.deltaX; - } - - if( (pX || pY) && event.deltaMode ) { - if( event.deltaMode === 1 ) { // delta in LINE units - pX *= LINE_HEIGHT; - pY *= LINE_HEIGHT; - } else { // delta in PAGE units - pX *= PAGE_HEIGHT; - pY *= PAGE_HEIGHT; - } - } - - // Fall-back if spin cannot be determined - if( pX && !sX ) { - sX = (pX < 1) ? -1 : 1; - } - if( pY && !sY ) { - sY = (pY < 1) ? -1 : 1; - } - - return { - spinX: sX, - spinY: sY, - pixelX: pX, - pixelY: pY - }; - } - if (s.params.mousewheelControl) { - /** - * The best combination if you prefer spinX + spinY normalization. It favors - * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with - * 'wheel' event, making spin speed determination impossible. - */ - s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ? - 'DOMMouseScroll' : - isEventSupported() ? - 'wheel' : 'mousewheel'; - } - function handleMousewheel(e) { - if (e.originalEvent) e = e.originalEvent; //jquery fix - var delta = 0; - var rtlFactor = s.rtl ? -1 : 1; - - var data = normalizeWheel( e ); - - if (s.params.mousewheelForceToAxis) { - if (s.isHorizontal()) { - if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor; - else return; - } - else { - if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY; - else return; - } - } - else { - delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY; - } - - if (delta === 0) return; - - if (s.params.mousewheelInvert) delta = -delta; - - if (!s.params.freeMode) { - if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) { - if (delta < 0) { - if ((!s.isEnd || s.params.loop) && !s.animating) { - s.slideNext(); - s.emit('onScroll', s, e); - } - else if (s.params.mousewheelReleaseOnEdges) return true; - } - else { - if ((!s.isBeginning || s.params.loop) && !s.animating) { - s.slidePrev(); - s.emit('onScroll', s, e); - } - else if (s.params.mousewheelReleaseOnEdges) return true; - } - } - s.mousewheel.lastScrollTime = (new window.Date()).getTime(); - - } - else { - //Freemode or scrollContainer: - var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity; - var wasBeginning = s.isBeginning, - wasEnd = s.isEnd; - - if (position >= s.minTranslate()) position = s.minTranslate(); - if (position <= s.maxTranslate()) position = s.maxTranslate(); - - s.setWrapperTransition(0); - s.setWrapperTranslate(position); - s.updateProgress(); - s.updateActiveIndex(); - - if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) { - s.updateClasses(); - } - - if (s.params.freeModeSticky) { - clearTimeout(s.mousewheel.timeout); - s.mousewheel.timeout = setTimeout(function () { - s.slideReset(); - }, 300); - } - else { - if (s.params.lazyLoading && s.lazy) { - s.lazy.load(); - } - } - // Emit event - s.emit('onScroll', s, e); - - // Stop autoplay - if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay(); - - // Return page scroll on edge positions - if (position === 0 || position === s.maxTranslate()) return; - } - - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - return false; - } - s.disableMousewheelControl = function () { - if (!s.mousewheel.event) return false; - var target = s.container; - if (s.params.mousewheelEventsTarged !== 'container') { - target = $(s.params.mousewheelEventsTarged); - } - target.off(s.mousewheel.event, handleMousewheel); - s.params.mousewheelControl = false; - return true; - }; - - s.enableMousewheelControl = function () { - if (!s.mousewheel.event) return false; - var target = s.container; - if (s.params.mousewheelEventsTarged !== 'container') { - target = $(s.params.mousewheelEventsTarged); - } - target.on(s.mousewheel.event, handleMousewheel); - s.params.mousewheelControl = true; - return true; - }; - - - /*========================= - Parallax - ===========================*/ - function setParallaxTransform(el, progress) { - el = $(el); - var p, pX, pY; - var rtlFactor = s.rtl ? -1 : 1; - - p = el.attr('data-swiper-parallax') || '0'; - pX = el.attr('data-swiper-parallax-x'); - pY = el.attr('data-swiper-parallax-y'); - if (pX || pY) { - pX = pX || '0'; - pY = pY || '0'; - } - else { - if (s.isHorizontal()) { - pX = p; - pY = '0'; - } - else { - pY = p; - pX = '0'; - } - } - - if ((pX).indexOf('%') >= 0) { - pX = parseInt(pX, 10) * progress * rtlFactor + '%'; - } - else { - pX = pX * progress * rtlFactor + 'px' ; - } - if ((pY).indexOf('%') >= 0) { - pY = parseInt(pY, 10) * progress + '%'; - } - else { - pY = pY * progress + 'px' ; - } - - el.transform('translate3d(' + pX + ', ' + pY + ',0px)'); - } - s.parallax = { - setTranslate: function () { - s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ - setParallaxTransform(this, s.progress); - - }); - s.slides.each(function () { - var slide = $(this); - slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () { - var progress = Math.min(Math.max(slide[0].progress, -1), 1); - setParallaxTransform(this, progress); - }); - }); - }, - setTransition: function (duration) { - if (typeof duration === 'undefined') duration = s.params.speed; - s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ - var el = $(this); - var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration; - if (duration === 0) parallaxDuration = 0; - el.transition(parallaxDuration); - }); - } - }; - - - /*========================= - Zoom - ===========================*/ - s.zoom = { - // "Global" Props - scale: 1, - currentScale: 1, - isScaling: false, - gesture: { - slide: undefined, - slideWidth: undefined, - slideHeight: undefined, - image: undefined, - imageWrap: undefined, - zoomMax: s.params.zoomMax - }, - image: { - isTouched: undefined, - isMoved: undefined, - currentX: undefined, - currentY: undefined, - minX: undefined, - minY: undefined, - maxX: undefined, - maxY: undefined, - width: undefined, - height: undefined, - startX: undefined, - startY: undefined, - touchesStart: {}, - touchesCurrent: {} - }, - velocity: { - x: undefined, - y: undefined, - prevPositionX: undefined, - prevPositionY: undefined, - prevTime: undefined - }, - // Calc Scale From Multi-touches - getDistanceBetweenTouches: function (e) { - if (e.targetTouches.length < 2) return 1; - var x1 = e.targetTouches[0].pageX, - y1 = e.targetTouches[0].pageY, - x2 = e.targetTouches[1].pageX, - y2 = e.targetTouches[1].pageY; - var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); - return distance; - }, - // Events - onGestureStart: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { - return; - } - z.gesture.scaleStart = z.getDistanceBetweenTouches(e); - } - if (!z.gesture.slide || !z.gesture.slide.length) { - z.gesture.slide = $(this); - if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex); - z.gesture.image = z.gesture.slide.find('img, svg, canvas'); - z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass); - z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ; - if (z.gesture.imageWrap.length === 0) { - z.gesture.image = undefined; - return; - } - } - z.gesture.image.transition(0); - z.isScaling = true; - }, - onGestureChange: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { - return; - } - z.gesture.scaleMove = z.getDistanceBetweenTouches(e); - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (s.support.gestures) { - z.scale = e.scale * z.currentScale; - } - else { - z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale; - } - if (z.scale > z.gesture.zoomMax) { - z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5); - } - if (z.scale < s.params.zoomMin) { - z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5); - } - z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')'); - }, - onGestureEnd: function (e) { - var z = s.zoom; - if (!s.support.gestures) { - if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) { - return; - } - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin); - z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')'); - z.currentScale = z.scale; - z.isScaling = false; - if (z.scale === 1) z.gesture.slide = undefined; - }, - onTouchStart: function (s, e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (z.image.isTouched) return; - if (s.device.os === 'android') e.preventDefault(); - z.image.isTouched = true; - z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; - z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; - }, - onTouchMove: function (e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - s.allowClick = false; - if (!z.image.isTouched || !z.gesture.slide) return; - - if (!z.image.isMoved) { - z.image.width = z.gesture.image[0].offsetWidth; - z.image.height = z.gesture.image[0].offsetHeight; - z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0; - z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0; - z.gesture.slideWidth = z.gesture.slide[0].offsetWidth; - z.gesture.slideHeight = z.gesture.slide[0].offsetHeight; - z.gesture.imageWrap.transition(0); - if (s.rtl) z.image.startX = -z.image.startX; - if (s.rtl) z.image.startY = -z.image.startY; - } - // Define if we need image drag - var scaledWidth = z.image.width * z.scale; - var scaledHeight = z.image.height * z.scale; - - if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return; - - z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0); - z.image.maxX = -z.image.minX; - z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0); - z.image.maxY = -z.image.minY; - - z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; - z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; - - if (!z.image.isMoved && !z.isScaling) { - if (s.isHorizontal() && - (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) || - (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x) - ) { - z.image.isTouched = false; - return; - } - else if (!s.isHorizontal() && - (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) || - (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y) - ) { - z.image.isTouched = false; - return; - } - } - e.preventDefault(); - e.stopPropagation(); - - z.image.isMoved = true; - z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX; - z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY; - - if (z.image.currentX < z.image.minX) { - z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8); - } - if (z.image.currentX > z.image.maxX) { - z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8); - } - - if (z.image.currentY < z.image.minY) { - z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8); - } - if (z.image.currentY > z.image.maxY) { - z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8); - } - - //Velocity - if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x; - if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y; - if (!z.velocity.prevTime) z.velocity.prevTime = Date.now(); - z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2; - z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2; - if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0; - if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0; - z.velocity.prevPositionX = z.image.touchesCurrent.x; - z.velocity.prevPositionY = z.image.touchesCurrent.y; - z.velocity.prevTime = Date.now(); - - z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)'); - }, - onTouchEnd: function (s, e) { - var z = s.zoom; - if (!z.gesture.image || z.gesture.image.length === 0) return; - if (!z.image.isTouched || !z.image.isMoved) { - z.image.isTouched = false; - z.image.isMoved = false; - return; - } - z.image.isTouched = false; - z.image.isMoved = false; - var momentumDurationX = 300; - var momentumDurationY = 300; - var momentumDistanceX = z.velocity.x * momentumDurationX; - var newPositionX = z.image.currentX + momentumDistanceX; - var momentumDistanceY = z.velocity.y * momentumDurationY; - var newPositionY = z.image.currentY + momentumDistanceY; - - //Fix duration - if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x); - if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y); - var momentumDuration = Math.max(momentumDurationX, momentumDurationY); - - z.image.currentX = newPositionX; - z.image.currentY = newPositionY; - - // Define if we need image drag - var scaledWidth = z.image.width * z.scale; - var scaledHeight = z.image.height * z.scale; - z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0); - z.image.maxX = -z.image.minX; - z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0); - z.image.maxY = -z.image.minY; - z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX); - z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY); - - z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)'); - }, - onTransitionEnd: function (s) { - var z = s.zoom; - if (z.gesture.slide && s.previousIndex !== s.activeIndex) { - z.gesture.image.transform('translate3d(0,0,0) scale(1)'); - z.gesture.imageWrap.transform('translate3d(0,0,0)'); - z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined; - z.scale = z.currentScale = 1; - } - }, - // Toggle Zoom - toggleZoom: function (s, e) { - var z = s.zoom; - if (!z.gesture.slide) { - z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex); - z.gesture.image = z.gesture.slide.find('img, svg, canvas'); - z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass); - } - if (!z.gesture.image || z.gesture.image.length === 0) return; - - var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight; - - if (typeof z.image.touchesStart.x === 'undefined' && e) { - touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; - touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; - } - else { - touchX = z.image.touchesStart.x; - touchY = z.image.touchesStart.y; - } - - if (z.scale && z.scale !== 1) { - // Zoom Out - z.scale = z.currentScale = 1; - z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)'); - z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)'); - z.gesture.slide = undefined; - } - else { - // Zoom In - z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax; - if (e) { - slideWidth = z.gesture.slide[0].offsetWidth; - slideHeight = z.gesture.slide[0].offsetHeight; - offsetX = z.gesture.slide.offset().left; - offsetY = z.gesture.slide.offset().top; - diffX = offsetX + slideWidth/2 - touchX; - diffY = offsetY + slideHeight/2 - touchY; - - imageWidth = z.gesture.image[0].offsetWidth; - imageHeight = z.gesture.image[0].offsetHeight; - scaledWidth = imageWidth * z.scale; - scaledHeight = imageHeight * z.scale; - - translateMinX = Math.min((slideWidth / 2 - scaledWidth / 2), 0); - translateMinY = Math.min((slideHeight / 2 - scaledHeight / 2), 0); - translateMaxX = -translateMinX; - translateMaxY = -translateMinY; - - translateX = diffX * z.scale; - translateY = diffY * z.scale; - - if (translateX < translateMinX) { - translateX = translateMinX; - } - if (translateX > translateMaxX) { - translateX = translateMaxX; - } - - if (translateY < translateMinY) { - translateY = translateMinY; - } - if (translateY > translateMaxY) { - translateY = translateMaxY; - } - } - else { - translateX = 0; - translateY = 0; - } - z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)'); - z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')'); - } - }, - // Attach/Detach Events - attachEvents: function (detach) { - var action = detach ? 'off' : 'on'; - - if (s.params.zoom) { - var target = s.slides; - var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false; - // Scale image - if (s.support.gestures) { - s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener); - s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener); - s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener); - } - else if (s.touchEvents.start === 'touchstart') { - s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener); - s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener); - s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener); - } - - // Move image - s[action]('touchStart', s.zoom.onTouchStart); - s.slides.each(function (index, slide){ - if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) { - $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove); - } - }); - s[action]('touchEnd', s.zoom.onTouchEnd); - - // Scale Out - s[action]('transitionEnd', s.zoom.onTransitionEnd); - if (s.params.zoomToggle) { - s.on('doubleTap', s.zoom.toggleZoom); - } - } - }, - init: function () { - s.zoom.attachEvents(); - }, - destroy: function () { - s.zoom.attachEvents(true); - } - }; - - - /*========================= - Plugins API. Collect all and init all plugins - ===========================*/ - s._plugins = []; - for (var plugin in s.plugins) { - var p = s.plugins[plugin](s, s.params[plugin]); - if (p) s._plugins.push(p); - } - // Method to call all plugins event/method - s.callPlugins = function (eventName) { - for (var i = 0; i < s._plugins.length; i++) { - if (eventName in s._plugins[i]) { - s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - } - }; - - - /*========================= - Events/Callbacks/Plugins Emitter - ===========================*/ - function normalizeEventName (eventName) { - if (eventName.indexOf('on') !== 0) { - if (eventName[0] !== eventName[0].toUpperCase()) { - eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1); - } - else { - eventName = 'on' + eventName; - } - } - return eventName; - } - s.emitterEventListeners = { - - }; - s.emit = function (eventName) { - // Trigger callbacks - if (s.params[eventName]) { - s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - var i; - // Trigger events - if (s.emitterEventListeners[eventName]) { - for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { - s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - } - } - // Trigger plugins - if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); - }; - s.on = function (eventName, handler) { - eventName = normalizeEventName(eventName); - if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = []; - s.emitterEventListeners[eventName].push(handler); - return s; - }; - s.off = function (eventName, handler) { - var i; - eventName = normalizeEventName(eventName); - if (typeof handler === 'undefined') { - // Remove all handlers for such event - s.emitterEventListeners[eventName] = []; - return s; - } - if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return; - for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { - if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1); - } - return s; - }; - s.once = function (eventName, handler) { - eventName = normalizeEventName(eventName); - var _handler = function () { - handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); - s.off(eventName, _handler); - }; - s.on(eventName, _handler); - return s; - }; - - - // Accessibility tools - s.a11y = { - makeFocusable: function ($el) { - $el.attr('tabIndex', '0'); - return $el; - }, - addRole: function ($el, role) { - $el.attr('role', role); - return $el; - }, - - addLabel: function ($el, label) { - $el.attr('aria-label', label); - return $el; - }, - - disable: function ($el) { - $el.attr('aria-disabled', true); - return $el; - }, - - enable: function ($el) { - $el.attr('aria-disabled', false); - return $el; - }, - - onEnterKey: function (event) { - if (event.keyCode !== 13) return; - if ($(event.target).is(s.params.nextButton)) { - s.onClickNext(event); - if (s.isEnd) { - s.a11y.notify(s.params.lastSlideMessage); - } - else { - s.a11y.notify(s.params.nextSlideMessage); - } - } - else if ($(event.target).is(s.params.prevButton)) { - s.onClickPrev(event); - if (s.isBeginning) { - s.a11y.notify(s.params.firstSlideMessage); - } - else { - s.a11y.notify(s.params.prevSlideMessage); - } - } - if ($(event.target).is('.' + s.params.bulletClass)) { - $(event.target)[0].click(); - } - }, - - liveRegion: $('<span class="' + s.params.notificationClass + '" aria-live="assertive" aria-atomic="true"></span>'), - - notify: function (message) { - var notification = s.a11y.liveRegion; - if (notification.length === 0) return; - notification.html(''); - notification.html(message); - }, - init: function () { - // Setup accessibility - if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { - s.a11y.makeFocusable(s.nextButton); - s.a11y.addRole(s.nextButton, 'button'); - s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage); - } - if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { - s.a11y.makeFocusable(s.prevButton); - s.a11y.addRole(s.prevButton, 'button'); - s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage); - } - - $(s.container).append(s.a11y.liveRegion); - }, - initPagination: function () { - if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) { - s.bullets.each(function () { - var bullet = $(this); - s.a11y.makeFocusable(bullet); - s.a11y.addRole(bullet, 'button'); - s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1)); - }); - } - }, - destroy: function () { - if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove(); - } - }; - - - /*========================= - Init/Destroy - ===========================*/ - s.init = function () { - if (s.params.loop) s.createLoop(); - s.updateContainerSize(); - s.updateSlidesSize(); - s.updatePagination(); - if (s.params.scrollbar && s.scrollbar) { - s.scrollbar.set(); - if (s.params.scrollbarDraggable) { - s.scrollbar.enableDraggable(); - } - } - if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { - if (!s.params.loop) s.updateProgress(); - s.effects[s.params.effect].setTranslate(); - } - if (s.params.loop) { - s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit); - } - else { - s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit); - if (s.params.initialSlide === 0) { - if (s.parallax && s.params.parallax) s.parallax.setTranslate(); - if (s.lazy && s.params.lazyLoading) { - s.lazy.load(); - s.lazy.initialImageLoaded = true; - } - } - } - s.attachEvents(); - if (s.params.observer && s.support.observer) { - s.initObservers(); - } - if (s.params.preloadImages && !s.params.lazyLoading) { - s.preloadImages(); - } - if (s.params.zoom && s.zoom) { - s.zoom.init(); - } - if (s.params.autoplay) { - s.startAutoplay(); - } - if (s.params.keyboardControl) { - if (s.enableKeyboardControl) s.enableKeyboardControl(); - } - if (s.params.mousewheelControl) { - if (s.enableMousewheelControl) s.enableMousewheelControl(); - } - // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history - if (s.params.hashnavReplaceState) { - s.params.replaceState = s.params.hashnavReplaceState; - } - if (s.params.history) { - if (s.history) s.history.init(); - } - if (s.params.hashnav) { - if (s.hashnav) s.hashnav.init(); - } - if (s.params.a11y && s.a11y) s.a11y.init(); - s.emit('onInit', s); - }; - - // Cleanup dynamic styles - s.cleanupStyles = function () { - // Container - s.container.removeClass(s.classNames.join(' ')).removeAttr('style'); - - // Wrapper - s.wrapper.removeAttr('style'); - - // Slides - if (s.slides && s.slides.length) { - s.slides - .removeClass([ - s.params.slideVisibleClass, - s.params.slideActiveClass, - s.params.slideNextClass, - s.params.slidePrevClass - ].join(' ')) - .removeAttr('style') - .removeAttr('data-swiper-column') - .removeAttr('data-swiper-row'); - } - - // Pagination/Bullets - if (s.paginationContainer && s.paginationContainer.length) { - s.paginationContainer.removeClass(s.params.paginationHiddenClass); - } - if (s.bullets && s.bullets.length) { - s.bullets.removeClass(s.params.bulletActiveClass); - } - - // Buttons - if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); - if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); - - // Scrollbar - if (s.params.scrollbar && s.scrollbar) { - if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style'); - if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style'); - } - }; - - // Destroy - s.destroy = function (deleteInstance, cleanupStyles) { - // Detach evebts - s.detachEvents(); - // Stop autoplay - s.stopAutoplay(); - // Disable draggable - if (s.params.scrollbar && s.scrollbar) { - if (s.params.scrollbarDraggable) { - s.scrollbar.disableDraggable(); - } - } - // Destroy loop - if (s.params.loop) { - s.destroyLoop(); - } - // Cleanup styles - if (cleanupStyles) { - s.cleanupStyles(); - } - // Disconnect observer - s.disconnectObservers(); - - // Destroy zoom - if (s.params.zoom && s.zoom) { - s.zoom.destroy(); - } - // Disable keyboard/mousewheel - if (s.params.keyboardControl) { - if (s.disableKeyboardControl) s.disableKeyboardControl(); - } - if (s.params.mousewheelControl) { - if (s.disableMousewheelControl) s.disableMousewheelControl(); - } - // Disable a11y - if (s.params.a11y && s.a11y) s.a11y.destroy(); - // Delete history popstate - if (s.params.history && !s.params.replaceState) { - window.removeEventListener('popstate', s.history.setHistoryPopState); - } - if (s.params.hashnav && s.hashnav) { - s.hashnav.destroy(); - } - // Destroy callback - s.emit('onDestroy'); - // Delete instance - if (deleteInstance !== false) s = null; - }; - - s.init(); - - - - // Return swiper instance - return s; - }; - - - /*================================================== - Prototype - ====================================================*/ - Swiper.prototype = { - isSafari: (function () { - var ua = window.navigator.userAgent.toLowerCase(); - return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); - })(), - isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent), - isArray: function (arr) { - return Object.prototype.toString.apply(arr) === '[object Array]'; - }, - /*================================================== - Browser - ====================================================*/ - browser: { - ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled, - ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1), - lteIE9: (function() { - // create temporary DIV - var div = document.createElement('div'); - // add content to tmp DIV which is wrapped into the IE HTML conditional statement - div.innerHTML = '<!--[if lte IE 9]><i></i><![endif]-->'; - // return true / false value based on what will browser render - return div.getElementsByTagName('i').length === 1; - })() - }, - /*================================================== - Devices - ====================================================*/ - device: (function () { - var ua = window.navigator.userAgent; - var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); - var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); - var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); - var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); - return { - ios: ipad || iphone || ipod, - android: android - }; - })(), - /*================================================== - Feature Detection - ====================================================*/ - support: { - touch : (window.Modernizr && Modernizr.touch === true) || (function () { - return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); - })(), - - transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () { - var div = document.createElement('div').style; - return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); - })(), - - flexbox: (function () { - var div = document.createElement('div').style; - var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); - for (var i = 0; i < styles.length; i++) { - if (styles[i] in div) return true; - } - })(), - - observer: (function () { - return ('MutationObserver' in window || 'WebkitMutationObserver' in window); - })(), - - passiveListener: (function () { - var supportsPassive = false; - try { - var opts = Object.defineProperty({}, 'passive', { - get: function() { - supportsPassive = true; - } - }); - window.addEventListener('testPassiveListener', null, opts); - } catch (e) {} - return supportsPassive; - })(), - - gestures: (function () { - return 'ongesturestart' in window; - })() - }, - /*================================================== - Plugins - ====================================================*/ - plugins: {} - }; - - - /*=========================== - Dom7 Library - ===========================*/ - var Dom7 = (function () { - var Dom7 = function (arr) { - var _this = this, i = 0; - // Create array-like object - for (i = 0; i < arr.length; i++) { - _this[i] = arr[i]; - } - _this.length = arr.length; - // Return collection with methods - return this; - }; - var $ = function (selector, context) { - var arr = [], i = 0; - if (selector && !context) { - if (selector instanceof Dom7) { - return selector; - } - } - if (selector) { - // String - if (typeof selector === 'string') { - var els, tempParent, html = selector.trim(); - if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { - var toCreate = 'div'; - if (html.indexOf('<li') === 0) toCreate = 'ul'; - if (html.indexOf('<tr') === 0) toCreate = 'tbody'; - if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr'; - if (html.indexOf('<tbody') === 0) toCreate = 'table'; - if (html.indexOf('<option') === 0) toCreate = 'select'; - tempParent = document.createElement(toCreate); - tempParent.innerHTML = selector; - for (i = 0; i < tempParent.childNodes.length; i++) { - arr.push(tempParent.childNodes[i]); - } - } - else { - if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) { - // Pure ID selector - els = [document.getElementById(selector.split('#')[1])]; - } - else { - // Other selectors - els = (context || document).querySelectorAll(selector); - } - for (i = 0; i < els.length; i++) { - if (els[i]) arr.push(els[i]); - } - } - } - // Node/element - else if (selector.nodeType || selector === window || selector === document) { - arr.push(selector); - } - //Array of elements or instance of Dom - else if (selector.length > 0 && selector[0].nodeType) { - for (i = 0; i < selector.length; i++) { - arr.push(selector[i]); - } - } - } - return new Dom7(arr); - }; - Dom7.prototype = { - // Classes and attriutes - addClass: function (className) { - if (typeof className === 'undefined') { - return this; - } - var classes = className.split(' '); - for (var i = 0; i < classes.length; i++) { - for (var j = 0; j < this.length; j++) { - this[j].classList.add(classes[i]); - } - } - return this; - }, - removeClass: function (className) { - var classes = className.split(' '); - for (var i = 0; i < classes.length; i++) { - for (var j = 0; j < this.length; j++) { - this[j].classList.remove(classes[i]); - } - } - return this; - }, - hasClass: function (className) { - if (!this[0]) return false; - else return this[0].classList.contains(className); - }, - toggleClass: function (className) { - var classes = className.split(' '); - for (var i = 0; i < classes.length; i++) { - for (var j = 0; j < this.length; j++) { - this[j].classList.toggle(classes[i]); - } - } - return this; - }, - attr: function (attrs, value) { - if (arguments.length === 1 && typeof attrs === 'string') { - // Get attr - if (this[0]) return this[0].getAttribute(attrs); - else return undefined; - } - else { - // Set attrs - for (var i = 0; i < this.length; i++) { - if (arguments.length === 2) { - // String - this[i].setAttribute(attrs, value); - } - else { - // Object - for (var attrName in attrs) { - this[i][attrName] = attrs[attrName]; - this[i].setAttribute(attrName, attrs[attrName]); - } - } - } - return this; - } - }, - removeAttr: function (attr) { - for (var i = 0; i < this.length; i++) { - this[i].removeAttribute(attr); - } - return this; - }, - data: function (key, value) { - if (typeof value === 'undefined') { - // Get value - if (this[0]) { - var dataKey = this[0].getAttribute('data-' + key); - if (dataKey) return dataKey; - else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key]; - else return undefined; - } - else return undefined; - } - else { - // Set value - for (var i = 0; i < this.length; i++) { - var el = this[i]; - if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {}; - el.dom7ElementDataStorage[key] = value; - } - return this; - } - }, - // Transforms - transform : function (transform) { - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; - } - return this; - }, - transition: function (duration) { - if (typeof duration !== 'string') { - duration = duration + 'ms'; - } - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; - } - return this; - }, - //Events - on: function (eventName, targetSelector, listener, capture) { - function handleLiveEvent(e) { - var target = e.target; - if ($(target).is(targetSelector)) listener.call(target, e); - else { - var parents = $(target).parents(); - for (var k = 0; k < parents.length; k++) { - if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e); - } - } - } - var events = eventName.split(' '); - var i, j; - for (i = 0; i < this.length; i++) { - if (typeof targetSelector === 'function' || targetSelector === false) { - // Usual events - if (typeof targetSelector === 'function') { - listener = arguments[1]; - capture = arguments[2] || false; - } - for (j = 0; j < events.length; j++) { - this[i].addEventListener(events[j], listener, capture); - } - } - else { - //Live events - for (j = 0; j < events.length; j++) { - if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = []; - this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent}); - this[i].addEventListener(events[j], handleLiveEvent, capture); - } - } - } - - return this; - }, - off: function (eventName, targetSelector, listener, capture) { - var events = eventName.split(' '); - for (var i = 0; i < events.length; i++) { - for (var j = 0; j < this.length; j++) { - if (typeof targetSelector === 'function' || targetSelector === false) { - // Usual events - if (typeof targetSelector === 'function') { - listener = arguments[1]; - capture = arguments[2] || false; - } - this[j].removeEventListener(events[i], listener, capture); - } - else { - // Live event - if (this[j].dom7LiveListeners) { - for (var k = 0; k < this[j].dom7LiveListeners.length; k++) { - if (this[j].dom7LiveListeners[k].listener === listener) { - this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture); - } - } - } - } - } - } - return this; - }, - once: function (eventName, targetSelector, listener, capture) { - var dom = this; - if (typeof targetSelector === 'function') { - targetSelector = false; - listener = arguments[1]; - capture = arguments[2]; - } - function proxy(e) { - listener(e); - dom.off(eventName, targetSelector, proxy, capture); - } - dom.on(eventName, targetSelector, proxy, capture); - }, - trigger: function (eventName, eventData) { - for (var i = 0; i < this.length; i++) { - var evt; - try { - evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true}); - } - catch (e) { - evt = document.createEvent('Event'); - evt.initEvent(eventName, true, true); - evt.detail = eventData; - } - this[i].dispatchEvent(evt); - } - return this; - }, - transitionEnd: function (callback) { - var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], - i, j, dom = this; - function fireCallBack(e) { - /*jshint validthis:true */ - if (e.target !== this) return; - callback.call(this, e); - for (i = 0; i < events.length; i++) { - dom.off(events[i], fireCallBack); - } - } - if (callback) { - for (i = 0; i < events.length; i++) { - dom.on(events[i], fireCallBack); - } - } - return this; - }, - // Sizing/Styles - width: function () { - if (this[0] === window) { - return window.innerWidth; - } - else { - if (this.length > 0) { - return parseFloat(this.css('width')); - } - else { - return null; - } - } - }, - outerWidth: function (includeMargins) { - if (this.length > 0) { - if (includeMargins) - return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left')); - else - return this[0].offsetWidth; - } - else return null; - }, - height: function () { - if (this[0] === window) { - return window.innerHeight; - } - else { - if (this.length > 0) { - return parseFloat(this.css('height')); - } - else { - return null; - } - } - }, - outerHeight: function (includeMargins) { - if (this.length > 0) { - if (includeMargins) - return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom')); - else - return this[0].offsetHeight; - } - else return null; - }, - offset: function () { - if (this.length > 0) { - var el = this[0]; - var box = el.getBoundingClientRect(); - var body = document.body; - var clientTop = el.clientTop || body.clientTop || 0; - var clientLeft = el.clientLeft || body.clientLeft || 0; - var scrollTop = window.pageYOffset || el.scrollTop; - var scrollLeft = window.pageXOffset || el.scrollLeft; - return { - top: box.top + scrollTop - clientTop, - left: box.left + scrollLeft - clientLeft - }; - } - else { - return null; - } - }, - css: function (props, value) { - var i; - if (arguments.length === 1) { - if (typeof props === 'string') { - if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props); - } - else { - for (i = 0; i < this.length; i++) { - for (var prop in props) { - this[i].style[prop] = props[prop]; - } - } - return this; - } - } - if (arguments.length === 2 && typeof props === 'string') { - for (i = 0; i < this.length; i++) { - this[i].style[props] = value; - } - return this; - } - return this; - }, - - //Dom manipulation - each: function (callback) { - for (var i = 0; i < this.length; i++) { - callback.call(this[i], i, this[i]); - } - return this; - }, - html: function (html) { - if (typeof html === 'undefined') { - return this[0] ? this[0].innerHTML : undefined; - } - else { - for (var i = 0; i < this.length; i++) { - this[i].innerHTML = html; - } - return this; - } - }, - text: function (text) { - if (typeof text === 'undefined') { - if (this[0]) { - return this[0].textContent.trim(); - } - else return null; - } - else { - for (var i = 0; i < this.length; i++) { - this[i].textContent = text; - } - return this; - } - }, - is: function (selector) { - if (!this[0]) return false; - var compareWith, i; - if (typeof selector === 'string') { - var el = this[0]; - if (el === document) return selector === document; - if (el === window) return selector === window; - - if (el.matches) return el.matches(selector); - else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); - else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector); - else if (el.msMatchesSelector) return el.msMatchesSelector(selector); - else { - compareWith = $(selector); - for (i = 0; i < compareWith.length; i++) { - if (compareWith[i] === this[0]) return true; - } - return false; - } - } - else if (selector === document) return this[0] === document; - else if (selector === window) return this[0] === window; - else { - if (selector.nodeType || selector instanceof Dom7) { - compareWith = selector.nodeType ? [selector] : selector; - for (i = 0; i < compareWith.length; i++) { - if (compareWith[i] === this[0]) return true; - } - return false; - } - return false; - } - - }, - index: function () { - if (this[0]) { - var child = this[0]; - var i = 0; - while ((child = child.previousSibling) !== null) { - if (child.nodeType === 1) i++; - } - return i; - } - else return undefined; - }, - eq: function (index) { - if (typeof index === 'undefined') return this; - var length = this.length; - var returnIndex; - if (index > length - 1) { - return new Dom7([]); - } - if (index < 0) { - returnIndex = length + index; - if (returnIndex < 0) return new Dom7([]); - else return new Dom7([this[returnIndex]]); - } - return new Dom7([this[index]]); - }, - append: function (newChild) { - var i, j; - for (i = 0; i < this.length; i++) { - if (typeof newChild === 'string') { - var tempDiv = document.createElement('div'); - tempDiv.innerHTML = newChild; - while (tempDiv.firstChild) { - this[i].appendChild(tempDiv.firstChild); - } - } - else if (newChild instanceof Dom7) { - for (j = 0; j < newChild.length; j++) { - this[i].appendChild(newChild[j]); - } - } - else { - this[i].appendChild(newChild); - } - } - return this; - }, - prepend: function (newChild) { - var i, j; - for (i = 0; i < this.length; i++) { - if (typeof newChild === 'string') { - var tempDiv = document.createElement('div'); - tempDiv.innerHTML = newChild; - for (j = tempDiv.childNodes.length - 1; j >= 0; j--) { - this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); - } - // this[i].insertAdjacentHTML('afterbegin', newChild); - } - else if (newChild instanceof Dom7) { - for (j = 0; j < newChild.length; j++) { - this[i].insertBefore(newChild[j], this[i].childNodes[0]); - } - } - else { - this[i].insertBefore(newChild, this[i].childNodes[0]); - } - } - return this; - }, - insertBefore: function (selector) { - var before = $(selector); - for (var i = 0; i < this.length; i++) { - if (before.length === 1) { - before[0].parentNode.insertBefore(this[i], before[0]); - } - else if (before.length > 1) { - for (var j = 0; j < before.length; j++) { - before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]); - } - } - } - }, - insertAfter: function (selector) { - var after = $(selector); - for (var i = 0; i < this.length; i++) { - if (after.length === 1) { - after[0].parentNode.insertBefore(this[i], after[0].nextSibling); - } - else if (after.length > 1) { - for (var j = 0; j < after.length; j++) { - after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling); - } - } - } - }, - next: function (selector) { - if (this.length > 0) { - if (selector) { - if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]); - else return new Dom7([]); - } - else { - if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]); - else return new Dom7([]); - } - } - else return new Dom7([]); - }, - nextAll: function (selector) { - var nextEls = []; - var el = this[0]; - if (!el) return new Dom7([]); - while (el.nextElementSibling) { - var next = el.nextElementSibling; - if (selector) { - if($(next).is(selector)) nextEls.push(next); - } - else nextEls.push(next); - el = next; - } - return new Dom7(nextEls); - }, - prev: function (selector) { - if (this.length > 0) { - if (selector) { - if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]); - else return new Dom7([]); - } - else { - if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]); - else return new Dom7([]); - } - } - else return new Dom7([]); - }, - prevAll: function (selector) { - var prevEls = []; - var el = this[0]; - if (!el) return new Dom7([]); - while (el.previousElementSibling) { - var prev = el.previousElementSibling; - if (selector) { - if($(prev).is(selector)) prevEls.push(prev); - } - else prevEls.push(prev); - el = prev; - } - return new Dom7(prevEls); - }, - parent: function (selector) { - var parents = []; - for (var i = 0; i < this.length; i++) { - if (selector) { - if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); - } - else { - parents.push(this[i].parentNode); - } - } - return $($.unique(parents)); - }, - parents: function (selector) { - var parents = []; - for (var i = 0; i < this.length; i++) { - var parent = this[i].parentNode; - while (parent) { - if (selector) { - if ($(parent).is(selector)) parents.push(parent); - } - else { - parents.push(parent); - } - parent = parent.parentNode; - } - } - return $($.unique(parents)); - }, - find : function (selector) { - var foundElements = []; - for (var i = 0; i < this.length; i++) { - var found = this[i].querySelectorAll(selector); - for (var j = 0; j < found.length; j++) { - foundElements.push(found[j]); - } - } - return new Dom7(foundElements); - }, - children: function (selector) { - var children = []; - for (var i = 0; i < this.length; i++) { - var childNodes = this[i].childNodes; - - for (var j = 0; j < childNodes.length; j++) { - if (!selector) { - if (childNodes[j].nodeType === 1) children.push(childNodes[j]); - } - else { - if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]); - } - } - } - return new Dom7($.unique(children)); - }, - remove: function () { - for (var i = 0; i < this.length; i++) { - if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); - } - return this; - }, - add: function () { - var dom = this; - var i, j; - for (i = 0; i < arguments.length; i++) { - var toAdd = $(arguments[i]); - for (j = 0; j < toAdd.length; j++) { - dom[dom.length] = toAdd[j]; - dom.length++; - } - } - return dom; - } - }; - $.fn = Dom7.prototype; - $.unique = function (arr) { - var unique = []; - for (var i = 0; i < arr.length; i++) { - if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]); - } - return unique; - }; - - return $; - })(); - - - /*=========================== - Get Dom libraries - ===========================*/ - var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7']; - for (var i = 0; i < swiperDomPlugins.length; i++) { - if (window[swiperDomPlugins[i]]) { - addLibraryPlugin(window[swiperDomPlugins[i]]); - } - } - // Required DOM Plugins - var domLib; - if (typeof Dom7 === 'undefined') { - domLib = window.Dom7 || window.Zepto || window.jQuery; - } - else { - domLib = Dom7; - } - - - /*=========================== - Add .swiper plugin from Dom libraries - ===========================*/ - function addLibraryPlugin(lib) { - lib.fn.swiper = function (params) { - var firstInstance; - lib(this).each(function () { - var s = new Swiper(this, params); - if (!firstInstance) firstInstance = s; - }); - return firstInstance; - }; - } - - if (domLib) { - if (!('transitionEnd' in domLib.fn)) { - domLib.fn.transitionEnd = function (callback) { - var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], - i, j, dom = this; - function fireCallBack(e) { - /*jshint validthis:true */ - if (e.target !== this) return; - callback.call(this, e); - for (i = 0; i < events.length; i++) { - dom.off(events[i], fireCallBack); - } - } - if (callback) { - for (i = 0; i < events.length; i++) { - dom.on(events[i], fireCallBack); - } - } - return this; - }; - } - if (!('transform' in domLib.fn)) { - domLib.fn.transform = function (transform) { - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; - } - return this; - }; - } - if (!('transition' in domLib.fn)) { - domLib.fn.transition = function (duration) { - if (typeof duration !== 'string') { - duration = duration + 'ms'; - } - for (var i = 0; i < this.length; i++) { - var elStyle = this[i].style; - elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; - } - return this; - }; - } - if (!('outerWidth' in domLib.fn)) { - domLib.fn.outerWidth = function (includeMargins) { - if (this.length > 0) { - if (includeMargins) - return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left')); - else - return this[0].offsetWidth; - } - else return null; - }; - } - } - - - window.Swiper = Swiper; -})(); - -/*=========================== -Swiper AMD Export -===========================*/ -if (true) -{ - module.exports = window.Swiper; -} -else if (typeof define === 'function' && define.amd) { - define([], function () { - 'use strict'; - return window.Swiper; - }); -} - - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"))) - -/***/ }), - -/***/ "../../../../../node_modules/timers-browserify/main.js": -/***/ (function(module, exports, __webpack_require__) { - -var apply = Function.prototype.apply; - -// DOM APIs, for completeness - -exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); -}; -exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); -}; -exports.clearTimeout = -exports.clearInterval = function(timeout) { - if (timeout) { - timeout.close(); - } -}; - -function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; -} -Timeout.prototype.unref = Timeout.prototype.ref = function() {}; -Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); -}; - -// Does not start the time, just sets up the members needed. -exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; -}; - -exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; -}; - -exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } -}; - -// setimmediate attaches itself to the global object -__webpack_require__("../../../../../node_modules/setimmediate/setImmediate.js"); -exports.setImmediate = setImmediate; -exports.clearImmediate = clearImmediate; - - -/***/ }), - -/***/ "../../../../../node_modules/waypoints/lib/noframework.waypoints.min.js": -/***/ (function(module, exports) { - -/*! -Waypoints - 4.0.1 -Copyright © 2011-2016 Caleb Troughton -Licensed under the MIT license. -https://github.com/imakewebthings/waypoints/blob/master/licenses.txt -*/ -!function(){"use strict";function t(n){if(!n)throw new Error("No options passed to Waypoint constructor");if(!n.element)throw new Error("No element option passed to Waypoint constructor");if(!n.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,n),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=n.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var n in i)e.push(i[n]);for(var o=0,r=e.length;r>o;o++)e[o][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.Context.refreshAll();for(var e in i)i[e].enabled=!0;return this},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=o.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,n[t.waypointContextKey]=this,i+=1,o.windowContext||(o.windowContext=!0,o.windowContext=new e(window)),this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,n={},o=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical),i=this.element==this.element.window;t&&e&&!i&&(this.adapter.off(".waypoints"),delete n[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,o.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||o.isTouch)&&(e.didScroll=!0,o.requestAnimationFrame(t))})},e.prototype.handleResize=function(){o.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var n=e[i],o=n.newScroll>n.oldScroll,r=o?n.forward:n.backward;for(var s in this.waypoints[i]){var l=this.waypoints[i][s];if(null!==l.triggerPoint){var a=n.oldScroll<l.triggerPoint,h=n.newScroll>=l.triggerPoint,p=a&&h,u=!a&&!h;(p||u)&&(l.queueTrigger(r),t[l.group.id]=l.group)}}}for(var d in t)t[d].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?o.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?o.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var n=0,o=t.length;o>n;n++)t[n].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),n={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var l in this.waypoints[r]){var a,h,p,u,d,f=this.waypoints[r][l],c=f.options.offset,w=f.triggerPoint,y=0,g=null==w;f.element!==f.element.window&&(y=f.adapter.offset()[s.offsetProp]),"function"==typeof c?c=c.apply(f):"string"==typeof c&&(c=parseFloat(c),f.options.offset.indexOf("%")>-1&&(c=Math.ceil(s.contextDimension*c/100))),a=s.contextScroll-s.contextOffset,f.triggerPoint=Math.floor(y+a-c),h=w<s.oldScroll,p=f.triggerPoint>=s.oldScroll,u=h&&p,d=!h&&!p,!g&&u?(f.queueTrigger(s.backward),n[f.group.id]=f.group):!g&&d?(f.queueTrigger(s.forward),n[f.group.id]=f.group):g&&s.oldScroll>=f.triggerPoint&&(f.queueTrigger(s.forward),n[f.group.id]=f.group)}}return o.requestAnimationFrame(function(){for(var t in n)n[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in n)n[t].refresh()},e.findByElement=function(t){return n[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},o.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},o.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),n[this.axis][this.name]=this}var n={vertical:{},horizontal:{}},o=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var n=this.triggerQueues[i],o="up"===i||"left"===i;n.sort(o?e:t);for(var r=0,s=n.length;s>r;r+=1){var l=n[r];(l.options.continuous||r===n.length-1)&&l.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=o.Adapter.inArray(e,this.waypoints),n=i===this.waypoints.length-1;return n?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=o.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=o.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return n[t.axis][t.name]||new i(t)},o.Group=i}(),function(){"use strict";function t(t){return t===t.window}function e(e){return t(e)?e:e.defaultView}function i(t){this.element=t,this.handlers={}}var n=window.Waypoint;i.prototype.innerHeight=function(){var e=t(this.element);return e?this.element.innerHeight:this.element.clientHeight},i.prototype.innerWidth=function(){var e=t(this.element);return e?this.element.innerWidth:this.element.clientWidth},i.prototype.off=function(t,e){function i(t,e,i){for(var n=0,o=e.length-1;o>n;n++){var r=e[n];i&&i!==r||t.removeEventListener(r)}}var n=t.split("."),o=n[0],r=n[1],s=this.element;if(r&&this.handlers[r]&&o)i(s,this.handlers[r][o],e),this.handlers[r][o]=[];else if(o)for(var l in this.handlers)i(s,this.handlers[l][o]||[],e),this.handlers[l][o]=[];else if(r&&this.handlers[r]){for(var a in this.handlers[r])i(s,this.handlers[r][a],e);this.handlers[r]={}}},i.prototype.offset=function(){if(!this.element.ownerDocument)return null;var t=this.element.ownerDocument.documentElement,i=e(this.element.ownerDocument),n={top:0,left:0};return this.element.getBoundingClientRect&&(n=this.element.getBoundingClientRect()),{top:n.top+i.pageYOffset-t.clientTop,left:n.left+i.pageXOffset-t.clientLeft}},i.prototype.on=function(t,e){var i=t.split("."),n=i[0],o=i[1]||"__default",r=this.handlers[o]=this.handlers[o]||{},s=r[n]=r[n]||[];s.push(e),this.element.addEventListener(n,e)},i.prototype.outerHeight=function(e){var i,n=this.innerHeight();return e&&!t(this.element)&&(i=window.getComputedStyle(this.element),n+=parseInt(i.marginTop,10),n+=parseInt(i.marginBottom,10)),n},i.prototype.outerWidth=function(e){var i,n=this.innerWidth();return e&&!t(this.element)&&(i=window.getComputedStyle(this.element),n+=parseInt(i.marginLeft,10),n+=parseInt(i.marginRight,10)),n},i.prototype.scrollLeft=function(){var t=e(this.element);return t?t.pageXOffset:this.element.scrollLeft},i.prototype.scrollTop=function(){var t=e(this.element);return t?t.pageYOffset:this.element.scrollTop},i.extend=function(){function t(t,e){if("object"==typeof t&&"object"==typeof e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}for(var e=Array.prototype.slice.call(arguments),i=1,n=e.length;n>i;i++)t(e[0],e[i]);return e[0]},i.inArray=function(t,e,i){return null==e?-1:e.indexOf(t,i)},i.isEmptyObject=function(t){for(var e in t)return!1;return!0},n.adapters.push({name:"noframework",Adapter:i}),n.Adapter=i}(); - -/***/ }), - -/***/ "../../../../../node_modules/waypoints/lib/shortcuts/inview.min.js": -/***/ (function(module, exports) { - -/*! -Waypoints Inview Shortcut - 4.0.1 -Copyright © 2011-2016 Caleb Troughton -Licensed under the MIT license. -https://github.com/imakewebthings/waypoints/blob/master/licenses.txt -*/ -!function(){"use strict";function t(){}function e(t){this.options=i.Adapter.extend({},e.defaults,t),this.axis=this.options.horizontal?"horizontal":"vertical",this.waypoints=[],this.element=this.options.element,this.createWaypoints()}var i=window.Waypoint;e.prototype.createWaypoints=function(){for(var t={vertical:[{down:"enter",up:"exited",offset:"100%"},{down:"entered",up:"exit",offset:"bottom-in-view"},{down:"exit",up:"entered",offset:0},{down:"exited",up:"enter",offset:function(){return-this.adapter.outerHeight()}}],horizontal:[{right:"enter",left:"exited",offset:"100%"},{right:"entered",left:"exit",offset:"right-in-view"},{right:"exit",left:"entered",offset:0},{right:"exited",left:"enter",offset:function(){return-this.adapter.outerWidth()}}]},e=0,i=t[this.axis].length;i>e;e++){var n=t[this.axis][e];this.createWaypoint(n)}},e.prototype.createWaypoint=function(t){var e=this;this.waypoints.push(new i({context:this.options.context,element:this.options.element,enabled:this.options.enabled,handler:function(t){return function(i){e.options[t[i]].call(e,i)}}(t),offset:t.offset,horizontal:this.options.horizontal}))},e.prototype.destroy=function(){for(var t=0,e=this.waypoints.length;e>t;t++)this.waypoints[t].destroy();this.waypoints=[]},e.prototype.disable=function(){for(var t=0,e=this.waypoints.length;e>t;t++)this.waypoints[t].disable()},e.prototype.enable=function(){for(var t=0,e=this.waypoints.length;e>t;t++)this.waypoints[t].enable()},e.defaults={context:window,enabled:!0,enter:t,entered:t,exit:t,exited:t},i.Inview=e}(); - -/***/ }), - -/***/ "../../../../../node_modules/waypoints/lib/shortcuts/sticky.min.js": -/***/ (function(module, exports) { - -/*! -Waypoints Sticky Element Shortcut - 4.0.1 -Copyright © 2011-2016 Caleb Troughton -Licensed under the MIT license. -https://github.com/imakewebthings/waypoints/blob/master/licenses.txt -*/ -!function(){"use strict";function t(s){this.options=e.extend({},i.defaults,t.defaults,s),this.element=this.options.element,this.$element=e(this.element),this.createWrapper(),this.createWaypoint()}var e=window.jQuery,i=window.Waypoint;t.prototype.createWaypoint=function(){var t=this.options.handler;this.waypoint=new i(e.extend({},this.options,{element:this.wrapper,handler:e.proxy(function(e){var i=this.options.direction.indexOf(e)>-1,s=i?this.$element.outerHeight(!0):"";this.$wrapper.height(s),this.$element.toggleClass(this.options.stuckClass,i),t&&t.call(this,e)},this)}))},t.prototype.createWrapper=function(){this.options.wrapper&&this.$element.wrap(this.options.wrapper),this.$wrapper=this.$element.parent(),this.wrapper=this.$wrapper[0]},t.prototype.destroy=function(){this.$element.parent()[0]===this.wrapper&&(this.waypoint.destroy(),this.$element.removeClass(this.options.stuckClass),this.options.wrapper&&this.$element.unwrap())},t.defaults={wrapper:'<div class="sticky-wrapper" />',stuckClass:"stuck",direction:"down right"},i.Sticky=t}(); - -/***/ }), - -/***/ "./fonts/icomoon.ttf": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "font/icomoon.bc02b6b6.ttf"; - -/***/ }), - -/***/ "./fonts/icomoon.woff": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "font/icomoon.74c810cf.woff"; - -/***/ }), - -/***/ "./img/bg-contact-location.jpg": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/bg-contact-location.84539770.jpg"; - -/***/ }), - -/***/ "./img/bg-dotted-focus.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/bg-dotted-focus.4833a119.png"; - -/***/ }), - -/***/ "./img/bg-dotted-line-red.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/bg-dotted-line-red.e040529d.png"; - -/***/ }), - -/***/ "./img/bg-dotted-line.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/bg-dotted-line.af50cb7c.png"; - -/***/ }), - -/***/ "./img/bg-scale.jpg": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/bg-scale.184a64b0.jpg"; - -/***/ }), - -/***/ "./img/icons/icon-attachment.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/icon-attachment.7cf02fca.png"; - -/***/ }), - -/***/ "./img/laptop.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/laptop.3696d7dc.png"; - -/***/ }), - -/***/ "./img/timeline-mask.png": -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__.p + "img/timeline-mask.14eaff58.png"; - -/***/ }), - -/***/ "./js/contact.js": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__["a"] = contact; -var mapsapi = __webpack_require__("../../../../../node_modules/google-maps-api/index.js")(ajax.apikey); -function contact() { - - // Mobile Detection - var Env = { - core: { - mobile: false, - assetsURL: ajax.ajax_var.template_directory_uri - } - }; - if (navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) Env.core.mobile = true; - - function new_map($el) { - - var $markers = $el.find('.marker'); - - var args = { - zoom: 8, - styles: [{ elementType: 'geometry', stylers: [{ color: '#f3f3f3' }] }, { elementType: 'labels.text.stroke', stylers: [{ color: '#ffffff' }] }, { elementType: 'labels.text.fill', stylers: [{ color: '#7d7d7d' }] }, { - featureType: 'administrative.locality', - elementType: 'labels.text.fill', - stylers: [{ color: '#7d7d7d' }] - }, { - featureType: 'poi', - elementType: 'labels.text.fill', - stylers: [{ color: '#7d7d7d' }] - }, { - featureType: 'poi.park', - elementType: 'geometry', - stylers: [{ color: '#a8e6ac' }] - }, { - featureType: 'poi.park', - elementType: 'labels.text.fill', - stylers: [{ color: '#7d7d7d' }] - }, { - featureType: 'road', - elementType: 'geometry', - stylers: [{ color: '#ffa432' }] - }, { - featureType: 'road', - elementType: 'geometry.stroke', - stylers: [{ color: '#ffffff' }] - }, { - featureType: 'road', - elementType: 'labels.text.fill', - stylers: [{ color: '#7d7d7d' }] - }, { - featureType: 'road.highway', - elementType: 'geometry', - stylers: [{ color: '#ff8f02' }] - }, { - featureType: 'road.highway', - elementType: 'geometry.stroke', - stylers: [{ color: '#ffffff' }] - }, { - featureType: 'road.highway', - elementType: 'labels.text.fill', - stylers: [{ color: '#7d7d7d' }] - }, { - featureType: 'transit', - elementType: 'geometry', - stylers: [{ color: '#ffa533' }] - }, { - featureType: 'transit.station', - elementType: 'labels.text.fill', - stylers: [{ color: '#7d7d7d' }] - }, { - featureType: 'water', - elementType: 'geometry', - stylers: [{ color: '#c7f5ff' }] - }, { - featureType: 'water', - elementType: 'labels.text.fill', - stylers: [{ color: '#7d7d7d' }] - }, { - featureType: 'water', - elementType: 'labels.text.stroke', - stylers: [{ color: '#c7f5ff' }] - }], - center: new google.maps.LatLng(0, 0), - mapTypeId: google.maps.MapTypeId.ROADMAP - }; - - var map = new google.maps.Map($el[0], args); - - map.markers = []; - - $markers.each(function () { - - add_marker($(this), map); - }); - - center_map(map); - - return map; - } - - function add_marker($marker, map) { - - var latlng = new google.maps.LatLng($marker.attr('data-lat'), $marker.attr('data-lng')); - - var marker = new google.maps.Marker({ - position: latlng, - map: map - }); - - map.markers.push(marker); - - if ($marker.html()) { - - var infowindow = new google.maps.InfoWindow({ - content: $marker.html() - }); - - google.maps.event.addListener(marker, 'click', function () { - - infowindow.open(map, marker); - }); - } - } - - function center_map(map) { - - var bounds = new google.maps.LatLngBounds(); - - $.each(map.markers, function (i, marker) { - - var latlng = new google.maps.LatLng(marker.position.lat(), marker.position.lng()); - - bounds.extend(latlng); - }); - - if (map.markers.length == 1) { - map.setCenter(bounds.getCenter()); - map.setZoom(16); - } else { - map.fitBounds(bounds); - } - } - - var map = null; - - mapsapi().then(function (maps) { - $('.acf-map').each(function () { - map = new_map($(this)); - }); - }); - - /*Contact Form Validation and Submission Start*/ - //console.log(Parsleyjs); - - var formHandler = { - busy: false, - form_error: false, - formsubmit: function formsubmit() { - - if (formHandler.busy) return false; - - formHandler.busy = true; - - var formData = new FormData($("#contact_form")[0]); - formData.append("action", "framacContactForm"); - formData.append("nonce", ajax.nonce); - - $.ajax({ - cache: false, - type: 'POST', - url: ajax.url, - data: formData, - processData: false, - contentType: false, - - success: function success(data, textStatus, XMLHttpRequest) { - var parse_data = JSON.parse(data); - var class_name = ''; - if (parse_data.error === 0) { - $('#contact_form')[0].reset(); - - if (parse_data.m_status === 1) class_name = "success";else class_name = "fail"; - - $('#apply_success_msg').addClass(class_name).html(parse_data.res).show(); - - if (Env.core.mobile) { - $('html, body').animate({ - scrollTop: $("#apply_success_msg").offset() + 60 - }, 800); - } - } else { - $('.apply_error-common').html(parse_data.res).show(0); - } - }, - - error: function error(MLHttpRequest, textStatus, errorThrown) { - //console.log(errorThrown); - }, - - complete: function complete() { - formHandler.busy = false; - $('.formLoader').hide(); - } - }); - } - }; - - $("#contact_form").submit(function (e) { - e.preventDefault(); - $('#apply_success_msg').html('').hide(); - $('.formLoader').css('display', 'inline-block'); - if ($(this).parsley().isValid()) { - formHandler.formsubmit(); - } - }); - /*Contact Form Validation and Submission End*/ -}; -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"))) - -/***/ }), - -/***/ "./js/helpers.js": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export addClass */ -/* unused harmony export removeClass */ -/* unused harmony export toggleClass */ -/* unused harmony export hasClass */ -function addClass(el, className) { - if (el.classList) el.classList.add(className);else if (!hasClass(el, className)) el.className += " " + className; -} - -function removeClass(el, className) { - if (el.classList) el.classList.remove(className);else if (hasClass(el, className)) { - var reg = new RegExp('(\\s|^)' + className + '(\\s|$)'); - el.className = el.className.replace(reg, ' '); - } -} - -function toggleClass(el, className) { - if (hasClass(el, className)) { - addClass(el, 'out'); - setTimeout(function () { - removeClass(el, className); - removeClass(el, 'out'); - }, 500); - } else addClass(el, className); -} - -function hasClass(el, className) { - if (el.classList) return el.classList.contains(className);else return !!el.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)')); -} - -/***/ }), - -/***/ "./js/home.js": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__["a"] = home; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers_js__ = __webpack_require__("./js/helpers.js"); - - -function home() { - - var $grid = $('#Postdetails'); - var $scale = $('#EventScale'); - var active = $grid.data('postid'); - - - - $(document).ready(function () { - $('.goDown').click(function (e) { - e.preventDefault(); - var _target = $(this).data('target'); - console.log(_target); - $('html, body').animate({ scrollTop: $('#' + _target).offset().top }, 500); - }); - - var codeSwiperInit = false; +var home_code_swiper = new Swiper('#home_code_swiper', { + autoHeight: true, + spaceBetween: 0, + slidesPerView: 'auto', + resistanceRatio: 0.05, + centeredSlides: true, + slideToClickedSlide: true, + observer: true, + observeParents: true, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + breakpoints: { + 1023: { + slidesPerView: 1 + } + } +}); +var home_code_detail_swiper = new Swiper('#home_code_detail_swiper', { + spaceBetween: 0, + effect: 'fade', + allowSwipeToPrev: false, + allowSwipeToNext: false, + simulateTouch: false +}); - /* Code Swiper */ - var home_code_swiper = new Swiper('#home_code_swiper', { - autoHeight: true, - spaceBetween: 0, - slidesPerView: 'auto', - resistanceRatio: 0.05, - centeredSlides: true, - slideToClickedSlide: true, - nextButton: '.swiper-button-next', - prevButton: '.swiper-button-prev', - breakpoints: { - 1023: { - slidesPerView: 1 - } - } - }); - var home_code_detail_swiper = new Swiper('#home_code_detail_swiper', { - spaceBetween: 0, - effect: 'fade', - allowSwipeToPrev: false, - allowSwipeToNext: false, - simulateTouch: false - }); - home_code_detail_swiper.params.control = home_code_swiper; - home_code_swiper.params.control = home_code_detail_swiper; - setTimeout(function () { - home_code_swiper.update(true); - home_code_detail_swiper.update(true); - }, 1000); +home_code_detail_swiper.controller.control = home_code_swiper; +home_code_swiper.controller.control = home_code_detail_swiper; - /* Event Swiper */ - var event_detail_swiper = new Swiper('#event_detail_swiper', { - autoHeight: true, - spaceBetween: 0, - slidesPerView: 1, - slideToClickedSlide: true, - resistanceRatio: 0 - }); - var event_calender_swiper = new Swiper('#event_calender_swiper', { +var event_calender_swiper = new Swiper('#event_calender_swiper', { spaceBetween: 0, centeredSlides: true, - slidesPerView: 9, + slidesPerView: 3, resistanceRatio: 0, slideToClickedSlide: true, + initialSlide: 1000, breakpoints: { 1400: { slidesPerView: 7 }, 1024: { slidesPerView: 5 }, 600: { slidesPerView: 3 } } }); - event_detail_swiper.params.control = event_calender_swiper; - event_calender_swiper.params.control = event_detail_swiper; - var $row = $('div[data-eventdate="latest"]'); - setTimeout(function () { - event_detail_swiper.update(true); - event_calender_swiper.update(true); - event_calender_swiper.slideTo($row.index()); - }, 1000); - - // CMS Page - Vision Section in viewport - var $wrapperDiv = $('#content'), - $bgTitleBlk = $('.bgTitleBlk'), - upperType = $('.upperType'), - lowerType = $('.lowerType'); - function callWayPoint(elemId, text, className) { - - var wp_called = false; - - function doTextChage() { - wp_called = true; - upperType.addClass('out'); - lowerType.addClass('out'); - $wrapperDiv.attr('class', 'pageContent ' + className); - setTimeout(function () { - upperType.html(text).removeClass('out'); - lowerType.html(text).removeClass('out'); - $wrapperDiv.attr('class', 'pageContent titleIn ' + className); - }, 400); - } - - new Waypoint.Inview({ - element: document.getElementById(elemId), - enter: function enter(direction) { - if (!wp_called) { - doTextChage(); - } - }, - entered: function entered(direction) { - if (!wp_called) { - doTextChage(); - } - }, - exit: function exit() { - wp_called = false; - }, - exited: function exited() { - wp_called = false; - } - }); - }; - - callWayPoint('siteIntro_iv_point', 'SECURE', 'secure'); - callWayPoint('code_demo_iv_point', 'ERROR!', 'error'); - callWayPoint('about_iv_point', 'ABOUT', 'about'); - callWayPoint('events_iv_point', 'TIMELINE', 'timeline'); - callWayPoint('download_iv_point', 'DOWNLOAD', 'download bigTxt'); - - $(window).trigger('resize'); - }); -}; -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"))) - -/***/ }), - -/***/ "./js/lib/css_browser_selector.js": -/***/ (function(module, exports) { - -/* - CSS Browser Selector 0.81 - Originally written by Rafael Lima (http://rafael.adm.br) - http://rafael.adm.br/css_browser_selector - License: http://creativecommons.org/licenses/by/2.5/ - - Co-maintained by: - https://github.com/ridjohansen/css_browser_selector - https://github.com/delka/css_browser_selector - https://github.com/verbatim/css_browser_selector - */ -(function () { - var uaInfo = { - ua: '', - is: function is(t) { - return RegExp(t, "i").test(uaInfo.ua); - }, - version: function version(p, n) { - n = n.replace(".", "_"); - var i = n.indexOf('_'), - ver = ""; - while (i > 0) { - ver += " " + p + n.substring(0, i); - i = n.indexOf('_', i + 1); - } - ver += " " + p + n; - return ver; - }, - getBrowser: function getBrowser() { - var g = 'gecko', - w = 'webkit', - c = 'chrome', - f = 'firefox', - s = 'safari', - o = 'opera', - ua = uaInfo.ua, - is = uaInfo.is; - - return [!/opera|webtv/i.test(ua) && /msie\s(\d+)/.test(ua) ? 'ie ie' + (/trident\/4\.0/.test(ua) ? '8' : RegExp.$1) : is('edge\/') ? 'edge ie' + (/edge\/(\d+)\.(\d+)/.test(ua) ? RegExp.$1 + ' ie' + RegExp.$1 + '_' + RegExp.$2 : '') // IE Edge - : is('trident\/') ? 'ie ie' + (/trident\/.+rv:(\d+)/i.test(ua) ? RegExp.$1 : '') //ie11+ - : is('firefox/') ? g + " " + f + (/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + f + RegExp.$2 + ' ' + f + RegExp.$2 + "_" + RegExp.$4 : '') : is('gecko/') ? g : is('opera') ? o + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + "_" + RegExp.$4 : /opera(\s|\/)(\d+)\.(\d+)/.test(ua) ? ' ' + o + RegExp.$2 + " " + o + RegExp.$2 + "_" + RegExp.$3 : '') : is('konqueror') ? 'konqueror' : is('chrome') ? w + ' ' + c + (/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + c + RegExp.$2 + (RegExp.$4 > 0 ? ' ' + c + RegExp.$2 + "_" + RegExp.$4 : '') : '') : is('iron') ? w + ' iron' : is('applewebkit/') ? w + ' ' + s + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + s + RegExp.$2 + " " + s + RegExp.$2 + RegExp.$3.replace('.', '_') : / Safari\/(\d+)/i.test(ua) ? RegExp.$1 == "419" || RegExp.$1 == "417" || RegExp.$1 == "416" || RegExp.$1 == "412" ? ' ' + s + '2_0' : RegExp.$1 == "312" ? ' ' + s + '1_3' : RegExp.$1 == "125" ? ' ' + s + '1_2' : RegExp.$1 == "85" ? ' ' + s + '1_0' : '' : '') : //applewebkit - is('mozilla/') ? g : '']; - }, - getPlatform: function getPlatform() { - var wp = 'winphone', - a = 'android', - bb = 'blackberry', - dv = 'device_', - ua = uaInfo.ua, - version = uaInfo.version, - is = uaInfo.is; - - return [is('j2me') ? 'j2me' : is('windows phone') ? wp + (/Windows Phone (\d+)(\.(\d+))+/i.test(ua) ? " " + wp + RegExp.$1 + " " + wp + RegExp.$1 + RegExp.$2.replace('.', '_') : /Windows Phone OS (\d+)(\.(\d+))+/i.test(ua) ? " " + wp + RegExp.$1 + " " + wp + RegExp.$1 + RegExp.$2.replace('.', '_') : '') : // Windows Phone - is('blackberry') ? bb + (/Version\/(\d+)(\.(\d+)+)/i.test(ua) ? " " + bb + RegExp.$1 + " " + bb + RegExp.$1 + RegExp.$2.replace('.', '_') : /Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua) ? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '') : '') : // blackberry - is('android') ? a + (/Version\/(\d+)(\.(\d+))+/i.test(ua) ? " " + a + RegExp.$1 + " " + a + RegExp.$1 + RegExp.$2.replace('.', '_') : '') + (/Android (.+); (.+) Build/i.test(ua) ? ' ' + dv + RegExp.$2.replace(/ /g, "_").replace(/-/g, "_") : '') : //android - is('ipad|ipod|iphone') ? (/CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(ua) ? 'ios' + version('ios', RegExp.$2) : '') + ' ' + (/(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : "") : //'iphone' - //:is('ipod')?'ipod' - //:is('ipad')?'ipad' - is('playbook') ? 'playbook' : is('kindle|silk') ? 'kindle' : is('playbook') ? 'playbook' : is('mac') ? 'mac' + (/mac os x ((\d+)[.|_](\d+))/.test(ua) ? ' mac' + RegExp.$2 + ' mac' + RegExp.$1.replace('.', "_") : '') : is('win') ? 'win' + (is('windows nt 10.0') ? ' win10' : is('windows nt 6.3') ? ' win8_1' : is('windows nt 6.2') ? ' win8' : is('windows nt 6.1') ? ' win7' : is('windows nt 6.0') ? ' vista' : is('windows nt 5.2') || is('windows nt 5.1') ? ' win_xp' : is('windows nt 5.0') ? ' win_2k' : is('windows nt 4.0') || is('WinNT4.0') ? ' win_nt' : '') : is('freebsd') ? 'freebsd' : is('x11|linux') ? 'linux' : '']; - }, - getMobile: function getMobile() { - var is = uaInfo.is; - return [is("android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|winphone|playbook|kindle|silk") ? 'mobile' : '']; - }, - getIpadApp: function getIpadApp() { - var is = uaInfo.is; - return [is('ipad|iphone|ipod') && !is('safari') ? 'ipad_app' : '']; - } - }; - - if (typeof html == 'undefined') { - html = document.documentElement; - } - - function css_browser_selector(u, ns) { - var html = document.documentElement, - b = []; - ns = ns ? ns : ""; - - /* ua */ - uaInfo.ua = u.toLowerCase(); - b = b.concat(uaInfo.getBrowser()); - b = b.concat(uaInfo.getPlatform()); - b = b.concat(uaInfo.getMobile()); - b = b.concat(uaInfo.getIpadApp()); - //b = b.concat(uaInfo.getLang()); - - /* save & add existing html classes */ - var classes = html.className; - var classesArray = classes.split(/ /); - - /* merge existing classes on html tag */ - b = b.concat(classesArray); - - /* removendo itens invalidos do array */ - /* add filter function polyfill for IE8 */ - if (!Array.prototype.filter) { - Array.prototype.filter = function (fun /*, thisArg*/) { - 'use strict'; - - if (this === void 0 || this === null) { - throw new TypeError(); - } - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun !== 'function') { - throw new TypeError(); - } - - var res = []; - var thisArg = arguments.length >= 2 ? arguments[1] : void 0; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; - - // NOTE: Technically this should Object.defineProperty at - // the next index, as push can be affected by - // properties on Object.prototype and Array.prototype. - // But that method's new, and collisions should be - // rare, so use the more-compatible alternative. - if (fun.call(thisArg, val, i, t)) { - res.push(val); - } - } - } - - return res; - }; - } - - b = b.filter(function (e) { - /* if no-js class exists, remove it */ - if (e === 'no-js') { - return false; - } - return e; - }); - - /* prefixo do namespace */ - b[0] = ns ? ns + b[0] : b[0]; - html.className = b.join(' ' + ns); - return html.className; - } - - // Add css_browser_selector as a global object. - window.css_browser_selector = css_browser_selector; -})(); - -// define css_browser_selector_ns before loading this script to assign a namespace -var css_browser_selector_ns = css_browser_selector_ns || ""; - -// init -css_browser_selector(navigator.userAgent, css_browser_selector_ns); - -/***/ }), - -/***/ "./js/lib/jQuery.scrollSpeed.js": -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(jQuery) {// Custom scrolling speed with jQuery -// Source: github.com/ByNathan/jQuery.scrollSpeed -// Version: 1.0 - -(function ($) { - - jQuery.scrollSpeed = function (step, speed) { - - var $document = $(document), - $window = $(window), - $body = $('html, body'), - viewport = $window.height(), - top = 0, - scroll = false; - - if (window.navigator.msPointerEnabled) return false; - - $window.on('mousewheel DOMMouseScroll', function (e) { - if (!$('html').hasClass('oh')) { - scroll = true; - - if (e.originalEvent.wheelDeltaY < 0 || e.originalEvent.detail > 0) { - top = top + viewport >= $document.height() ? top : top += step; - } - - if (e.originalEvent.wheelDeltaY > 0 || e.originalEvent.detail < 0) top = top <= 0 ? 0 : top -= step; - - $body.stop().animate({ - - scrollTop: top - - }, speed, 'default', function () { - - scroll = false; - }); - return false; - } - }).on('scroll', function () { - - if (!scroll) top = $window.scrollTop(); - }).on('resize', function () { - - viewport = $window.height(); - }).on('keydown', function (e) { - if (!$('html').hasClass('oh')) { - if (e.keyCode == 34 || e.keyCode == 40) { - top = top + viewport >= $document.height() ? top : top += step; - $body.stop().animate({ - - scrollTop: top - - }, speed, 'default', function () { - - scroll = false; - }); - return false; - } else if (e.keyCode == 33 || e.keyCode == 38) { - top = top <= 0 ? 0 : top -= step; - $body.stop().animate({ - - scrollTop: top - - }, speed, 'default', function () { - - scroll = false; - }); - return false; - } - } - }); - }; - - jQuery.easing.default = function (x, t, b, c, d) { - - return -c * ((t = t / d - 1) * t * t * t - 1) + b; - }; -})(jQuery); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"))) - -/***/ }), - -/***/ "./js/main.js": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* WEBPACK VAR INJECTION */(function(jQuery, $) { -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_jquery__ = __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_jquery__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_swiper__ = __webpack_require__("../../../../../node_modules/swiper/dist/js/swiper.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_swiper___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_swiper__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_parsleyjs__ = __webpack_require__("../../../../../node_modules/parsleyjs/dist/parsley.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_parsleyjs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_parsleyjs__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_waypoints_lib_noframework_waypoints_min__ = __webpack_require__("../../../../../node_modules/waypoints/lib/noframework.waypoints.min.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_waypoints_lib_noframework_waypoints_min___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_waypoints_lib_noframework_waypoints_min__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_waypoints_lib_shortcuts_sticky_min__ = __webpack_require__("../../../../../node_modules/waypoints/lib/shortcuts/sticky.min.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_waypoints_lib_shortcuts_sticky_min___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14_waypoints_lib_shortcuts_sticky_min__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_waypoints_lib_shortcuts_inview_min__ = __webpack_require__("../../../../../node_modules/waypoints/lib/shortcuts/inview.min.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_waypoints_lib_shortcuts_inview_min___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_waypoints_lib_shortcuts_inview_min__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__home_js__ = __webpack_require__("./js/home.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__contact_js__ = __webpack_require__("./js/contact.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__page_js__ = __webpack_require__("./js/page.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__plugin_kernel_js__ = __webpack_require__("./js/plugin_kernel.js"); -// Main Stylesheets - - - - - - - - - - - -// JS Libraries - - - - - - - - - - - -__webpack_require__("./js/lib/css_browser_selector.js"); -__webpack_require__("./js/lib/jQuery.scrollSpeed.js"); - -// global export -window.$ = window.jQuery = jQuery; -var Main = function Main() {}; -Main.prototype.init = function () { - - if ($('body').hasClass('home')) __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_16__home_js__["a" /* home */])();else if ($('body').hasClass('page-template-page-contact')) __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_17__contact_js__["a" /* contact */])();else if ($('body').hasClass('page-template-page-kernel_plugins')) __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_19__plugin_kernel_js__["a" /* plugin_kernel */])();else if ($('body').hasClass('page-template-page-kernel')) __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_19__plugin_kernel_js__["b" /* kernel */])();else __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_18__page_js__["a" /* page */])(); - - var siteHeader = document.querySelector('.siteHeader'); - document.getElementById('menu_toggle').onclick = function () { - if (siteHeader.getAttribute('class') == 'siteHeader') siteHeader.setAttribute('class', 'siteHeader menuOpen');else siteHeader.setAttribute('class', 'siteHeader'); - }; - - $(document).ready(function () { - if ($('html').hasClass('ie10') || $('html').hasClass('ie11') || $('html').hasClass('edge') || $('html').hasClass('ie12')) { - $('summary').click(function () { - $(this).toggleClass('active'); - }); - } - - if ($('#menu li.menu-kernal').length > 0 && $('.pageKernel').length > 0) { - $('#menu li.menu-kernal').addClass('current-menu-item'); - } - - if ($('html').hasClass('win')) {} - // jQuery.scrollSpeed(80, 1000); - - - // Sticky right side link - var header_download_link = document.getElementById('header_download_link'); - var sticky = new Waypoint.Inview({ - element: document.getElementById('header_iv_point'), - enter: function enter(direction) { - // console.log('entered'); - header_download_link.setAttribute('class', 'btnDownload'); - }, - exited: function exited(direction) { - //console.log('exited'); - header_download_link.setAttribute('class', 'btnDownload sticky'); - }, - offset: { - top: '70px' - } - }); - - if ($('#sidebar').length > 0) { - var sidebar_wrap = document.getElementById('sidebar_wrap'); - var sticky_sidebar = new Waypoint.Inview({ - element: document.getElementById('sidebar_iv_point'), - enter: function enter(direction) { - // console.log('entered'); - sidebar_wrap.setAttribute('class', 'sidebarWrap'); - }, - exited: function exited(direction) { - //console.log('exited'); - sidebar_wrap.setAttribute('class', 'sidebarWrap sticky'); - } - }); - } - - $(".goBack, .backLink").click(function (e) { - e.preventDefault(); - window.history.back(); - }); - - var text_max = $('#contact_textarea').attr('maxlength'); - $('#textarea_count').html(text_max + ' / ' + text_max); - - $("#contact_textarea").on('input', function (e) { - var text_length = $('#contact_textarea').val().length; - var text_remaining = text_max - text_length; - $('#textarea_count').html(text_remaining + ' / ' + text_max); - }); - - function magicLine() { - var $el, leftPos, newWidth; - var $current_item_length = $("#menu-primary-meny .current-menu-item").length; - console.log($current_item_length); - $("#menu-primary-meny").append("<li id='magic-line'></li>"); - if ($current_item_length == 0) $("#menu-primary-meny").prepend("<li class='current-menu-item hide'><a href='#'>a</a></li>"); - - var $magicLine = $("#magic-line"); - $magicLine.width($(".current-menu-item").width()).css("left", $(".current-menu-item a").position().left).data("origLeft", $magicLine.position().left).data("origWidth", $magicLine.width()); - - if ($('body').hasClass('nonTouch')) { - $("#menu-primary-meny li a").hover(function () { - $el = $(this); - leftPos = $el.position().left; - newWidth = $el.parent().width(); - $magicLine.stop().animate({ - left: Math.round(leftPos), - width: Math.round(newWidth) - }, 150); - }, function () { - $magicLine.stop().animate({ - left: $magicLine.data("origLeft"), - width: $magicLine.data("origWidth") - }); - }); - } - } - - setTimeout(function () { - magicLine(); - }, 60); - }); -}; -var main = new Main(); -main.init(); -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"), __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"))) - -/***/ }), - -/***/ "./js/page.js": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__["a"] = page; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lightgallery__ = __webpack_require__("../../../../../node_modules/lightgallery/dist/js/lightgallery.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lightgallery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lightgallery__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lightgallery_dist_css_lightgallery_css__ = __webpack_require__("../../../../../node_modules/lightgallery/dist/css/lightgallery.css"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lightgallery_dist_css_lightgallery_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lightgallery_dist_css_lightgallery_css__); - - -function page() { - - $(document).ready(function () { - - $('#screenshotsList').lightGallery({ - selector: '.item', - download: false - }); - - if ($('#case_study_list').length > 0) { - var case_study_swiper = new Swiper('#case_study_list', { - freeModeMomentum: false, - freeModeMomentumBounce: false, - autoHeight: true, - spaceBetween: 0, - slidesPerView: 1, - resistanceRatio: 0.05, - pagination: '.swiper-pagination', - paginationClickable: true, - nextButton: '.swiper-button-next', - prevButton: '.swiper-button-prev' - }); - setTimeout(function () { - case_study_swiper.update(true); - }, 1000); - } - - if ($('#rcmdCase_studies').length > 0) { - var case_study_swiper = new Swiper('#rcmdCase_studies', { - freeModeMomentum: false, - freeModeMomentumBounce: false, - loop: false, - autoHeight: true, - spaceBetween: 0, - slidesPerView: window.innerWidth > 600 ? 3 : 2, - nextButton: '.swiper-button-next', - prevButton: '.swiper-button-prev' - }); - } - - if ($('.codeTabs').length > 0) { - var OSName = "linux"; - if (navigator.appVersion.indexOf("Win") != -1) OSName = "windows"; - if (navigator.appVersion.indexOf("Mac") != -1) OSName = "mac"; - if (navigator.appVersion.indexOf("X11") != -1) OSName = "linux"; - if (navigator.appVersion.indexOf("Linux") != -1) OSName = "linux"; - - $('a[data-tab = ' + OSName + ']').addClass("active"); - $('.tab-' + OSName).removeClass('hide'); - - $('.codeTabs a').click(function (e) { - e.preventDefault(); - var _os = $(this).data('tab'); - $(this).siblings().removeClass('active'); - $(this).addClass('active'); - $('.codeScreen .codeTab').addClass('hide'); - $('.tab-' + _os).removeClass('hide'); - }); - } - - if ($('.tagsList a').length > 0) { - var addActiveClassTag = function addActiveClassTag(thisObj) { - var pageTag = $(thisObj).text().toLowerCase(); - if (pageTag == url_tag) { - $(thisObj).addClass('active'); - } - return true; - }; - - $(".tagsList a").each(function () { - addActiveClassTag(this); - return true; - }); - } - }); -}; -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"))) - -/***/ }), - -/***/ "./js/plugin_kernel.js": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__["a"] = plugin_kernel; -/* harmony export (immutable) */ __webpack_exports__["b"] = kernel; -function plugin_kernel() { - if ($('.pluginSwiper').length == 1) { - var settings = { - pagination: '.swiper-pagination', - slidesPerView: 'auto', - spaceBetween: 8, - loop: true, - loopedSlides: 2, - paginationClickable: true, - nextButton: '.swiper-button-next', - prevButton: '.swiper-button-prev', - breakpoints: { - 767: { - spaceBetween: 15 - } - } - }, - kernel_swiper = new Swiper('.pluginSwiper', settings); - - setTimeout(function () { - kernel_swiper.update(true); - }, 1000); - } -}; - -function kernel() { - - var settings = { - pagination: '.swiper-pagination', - slidesPerView: 4, - paginationClickable: true, - spaceBetween: 15, - breakpoints: { - 540: { - slidesPerView: 1 - }, - 900: { - slidesPerView: 2 - }, - 1200: { - slidesPerView: 3 - } - } - }, - kernel_swiper_2 = new Swiper('.kernelSwiper', settings); - - setTimeout(function () { - kernel_swiper_2.update(true); - }, 1000); -}; -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__("../../../../../node_modules/jquery/dist/jquery.js"))) - -/***/ }), - -/***/ 1: -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__("../../../../../node_modules/webpack/hot/dev-server.js"); -module.exports = __webpack_require__("./js/main.js"); + +/* Event Swiper */ +var event_detail_swiper = new Swiper('#event_detail_swiper', { + autoHeight: true, + spaceBetween: 0, + slidesPerView: 1, + slideToClickedSlide: true, + resistanceRatio: 0, + initialSlide: 1000, +}); -/***/ }) +event_detail_swiper.controller.control = event_calender_swiper; +event_calender_swiper.controller.control = event_detail_swiper; -},[1]); diff --git a/assets/js/manifest.js b/assets/js/manifest.js deleted file mode 100644 index 333870f2d05f8ac39684abbefbf4f9378e01a01d..0000000000000000000000000000000000000000 --- a/assets/js/manifest.js +++ /dev/null @@ -1,795 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ var parentJsonpFunction = window["webpackJsonp"]; -/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) { -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = [], result; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ if(executeModules) { -/******/ for(i=0; i < executeModules.length; i++) { -/******/ result = __webpack_require__(__webpack_require__.s = executeModules[i]); -/******/ } -/******/ } -/******/ return result; -/******/ }; -/******/ function hotDisposeChunk(chunkId) { -/******/ delete installedChunks[chunkId]; -/******/ } -/******/ var parentHotUpdateCallback = this["webpackHotUpdate"]; -/******/ this["webpackHotUpdate"] = -/******/ function webpackHotUpdateCallback(chunkId, moreModules) { // eslint-disable-line no-unused-vars -/******/ hotAddUpdateChunk(chunkId, moreModules); -/******/ if(parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules); -/******/ } ; -/******/ -/******/ function hotDownloadUpdateChunk(chunkId) { // eslint-disable-line no-unused-vars -/******/ var head = document.getElementsByTagName("head")[0]; -/******/ var script = document.createElement("script"); -/******/ script.type = "text/javascript"; -/******/ script.charset = "utf-8"; -/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js"; -/******/ head.appendChild(script); -/******/ } -/******/ -/******/ function hotDownloadManifest() { // eslint-disable-line no-unused-vars -/******/ return new Promise(function(resolve, reject) { -/******/ if(typeof XMLHttpRequest === "undefined") -/******/ return reject(new Error("No browser support")); -/******/ try { -/******/ var request = new XMLHttpRequest(); -/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json"; -/******/ request.open("GET", requestPath, true); -/******/ request.timeout = 10000; -/******/ request.send(null); -/******/ } catch(err) { -/******/ return reject(err); -/******/ } -/******/ request.onreadystatechange = function() { -/******/ if(request.readyState !== 4) return; -/******/ if(request.status === 0) { -/******/ // timeout -/******/ reject(new Error("Manifest request to " + requestPath + " timed out.")); -/******/ } else if(request.status === 404) { -/******/ // no update available -/******/ resolve(); -/******/ } else if(request.status !== 200 && request.status !== 304) { -/******/ // other failure -/******/ reject(new Error("Manifest request to " + requestPath + " failed.")); -/******/ } else { -/******/ // success -/******/ try { -/******/ var update = JSON.parse(request.responseText); -/******/ } catch(e) { -/******/ reject(e); -/******/ return; -/******/ } -/******/ resolve(update); -/******/ } -/******/ }; -/******/ }); -/******/ } -/******/ -/******/ -/******/ -/******/ var hotApplyOnUpdate = true; -/******/ var hotCurrentHash = "7c8986b0ca7d8db7279d"; // eslint-disable-line no-unused-vars -/******/ var hotCurrentModuleData = {}; -/******/ var hotCurrentChildModule; // eslint-disable-line no-unused-vars -/******/ var hotCurrentParents = []; // eslint-disable-line no-unused-vars -/******/ var hotCurrentParentsTemp = []; // eslint-disable-line no-unused-vars -/******/ -/******/ function hotCreateRequire(moduleId) { // eslint-disable-line no-unused-vars -/******/ var me = installedModules[moduleId]; -/******/ if(!me) return __webpack_require__; -/******/ var fn = function(request) { -/******/ if(me.hot.active) { -/******/ if(installedModules[request]) { -/******/ if(installedModules[request].parents.indexOf(moduleId) < 0) -/******/ installedModules[request].parents.push(moduleId); -/******/ } else { -/******/ hotCurrentParents = [moduleId]; -/******/ hotCurrentChildModule = request; -/******/ } -/******/ if(me.children.indexOf(request) < 0) -/******/ me.children.push(request); -/******/ } else { -/******/ console.warn("[HMR] unexpected require(" + request + ") from disposed module " + moduleId); -/******/ hotCurrentParents = []; -/******/ } -/******/ return __webpack_require__(request); -/******/ }; -/******/ var ObjectFactory = function ObjectFactory(name) { -/******/ return { -/******/ configurable: true, -/******/ enumerable: true, -/******/ get: function() { -/******/ return __webpack_require__[name]; -/******/ }, -/******/ set: function(value) { -/******/ __webpack_require__[name] = value; -/******/ } -/******/ }; -/******/ }; -/******/ for(var name in __webpack_require__) { -/******/ if(Object.prototype.hasOwnProperty.call(__webpack_require__, name) && name !== "e") { -/******/ Object.defineProperty(fn, name, ObjectFactory(name)); -/******/ } -/******/ } -/******/ fn.e = function(chunkId) { -/******/ if(hotStatus === "ready") -/******/ hotSetStatus("prepare"); -/******/ hotChunksLoading++; -/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) { -/******/ finishChunkLoading(); -/******/ throw err; -/******/ }); -/******/ -/******/ function finishChunkLoading() { -/******/ hotChunksLoading--; -/******/ if(hotStatus === "prepare") { -/******/ if(!hotWaitingFilesMap[chunkId]) { -/******/ hotEnsureUpdateChunk(chunkId); -/******/ } -/******/ if(hotChunksLoading === 0 && hotWaitingFiles === 0) { -/******/ hotUpdateDownloaded(); -/******/ } -/******/ } -/******/ } -/******/ }; -/******/ return fn; -/******/ } -/******/ -/******/ function hotCreateModule(moduleId) { // eslint-disable-line no-unused-vars -/******/ var hot = { -/******/ // private stuff -/******/ _acceptedDependencies: {}, -/******/ _declinedDependencies: {}, -/******/ _selfAccepted: false, -/******/ _selfDeclined: false, -/******/ _disposeHandlers: [], -/******/ _main: hotCurrentChildModule !== moduleId, -/******/ -/******/ // Module API -/******/ active: true, -/******/ accept: function(dep, callback) { -/******/ if(typeof dep === "undefined") -/******/ hot._selfAccepted = true; -/******/ else if(typeof dep === "function") -/******/ hot._selfAccepted = dep; -/******/ else if(typeof dep === "object") -/******/ for(var i = 0; i < dep.length; i++) -/******/ hot._acceptedDependencies[dep[i]] = callback || function() {}; -/******/ else -/******/ hot._acceptedDependencies[dep] = callback || function() {}; -/******/ }, -/******/ decline: function(dep) { -/******/ if(typeof dep === "undefined") -/******/ hot._selfDeclined = true; -/******/ else if(typeof dep === "object") -/******/ for(var i = 0; i < dep.length; i++) -/******/ hot._declinedDependencies[dep[i]] = true; -/******/ else -/******/ hot._declinedDependencies[dep] = true; -/******/ }, -/******/ dispose: function(callback) { -/******/ hot._disposeHandlers.push(callback); -/******/ }, -/******/ addDisposeHandler: function(callback) { -/******/ hot._disposeHandlers.push(callback); -/******/ }, -/******/ removeDisposeHandler: function(callback) { -/******/ var idx = hot._disposeHandlers.indexOf(callback); -/******/ if(idx >= 0) hot._disposeHandlers.splice(idx, 1); -/******/ }, -/******/ -/******/ // Management API -/******/ check: hotCheck, -/******/ apply: hotApply, -/******/ status: function(l) { -/******/ if(!l) return hotStatus; -/******/ hotStatusHandlers.push(l); -/******/ }, -/******/ addStatusHandler: function(l) { -/******/ hotStatusHandlers.push(l); -/******/ }, -/******/ removeStatusHandler: function(l) { -/******/ var idx = hotStatusHandlers.indexOf(l); -/******/ if(idx >= 0) hotStatusHandlers.splice(idx, 1); -/******/ }, -/******/ -/******/ //inherit from previous dispose call -/******/ data: hotCurrentModuleData[moduleId] -/******/ }; -/******/ hotCurrentChildModule = undefined; -/******/ return hot; -/******/ } -/******/ -/******/ var hotStatusHandlers = []; -/******/ var hotStatus = "idle"; -/******/ -/******/ function hotSetStatus(newStatus) { -/******/ hotStatus = newStatus; -/******/ for(var i = 0; i < hotStatusHandlers.length; i++) -/******/ hotStatusHandlers[i].call(null, newStatus); -/******/ } -/******/ -/******/ // while downloading -/******/ var hotWaitingFiles = 0; -/******/ var hotChunksLoading = 0; -/******/ var hotWaitingFilesMap = {}; -/******/ var hotRequestedFilesMap = {}; -/******/ var hotAvailableFilesMap = {}; -/******/ var hotDeferred; -/******/ -/******/ // The update info -/******/ var hotUpdate, hotUpdateNewHash; -/******/ -/******/ function toModuleId(id) { -/******/ var isNumber = (+id) + "" === id; -/******/ return isNumber ? +id : id; -/******/ } -/******/ -/******/ function hotCheck(apply) { -/******/ if(hotStatus !== "idle") throw new Error("check() is only allowed in idle status"); -/******/ hotApplyOnUpdate = apply; -/******/ hotSetStatus("check"); -/******/ return hotDownloadManifest().then(function(update) { -/******/ if(!update) { -/******/ hotSetStatus("idle"); -/******/ return null; -/******/ } -/******/ hotRequestedFilesMap = {}; -/******/ hotWaitingFilesMap = {}; -/******/ hotAvailableFilesMap = update.c; -/******/ hotUpdateNewHash = update.h; -/******/ -/******/ hotSetStatus("prepare"); -/******/ var promise = new Promise(function(resolve, reject) { -/******/ hotDeferred = { -/******/ resolve: resolve, -/******/ reject: reject -/******/ }; -/******/ }); -/******/ hotUpdate = {}; -/******/ for(var chunkId in installedChunks) -/******/ { // eslint-disable-line no-lone-blocks -/******/ /*globals chunkId */ -/******/ hotEnsureUpdateChunk(chunkId); -/******/ } -/******/ if(hotStatus === "prepare" && hotChunksLoading === 0 && hotWaitingFiles === 0) { -/******/ hotUpdateDownloaded(); -/******/ } -/******/ return promise; -/******/ }); -/******/ } -/******/ -/******/ function hotAddUpdateChunk(chunkId, moreModules) { // eslint-disable-line no-unused-vars -/******/ if(!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId]) -/******/ return; -/******/ hotRequestedFilesMap[chunkId] = false; -/******/ for(var moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ hotUpdate[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(--hotWaitingFiles === 0 && hotChunksLoading === 0) { -/******/ hotUpdateDownloaded(); -/******/ } -/******/ } -/******/ -/******/ function hotEnsureUpdateChunk(chunkId) { -/******/ if(!hotAvailableFilesMap[chunkId]) { -/******/ hotWaitingFilesMap[chunkId] = true; -/******/ } else { -/******/ hotRequestedFilesMap[chunkId] = true; -/******/ hotWaitingFiles++; -/******/ hotDownloadUpdateChunk(chunkId); -/******/ } -/******/ } -/******/ -/******/ function hotUpdateDownloaded() { -/******/ hotSetStatus("ready"); -/******/ var deferred = hotDeferred; -/******/ hotDeferred = null; -/******/ if(!deferred) return; -/******/ if(hotApplyOnUpdate) { -/******/ hotApply(hotApplyOnUpdate).then(function(result) { -/******/ deferred.resolve(result); -/******/ }, function(err) { -/******/ deferred.reject(err); -/******/ }); -/******/ } else { -/******/ var outdatedModules = []; -/******/ for(var id in hotUpdate) { -/******/ if(Object.prototype.hasOwnProperty.call(hotUpdate, id)) { -/******/ outdatedModules.push(toModuleId(id)); -/******/ } -/******/ } -/******/ deferred.resolve(outdatedModules); -/******/ } -/******/ } -/******/ -/******/ function hotApply(options) { -/******/ if(hotStatus !== "ready") throw new Error("apply() is only allowed in ready status"); -/******/ options = options || {}; -/******/ -/******/ var cb; -/******/ var i; -/******/ var j; -/******/ var module; -/******/ var moduleId; -/******/ -/******/ function getAffectedStuff(updateModuleId) { -/******/ var outdatedModules = [updateModuleId]; -/******/ var outdatedDependencies = {}; -/******/ -/******/ var queue = outdatedModules.slice().map(function(id) { -/******/ return { -/******/ chain: [id], -/******/ id: id -/******/ }; -/******/ }); -/******/ while(queue.length > 0) { -/******/ var queueItem = queue.pop(); -/******/ var moduleId = queueItem.id; -/******/ var chain = queueItem.chain; -/******/ module = installedModules[moduleId]; -/******/ if(!module || module.hot._selfAccepted) -/******/ continue; -/******/ if(module.hot._selfDeclined) { -/******/ return { -/******/ type: "self-declined", -/******/ chain: chain, -/******/ moduleId: moduleId -/******/ }; -/******/ } -/******/ if(module.hot._main) { -/******/ return { -/******/ type: "unaccepted", -/******/ chain: chain, -/******/ moduleId: moduleId -/******/ }; -/******/ } -/******/ for(var i = 0; i < module.parents.length; i++) { -/******/ var parentId = module.parents[i]; -/******/ var parent = installedModules[parentId]; -/******/ if(!parent) continue; -/******/ if(parent.hot._declinedDependencies[moduleId]) { -/******/ return { -/******/ type: "declined", -/******/ chain: chain.concat([parentId]), -/******/ moduleId: moduleId, -/******/ parentId: parentId -/******/ }; -/******/ } -/******/ if(outdatedModules.indexOf(parentId) >= 0) continue; -/******/ if(parent.hot._acceptedDependencies[moduleId]) { -/******/ if(!outdatedDependencies[parentId]) -/******/ outdatedDependencies[parentId] = []; -/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]); -/******/ continue; -/******/ } -/******/ delete outdatedDependencies[parentId]; -/******/ outdatedModules.push(parentId); -/******/ queue.push({ -/******/ chain: chain.concat([parentId]), -/******/ id: parentId -/******/ }); -/******/ } -/******/ } -/******/ -/******/ return { -/******/ type: "accepted", -/******/ moduleId: updateModuleId, -/******/ outdatedModules: outdatedModules, -/******/ outdatedDependencies: outdatedDependencies -/******/ }; -/******/ } -/******/ -/******/ function addAllToSet(a, b) { -/******/ for(var i = 0; i < b.length; i++) { -/******/ var item = b[i]; -/******/ if(a.indexOf(item) < 0) -/******/ a.push(item); -/******/ } -/******/ } -/******/ -/******/ // at begin all updates modules are outdated -/******/ // the "outdated" status can propagate to parents if they don't accept the children -/******/ var outdatedDependencies = {}; -/******/ var outdatedModules = []; -/******/ var appliedUpdate = {}; -/******/ -/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() { -/******/ console.warn("[HMR] unexpected require(" + result.moduleId + ") to disposed module"); -/******/ }; -/******/ -/******/ for(var id in hotUpdate) { -/******/ if(Object.prototype.hasOwnProperty.call(hotUpdate, id)) { -/******/ moduleId = toModuleId(id); -/******/ var result; -/******/ if(hotUpdate[id]) { -/******/ result = getAffectedStuff(moduleId); -/******/ } else { -/******/ result = { -/******/ type: "disposed", -/******/ moduleId: id -/******/ }; -/******/ } -/******/ var abortError = false; -/******/ var doApply = false; -/******/ var doDispose = false; -/******/ var chainInfo = ""; -/******/ if(result.chain) { -/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); -/******/ } -/******/ switch(result.type) { -/******/ case "self-declined": -/******/ if(options.onDeclined) -/******/ options.onDeclined(result); -/******/ if(!options.ignoreDeclined) -/******/ abortError = new Error("Aborted because of self decline: " + result.moduleId + chainInfo); -/******/ break; -/******/ case "declined": -/******/ if(options.onDeclined) -/******/ options.onDeclined(result); -/******/ if(!options.ignoreDeclined) -/******/ abortError = new Error("Aborted because of declined dependency: " + result.moduleId + " in " + result.parentId + chainInfo); -/******/ break; -/******/ case "unaccepted": -/******/ if(options.onUnaccepted) -/******/ options.onUnaccepted(result); -/******/ if(!options.ignoreUnaccepted) -/******/ abortError = new Error("Aborted because " + moduleId + " is not accepted" + chainInfo); -/******/ break; -/******/ case "accepted": -/******/ if(options.onAccepted) -/******/ options.onAccepted(result); -/******/ doApply = true; -/******/ break; -/******/ case "disposed": -/******/ if(options.onDisposed) -/******/ options.onDisposed(result); -/******/ doDispose = true; -/******/ break; -/******/ default: -/******/ throw new Error("Unexception type " + result.type); -/******/ } -/******/ if(abortError) { -/******/ hotSetStatus("abort"); -/******/ return Promise.reject(abortError); -/******/ } -/******/ if(doApply) { -/******/ appliedUpdate[moduleId] = hotUpdate[moduleId]; -/******/ addAllToSet(outdatedModules, result.outdatedModules); -/******/ for(moduleId in result.outdatedDependencies) { -/******/ if(Object.prototype.hasOwnProperty.call(result.outdatedDependencies, moduleId)) { -/******/ if(!outdatedDependencies[moduleId]) -/******/ outdatedDependencies[moduleId] = []; -/******/ addAllToSet(outdatedDependencies[moduleId], result.outdatedDependencies[moduleId]); -/******/ } -/******/ } -/******/ } -/******/ if(doDispose) { -/******/ addAllToSet(outdatedModules, [result.moduleId]); -/******/ appliedUpdate[moduleId] = warnUnexpectedRequire; -/******/ } -/******/ } -/******/ } -/******/ -/******/ // Store self accepted outdated modules to require them later by the module system -/******/ var outdatedSelfAcceptedModules = []; -/******/ for(i = 0; i < outdatedModules.length; i++) { -/******/ moduleId = outdatedModules[i]; -/******/ if(installedModules[moduleId] && installedModules[moduleId].hot._selfAccepted) -/******/ outdatedSelfAcceptedModules.push({ -/******/ module: moduleId, -/******/ errorHandler: installedModules[moduleId].hot._selfAccepted -/******/ }); -/******/ } -/******/ -/******/ // Now in "dispose" phase -/******/ hotSetStatus("dispose"); -/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) { -/******/ if(hotAvailableFilesMap[chunkId] === false) { -/******/ hotDisposeChunk(chunkId); -/******/ } -/******/ }); -/******/ -/******/ var idx; -/******/ var queue = outdatedModules.slice(); -/******/ while(queue.length > 0) { -/******/ moduleId = queue.pop(); -/******/ module = installedModules[moduleId]; -/******/ if(!module) continue; -/******/ -/******/ var data = {}; -/******/ -/******/ // Call dispose handlers -/******/ var disposeHandlers = module.hot._disposeHandlers; -/******/ for(j = 0; j < disposeHandlers.length; j++) { -/******/ cb = disposeHandlers[j]; -/******/ cb(data); -/******/ } -/******/ hotCurrentModuleData[moduleId] = data; -/******/ -/******/ // disable module (this disables requires from this module) -/******/ module.hot.active = false; -/******/ -/******/ // remove module from cache -/******/ delete installedModules[moduleId]; -/******/ -/******/ // remove "parents" references from all children -/******/ for(j = 0; j < module.children.length; j++) { -/******/ var child = installedModules[module.children[j]]; -/******/ if(!child) continue; -/******/ idx = child.parents.indexOf(moduleId); -/******/ if(idx >= 0) { -/******/ child.parents.splice(idx, 1); -/******/ } -/******/ } -/******/ } -/******/ -/******/ // remove outdated dependency from module children -/******/ var dependency; -/******/ var moduleOutdatedDependencies; -/******/ for(moduleId in outdatedDependencies) { -/******/ if(Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)) { -/******/ module = installedModules[moduleId]; -/******/ if(module) { -/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId]; -/******/ for(j = 0; j < moduleOutdatedDependencies.length; j++) { -/******/ dependency = moduleOutdatedDependencies[j]; -/******/ idx = module.children.indexOf(dependency); -/******/ if(idx >= 0) module.children.splice(idx, 1); -/******/ } -/******/ } -/******/ } -/******/ } -/******/ -/******/ // Not in "apply" phase -/******/ hotSetStatus("apply"); -/******/ -/******/ hotCurrentHash = hotUpdateNewHash; -/******/ -/******/ // insert new code -/******/ for(moduleId in appliedUpdate) { -/******/ if(Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) { -/******/ modules[moduleId] = appliedUpdate[moduleId]; -/******/ } -/******/ } -/******/ -/******/ // call accept handlers -/******/ var error = null; -/******/ for(moduleId in outdatedDependencies) { -/******/ if(Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)) { -/******/ module = installedModules[moduleId]; -/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId]; -/******/ var callbacks = []; -/******/ for(i = 0; i < moduleOutdatedDependencies.length; i++) { -/******/ dependency = moduleOutdatedDependencies[i]; -/******/ cb = module.hot._acceptedDependencies[dependency]; -/******/ if(callbacks.indexOf(cb) >= 0) continue; -/******/ callbacks.push(cb); -/******/ } -/******/ for(i = 0; i < callbacks.length; i++) { -/******/ cb = callbacks[i]; -/******/ try { -/******/ cb(moduleOutdatedDependencies); -/******/ } catch(err) { -/******/ if(options.onErrored) { -/******/ options.onErrored({ -/******/ type: "accept-errored", -/******/ moduleId: moduleId, -/******/ dependencyId: moduleOutdatedDependencies[i], -/******/ error: err -/******/ }); -/******/ } -/******/ if(!options.ignoreErrored) { -/******/ if(!error) -/******/ error = err; -/******/ } -/******/ } -/******/ } -/******/ } -/******/ } -/******/ -/******/ // Load self accepted modules -/******/ for(i = 0; i < outdatedSelfAcceptedModules.length; i++) { -/******/ var item = outdatedSelfAcceptedModules[i]; -/******/ moduleId = item.module; -/******/ hotCurrentParents = [moduleId]; -/******/ try { -/******/ __webpack_require__(moduleId); -/******/ } catch(err) { -/******/ if(typeof item.errorHandler === "function") { -/******/ try { -/******/ item.errorHandler(err); -/******/ } catch(err2) { -/******/ if(options.onErrored) { -/******/ options.onErrored({ -/******/ type: "self-accept-error-handler-errored", -/******/ moduleId: moduleId, -/******/ error: err2, -/******/ orginalError: err -/******/ }); -/******/ } -/******/ if(!options.ignoreErrored) { -/******/ if(!error) -/******/ error = err2; -/******/ } -/******/ if(!error) -/******/ error = err; -/******/ } -/******/ } else { -/******/ if(options.onErrored) { -/******/ options.onErrored({ -/******/ type: "self-accept-errored", -/******/ moduleId: moduleId, -/******/ error: err -/******/ }); -/******/ } -/******/ if(!options.ignoreErrored) { -/******/ if(!error) -/******/ error = err; -/******/ } -/******/ } -/******/ } -/******/ } -/******/ -/******/ // handle errors in accept handlers and self accepted module load -/******/ if(error) { -/******/ hotSetStatus("fail"); -/******/ return Promise.reject(error); -/******/ } -/******/ -/******/ hotSetStatus("idle"); -/******/ return new Promise(function(resolve) { -/******/ resolve(outdatedModules); -/******/ }); -/******/ } -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // objects to store loaded and loading chunks -/******/ var installedChunks = { -/******/ 2: 0 -/******/ }; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {}, -/******/ hot: hotCreateModule(moduleId), -/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp), -/******/ children: [] -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId)); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData === 0) { -/******/ return new Promise(function(resolve) { resolve(); }); -/******/ } -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ return installedChunkData[2]; -/******/ } -/******/ -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ installedChunkData[2] = promise; -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ script.type = 'text/javascript'; -/******/ script.charset = 'utf-8'; -/******/ script.async = true; -/******/ script.timeout = 120000; -/******/ -/******/ if (__webpack_require__.nc) { -/******/ script.setAttribute("nonce", __webpack_require__.nc); -/******/ } -/******/ script.src = __webpack_require__.p + "js/" + chunkId + "." + hotCurrentHash.substr(0, 20) + ".js"; -/******/ var timeout = setTimeout(onScriptComplete, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete() { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ chunk[1](new Error('Loading chunk ' + chunkId + ' failed.')); -/******/ } -/******/ installedChunks[chunkId] = undefined; -/******/ } -/******/ }; -/******/ head.appendChild(script); -/******/ -/******/ return promise; -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/app/themes/frama/build/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ // __webpack_hash__ -/******/ __webpack_require__.h = function() { return hotCurrentHash; }; -/******/ }) -/************************************************************************/ -/******/ ([]); diff --git a/assets/js/swiper.js b/assets/js/swiper.js new file mode 100644 index 0000000000000000000000000000000000000000..5953443964f3e622be583ffb9e0cd22e0ecbc86c --- /dev/null +++ b/assets/js/swiper.js @@ -0,0 +1,9291 @@ +/** + * Swiper 6.1.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://swiperjs.com + * + * Copyright 2014-2020 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: July 31, 2020 + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Swiper = factory()); +}(this, (function () { 'use strict'; + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } + + /** + * SSR Window 3.0.0-alpha.4 + * Better handling for window object in SSR environment + * https://github.com/nolimits4web/ssr-window + * + * Copyright 2020, Vladimir Kharlampidi + * + * Licensed under MIT + * + * Released on: May 20, 2020 + */ + + /* eslint-disable no-param-reassign */ + function isObject(obj) { + return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object; + } + + function extend(target, src) { + if (target === void 0) { + target = {}; + } + + if (src === void 0) { + src = {}; + } + + Object.keys(src).forEach(function (key) { + if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) { + extend(target[key], src[key]); + } + }); + } + + var ssrDocument = { + body: {}, + addEventListener: function addEventListener() {}, + removeEventListener: function removeEventListener() {}, + activeElement: { + blur: function blur() {}, + nodeName: '' + }, + querySelector: function querySelector() { + return null; + }, + querySelectorAll: function querySelectorAll() { + return []; + }, + getElementById: function getElementById() { + return null; + }, + createEvent: function createEvent() { + return { + initEvent: function initEvent() {} + }; + }, + createElement: function createElement() { + return { + children: [], + childNodes: [], + style: {}, + setAttribute: function setAttribute() {}, + getElementsByTagName: function getElementsByTagName() { + return []; + } + }; + }, + createElementNS: function createElementNS() { + return {}; + }, + importNode: function importNode() { + return null; + }, + location: { + hash: '', + host: '', + hostname: '', + href: '', + origin: '', + pathname: '', + protocol: '', + search: '' + } + }; + + function getDocument() { + var doc = typeof document !== 'undefined' ? document : {}; + extend(doc, ssrDocument); + return doc; + } + + var ssrWindow = { + document: ssrDocument, + navigator: { + userAgent: '' + }, + location: { + hash: '', + host: '', + hostname: '', + href: '', + origin: '', + pathname: '', + protocol: '', + search: '' + }, + history: { + replaceState: function replaceState() {}, + pushState: function pushState() {}, + go: function go() {}, + back: function back() {} + }, + CustomEvent: function CustomEvent() { + return this; + }, + addEventListener: function addEventListener() {}, + removeEventListener: function removeEventListener() {}, + getComputedStyle: function getComputedStyle() { + return { + getPropertyValue: function getPropertyValue() { + return ''; + } + }; + }, + Image: function Image() {}, + Date: function Date() {}, + screen: {}, + setTimeout: function setTimeout() {}, + clearTimeout: function clearTimeout() {}, + matchMedia: function matchMedia() { + return {}; + }, + requestAnimationFrame: function requestAnimationFrame(callback) { + if (typeof setTimeout === 'undefined') { + callback(); + return null; + } + + return setTimeout(callback, 0); + }, + cancelAnimationFrame: function cancelAnimationFrame(id) { + if (typeof setTimeout === 'undefined') { + return; + } + + clearTimeout(id); + } + }; + + function getWindow() { + var win = typeof window !== 'undefined' ? window : {}; + extend(win, ssrWindow); + return win; + } + + /** + * Dom7 3.0.0-alpha.7 + * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API + * https://framework7.io/docs/dom7.html + * + * Copyright 2020, Vladimir Kharlampidi + * + * Licensed under MIT + * + * Released on: July 14, 2020 + */ + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); + } + + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } + } + + function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); + } + + function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; + } + + function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); + } + + function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; + } + /* eslint-disable no-proto */ + + + function makeReactive(obj) { + var proto = obj.__proto__; + Object.defineProperty(obj, '__proto__', { + get: function get() { + return proto; + }, + set: function set(value) { + proto.__proto__ = value; + } + }); + } + + var Dom7 = /*#__PURE__*/function (_Array) { + _inheritsLoose(Dom7, _Array); + + function Dom7(items) { + var _this; + + _this = _Array.call.apply(_Array, [this].concat(items)) || this; + makeReactive(_assertThisInitialized(_this)); + return _this; + } + + return Dom7; + }( /*#__PURE__*/_wrapNativeSuper(Array)); + + function arrayFlat(arr) { + if (arr === void 0) { + arr = []; + } + + var res = []; + arr.forEach(function (el) { + if (Array.isArray(el)) { + res.push.apply(res, arrayFlat(el)); + } else { + res.push(el); + } + }); + return res; + } + + function arrayFilter(arr, callback) { + return Array.prototype.filter.call(arr, callback); + } + + function arrayUnique(arr) { + var uniqueArray = []; + + for (var i = 0; i < arr.length; i += 1) { + if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]); + } + + return uniqueArray; + } + + function qsa(selector, context) { + if (typeof selector !== 'string') { + return [selector]; + } + + var a = []; + var res = context.querySelectorAll(selector); + + for (var i = 0; i < res.length; i += 1) { + a.push(res[i]); + } + + return a; + } + + function $(selector, context) { + var window = getWindow(); + var document = getDocument(); + var arr = []; + + if (!context && selector instanceof Dom7) { + return selector; + } + + if (!selector) { + return new Dom7(arr); + } + + if (typeof selector === 'string') { + var html = selector.trim(); + + if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { + var toCreate = 'div'; + if (html.indexOf('<li') === 0) toCreate = 'ul'; + if (html.indexOf('<tr') === 0) toCreate = 'tbody'; + if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr'; + if (html.indexOf('<tbody') === 0) toCreate = 'table'; + if (html.indexOf('<option') === 0) toCreate = 'select'; + var tempParent = document.createElement(toCreate); + tempParent.innerHTML = html; + + for (var i = 0; i < tempParent.childNodes.length; i += 1) { + arr.push(tempParent.childNodes[i]); + } + } else { + arr = qsa(selector.trim(), context || document); + } // arr = qsa(selector, document); + + } else if (selector.nodeType || selector === window || selector === document) { + arr.push(selector); + } else if (Array.isArray(selector)) { + if (selector instanceof Dom7) return selector; + arr = selector; + } + + return new Dom7(arrayUnique(arr)); + } + + $.fn = Dom7.prototype; + + function addClass() { + for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) { + classes[_key] = arguments[_key]; + } + + var classNames = arrayFlat(classes.map(function (c) { + return c.split(' '); + })); + this.forEach(function (el) { + var _el$classList; + + (_el$classList = el.classList).add.apply(_el$classList, classNames); + }); + return this; + } + + function removeClass() { + for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + classes[_key2] = arguments[_key2]; + } + + var classNames = arrayFlat(classes.map(function (c) { + return c.split(' '); + })); + this.forEach(function (el) { + var _el$classList2; + + (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames); + }); + return this; + } + + function toggleClass() { + for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + classes[_key3] = arguments[_key3]; + } + + var classNames = arrayFlat(classes.map(function (c) { + return c.split(' '); + })); + this.forEach(function (el) { + classNames.forEach(function (className) { + el.classList.toggle(className); + }); + }); + } + + function hasClass() { + for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + classes[_key4] = arguments[_key4]; + } + + var classNames = arrayFlat(classes.map(function (c) { + return c.split(' '); + })); + return arrayFilter(this, function (el) { + return classNames.filter(function (className) { + return el.classList.contains(className); + }).length > 0; + }).length > 0; + } + + function attr(attrs, value) { + if (arguments.length === 1 && typeof attrs === 'string') { + // Get attr + if (this[0]) return this[0].getAttribute(attrs); + return undefined; + } // Set attrs + + + for (var i = 0; i < this.length; i += 1) { + if (arguments.length === 2) { + // String + this[i].setAttribute(attrs, value); + } else { + // Object + for (var attrName in attrs) { + this[i][attrName] = attrs[attrName]; + this[i].setAttribute(attrName, attrs[attrName]); + } + } + } + + return this; + } + + function removeAttr(attr) { + for (var i = 0; i < this.length; i += 1) { + this[i].removeAttribute(attr); + } + + return this; + } + + function transform(transform) { + for (var i = 0; i < this.length; i += 1) { + this[i].style.transform = transform; + } + + return this; + } + + function transition(duration) { + for (var i = 0; i < this.length; i += 1) { + this[i].style.transition = typeof duration !== 'string' ? duration + "ms" : duration; + } + + return this; + } + + function on() { + for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } + + var eventType = args[0], + targetSelector = args[1], + listener = args[2], + capture = args[3]; + + if (typeof args[1] === 'function') { + eventType = args[0]; + listener = args[1]; + capture = args[2]; + targetSelector = undefined; + } + + if (!capture) capture = false; + + function handleLiveEvent(e) { + var target = e.target; + if (!target) return; + var eventData = e.target.dom7EventData || []; + + if (eventData.indexOf(e) < 0) { + eventData.unshift(e); + } + + if ($(target).is(targetSelector)) listener.apply(target, eventData);else { + var _parents = $(target).parents(); // eslint-disable-line + + + for (var k = 0; k < _parents.length; k += 1) { + if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData); + } + } + } + + function handleEvent(e) { + var eventData = e && e.target ? e.target.dom7EventData || [] : []; + + if (eventData.indexOf(e) < 0) { + eventData.unshift(e); + } + + listener.apply(this, eventData); + } + + var events = eventType.split(' '); + var j; + + for (var i = 0; i < this.length; i += 1) { + var el = this[i]; + + if (!targetSelector) { + for (j = 0; j < events.length; j += 1) { + var event = events[j]; + if (!el.dom7Listeners) el.dom7Listeners = {}; + if (!el.dom7Listeners[event]) el.dom7Listeners[event] = []; + el.dom7Listeners[event].push({ + listener: listener, + proxyListener: handleEvent + }); + el.addEventListener(event, handleEvent, capture); + } + } else { + // Live events + for (j = 0; j < events.length; j += 1) { + var _event = events[j]; + if (!el.dom7LiveListeners) el.dom7LiveListeners = {}; + if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = []; + + el.dom7LiveListeners[_event].push({ + listener: listener, + proxyListener: handleLiveEvent + }); + + el.addEventListener(_event, handleLiveEvent, capture); + } + } + } + + return this; + } + + function off() { + for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { + args[_key6] = arguments[_key6]; + } + + var eventType = args[0], + targetSelector = args[1], + listener = args[2], + capture = args[3]; + + if (typeof args[1] === 'function') { + eventType = args[0]; + listener = args[1]; + capture = args[2]; + targetSelector = undefined; + } + + if (!capture) capture = false; + var events = eventType.split(' '); + + for (var i = 0; i < events.length; i += 1) { + var event = events[i]; + + for (var j = 0; j < this.length; j += 1) { + var el = this[j]; + var handlers = void 0; + + if (!targetSelector && el.dom7Listeners) { + handlers = el.dom7Listeners[event]; + } else if (targetSelector && el.dom7LiveListeners) { + handlers = el.dom7LiveListeners[event]; + } + + if (handlers && handlers.length) { + for (var k = handlers.length - 1; k >= 0; k -= 1) { + var handler = handlers[k]; + + if (listener && handler.listener === listener) { + el.removeEventListener(event, handler.proxyListener, capture); + handlers.splice(k, 1); + } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) { + el.removeEventListener(event, handler.proxyListener, capture); + handlers.splice(k, 1); + } else if (!listener) { + el.removeEventListener(event, handler.proxyListener, capture); + handlers.splice(k, 1); + } + } + } + } + } + + return this; + } + + function trigger() { + var window = getWindow(); + + for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { + args[_key9] = arguments[_key9]; + } + + var events = args[0].split(' '); + var eventData = args[1]; + + for (var i = 0; i < events.length; i += 1) { + var event = events[i]; + + for (var j = 0; j < this.length; j += 1) { + var el = this[j]; + + if (window.CustomEvent) { + var evt = new window.CustomEvent(event, { + detail: eventData, + bubbles: true, + cancelable: true + }); + el.dom7EventData = args.filter(function (data, dataIndex) { + return dataIndex > 0; + }); + el.dispatchEvent(evt); + el.dom7EventData = []; + delete el.dom7EventData; + } + } + } + + return this; + } + + function transitionEnd(callback) { + var dom = this; + + function fireCallBack(e) { + if (e.target !== this) return; + callback.call(this, e); + dom.off('transitionend', fireCallBack); + } + + if (callback) { + dom.on('transitionend', fireCallBack); + } + + return this; + } + + function outerWidth(includeMargins) { + if (this.length > 0) { + if (includeMargins) { + var _styles = this.styles(); + + return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left')); + } + + return this[0].offsetWidth; + } + + return null; + } + + function outerHeight(includeMargins) { + if (this.length > 0) { + if (includeMargins) { + var _styles2 = this.styles(); + + return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom')); + } + + return this[0].offsetHeight; + } + + return null; + } + + function offset() { + if (this.length > 0) { + var window = getWindow(); + var document = getDocument(); + var el = this[0]; + var box = el.getBoundingClientRect(); + var body = document.body; + var clientTop = el.clientTop || body.clientTop || 0; + var clientLeft = el.clientLeft || body.clientLeft || 0; + var scrollTop = el === window ? window.scrollY : el.scrollTop; + var scrollLeft = el === window ? window.scrollX : el.scrollLeft; + return { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; + } + + return null; + } + + function styles() { + var window = getWindow(); + if (this[0]) return window.getComputedStyle(this[0], null); + return {}; + } + + function css(props, value) { + var window = getWindow(); + var i; + + if (arguments.length === 1) { + if (typeof props === 'string') { + // .css('width') + if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props); + } else { + // .css({ width: '100px' }) + for (i = 0; i < this.length; i += 1) { + for (var _prop in props) { + this[i].style[_prop] = props[_prop]; + } + } + + return this; + } + } + + if (arguments.length === 2 && typeof props === 'string') { + // .css('width', '100px') + for (i = 0; i < this.length; i += 1) { + this[i].style[props] = value; + } + + return this; + } + + return this; + } + + function each(callback) { + if (!callback) return this; + this.forEach(function (el, index) { + callback.apply(el, [el, index]); + }); + return this; + } + + function filter(callback) { + var result = arrayFilter(this, callback); + return $(result); + } + + function html(html) { + if (typeof html === 'undefined') { + return this[0] ? this[0].innerHTML : null; + } + + for (var i = 0; i < this.length; i += 1) { + this[i].innerHTML = html; + } + + return this; + } + + function text(text) { + if (typeof text === 'undefined') { + return this[0] ? this[0].textContent.trim() : null; + } + + for (var i = 0; i < this.length; i += 1) { + this[i].textContent = text; + } + + return this; + } + + function is(selector) { + var window = getWindow(); + var document = getDocument(); + var el = this[0]; + var compareWith; + var i; + if (!el || typeof selector === 'undefined') return false; + + if (typeof selector === 'string') { + if (el.matches) return el.matches(selector); + if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); + if (el.msMatchesSelector) return el.msMatchesSelector(selector); + compareWith = $(selector); + + for (i = 0; i < compareWith.length; i += 1) { + if (compareWith[i] === el) return true; + } + + return false; + } + + if (selector === document) { + return el === document; + } + + if (selector === window) { + return el === window; + } + + if (selector.nodeType || selector instanceof Dom7) { + compareWith = selector.nodeType ? [selector] : selector; + + for (i = 0; i < compareWith.length; i += 1) { + if (compareWith[i] === el) return true; + } + + return false; + } + + return false; + } + + function index() { + var child = this[0]; + var i; + + if (child) { + i = 0; // eslint-disable-next-line + + while ((child = child.previousSibling) !== null) { + if (child.nodeType === 1) i += 1; + } + + return i; + } + + return undefined; + } + + function eq(index) { + if (typeof index === 'undefined') return this; + var length = this.length; + + if (index > length - 1) { + return $([]); + } + + if (index < 0) { + var returnIndex = length + index; + if (returnIndex < 0) return $([]); + return $([this[returnIndex]]); + } + + return $([this[index]]); + } + + function append() { + var newChild; + var document = getDocument(); + + for (var k = 0; k < arguments.length; k += 1) { + newChild = k < 0 || arguments.length <= k ? undefined : arguments[k]; + + for (var i = 0; i < this.length; i += 1) { + if (typeof newChild === 'string') { + var tempDiv = document.createElement('div'); + tempDiv.innerHTML = newChild; + + while (tempDiv.firstChild) { + this[i].appendChild(tempDiv.firstChild); + } + } else if (newChild instanceof Dom7) { + for (var j = 0; j < newChild.length; j += 1) { + this[i].appendChild(newChild[j]); + } + } else { + this[i].appendChild(newChild); + } + } + } + + return this; + } + + function prepend(newChild) { + var document = getDocument(); + var i; + var j; + + for (i = 0; i < this.length; i += 1) { + if (typeof newChild === 'string') { + var tempDiv = document.createElement('div'); + tempDiv.innerHTML = newChild; + + for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) { + this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); + } + } else if (newChild instanceof Dom7) { + for (j = 0; j < newChild.length; j += 1) { + this[i].insertBefore(newChild[j], this[i].childNodes[0]); + } + } else { + this[i].insertBefore(newChild, this[i].childNodes[0]); + } + } + + return this; + } + + function next(selector) { + if (this.length > 0) { + if (selector) { + if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) { + return $([this[0].nextElementSibling]); + } + + return $([]); + } + + if (this[0].nextElementSibling) return $([this[0].nextElementSibling]); + return $([]); + } + + return $([]); + } + + function nextAll(selector) { + var nextEls = []; + var el = this[0]; + if (!el) return $([]); + + while (el.nextElementSibling) { + var _next = el.nextElementSibling; // eslint-disable-line + + if (selector) { + if ($(_next).is(selector)) nextEls.push(_next); + } else nextEls.push(_next); + + el = _next; + } + + return $(nextEls); + } + + function prev(selector) { + if (this.length > 0) { + var el = this[0]; + + if (selector) { + if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) { + return $([el.previousElementSibling]); + } + + return $([]); + } + + if (el.previousElementSibling) return $([el.previousElementSibling]); + return $([]); + } + + return $([]); + } + + function prevAll(selector) { + var prevEls = []; + var el = this[0]; + if (!el) return $([]); + + while (el.previousElementSibling) { + var _prev = el.previousElementSibling; // eslint-disable-line + + if (selector) { + if ($(_prev).is(selector)) prevEls.push(_prev); + } else prevEls.push(_prev); + + el = _prev; + } + + return $(prevEls); + } + + function parent(selector) { + var parents = []; // eslint-disable-line + + for (var i = 0; i < this.length; i += 1) { + if (this[i].parentNode !== null) { + if (selector) { + if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); + } else { + parents.push(this[i].parentNode); + } + } + } + + return $(parents); + } + + function parents(selector) { + var parents = []; // eslint-disable-line + + for (var i = 0; i < this.length; i += 1) { + var _parent = this[i].parentNode; // eslint-disable-line + + while (_parent) { + if (selector) { + if ($(_parent).is(selector)) parents.push(_parent); + } else { + parents.push(_parent); + } + + _parent = _parent.parentNode; + } + } + + return $(parents); + } + + function closest(selector) { + var closest = this; // eslint-disable-line + + if (typeof selector === 'undefined') { + return $([]); + } + + if (!closest.is(selector)) { + closest = closest.parents(selector).eq(0); + } + + return closest; + } + + function find(selector) { + var foundElements = []; + + for (var i = 0; i < this.length; i += 1) { + var found = this[i].querySelectorAll(selector); + + for (var j = 0; j < found.length; j += 1) { + foundElements.push(found[j]); + } + } + + return $(foundElements); + } + + function children(selector) { + var children = []; // eslint-disable-line + + for (var i = 0; i < this.length; i += 1) { + var childNodes = this[i].children; + + for (var j = 0; j < childNodes.length; j += 1) { + if (!selector || $(childNodes[j]).is(selector)) { + children.push(childNodes[j]); + } + } + } + + return $(children); + } + + function remove() { + for (var i = 0; i < this.length; i += 1) { + if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); + } + + return this; + } + + var Methods = { + addClass: addClass, + removeClass: removeClass, + hasClass: hasClass, + toggleClass: toggleClass, + attr: attr, + removeAttr: removeAttr, + transform: transform, + transition: transition, + on: on, + off: off, + trigger: trigger, + transitionEnd: transitionEnd, + outerWidth: outerWidth, + outerHeight: outerHeight, + styles: styles, + offset: offset, + css: css, + each: each, + html: html, + text: text, + is: is, + index: index, + eq: eq, + append: append, + prepend: prepend, + next: next, + nextAll: nextAll, + prev: prev, + prevAll: prevAll, + parent: parent, + parents: parents, + closest: closest, + find: find, + children: children, + filter: filter, + remove: remove + }; + Object.keys(Methods).forEach(function (methodName) { + $.fn[methodName] = Methods[methodName]; + }); + + function deleteProps(obj) { + var object = obj; + Object.keys(object).forEach(function (key) { + try { + object[key] = null; + } catch (e) {// no getter for object + } + + try { + delete object[key]; + } catch (e) {// something got wrong + } + }); + } + + function nextTick(callback, delay) { + if (delay === void 0) { + delay = 0; + } + + return setTimeout(callback, delay); + } + + function now() { + return Date.now(); + } + + function getTranslate(el, axis) { + if (axis === void 0) { + axis = 'x'; + } + + var window = getWindow(); + var matrix; + var curTransform; + var transformMatrix; + var curStyle = window.getComputedStyle(el, null); + + if (window.WebKitCSSMatrix) { + curTransform = curStyle.transform || curStyle.webkitTransform; + + if (curTransform.split(',').length > 6) { + curTransform = curTransform.split(', ').map(function (a) { + return a.replace(',', '.'); + }).join(', '); + } // Some old versions of Webkit choke when 'none' is passed; pass + // empty string instead in this case + + + transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); + } else { + transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); + matrix = transformMatrix.toString().split(','); + } + + if (axis === 'x') { + // Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix + else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers + else curTransform = parseFloat(matrix[4]); + } + + if (axis === 'y') { + // Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix + else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers + else curTransform = parseFloat(matrix[5]); + } + + return curTransform || 0; + } + + function isObject$1(o) { + return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object; + } + + function extend$1() { + var to = Object(arguments.length <= 0 ? undefined : arguments[0]); + + for (var i = 1; i < arguments.length; i += 1) { + var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i]; + + if (nextSource !== undefined && nextSource !== null) { + var keysArray = Object.keys(Object(nextSource)); + + for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { + var nextKey = keysArray[nextIndex]; + var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); + + if (desc !== undefined && desc.enumerable) { + if (isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) { + extend$1(to[nextKey], nextSource[nextKey]); + } else if (!isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) { + to[nextKey] = {}; + extend$1(to[nextKey], nextSource[nextKey]); + } else { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + } + + return to; + } + + function bindModuleMethods(instance, obj) { + Object.keys(obj).forEach(function (key) { + if (isObject$1(obj[key])) { + Object.keys(obj[key]).forEach(function (subKey) { + if (typeof obj[key][subKey] === 'function') { + obj[key][subKey] = obj[key][subKey].bind(instance); + } + }); + } + + instance[key] = obj[key]; + }); + } + + var support; + + function calcSupport() { + var window = getWindow(); + var document = getDocument(); + return { + touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch), + pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0, + observer: function checkObserver() { + return 'MutationObserver' in window || 'WebkitMutationObserver' in window; + }(), + passiveListener: function checkPassiveListener() { + var supportsPassive = false; + + try { + var opts = Object.defineProperty({}, 'passive', { + // eslint-disable-next-line + get: function get() { + supportsPassive = true; + } + }); + window.addEventListener('testPassiveListener', null, opts); + } catch (e) {// No support + } + + return supportsPassive; + }(), + gestures: function checkGestures() { + return 'ongesturestart' in window; + }() + }; + } + + function getSupport() { + if (!support) { + support = calcSupport(); + } + + return support; + } + + var device; + + function calcDevice(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + userAgent = _ref.userAgent; + + var support = getSupport(); + var window = getWindow(); + var platform = window.navigator.platform; + var ua = userAgent || window.navigator.userAgent; + var device = { + ios: false, + android: false + }; + var screenWidth = window.screen.width; + var screenHeight = window.screen.height; + var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line + + var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); + var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); + var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); + var windows = platform === 'Win32'; + var macos = platform === 'MacIntel'; // iPadOs 13 fix + + var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768']; + + if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + "x" + screenHeight) >= 0) { + ipad = ua.match(/(Version)\/([\d.]+)/); + if (!ipad) ipad = [0, 1, '13_0_0']; + macos = false; + } // Android + + + if (android && !windows) { + device.os = 'android'; + device.android = true; + } + + if (ipad || iphone || ipod) { + device.os = 'ios'; + device.ios = true; + } // Export object + + + return device; + } + + function getDevice(overrides) { + if (overrides === void 0) { + overrides = {}; + } + + if (!device) { + device = calcDevice(overrides); + } + + return device; + } + + var browser; + + function calcBrowser() { + var window = getWindow(); + + function isSafari() { + var ua = window.navigator.userAgent.toLowerCase(); + return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; + } + + return { + isEdge: !!window.navigator.userAgent.match(/Edge/g), + isSafari: isSafari(), + isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent) + }; + } + + function getBrowser() { + if (!browser) { + browser = calcBrowser(); + } + + return browser; + } + + var Resize = { + name: 'resize', + create: function create() { + var swiper = this; + extend$1(swiper, { + resize: { + resizeHandler: function resizeHandler() { + if (!swiper || swiper.destroyed || !swiper.initialized) return; + swiper.emit('beforeResize'); + swiper.emit('resize'); + }, + orientationChangeHandler: function orientationChangeHandler() { + if (!swiper || swiper.destroyed || !swiper.initialized) return; + swiper.emit('orientationchange'); + } + } + }); + }, + on: { + init: function init(swiper) { + var window = getWindow(); // Emit resize + + window.addEventListener('resize', swiper.resize.resizeHandler); // Emit orientationchange + + window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler); + }, + destroy: function destroy(swiper) { + var window = getWindow(); + window.removeEventListener('resize', swiper.resize.resizeHandler); + window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler); + } + } + }; + + var Observer = { + attach: function attach(target, options) { + if (options === void 0) { + options = {}; + } + + var window = getWindow(); + var swiper = this; + var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; + var observer = new ObserverFunc(function (mutations) { + // The observerUpdate event should only be triggered + // once despite the number of mutations. Additional + // triggers are redundant and are very costly + if (mutations.length === 1) { + swiper.emit('observerUpdate', mutations[0]); + return; + } + + var observerUpdate = function observerUpdate() { + swiper.emit('observerUpdate', mutations[0]); + }; + + if (window.requestAnimationFrame) { + window.requestAnimationFrame(observerUpdate); + } else { + window.setTimeout(observerUpdate, 0); + } + }); + observer.observe(target, { + attributes: typeof options.attributes === 'undefined' ? true : options.attributes, + childList: typeof options.childList === 'undefined' ? true : options.childList, + characterData: typeof options.characterData === 'undefined' ? true : options.characterData + }); + swiper.observer.observers.push(observer); + }, + init: function init() { + var swiper = this; + if (!swiper.support.observer || !swiper.params.observer) return; + + if (swiper.params.observeParents) { + var containerParents = swiper.$el.parents(); + + for (var i = 0; i < containerParents.length; i += 1) { + swiper.observer.attach(containerParents[i]); + } + } // Observe container + + + swiper.observer.attach(swiper.$el[0], { + childList: swiper.params.observeSlideChildren + }); // Observe wrapper + + swiper.observer.attach(swiper.$wrapperEl[0], { + attributes: false + }); + }, + destroy: function destroy() { + var swiper = this; + swiper.observer.observers.forEach(function (observer) { + observer.disconnect(); + }); + swiper.observer.observers = []; + } + }; + var Observer$1 = { + name: 'observer', + params: { + observer: false, + observeParents: false, + observeSlideChildren: false + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + observer: _extends(_extends({}, Observer), {}, { + observers: [] + }) + }); + }, + on: { + init: function init(swiper) { + swiper.observer.init(); + }, + destroy: function destroy(swiper) { + swiper.observer.destroy(); + } + } + }; + + var modular = { + useParams: function useParams(instanceParams) { + var instance = this; + if (!instance.modules) return; + Object.keys(instance.modules).forEach(function (moduleName) { + var module = instance.modules[moduleName]; // Extend params + + if (module.params) { + extend$1(instanceParams, module.params); + } + }); + }, + useModules: function useModules(modulesParams) { + if (modulesParams === void 0) { + modulesParams = {}; + } + + var instance = this; + if (!instance.modules) return; + Object.keys(instance.modules).forEach(function (moduleName) { + var module = instance.modules[moduleName]; + var moduleParams = modulesParams[moduleName] || {}; // Add event listeners + + if (module.on && instance.on) { + Object.keys(module.on).forEach(function (moduleEventName) { + instance.on(moduleEventName, module.on[moduleEventName]); + }); + } // Module create callback + + + if (module.create) { + module.create.bind(instance)(moduleParams); + } + }); + } + }; + + /* eslint-disable no-underscore-dangle */ + var eventsEmitter = { + on: function on(events, handler, priority) { + var self = this; + if (typeof handler !== 'function') return self; + var method = priority ? 'unshift' : 'push'; + events.split(' ').forEach(function (event) { + if (!self.eventsListeners[event]) self.eventsListeners[event] = []; + self.eventsListeners[event][method](handler); + }); + return self; + }, + once: function once(events, handler, priority) { + var self = this; + if (typeof handler !== 'function') return self; + + function onceHandler() { + self.off(events, onceHandler); + + if (onceHandler.__emitterProxy) { + delete onceHandler.__emitterProxy; + } + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + handler.apply(self, args); + } + + onceHandler.__emitterProxy = handler; + return self.on(events, onceHandler, priority); + }, + onAny: function onAny(handler, priority) { + var self = this; + if (typeof handler !== 'function') return self; + var method = priority ? 'unshift' : 'push'; + + if (self.eventsAnyListeners.indexOf(handler) < 0) { + self.eventsAnyListeners[method](handler); + } + + return self; + }, + offAny: function offAny(handler) { + var self = this; + if (!self.eventsAnyListeners) return self; + var index = self.eventsAnyListeners.indexOf(handler); + + if (index >= 0) { + self.eventsAnyListeners.splice(index, 1); + } + + return self; + }, + off: function off(events, handler) { + var self = this; + if (!self.eventsListeners) return self; + events.split(' ').forEach(function (event) { + if (typeof handler === 'undefined') { + self.eventsListeners[event] = []; + } else if (self.eventsListeners[event]) { + self.eventsListeners[event].forEach(function (eventHandler, index) { + if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { + self.eventsListeners[event].splice(index, 1); + } + }); + } + }); + return self; + }, + emit: function emit() { + var self = this; + if (!self.eventsListeners) return self; + var events; + var data; + var context; + + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + if (typeof args[0] === 'string' || Array.isArray(args[0])) { + events = args[0]; + data = args.slice(1, args.length); + context = self; + } else { + events = args[0].events; + data = args[0].data; + context = args[0].context || self; + } + + data.unshift(context); + var eventsArray = Array.isArray(events) ? events : events.split(' '); + eventsArray.forEach(function (event) { + if (self.eventsListeners && self.eventsListeners[event]) { + var handlers = []; + self.eventsListeners[event].forEach(function (eventHandler) { + handlers.push(eventHandler); + }); + handlers.forEach(function (eventHandler) { + eventHandler.apply(context, data); + }); + } + }); + return self; + } + }; + + function updateSize() { + var swiper = this; + var width; + var height; + var $el = swiper.$el; + + if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { + width = swiper.params.width; + } else { + width = $el[0].clientWidth; + } + + if (typeof swiper.params.height !== 'undefined' && swiper.params.width !== null) { + height = swiper.params.height; + } else { + height = $el[0].clientHeight; + } + + if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { + return; + } // Subtract paddings + + + width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10); + height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10); + if (Number.isNaN(width)) width = 0; + if (Number.isNaN(height)) height = 0; + extend$1(swiper, { + width: width, + height: height, + size: swiper.isHorizontal() ? width : height + }); + } + + function updateSlides() { + var swiper = this; + var window = getWindow(); + var params = swiper.params; + var $wrapperEl = swiper.$wrapperEl, + swiperSize = swiper.size, + rtl = swiper.rtlTranslate, + wrongRTL = swiper.wrongRTL; + var isVirtual = swiper.virtual && params.virtual.enabled; + var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; + var slides = $wrapperEl.children("." + swiper.params.slideClass); + var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; + var snapGrid = []; + var slidesGrid = []; + var slidesSizesGrid = []; + + function slidesForMargin(slideEl, slideIndex) { + if (!params.cssMode) return true; + + if (slideIndex === slides.length - 1) { + return false; + } + + return true; + } + + var offsetBefore = params.slidesOffsetBefore; + + if (typeof offsetBefore === 'function') { + offsetBefore = params.slidesOffsetBefore.call(swiper); + } + + var offsetAfter = params.slidesOffsetAfter; + + if (typeof offsetAfter === 'function') { + offsetAfter = params.slidesOffsetAfter.call(swiper); + } + + var previousSnapGridLength = swiper.snapGrid.length; + var previousSlidesGridLength = swiper.snapGrid.length; + var spaceBetween = params.spaceBetween; + var slidePosition = -offsetBefore; + var prevSlideSize = 0; + var index = 0; + + if (typeof swiperSize === 'undefined') { + return; + } + + if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { + spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; + } + + swiper.virtualSize = -spaceBetween; // reset margins + + if (rtl) slides.css({ + marginLeft: '', + marginTop: '' + });else slides.css({ + marginRight: '', + marginBottom: '' + }); + var slidesNumberEvenToRows; + + if (params.slidesPerColumn > 1) { + if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) { + slidesNumberEvenToRows = slidesLength; + } else { + slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn; + } + + if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') { + slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn); + } + } // Calc slides + + + var slideSize; + var slidesPerColumn = params.slidesPerColumn; + var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; + var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn); + + for (var i = 0; i < slidesLength; i += 1) { + slideSize = 0; + var slide = slides.eq(i); + + if (params.slidesPerColumn > 1) { + // Set slides order + var newSlideOrderIndex = void 0; + var column = void 0; + var row = void 0; + + if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) { + var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn)); + var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex; + var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup); + row = Math.floor(slideIndexInGroup / columnsInGroup); + column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup; + newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; + slide.css({ + '-webkit-box-ordinal-group': newSlideOrderIndex, + '-moz-box-ordinal-group': newSlideOrderIndex, + '-ms-flex-order': newSlideOrderIndex, + '-webkit-order': newSlideOrderIndex, + order: newSlideOrderIndex + }); + } else if (params.slidesPerColumnFill === 'column') { + column = Math.floor(i / slidesPerColumn); + row = i - column * slidesPerColumn; + + if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) { + row += 1; + + if (row >= slidesPerColumn) { + row = 0; + column += 1; + } + } + } else { + row = Math.floor(i / slidesPerRow); + column = i - row * slidesPerRow; + } + + slide.css("margin-" + (swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && params.spaceBetween + "px"); + } + + if (slide.css('display') === 'none') continue; // eslint-disable-line + + if (params.slidesPerView === 'auto') { + var slideStyles = window.getComputedStyle(slide[0], null); + var currentTransform = slide[0].style.transform; + var currentWebKitTransform = slide[0].style.webkitTransform; + + if (currentTransform) { + slide[0].style.transform = 'none'; + } + + if (currentWebKitTransform) { + slide[0].style.webkitTransform = 'none'; + } + + if (params.roundLengths) { + slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); + } else { + // eslint-disable-next-line + if (swiper.isHorizontal()) { + var width = parseFloat(slideStyles.getPropertyValue('width') || 0); + var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left') || 0); + var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right') || 0); + var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left') || 0); + var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right') || 0); + var boxSizing = slideStyles.getPropertyValue('box-sizing'); + + if (boxSizing && boxSizing === 'border-box') { + slideSize = width + marginLeft + marginRight; + } else { + slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight; + } + } else { + var height = parseFloat(slideStyles.getPropertyValue('height') || 0); + var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top') || 0); + var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom') || 0); + var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top') || 0); + var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom') || 0); + + var _boxSizing = slideStyles.getPropertyValue('box-sizing'); + + if (_boxSizing && _boxSizing === 'border-box') { + slideSize = height + marginTop + marginBottom; + } else { + slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom; + } + } + } + + if (currentTransform) { + slide[0].style.transform = currentTransform; + } + + if (currentWebKitTransform) { + slide[0].style.webkitTransform = currentWebKitTransform; + } + + if (params.roundLengths) slideSize = Math.floor(slideSize); + } else { + slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; + if (params.roundLengths) slideSize = Math.floor(slideSize); + + if (slides[i]) { + if (swiper.isHorizontal()) { + slides[i].style.width = slideSize + "px"; + } else { + slides[i].style.height = slideSize + "px"; + } + } + } + + if (slides[i]) { + slides[i].swiperSlideSize = slideSize; + } + + slidesSizesGrid.push(slideSize); + + if (params.centeredSlides) { + slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; + if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; + if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; + if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; + if (params.roundLengths) slidePosition = Math.floor(slidePosition); + if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); + slidesGrid.push(slidePosition); + } else { + if (params.roundLengths) slidePosition = Math.floor(slidePosition); + if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); + slidesGrid.push(slidePosition); + slidePosition = slidePosition + slideSize + spaceBetween; + } + + swiper.virtualSize += slideSize + spaceBetween; + prevSlideSize = slideSize; + index += 1; + } + + swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; + var newSlidesGrid; + + if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { + $wrapperEl.css({ + width: swiper.virtualSize + params.spaceBetween + "px" + }); + } + + if (params.setWrapperSize) { + if (swiper.isHorizontal()) $wrapperEl.css({ + width: swiper.virtualSize + params.spaceBetween + "px" + });else $wrapperEl.css({ + height: swiper.virtualSize + params.spaceBetween + "px" + }); + } + + if (params.slidesPerColumn > 1) { + swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows; + swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween; + if (swiper.isHorizontal()) $wrapperEl.css({ + width: swiper.virtualSize + params.spaceBetween + "px" + });else $wrapperEl.css({ + height: swiper.virtualSize + params.spaceBetween + "px" + }); + + if (params.centeredSlides) { + newSlidesGrid = []; + + for (var _i = 0; _i < snapGrid.length; _i += 1) { + var slidesGridItem = snapGrid[_i]; + if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); + if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); + } + + snapGrid = newSlidesGrid; + } + } // Remove last grid elements depending on width + + + if (!params.centeredSlides) { + newSlidesGrid = []; + + for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) { + var _slidesGridItem = snapGrid[_i2]; + if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem); + + if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) { + newSlidesGrid.push(_slidesGridItem); + } + } + + snapGrid = newSlidesGrid; + + if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { + snapGrid.push(swiper.virtualSize - swiperSize); + } + } + + if (snapGrid.length === 0) snapGrid = [0]; + + if (params.spaceBetween !== 0) { + if (swiper.isHorizontal()) { + if (rtl) slides.filter(slidesForMargin).css({ + marginLeft: spaceBetween + "px" + });else slides.filter(slidesForMargin).css({ + marginRight: spaceBetween + "px" + }); + } else slides.filter(slidesForMargin).css({ + marginBottom: spaceBetween + "px" + }); + } + + if (params.centeredSlides && params.centeredSlidesBounds) { + var allSlidesSize = 0; + slidesSizesGrid.forEach(function (slideSizeValue) { + allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); + }); + allSlidesSize -= params.spaceBetween; + var maxSnap = allSlidesSize - swiperSize; + snapGrid = snapGrid.map(function (snap) { + if (snap < 0) return -offsetBefore; + if (snap > maxSnap) return maxSnap + offsetAfter; + return snap; + }); + } + + if (params.centerInsufficientSlides) { + var _allSlidesSize = 0; + slidesSizesGrid.forEach(function (slideSizeValue) { + _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); + }); + _allSlidesSize -= params.spaceBetween; + + if (_allSlidesSize < swiperSize) { + var allSlidesOffset = (swiperSize - _allSlidesSize) / 2; + snapGrid.forEach(function (snap, snapIndex) { + snapGrid[snapIndex] = snap - allSlidesOffset; + }); + slidesGrid.forEach(function (snap, snapIndex) { + slidesGrid[snapIndex] = snap + allSlidesOffset; + }); + } + } + + extend$1(swiper, { + slides: slides, + snapGrid: snapGrid, + slidesGrid: slidesGrid, + slidesSizesGrid: slidesSizesGrid + }); + + if (slidesLength !== previousSlidesLength) { + swiper.emit('slidesLengthChange'); + } + + if (snapGrid.length !== previousSnapGridLength) { + if (swiper.params.watchOverflow) swiper.checkOverflow(); + swiper.emit('snapGridLengthChange'); + } + + if (slidesGrid.length !== previousSlidesGridLength) { + swiper.emit('slidesGridLengthChange'); + } + + if (params.watchSlidesProgress || params.watchSlidesVisibility) { + swiper.updateSlidesOffset(); + } + } + + function updateAutoHeight(speed) { + var swiper = this; + var activeSlides = []; + var newHeight = 0; + var i; + + if (typeof speed === 'number') { + swiper.setTransition(speed); + } else if (speed === true) { + swiper.setTransition(swiper.params.speed); + } // Find slides currently in view + + + if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { + if (swiper.params.centeredSlides) { + swiper.visibleSlides.each(function (slide) { + activeSlides.push(slide); + }); + } else { + for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { + var index = swiper.activeIndex + i; + if (index > swiper.slides.length) break; + activeSlides.push(swiper.slides.eq(index)[0]); + } + } + } else { + activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]); + } // Find new height from highest slide in view + + + for (i = 0; i < activeSlides.length; i += 1) { + if (typeof activeSlides[i] !== 'undefined') { + var height = activeSlides[i].offsetHeight; + newHeight = height > newHeight ? height : newHeight; + } + } // Update Height + + + if (newHeight) swiper.$wrapperEl.css('height', newHeight + "px"); + } + + function updateSlidesOffset() { + var swiper = this; + var slides = swiper.slides; + + for (var i = 0; i < slides.length; i += 1) { + slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop; + } + } + + function updateSlidesProgress(translate) { + if (translate === void 0) { + translate = this && this.translate || 0; + } + + var swiper = this; + var params = swiper.params; + var slides = swiper.slides, + rtl = swiper.rtlTranslate; + if (slides.length === 0) return; + if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); + var offsetCenter = -translate; + if (rtl) offsetCenter = translate; // Visible Slides + + slides.removeClass(params.slideVisibleClass); + swiper.visibleSlidesIndexes = []; + swiper.visibleSlides = []; + + for (var i = 0; i < slides.length; i += 1) { + var slide = slides[i]; + var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween); + + if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) { + var slideBefore = -(offsetCenter - slide.swiperSlideOffset); + var slideAfter = slideBefore + swiper.slidesSizesGrid[i]; + var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; + + if (isVisible) { + swiper.visibleSlides.push(slide); + swiper.visibleSlidesIndexes.push(i); + slides.eq(i).addClass(params.slideVisibleClass); + } + } + + slide.progress = rtl ? -slideProgress : slideProgress; + } + + swiper.visibleSlides = $(swiper.visibleSlides); + } + + function updateProgress(translate) { + var swiper = this; + + if (typeof translate === 'undefined') { + var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line + + translate = swiper && swiper.translate && swiper.translate * multiplier || 0; + } + + var params = swiper.params; + var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); + var progress = swiper.progress, + isBeginning = swiper.isBeginning, + isEnd = swiper.isEnd; + var wasBeginning = isBeginning; + var wasEnd = isEnd; + + if (translatesDiff === 0) { + progress = 0; + isBeginning = true; + isEnd = true; + } else { + progress = (translate - swiper.minTranslate()) / translatesDiff; + isBeginning = progress <= 0; + isEnd = progress >= 1; + } + + extend$1(swiper, { + progress: progress, + isBeginning: isBeginning, + isEnd: isEnd + }); + if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); + + if (isBeginning && !wasBeginning) { + swiper.emit('reachBeginning toEdge'); + } + + if (isEnd && !wasEnd) { + swiper.emit('reachEnd toEdge'); + } + + if (wasBeginning && !isBeginning || wasEnd && !isEnd) { + swiper.emit('fromEdge'); + } + + swiper.emit('progress', progress); + } + + function updateSlidesClasses() { + var swiper = this; + var slides = swiper.slides, + params = swiper.params, + $wrapperEl = swiper.$wrapperEl, + activeIndex = swiper.activeIndex, + realIndex = swiper.realIndex; + var isVirtual = swiper.virtual && params.virtual.enabled; + slides.removeClass(params.slideActiveClass + " " + params.slideNextClass + " " + params.slidePrevClass + " " + params.slideDuplicateActiveClass + " " + params.slideDuplicateNextClass + " " + params.slideDuplicatePrevClass); + var activeSlide; + + if (isVirtual) { + activeSlide = swiper.$wrapperEl.find("." + params.slideClass + "[data-swiper-slide-index=\"" + activeIndex + "\"]"); + } else { + activeSlide = slides.eq(activeIndex); + } // Active classes + + + activeSlide.addClass(params.slideActiveClass); + + if (params.loop) { + // Duplicate to all looped slides + if (activeSlide.hasClass(params.slideDuplicateClass)) { + $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass); + } else { + $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass); + } + } // Next Slide + + + var nextSlide = activeSlide.nextAll("." + params.slideClass).eq(0).addClass(params.slideNextClass); + + if (params.loop && nextSlide.length === 0) { + nextSlide = slides.eq(0); + nextSlide.addClass(params.slideNextClass); + } // Prev Slide + + + var prevSlide = activeSlide.prevAll("." + params.slideClass).eq(0).addClass(params.slidePrevClass); + + if (params.loop && prevSlide.length === 0) { + prevSlide = slides.eq(-1); + prevSlide.addClass(params.slidePrevClass); + } + + if (params.loop) { + // Duplicate to all looped slides + if (nextSlide.hasClass(params.slideDuplicateClass)) { + $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass); + } else { + $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass); + } + + if (prevSlide.hasClass(params.slideDuplicateClass)) { + $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass); + } else { + $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass); + } + } + + swiper.emitSlidesClasses(); + } + + function updateActiveIndex(newActiveIndex) { + var swiper = this; + var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; + var slidesGrid = swiper.slidesGrid, + snapGrid = swiper.snapGrid, + params = swiper.params, + previousIndex = swiper.activeIndex, + previousRealIndex = swiper.realIndex, + previousSnapIndex = swiper.snapIndex; + var activeIndex = newActiveIndex; + var snapIndex; + + if (typeof activeIndex === 'undefined') { + for (var i = 0; i < slidesGrid.length; i += 1) { + if (typeof slidesGrid[i + 1] !== 'undefined') { + if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { + activeIndex = i; + } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { + activeIndex = i + 1; + } + } else if (translate >= slidesGrid[i]) { + activeIndex = i; + } + } // Normalize slideIndex + + + if (params.normalizeSlideIndex) { + if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; + } + } + + if (snapGrid.indexOf(translate) >= 0) { + snapIndex = snapGrid.indexOf(translate); + } else { + var skip = Math.min(params.slidesPerGroupSkip, activeIndex); + snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); + } + + if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; + + if (activeIndex === previousIndex) { + if (snapIndex !== previousSnapIndex) { + swiper.snapIndex = snapIndex; + swiper.emit('snapIndexChange'); + } + + return; + } // Get real index + + + var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10); + extend$1(swiper, { + snapIndex: snapIndex, + realIndex: realIndex, + previousIndex: previousIndex, + activeIndex: activeIndex + }); + swiper.emit('activeIndexChange'); + swiper.emit('snapIndexChange'); + + if (previousRealIndex !== realIndex) { + swiper.emit('realIndexChange'); + } + + if (swiper.initialized || swiper.params.runCallbacksOnInit) { + swiper.emit('slideChange'); + } + } + + function updateClickedSlide(e) { + var swiper = this; + var params = swiper.params; + var slide = $(e.target).closest("." + params.slideClass)[0]; + var slideFound = false; + + if (slide) { + for (var i = 0; i < swiper.slides.length; i += 1) { + if (swiper.slides[i] === slide) slideFound = true; + } + } + + if (slide && slideFound) { + swiper.clickedSlide = slide; + + if (swiper.virtual && swiper.params.virtual.enabled) { + swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10); + } else { + swiper.clickedIndex = $(slide).index(); + } + } else { + swiper.clickedSlide = undefined; + swiper.clickedIndex = undefined; + return; + } + + if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { + swiper.slideToClickedSlide(); + } + } + + var update = { + updateSize: updateSize, + updateSlides: updateSlides, + updateAutoHeight: updateAutoHeight, + updateSlidesOffset: updateSlidesOffset, + updateSlidesProgress: updateSlidesProgress, + updateProgress: updateProgress, + updateSlidesClasses: updateSlidesClasses, + updateActiveIndex: updateActiveIndex, + updateClickedSlide: updateClickedSlide + }; + + function getSwiperTranslate(axis) { + if (axis === void 0) { + axis = this.isHorizontal() ? 'x' : 'y'; + } + + var swiper = this; + var params = swiper.params, + rtl = swiper.rtlTranslate, + translate = swiper.translate, + $wrapperEl = swiper.$wrapperEl; + + if (params.virtualTranslate) { + return rtl ? -translate : translate; + } + + if (params.cssMode) { + return translate; + } + + var currentTranslate = getTranslate($wrapperEl[0], axis); + if (rtl) currentTranslate = -currentTranslate; + return currentTranslate || 0; + } + + function setTranslate(translate, byController) { + var swiper = this; + var rtl = swiper.rtlTranslate, + params = swiper.params, + $wrapperEl = swiper.$wrapperEl, + wrapperEl = swiper.wrapperEl, + progress = swiper.progress; + var x = 0; + var y = 0; + var z = 0; + + if (swiper.isHorizontal()) { + x = rtl ? -translate : translate; + } else { + y = translate; + } + + if (params.roundLengths) { + x = Math.floor(x); + y = Math.floor(y); + } + + if (params.cssMode) { + wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; + } else if (!params.virtualTranslate) { + $wrapperEl.transform("translate3d(" + x + "px, " + y + "px, " + z + "px)"); + } + + swiper.previousTranslate = swiper.translate; + swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress + + var newProgress; + var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); + + if (translatesDiff === 0) { + newProgress = 0; + } else { + newProgress = (translate - swiper.minTranslate()) / translatesDiff; + } + + if (newProgress !== progress) { + swiper.updateProgress(translate); + } + + swiper.emit('setTranslate', swiper.translate, byController); + } + + function minTranslate() { + return -this.snapGrid[0]; + } + + function maxTranslate() { + return -this.snapGrid[this.snapGrid.length - 1]; + } + + function translateTo(translate, speed, runCallbacks, translateBounds, internal) { + if (translate === void 0) { + translate = 0; + } + + if (speed === void 0) { + speed = this.params.speed; + } + + if (runCallbacks === void 0) { + runCallbacks = true; + } + + if (translateBounds === void 0) { + translateBounds = true; + } + + var swiper = this; + var params = swiper.params, + wrapperEl = swiper.wrapperEl; + + if (swiper.animating && params.preventInteractionOnTransition) { + return false; + } + + var minTranslate = swiper.minTranslate(); + var maxTranslate = swiper.maxTranslate(); + var newTranslate; + if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress + + swiper.updateProgress(newTranslate); + + if (params.cssMode) { + var isH = swiper.isHorizontal(); + + if (speed === 0) { + wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; + } else { + // eslint-disable-next-line + if (wrapperEl.scrollTo) { + var _wrapperEl$scrollTo; + + wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo)); + } else { + wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; + } + } + + return true; + } + + if (speed === 0) { + swiper.setTransition(0); + swiper.setTranslate(newTranslate); + + if (runCallbacks) { + swiper.emit('beforeTransitionStart', speed, internal); + swiper.emit('transitionEnd'); + } + } else { + swiper.setTransition(speed); + swiper.setTranslate(newTranslate); + + if (runCallbacks) { + swiper.emit('beforeTransitionStart', speed, internal); + swiper.emit('transitionStart'); + } + + if (!swiper.animating) { + swiper.animating = true; + + if (!swiper.onTranslateToWrapperTransitionEnd) { + swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { + if (!swiper || swiper.destroyed) return; + if (e.target !== this) return; + swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); + swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); + swiper.onTranslateToWrapperTransitionEnd = null; + delete swiper.onTranslateToWrapperTransitionEnd; + + if (runCallbacks) { + swiper.emit('transitionEnd'); + } + }; + } + + swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); + swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); + } + } + + return true; + } + + var translate = { + getTranslate: getSwiperTranslate, + setTranslate: setTranslate, + minTranslate: minTranslate, + maxTranslate: maxTranslate, + translateTo: translateTo + }; + + function setTransition(duration, byController) { + var swiper = this; + + if (!swiper.params.cssMode) { + swiper.$wrapperEl.transition(duration); + } + + swiper.emit('setTransition', duration, byController); + } + + function transitionStart(runCallbacks, direction) { + if (runCallbacks === void 0) { + runCallbacks = true; + } + + var swiper = this; + var activeIndex = swiper.activeIndex, + params = swiper.params, + previousIndex = swiper.previousIndex; + if (params.cssMode) return; + + if (params.autoHeight) { + swiper.updateAutoHeight(); + } + + var dir = direction; + + if (!dir) { + if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; + } + + swiper.emit('transitionStart'); + + if (runCallbacks && activeIndex !== previousIndex) { + if (dir === 'reset') { + swiper.emit('slideResetTransitionStart'); + return; + } + + swiper.emit('slideChangeTransitionStart'); + + if (dir === 'next') { + swiper.emit('slideNextTransitionStart'); + } else { + swiper.emit('slidePrevTransitionStart'); + } + } + } + + function transitionEnd$1(runCallbacks, direction) { + if (runCallbacks === void 0) { + runCallbacks = true; + } + + var swiper = this; + var activeIndex = swiper.activeIndex, + previousIndex = swiper.previousIndex, + params = swiper.params; + swiper.animating = false; + if (params.cssMode) return; + swiper.setTransition(0); + var dir = direction; + + if (!dir) { + if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; + } + + swiper.emit('transitionEnd'); + + if (runCallbacks && activeIndex !== previousIndex) { + if (dir === 'reset') { + swiper.emit('slideResetTransitionEnd'); + return; + } + + swiper.emit('slideChangeTransitionEnd'); + + if (dir === 'next') { + swiper.emit('slideNextTransitionEnd'); + } else { + swiper.emit('slidePrevTransitionEnd'); + } + } + } + + var transition$1 = { + setTransition: setTransition, + transitionStart: transitionStart, + transitionEnd: transitionEnd$1 + }; + + function slideTo(index, speed, runCallbacks, internal) { + if (index === void 0) { + index = 0; + } + + if (speed === void 0) { + speed = this.params.speed; + } + + if (runCallbacks === void 0) { + runCallbacks = true; + } + + var swiper = this; + var slideIndex = index; + if (slideIndex < 0) slideIndex = 0; + var params = swiper.params, + snapGrid = swiper.snapGrid, + slidesGrid = swiper.slidesGrid, + previousIndex = swiper.previousIndex, + activeIndex = swiper.activeIndex, + rtl = swiper.rtlTranslate, + wrapperEl = swiper.wrapperEl; + + if (swiper.animating && params.preventInteractionOnTransition) { + return false; + } + + var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); + var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); + if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; + + if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) { + swiper.emit('beforeSlideChangeStart'); + } + + var translate = -snapGrid[snapIndex]; // Update progress + + swiper.updateProgress(translate); // Normalize slideIndex + + if (params.normalizeSlideIndex) { + for (var i = 0; i < slidesGrid.length; i += 1) { + if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) { + slideIndex = i; + } + } + } // Directions locks + + + if (swiper.initialized && slideIndex !== activeIndex) { + if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { + return false; + } + + if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { + if ((activeIndex || 0) !== slideIndex) return false; + } + } + + var direction; + if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index + + if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { + swiper.updateActiveIndex(slideIndex); // Update Height + + if (params.autoHeight) { + swiper.updateAutoHeight(); + } + + swiper.updateSlidesClasses(); + + if (params.effect !== 'slide') { + swiper.setTranslate(translate); + } + + if (direction !== 'reset') { + swiper.transitionStart(runCallbacks, direction); + swiper.transitionEnd(runCallbacks, direction); + } + + return false; + } + + if (params.cssMode) { + var isH = swiper.isHorizontal(); + var t = -translate; + + if (rtl) { + t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t; + } + + if (speed === 0) { + wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; + } else { + // eslint-disable-next-line + if (wrapperEl.scrollTo) { + var _wrapperEl$scrollTo; + + wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo)); + } else { + wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; + } + } + + return true; + } + + if (speed === 0) { + swiper.setTransition(0); + swiper.setTranslate(translate); + swiper.updateActiveIndex(slideIndex); + swiper.updateSlidesClasses(); + swiper.emit('beforeTransitionStart', speed, internal); + swiper.transitionStart(runCallbacks, direction); + swiper.transitionEnd(runCallbacks, direction); + } else { + swiper.setTransition(speed); + swiper.setTranslate(translate); + swiper.updateActiveIndex(slideIndex); + swiper.updateSlidesClasses(); + swiper.emit('beforeTransitionStart', speed, internal); + swiper.transitionStart(runCallbacks, direction); + + if (!swiper.animating) { + swiper.animating = true; + + if (!swiper.onSlideToWrapperTransitionEnd) { + swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { + if (!swiper || swiper.destroyed) return; + if (e.target !== this) return; + swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); + swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); + swiper.onSlideToWrapperTransitionEnd = null; + delete swiper.onSlideToWrapperTransitionEnd; + swiper.transitionEnd(runCallbacks, direction); + }; + } + + swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); + swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); + } + } + + return true; + } + + function slideToLoop(index, speed, runCallbacks, internal) { + if (index === void 0) { + index = 0; + } + + if (speed === void 0) { + speed = this.params.speed; + } + + if (runCallbacks === void 0) { + runCallbacks = true; + } + + var swiper = this; + var newIndex = index; + + if (swiper.params.loop) { + newIndex += swiper.loopedSlides; + } + + return swiper.slideTo(newIndex, speed, runCallbacks, internal); + } + + /* eslint no-unused-vars: "off" */ + function slideNext(speed, runCallbacks, internal) { + if (speed === void 0) { + speed = this.params.speed; + } + + if (runCallbacks === void 0) { + runCallbacks = true; + } + + var swiper = this; + var params = swiper.params, + animating = swiper.animating; + var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup; + + if (params.loop) { + if (animating && params.loopPreventsSlide) return false; + swiper.loopFix(); // eslint-disable-next-line + + swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; + } + + return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); + } + + /* eslint no-unused-vars: "off" */ + function slidePrev(speed, runCallbacks, internal) { + if (speed === void 0) { + speed = this.params.speed; + } + + if (runCallbacks === void 0) { + runCallbacks = true; + } + + var swiper = this; + var params = swiper.params, + animating = swiper.animating, + snapGrid = swiper.snapGrid, + slidesGrid = swiper.slidesGrid, + rtlTranslate = swiper.rtlTranslate; + + if (params.loop) { + if (animating && params.loopPreventsSlide) return false; + swiper.loopFix(); // eslint-disable-next-line + + swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; + } + + var translate = rtlTranslate ? swiper.translate : -swiper.translate; + + function normalize(val) { + if (val < 0) return -Math.floor(Math.abs(val)); + return Math.floor(val); + } + + var normalizedTranslate = normalize(translate); + var normalizedSnapGrid = snapGrid.map(function (val) { + return normalize(val); + }); + var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)]; + var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; + + if (typeof prevSnap === 'undefined' && params.cssMode) { + snapGrid.forEach(function (snap) { + if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap; + }); + } + + var prevIndex; + + if (typeof prevSnap !== 'undefined') { + prevIndex = slidesGrid.indexOf(prevSnap); + if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; + } + + return swiper.slideTo(prevIndex, speed, runCallbacks, internal); + } + + /* eslint no-unused-vars: "off" */ + function slideReset(speed, runCallbacks, internal) { + if (speed === void 0) { + speed = this.params.speed; + } + + if (runCallbacks === void 0) { + runCallbacks = true; + } + + var swiper = this; + return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); + } + + /* eslint no-unused-vars: "off" */ + function slideToClosest(speed, runCallbacks, internal, threshold) { + if (speed === void 0) { + speed = this.params.speed; + } + + if (runCallbacks === void 0) { + runCallbacks = true; + } + + if (threshold === void 0) { + threshold = 0.5; + } + + var swiper = this; + var index = swiper.activeIndex; + var skip = Math.min(swiper.params.slidesPerGroupSkip, index); + var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); + var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; + + if (translate >= swiper.snapGrid[snapIndex]) { + // The current translate is on or after the current snap index, so the choice + // is between the current index and the one after it. + var currentSnap = swiper.snapGrid[snapIndex]; + var nextSnap = swiper.snapGrid[snapIndex + 1]; + + if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { + index += swiper.params.slidesPerGroup; + } + } else { + // The current translate is before the current snap index, so the choice + // is between the current index and the one before it. + var prevSnap = swiper.snapGrid[snapIndex - 1]; + var _currentSnap = swiper.snapGrid[snapIndex]; + + if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) { + index -= swiper.params.slidesPerGroup; + } + } + + index = Math.max(index, 0); + index = Math.min(index, swiper.slidesGrid.length - 1); + return swiper.slideTo(index, speed, runCallbacks, internal); + } + + function slideToClickedSlide() { + var swiper = this; + var params = swiper.params, + $wrapperEl = swiper.$wrapperEl; + var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; + var slideToIndex = swiper.clickedIndex; + var realIndex; + + if (params.loop) { + if (swiper.animating) return; + realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10); + + if (params.centeredSlides) { + if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { + swiper.loopFix(); + slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index(); + nextTick(function () { + swiper.slideTo(slideToIndex); + }); + } else { + swiper.slideTo(slideToIndex); + } + } else if (slideToIndex > swiper.slides.length - slidesPerView) { + swiper.loopFix(); + slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index(); + nextTick(function () { + swiper.slideTo(slideToIndex); + }); + } else { + swiper.slideTo(slideToIndex); + } + } else { + swiper.slideTo(slideToIndex); + } + } + + var slide = { + slideTo: slideTo, + slideToLoop: slideToLoop, + slideNext: slideNext, + slidePrev: slidePrev, + slideReset: slideReset, + slideToClosest: slideToClosest, + slideToClickedSlide: slideToClickedSlide + }; + + function loopCreate() { + var swiper = this; + var document = getDocument(); + var params = swiper.params, + $wrapperEl = swiper.$wrapperEl; // Remove duplicated slides + + $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass).remove(); + var slides = $wrapperEl.children("." + params.slideClass); + + if (params.loopFillGroupWithBlank) { + var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup; + + if (blankSlidesNum !== params.slidesPerGroup) { + for (var i = 0; i < blankSlidesNum; i += 1) { + var blankNode = $(document.createElement('div')).addClass(params.slideClass + " " + params.slideBlankClass); + $wrapperEl.append(blankNode); + } + + slides = $wrapperEl.children("." + params.slideClass); + } + } + + if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length; + swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10)); + swiper.loopedSlides += params.loopAdditionalSlides; + + if (swiper.loopedSlides > slides.length) { + swiper.loopedSlides = slides.length; + } + + var prependSlides = []; + var appendSlides = []; + slides.each(function (el, index) { + var slide = $(el); + + if (index < swiper.loopedSlides) { + appendSlides.push(el); + } + + if (index < slides.length && index >= slides.length - swiper.loopedSlides) { + prependSlides.push(el); + } + + slide.attr('data-swiper-slide-index', index); + }); + + for (var _i = 0; _i < appendSlides.length; _i += 1) { + $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass)); + } + + for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) { + $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass)); + } + } + + function loopFix() { + var swiper = this; + swiper.emit('beforeLoopFix'); + var activeIndex = swiper.activeIndex, + slides = swiper.slides, + loopedSlides = swiper.loopedSlides, + allowSlidePrev = swiper.allowSlidePrev, + allowSlideNext = swiper.allowSlideNext, + snapGrid = swiper.snapGrid, + rtl = swiper.rtlTranslate; + var newIndex; + swiper.allowSlidePrev = true; + swiper.allowSlideNext = true; + var snapTranslate = -snapGrid[activeIndex]; + var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding + + if (activeIndex < loopedSlides) { + newIndex = slides.length - loopedSlides * 3 + activeIndex; + newIndex += loopedSlides; + var slideChanged = swiper.slideTo(newIndex, 0, false, true); + + if (slideChanged && diff !== 0) { + swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); + } + } else if (activeIndex >= slides.length - loopedSlides) { + // Fix For Positive Oversliding + newIndex = -slides.length + activeIndex + loopedSlides; + newIndex += loopedSlides; + + var _slideChanged = swiper.slideTo(newIndex, 0, false, true); + + if (_slideChanged && diff !== 0) { + swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); + } + } + + swiper.allowSlidePrev = allowSlidePrev; + swiper.allowSlideNext = allowSlideNext; + swiper.emit('loopFix'); + } + + function loopDestroy() { + var swiper = this; + var $wrapperEl = swiper.$wrapperEl, + params = swiper.params, + slides = swiper.slides; + $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + ",." + params.slideClass + "." + params.slideBlankClass).remove(); + slides.removeAttr('data-swiper-slide-index'); + } + + var loop = { + loopCreate: loopCreate, + loopFix: loopFix, + loopDestroy: loopDestroy + }; + + function setGrabCursor(moving) { + var swiper = this; + if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; + var el = swiper.el; + el.style.cursor = 'move'; + el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; + el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; + el.style.cursor = moving ? 'grabbing' : 'grab'; + } + + function unsetGrabCursor() { + var swiper = this; + + if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { + return; + } + + swiper.el.style.cursor = ''; + } + + var grabCursor = { + setGrabCursor: setGrabCursor, + unsetGrabCursor: unsetGrabCursor + }; + + function appendSlide(slides) { + var swiper = this; + var $wrapperEl = swiper.$wrapperEl, + params = swiper.params; + + if (params.loop) { + swiper.loopDestroy(); + } + + if (typeof slides === 'object' && 'length' in slides) { + for (var i = 0; i < slides.length; i += 1) { + if (slides[i]) $wrapperEl.append(slides[i]); + } + } else { + $wrapperEl.append(slides); + } + + if (params.loop) { + swiper.loopCreate(); + } + + if (!(params.observer && swiper.support.observer)) { + swiper.update(); + } + } + + function prependSlide(slides) { + var swiper = this; + var params = swiper.params, + $wrapperEl = swiper.$wrapperEl, + activeIndex = swiper.activeIndex; + + if (params.loop) { + swiper.loopDestroy(); + } + + var newActiveIndex = activeIndex + 1; + + if (typeof slides === 'object' && 'length' in slides) { + for (var i = 0; i < slides.length; i += 1) { + if (slides[i]) $wrapperEl.prepend(slides[i]); + } + + newActiveIndex = activeIndex + slides.length; + } else { + $wrapperEl.prepend(slides); + } + + if (params.loop) { + swiper.loopCreate(); + } + + if (!(params.observer && swiper.support.observer)) { + swiper.update(); + } + + swiper.slideTo(newActiveIndex, 0, false); + } + + function addSlide(index, slides) { + var swiper = this; + var $wrapperEl = swiper.$wrapperEl, + params = swiper.params, + activeIndex = swiper.activeIndex; + var activeIndexBuffer = activeIndex; + + if (params.loop) { + activeIndexBuffer -= swiper.loopedSlides; + swiper.loopDestroy(); + swiper.slides = $wrapperEl.children("." + params.slideClass); + } + + var baseLength = swiper.slides.length; + + if (index <= 0) { + swiper.prependSlide(slides); + return; + } + + if (index >= baseLength) { + swiper.appendSlide(slides); + return; + } + + var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; + var slidesBuffer = []; + + for (var i = baseLength - 1; i >= index; i -= 1) { + var currentSlide = swiper.slides.eq(i); + currentSlide.remove(); + slidesBuffer.unshift(currentSlide); + } + + if (typeof slides === 'object' && 'length' in slides) { + for (var _i = 0; _i < slides.length; _i += 1) { + if (slides[_i]) $wrapperEl.append(slides[_i]); + } + + newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; + } else { + $wrapperEl.append(slides); + } + + for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) { + $wrapperEl.append(slidesBuffer[_i2]); + } + + if (params.loop) { + swiper.loopCreate(); + } + + if (!(params.observer && swiper.support.observer)) { + swiper.update(); + } + + if (params.loop) { + swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); + } else { + swiper.slideTo(newActiveIndex, 0, false); + } + } + + function removeSlide(slidesIndexes) { + var swiper = this; + var params = swiper.params, + $wrapperEl = swiper.$wrapperEl, + activeIndex = swiper.activeIndex; + var activeIndexBuffer = activeIndex; + + if (params.loop) { + activeIndexBuffer -= swiper.loopedSlides; + swiper.loopDestroy(); + swiper.slides = $wrapperEl.children("." + params.slideClass); + } + + var newActiveIndex = activeIndexBuffer; + var indexToRemove; + + if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { + for (var i = 0; i < slidesIndexes.length; i += 1) { + indexToRemove = slidesIndexes[i]; + if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); + if (indexToRemove < newActiveIndex) newActiveIndex -= 1; + } + + newActiveIndex = Math.max(newActiveIndex, 0); + } else { + indexToRemove = slidesIndexes; + if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); + if (indexToRemove < newActiveIndex) newActiveIndex -= 1; + newActiveIndex = Math.max(newActiveIndex, 0); + } + + if (params.loop) { + swiper.loopCreate(); + } + + if (!(params.observer && swiper.support.observer)) { + swiper.update(); + } + + if (params.loop) { + swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); + } else { + swiper.slideTo(newActiveIndex, 0, false); + } + } + + function removeAllSlides() { + var swiper = this; + var slidesIndexes = []; + + for (var i = 0; i < swiper.slides.length; i += 1) { + slidesIndexes.push(i); + } + + swiper.removeSlide(slidesIndexes); + } + + var manipulation = { + appendSlide: appendSlide, + prependSlide: prependSlide, + addSlide: addSlide, + removeSlide: removeSlide, + removeAllSlides: removeAllSlides + }; + + function onTouchStart(event) { + var swiper = this; + var document = getDocument(); + var window = getWindow(); + var data = swiper.touchEventsData; + var params = swiper.params, + touches = swiper.touches; + + if (swiper.animating && params.preventInteractionOnTransition) { + return; + } + + var e = event; + if (e.originalEvent) e = e.originalEvent; + var $targetEl = $(e.target); + + if (params.touchEventsTarget === 'wrapper') { + if (!$targetEl.closest(swiper.wrapperEl).length) return; + } + + data.isTouchEvent = e.type === 'touchstart'; + if (!data.isTouchEvent && 'which' in e && e.which === 3) return; + if (!data.isTouchEvent && 'button' in e && e.button > 0) return; + if (data.isTouched && data.isMoved) return; + + if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : "." + params.noSwipingClass)[0]) { + swiper.allowClick = true; + return; + } + + if (params.swipeHandler) { + if (!$targetEl.closest(params.swipeHandler)[0]) return; + } + + touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; + touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; + var startX = touches.currentX; + var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore + + var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection; + var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold; + + if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.screen.width - edgeSwipeThreshold)) { + return; + } + + extend$1(data, { + isTouched: true, + isMoved: false, + allowTouchCallbacks: true, + isScrolling: undefined, + startMoving: undefined + }); + touches.startX = startX; + touches.startY = startY; + data.touchStartTime = now(); + swiper.allowClick = true; + swiper.updateSize(); + swiper.swipeDirection = undefined; + if (params.threshold > 0) data.allowThresholdMove = false; + + if (e.type !== 'touchstart') { + var preventDefault = true; + if ($targetEl.is(data.formElements)) preventDefault = false; + + if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) { + document.activeElement.blur(); + } + + var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; + + if (params.touchStartForcePreventDefault || shouldPreventDefault) { + e.preventDefault(); + } + } + + swiper.emit('touchStart', e); + } + + function onTouchMove(event) { + var document = getDocument(); + var swiper = this; + var data = swiper.touchEventsData; + var params = swiper.params, + touches = swiper.touches, + rtl = swiper.rtlTranslate; + var e = event; + if (e.originalEvent) e = e.originalEvent; + + if (!data.isTouched) { + if (data.startMoving && data.isScrolling) { + swiper.emit('touchMoveOpposite', e); + } + + return; + } + + if (data.isTouchEvent && e.type !== 'touchmove') return; + var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]); + var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX; + var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY; + + if (e.preventedByNestedSwiper) { + touches.startX = pageX; + touches.startY = pageY; + return; + } + + if (!swiper.allowTouchMove) { + // isMoved = true; + swiper.allowClick = false; + + if (data.isTouched) { + extend$1(touches, { + startX: pageX, + startY: pageY, + currentX: pageX, + currentY: pageY + }); + data.touchStartTime = now(); + } + + return; + } + + if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) { + if (swiper.isVertical()) { + // Vertical + if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { + data.isTouched = false; + data.isMoved = false; + return; + } + } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { + return; + } + } + + if (data.isTouchEvent && document.activeElement) { + if (e.target === document.activeElement && $(e.target).is(data.formElements)) { + data.isMoved = true; + swiper.allowClick = false; + return; + } + } + + if (data.allowTouchCallbacks) { + swiper.emit('touchMove', e); + } + + if (e.targetTouches && e.targetTouches.length > 1) return; + touches.currentX = pageX; + touches.currentY = pageY; + var diffX = touches.currentX - touches.startX; + var diffY = touches.currentY - touches.startY; + if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return; + + if (typeof data.isScrolling === 'undefined') { + var touchAngle; + + if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { + data.isScrolling = false; + } else { + // eslint-disable-next-line + if (diffX * diffX + diffY * diffY >= 25) { + touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; + data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; + } + } + } + + if (data.isScrolling) { + swiper.emit('touchMoveOpposite', e); + } + + if (typeof data.startMoving === 'undefined') { + if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { + data.startMoving = true; + } + } + + if (data.isScrolling) { + data.isTouched = false; + return; + } + + if (!data.startMoving) { + return; + } + + swiper.allowClick = false; + + if (!params.cssMode && e.cancelable) { + e.preventDefault(); + } + + if (params.touchMoveStopPropagation && !params.nested) { + e.stopPropagation(); + } + + if (!data.isMoved) { + if (params.loop) { + swiper.loopFix(); + } + + data.startTranslate = swiper.getTranslate(); + swiper.setTransition(0); + + if (swiper.animating) { + swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend'); + } + + data.allowMomentumBounce = false; // Grab Cursor + + if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { + swiper.setGrabCursor(true); + } + + swiper.emit('sliderFirstMove', e); + } + + swiper.emit('sliderMove', e); + data.isMoved = true; + var diff = swiper.isHorizontal() ? diffX : diffY; + touches.diff = diff; + diff *= params.touchRatio; + if (rtl) diff = -diff; + swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; + data.currentTranslate = diff + data.startTranslate; + var disableParentSwiper = true; + var resistanceRatio = params.resistanceRatio; + + if (params.touchReleaseOnEdges) { + resistanceRatio = 0; + } + + if (diff > 0 && data.currentTranslate > swiper.minTranslate()) { + disableParentSwiper = false; + if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio); + } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) { + disableParentSwiper = false; + if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio); + } + + if (disableParentSwiper) { + e.preventedByNestedSwiper = true; + } // Directions locks + + + if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { + data.currentTranslate = data.startTranslate; + } + + if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { + data.currentTranslate = data.startTranslate; + } // Threshold + + + if (params.threshold > 0) { + if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { + if (!data.allowThresholdMove) { + data.allowThresholdMove = true; + touches.startX = touches.currentX; + touches.startY = touches.currentY; + data.currentTranslate = data.startTranslate; + touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; + return; + } + } else { + data.currentTranslate = data.startTranslate; + return; + } + } + + if (!params.followFinger || params.cssMode) return; // Update active index in free mode + + if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) { + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + } + + if (params.freeMode) { + // Velocity + if (data.velocities.length === 0) { + data.velocities.push({ + position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], + time: data.touchStartTime + }); + } + + data.velocities.push({ + position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], + time: now() + }); + } // Update progress + + + swiper.updateProgress(data.currentTranslate); // Update translate + + swiper.setTranslate(data.currentTranslate); + } + + function onTouchEnd(event) { + var swiper = this; + var data = swiper.touchEventsData; + var params = swiper.params, + touches = swiper.touches, + rtl = swiper.rtlTranslate, + $wrapperEl = swiper.$wrapperEl, + slidesGrid = swiper.slidesGrid, + snapGrid = swiper.snapGrid; + var e = event; + if (e.originalEvent) e = e.originalEvent; + + if (data.allowTouchCallbacks) { + swiper.emit('touchEnd', e); + } + + data.allowTouchCallbacks = false; + + if (!data.isTouched) { + if (data.isMoved && params.grabCursor) { + swiper.setGrabCursor(false); + } + + data.isMoved = false; + data.startMoving = false; + return; + } // Return Grab Cursor + + + if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { + swiper.setGrabCursor(false); + } // Time diff + + + var touchEndTime = now(); + var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click + + if (swiper.allowClick) { + swiper.updateClickedSlide(e); + swiper.emit('tap click', e); + + if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { + swiper.emit('doubleTap doubleClick', e); + } + } + + data.lastClickTime = now(); + nextTick(function () { + if (!swiper.destroyed) swiper.allowClick = true; + }); + + if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) { + data.isTouched = false; + data.isMoved = false; + data.startMoving = false; + return; + } + + data.isTouched = false; + data.isMoved = false; + data.startMoving = false; + var currentPos; + + if (params.followFinger) { + currentPos = rtl ? swiper.translate : -swiper.translate; + } else { + currentPos = -data.currentTranslate; + } + + if (params.cssMode) { + return; + } + + if (params.freeMode) { + if (currentPos < -swiper.minTranslate()) { + swiper.slideTo(swiper.activeIndex); + return; + } + + if (currentPos > -swiper.maxTranslate()) { + if (swiper.slides.length < snapGrid.length) { + swiper.slideTo(snapGrid.length - 1); + } else { + swiper.slideTo(swiper.slides.length - 1); + } + + return; + } + + if (params.freeModeMomentum) { + if (data.velocities.length > 1) { + var lastMoveEvent = data.velocities.pop(); + var velocityEvent = data.velocities.pop(); + var distance = lastMoveEvent.position - velocityEvent.position; + var time = lastMoveEvent.time - velocityEvent.time; + swiper.velocity = distance / time; + swiper.velocity /= 2; + + if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) { + swiper.velocity = 0; + } // this implies that the user stopped moving a finger then released. + // There would be no events with distance zero, so the last event is stale. + + + if (time > 150 || now() - lastMoveEvent.time > 300) { + swiper.velocity = 0; + } + } else { + swiper.velocity = 0; + } + + swiper.velocity *= params.freeModeMomentumVelocityRatio; + data.velocities.length = 0; + var momentumDuration = 1000 * params.freeModeMomentumRatio; + var momentumDistance = swiper.velocity * momentumDuration; + var newPosition = swiper.translate + momentumDistance; + if (rtl) newPosition = -newPosition; + var doBounce = false; + var afterBouncePosition; + var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio; + var needsLoopFix; + + if (newPosition < swiper.maxTranslate()) { + if (params.freeModeMomentumBounce) { + if (newPosition + swiper.maxTranslate() < -bounceAmount) { + newPosition = swiper.maxTranslate() - bounceAmount; + } + + afterBouncePosition = swiper.maxTranslate(); + doBounce = true; + data.allowMomentumBounce = true; + } else { + newPosition = swiper.maxTranslate(); + } + + if (params.loop && params.centeredSlides) needsLoopFix = true; + } else if (newPosition > swiper.minTranslate()) { + if (params.freeModeMomentumBounce) { + if (newPosition - swiper.minTranslate() > bounceAmount) { + newPosition = swiper.minTranslate() + bounceAmount; + } + + afterBouncePosition = swiper.minTranslate(); + doBounce = true; + data.allowMomentumBounce = true; + } else { + newPosition = swiper.minTranslate(); + } + + if (params.loop && params.centeredSlides) needsLoopFix = true; + } else if (params.freeModeSticky) { + var nextSlide; + + for (var j = 0; j < snapGrid.length; j += 1) { + if (snapGrid[j] > -newPosition) { + nextSlide = j; + break; + } + } + + if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { + newPosition = snapGrid[nextSlide]; + } else { + newPosition = snapGrid[nextSlide - 1]; + } + + newPosition = -newPosition; + } + + if (needsLoopFix) { + swiper.once('transitionEnd', function () { + swiper.loopFix(); + }); + } // Fix duration + + + if (swiper.velocity !== 0) { + if (rtl) { + momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); + } else { + momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); + } + + if (params.freeModeSticky) { + // If freeModeSticky is active and the user ends a swipe with a slow-velocity + // event, then durations can be 20+ seconds to slide one (or zero!) slides. + // It's easy to see this when simulating touch with mouse events. To fix this, + // limit single-slide swipes to the default slide duration. This also has the + // nice side effect of matching slide speed if the user stopped moving before + // lifting finger or mouse vs. moving slowly before lifting the finger/mouse. + // For faster swipes, also apply limits (albeit higher ones). + var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); + var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; + + if (moveDistance < currentSlideSize) { + momentumDuration = params.speed; + } else if (moveDistance < 2 * currentSlideSize) { + momentumDuration = params.speed * 1.5; + } else { + momentumDuration = params.speed * 2.5; + } + } + } else if (params.freeModeSticky) { + swiper.slideToClosest(); + return; + } + + if (params.freeModeMomentumBounce && doBounce) { + swiper.updateProgress(afterBouncePosition); + swiper.setTransition(momentumDuration); + swiper.setTranslate(newPosition); + swiper.transitionStart(true, swiper.swipeDirection); + swiper.animating = true; + $wrapperEl.transitionEnd(function () { + if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; + swiper.emit('momentumBounce'); + swiper.setTransition(params.speed); + setTimeout(function () { + swiper.setTranslate(afterBouncePosition); + $wrapperEl.transitionEnd(function () { + if (!swiper || swiper.destroyed) return; + swiper.transitionEnd(); + }); + }, 0); + }); + } else if (swiper.velocity) { + swiper.updateProgress(newPosition); + swiper.setTransition(momentumDuration); + swiper.setTranslate(newPosition); + swiper.transitionStart(true, swiper.swipeDirection); + + if (!swiper.animating) { + swiper.animating = true; + $wrapperEl.transitionEnd(function () { + if (!swiper || swiper.destroyed) return; + swiper.transitionEnd(); + }); + } + } else { + swiper.updateProgress(newPosition); + } + + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + } else if (params.freeModeSticky) { + swiper.slideToClosest(); + return; + } + + if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) { + swiper.updateProgress(); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + } + + return; + } // Find current slide + + + var stopIndex = 0; + var groupSize = swiper.slidesSizesGrid[0]; + + for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { + var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; + + if (typeof slidesGrid[i + _increment] !== 'undefined') { + if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) { + stopIndex = i; + groupSize = slidesGrid[i + _increment] - slidesGrid[i]; + } + } else if (currentPos >= slidesGrid[i]) { + stopIndex = i; + groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; + } + } // Find current slide size + + + var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; + var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; + + if (timeDiff > params.longSwipesMs) { + // Long touches + if (!params.longSwipes) { + swiper.slideTo(swiper.activeIndex); + return; + } + + if (swiper.swipeDirection === 'next') { + if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex); + } + + if (swiper.swipeDirection === 'prev') { + if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex); + } + } else { + // Short swipes + if (!params.shortSwipes) { + swiper.slideTo(swiper.activeIndex); + return; + } + + var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); + + if (!isNavButtonTarget) { + if (swiper.swipeDirection === 'next') { + swiper.slideTo(stopIndex + increment); + } + + if (swiper.swipeDirection === 'prev') { + swiper.slideTo(stopIndex); + } + } else if (e.target === swiper.navigation.nextEl) { + swiper.slideTo(stopIndex + increment); + } else { + swiper.slideTo(stopIndex); + } + } + } + + function onResize() { + var swiper = this; + var params = swiper.params, + el = swiper.el; + if (el && el.offsetWidth === 0) return; // Breakpoints + + if (params.breakpoints) { + swiper.setBreakpoint(); + } // Save locks + + + var allowSlideNext = swiper.allowSlideNext, + allowSlidePrev = swiper.allowSlidePrev, + snapGrid = swiper.snapGrid; // Disable locks on resize + + swiper.allowSlideNext = true; + swiper.allowSlidePrev = true; + swiper.updateSize(); + swiper.updateSlides(); + swiper.updateSlidesClasses(); + + if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) { + swiper.slideTo(swiper.slides.length - 1, 0, false, true); + } else { + swiper.slideTo(swiper.activeIndex, 0, false, true); + } + + if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { + swiper.autoplay.run(); + } // Return locks after resize + + + swiper.allowSlidePrev = allowSlidePrev; + swiper.allowSlideNext = allowSlideNext; + + if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { + swiper.checkOverflow(); + } + } + + function onClick(e) { + var swiper = this; + + if (!swiper.allowClick) { + if (swiper.params.preventClicks) e.preventDefault(); + + if (swiper.params.preventClicksPropagation && swiper.animating) { + e.stopPropagation(); + e.stopImmediatePropagation(); + } + } + } + + function onScroll() { + var swiper = this; + var wrapperEl = swiper.wrapperEl, + rtlTranslate = swiper.rtlTranslate; + swiper.previousTranslate = swiper.translate; + + if (swiper.isHorizontal()) { + if (rtlTranslate) { + swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft; + } else { + swiper.translate = -wrapperEl.scrollLeft; + } + } else { + swiper.translate = -wrapperEl.scrollTop; + } // eslint-disable-next-line + + + if (swiper.translate === -0) swiper.translate = 0; + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + var newProgress; + var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); + + if (translatesDiff === 0) { + newProgress = 0; + } else { + newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; + } + + if (newProgress !== swiper.progress) { + swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); + } + + swiper.emit('setTranslate', swiper.translate, false); + } + + var dummyEventAttached = false; + + function dummyEventListener() {} + + function attachEvents() { + var swiper = this; + var document = getDocument(); + var params = swiper.params, + touchEvents = swiper.touchEvents, + el = swiper.el, + wrapperEl = swiper.wrapperEl, + device = swiper.device, + support = swiper.support; + swiper.onTouchStart = onTouchStart.bind(swiper); + swiper.onTouchMove = onTouchMove.bind(swiper); + swiper.onTouchEnd = onTouchEnd.bind(swiper); + + if (params.cssMode) { + swiper.onScroll = onScroll.bind(swiper); + } + + swiper.onClick = onClick.bind(swiper); + var capture = !!params.nested; // Touch Events + + if (!support.touch && support.pointerEvents) { + el.addEventListener(touchEvents.start, swiper.onTouchStart, false); + document.addEventListener(touchEvents.move, swiper.onTouchMove, capture); + document.addEventListener(touchEvents.end, swiper.onTouchEnd, false); + } else { + if (support.touch) { + var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? { + passive: true, + capture: false + } : false; + el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); + el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? { + passive: false, + capture: capture + } : capture); + el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); + + if (touchEvents.cancel) { + el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener); + } + + if (!dummyEventAttached) { + document.addEventListener('touchstart', dummyEventListener); + dummyEventAttached = true; + } + } + + if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) { + el.addEventListener('mousedown', swiper.onTouchStart, false); + document.addEventListener('mousemove', swiper.onTouchMove, capture); + document.addEventListener('mouseup', swiper.onTouchEnd, false); + } + } // Prevent Links Clicks + + + if (params.preventClicks || params.preventClicksPropagation) { + el.addEventListener('click', swiper.onClick, true); + } + + if (params.cssMode) { + wrapperEl.addEventListener('scroll', swiper.onScroll); + } // Resize handler + + + if (params.updateOnWindowResize) { + swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true); + } else { + swiper.on('observerUpdate', onResize, true); + } + } + + function detachEvents() { + var swiper = this; + var document = getDocument(); + var params = swiper.params, + touchEvents = swiper.touchEvents, + el = swiper.el, + wrapperEl = swiper.wrapperEl, + device = swiper.device, + support = swiper.support; + var capture = !!params.nested; // Touch Events + + if (!support.touch && support.pointerEvents) { + el.removeEventListener(touchEvents.start, swiper.onTouchStart, false); + document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); + document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false); + } else { + if (support.touch) { + var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? { + passive: true, + capture: false + } : false; + el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); + el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); + el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); + + if (touchEvents.cancel) { + el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener); + } + } + + if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) { + el.removeEventListener('mousedown', swiper.onTouchStart, false); + document.removeEventListener('mousemove', swiper.onTouchMove, capture); + document.removeEventListener('mouseup', swiper.onTouchEnd, false); + } + } // Prevent Links Clicks + + + if (params.preventClicks || params.preventClicksPropagation) { + el.removeEventListener('click', swiper.onClick, true); + } + + if (params.cssMode) { + wrapperEl.removeEventListener('scroll', swiper.onScroll); + } // Resize handler + + + swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize); + } + + var events = { + attachEvents: attachEvents, + detachEvents: detachEvents + }; + + function setBreakpoint() { + var swiper = this; + var activeIndex = swiper.activeIndex, + initialized = swiper.initialized, + _swiper$loopedSlides = swiper.loopedSlides, + loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides, + params = swiper.params, + $el = swiper.$el; + var breakpoints = params.breakpoints; + if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters + + var breakpoint = swiper.getBreakpoint(breakpoints); + + if (breakpoint && swiper.currentBreakpoint !== breakpoint) { + var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; + + if (breakpointOnlyParams) { + ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) { + var paramValue = breakpointOnlyParams[param]; + if (typeof paramValue === 'undefined') return; + + if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) { + breakpointOnlyParams[param] = 'auto'; + } else if (param === 'slidesPerView') { + breakpointOnlyParams[param] = parseFloat(paramValue); + } else { + breakpointOnlyParams[param] = parseInt(paramValue, 10); + } + }); + } + + var breakpointParams = breakpointOnlyParams || swiper.originalParams; + var wasMultiRow = params.slidesPerColumn > 1; + var isMultiRow = breakpointParams.slidesPerColumn > 1; + + if (wasMultiRow && !isMultiRow) { + $el.removeClass(params.containerModifierClass + "multirow " + params.containerModifierClass + "multirow-column"); + swiper.emitContainerClasses(); + } else if (!wasMultiRow && isMultiRow) { + $el.addClass(params.containerModifierClass + "multirow"); + + if (breakpointParams.slidesPerColumnFill === 'column') { + $el.addClass(params.containerModifierClass + "multirow-column"); + } + + swiper.emitContainerClasses(); + } + + var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; + var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); + + if (directionChanged && initialized) { + swiper.changeDirection(); + } + + extend$1(swiper.params, breakpointParams); + extend$1(swiper, { + allowTouchMove: swiper.params.allowTouchMove, + allowSlideNext: swiper.params.allowSlideNext, + allowSlidePrev: swiper.params.allowSlidePrev + }); + swiper.currentBreakpoint = breakpoint; + + if (needsReLoop && initialized) { + swiper.loopDestroy(); + swiper.loopCreate(); + swiper.updateSlides(); + swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false); + } + + swiper.emit('breakpoint', breakpointParams); + } + } + + function getBreakpoints(breakpoints) { + var window = getWindow(); // Get breakpoint for window width + + if (!breakpoints) return undefined; + var breakpoint = false; + var points = Object.keys(breakpoints).map(function (point) { + if (typeof point === 'string' && point.indexOf('@') === 0) { + var minRatio = parseFloat(point.substr(1)); + var value = window.innerHeight * minRatio; + return { + value: value, + point: point + }; + } + + return { + value: point, + point: point + }; + }); + points.sort(function (a, b) { + return parseInt(a.value, 10) - parseInt(b.value, 10); + }); + + for (var i = 0; i < points.length; i += 1) { + var _points$i = points[i], + point = _points$i.point, + value = _points$i.value; + + if (value <= window.innerWidth) { + breakpoint = point; + } + } + + return breakpoint || 'max'; + } + + var breakpoints = { + setBreakpoint: setBreakpoint, + getBreakpoint: getBreakpoints + }; + + function addClasses() { + var swiper = this; + var classNames = swiper.classNames, + params = swiper.params, + rtl = swiper.rtl, + $el = swiper.$el, + device = swiper.device; + var suffixes = []; + suffixes.push('initialized'); + suffixes.push(params.direction); + + if (params.freeMode) { + suffixes.push('free-mode'); + } + + if (params.autoHeight) { + suffixes.push('autoheight'); + } + + if (rtl) { + suffixes.push('rtl'); + } + + if (params.slidesPerColumn > 1) { + suffixes.push('multirow'); + + if (params.slidesPerColumnFill === 'column') { + suffixes.push('multirow-column'); + } + } + + if (device.android) { + suffixes.push('android'); + } + + if (device.ios) { + suffixes.push('ios'); + } + + if (params.cssMode) { + suffixes.push('css-mode'); + } + + suffixes.forEach(function (suffix) { + classNames.push(params.containerModifierClass + suffix); + }); + $el.addClass(classNames.join(' ')); + swiper.emitContainerClasses(); + } + + function removeClasses() { + var swiper = this; + var $el = swiper.$el, + classNames = swiper.classNames; + $el.removeClass(classNames.join(' ')); + swiper.emitContainerClasses(); + } + + var classes = { + addClasses: addClasses, + removeClasses: removeClasses + }; + + function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) { + var window = getWindow(); + var image; + + function onReady() { + if (callback) callback(); + } + + var isPicture = $(imageEl).parent('picture')[0]; + + if (!isPicture && (!imageEl.complete || !checkForComplete)) { + if (src) { + image = new window.Image(); + image.onload = onReady; + image.onerror = onReady; + + if (sizes) { + image.sizes = sizes; + } + + if (srcset) { + image.srcset = srcset; + } + + if (src) { + image.src = src; + } + } else { + onReady(); + } + } else { + // image already loaded... + onReady(); + } + } + + function preloadImages() { + var swiper = this; + swiper.imagesToLoad = swiper.$el.find('img'); + + function onReady() { + if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return; + if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1; + + if (swiper.imagesLoaded === swiper.imagesToLoad.length) { + if (swiper.params.updateOnImagesReady) swiper.update(); + swiper.emit('imagesReady'); + } + } + + for (var i = 0; i < swiper.imagesToLoad.length; i += 1) { + var imageEl = swiper.imagesToLoad[i]; + swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady); + } + } + + var images = { + loadImage: loadImage, + preloadImages: preloadImages + }; + + function checkOverflow() { + var swiper = this; + var params = swiper.params; + var wasLocked = swiper.isLocked; + var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length; + + if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) { + swiper.isLocked = lastSlidePosition <= swiper.size; + } else { + swiper.isLocked = swiper.snapGrid.length === 1; + } + + swiper.allowSlideNext = !swiper.isLocked; + swiper.allowSlidePrev = !swiper.isLocked; // events + + if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); + + if (wasLocked && wasLocked !== swiper.isLocked) { + swiper.isEnd = false; + if (swiper.navigation) swiper.navigation.update(); + } + } + + var checkOverflow$1 = { + checkOverflow: checkOverflow + }; + + var defaults = { + init: true, + direction: 'horizontal', + touchEventsTarget: 'container', + initialSlide: 0, + speed: 300, + cssMode: false, + updateOnWindowResize: true, + // Overrides + width: null, + height: null, + // + preventInteractionOnTransition: false, + // ssr + userAgent: null, + url: null, + // To support iOS's swipe-to-go-back gesture (when being used in-app). + edgeSwipeDetection: false, + edgeSwipeThreshold: 20, + // Free mode + freeMode: false, + freeModeMomentum: true, + freeModeMomentumRatio: 1, + freeModeMomentumBounce: true, + freeModeMomentumBounceRatio: 1, + freeModeMomentumVelocityRatio: 1, + freeModeSticky: false, + freeModeMinimumVelocity: 0.02, + // Autoheight + autoHeight: false, + // Set wrapper width + setWrapperSize: false, + // Virtual Translate + virtualTranslate: false, + // Effects + effect: 'slide', + // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' + // Breakpoints + breakpoints: undefined, + // Slides grid + spaceBetween: 0, + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerColumnFill: 'column', + slidesPerGroup: 1, + slidesPerGroupSkip: 0, + centeredSlides: false, + centeredSlidesBounds: false, + slidesOffsetBefore: 0, + // in px + slidesOffsetAfter: 0, + // in px + normalizeSlideIndex: true, + centerInsufficientSlides: false, + // Disable swiper and hide navigation when container not overflow + watchOverflow: false, + // Round length + roundLengths: false, + // Touches + touchRatio: 1, + touchAngle: 45, + simulateTouch: true, + shortSwipes: true, + longSwipes: true, + longSwipesRatio: 0.5, + longSwipesMs: 300, + followFinger: true, + allowTouchMove: true, + threshold: 0, + touchMoveStopPropagation: false, + touchStartPreventDefault: true, + touchStartForcePreventDefault: false, + touchReleaseOnEdges: false, + // Unique Navigation Elements + uniqueNavElements: true, + // Resistance + resistance: true, + resistanceRatio: 0.85, + // Progress + watchSlidesProgress: false, + watchSlidesVisibility: false, + // Cursor + grabCursor: false, + // Clicks + preventClicks: true, + preventClicksPropagation: true, + slideToClickedSlide: false, + // Images + preloadImages: true, + updateOnImagesReady: true, + // loop + loop: false, + loopAdditionalSlides: 0, + loopedSlides: null, + loopFillGroupWithBlank: false, + loopPreventsSlide: true, + // Swiping/no swiping + allowSlidePrev: true, + allowSlideNext: true, + swipeHandler: null, + // '.swipe-handler', + noSwiping: true, + noSwipingClass: 'swiper-no-swiping', + noSwipingSelector: null, + // Passive Listeners + passiveListeners: true, + // NS + containerModifierClass: 'swiper-container-', + // NEW + slideClass: 'swiper-slide', + slideBlankClass: 'swiper-slide-invisible-blank', + slideActiveClass: 'swiper-slide-active', + slideDuplicateActiveClass: 'swiper-slide-duplicate-active', + slideVisibleClass: 'swiper-slide-visible', + slideDuplicateClass: 'swiper-slide-duplicate', + slideNextClass: 'swiper-slide-next', + slideDuplicateNextClass: 'swiper-slide-duplicate-next', + slidePrevClass: 'swiper-slide-prev', + slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', + wrapperClass: 'swiper-wrapper', + // Callbacks + runCallbacksOnInit: true, + // Internals + _emitClasses: false + }; + + var prototypes = { + modular: modular, + eventsEmitter: eventsEmitter, + update: update, + translate: translate, + transition: transition$1, + slide: slide, + loop: loop, + grabCursor: grabCursor, + manipulation: manipulation, + events: events, + breakpoints: breakpoints, + checkOverflow: checkOverflow$1, + classes: classes, + images: images + }; + var extendedDefaults = {}; + + var Swiper = /*#__PURE__*/function () { + function Swiper() { + var el; + var params; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + if (args.length === 1 && args[0].constructor && args[0].constructor === Object) { + params = args[0]; + } else { + el = args[0]; + params = args[1]; + } + + if (!params) params = {}; + params = extend$1({}, params); + if (el && !params.el) params.el = el; // Swiper Instance + + var swiper = this; + swiper.support = getSupport(); + swiper.device = getDevice({ + userAgent: params.userAgent + }); + swiper.browser = getBrowser(); + swiper.eventsListeners = {}; + swiper.eventsAnyListeners = []; + Object.keys(prototypes).forEach(function (prototypeGroup) { + Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) { + if (!Swiper.prototype[protoMethod]) { + Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; + } + }); + }); + + if (typeof swiper.modules === 'undefined') { + swiper.modules = {}; + } + + Object.keys(swiper.modules).forEach(function (moduleName) { + var module = swiper.modules[moduleName]; + + if (module.params) { + var moduleParamName = Object.keys(module.params)[0]; + var moduleParams = module.params[moduleParamName]; + if (typeof moduleParams !== 'object' || moduleParams === null) return; + if (!(moduleParamName in params && 'enabled' in moduleParams)) return; + + if (params[moduleParamName] === true) { + params[moduleParamName] = { + enabled: true + }; + } + + if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { + params[moduleParamName].enabled = true; + } + + if (!params[moduleParamName]) params[moduleParamName] = { + enabled: false + }; + } + }); // Extend defaults with modules params + + var swiperParams = extend$1({}, defaults); + swiper.useParams(swiperParams); // Extend defaults with passed params + + swiper.params = extend$1({}, swiperParams, extendedDefaults, params); + swiper.originalParams = extend$1({}, swiper.params); + swiper.passedParams = extend$1({}, params); // add event listeners + + if (swiper.params && swiper.params.on) { + Object.keys(swiper.params.on).forEach(function (eventName) { + swiper.on(eventName, swiper.params.on[eventName]); + }); + } // Save Dom lib + + + swiper.$ = $; // Find el + + var $el = $(swiper.params.el); + el = $el[0]; + + if (!el) { + return undefined; + } + + if ($el.length > 1) { + var swipers = []; + $el.each(function (containerEl) { + var newParams = extend$1({}, params, { + el: containerEl + }); + swipers.push(new Swiper(newParams)); + }); + return swipers; + } + + el.swiper = swiper; // Find Wrapper + + var $wrapperEl; + + if (el && el.shadowRoot && el.shadowRoot.querySelector) { + $wrapperEl = $(el.shadowRoot.querySelector("." + swiper.params.wrapperClass)); // Children needs to return slot items + + $wrapperEl.children = function (options) { + return $el.children(options); + }; + } else { + $wrapperEl = $el.children("." + swiper.params.wrapperClass); + } // Extend Swiper + + + extend$1(swiper, { + $el: $el, + el: el, + $wrapperEl: $wrapperEl, + wrapperEl: $wrapperEl[0], + // Classes + classNames: [], + // Slides + slides: $(), + slidesGrid: [], + snapGrid: [], + slidesSizesGrid: [], + // isDirection + isHorizontal: function isHorizontal() { + return swiper.params.direction === 'horizontal'; + }, + isVertical: function isVertical() { + return swiper.params.direction === 'vertical'; + }, + // RTL + rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl', + rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), + wrongRTL: $wrapperEl.css('display') === '-webkit-box', + // Indexes + activeIndex: 0, + realIndex: 0, + // + isBeginning: true, + isEnd: false, + // Props + translate: 0, + previousTranslate: 0, + progress: 0, + velocity: 0, + animating: false, + // Locks + allowSlideNext: swiper.params.allowSlideNext, + allowSlidePrev: swiper.params.allowSlidePrev, + // Touch Events + touchEvents: function touchEvents() { + var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel']; + var desktop = ['mousedown', 'mousemove', 'mouseup']; + + if (swiper.support.pointerEvents) { + desktop = ['pointerdown', 'pointermove', 'pointerup']; + } + + swiper.touchEventsTouch = { + start: touch[0], + move: touch[1], + end: touch[2], + cancel: touch[3] + }; + swiper.touchEventsDesktop = { + start: desktop[0], + move: desktop[1], + end: desktop[2] + }; + return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop; + }(), + touchEventsData: { + isTouched: undefined, + isMoved: undefined, + allowTouchCallbacks: undefined, + touchStartTime: undefined, + isScrolling: undefined, + currentTranslate: undefined, + startTranslate: undefined, + allowThresholdMove: undefined, + // Form elements to match + formElements: 'input, select, option, textarea, button, video, label', + // Last click time + lastClickTime: now(), + clickTimeout: undefined, + // Velocities + velocities: [], + allowMomentumBounce: undefined, + isTouchEvent: undefined, + startMoving: undefined + }, + // Clicks + allowClick: true, + // Touches + allowTouchMove: swiper.params.allowTouchMove, + touches: { + startX: 0, + startY: 0, + currentX: 0, + currentY: 0, + diff: 0 + }, + // Images + imagesToLoad: [], + imagesLoaded: 0 + }); // Install Modules + + swiper.useModules(); + swiper.emit('_swiper'); // Init + + if (swiper.params.init) { + swiper.init(); + } // Return app instance + + + return swiper; + } + + var _proto = Swiper.prototype; + + _proto.emitContainerClasses = function emitContainerClasses() { + var swiper = this; + if (!swiper.params._emitClasses || !swiper.el) return; + var classes = swiper.el.className.split(' ').filter(function (className) { + return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; + }); + swiper.emit('_containerClasses', classes.join(' ')); + }; + + _proto.emitSlidesClasses = function emitSlidesClasses() { + var swiper = this; + if (!swiper.params._emitClasses || !swiper.el) return; + swiper.slides.each(function (slideEl) { + var classes = slideEl.className.split(' ').filter(function (className) { + return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; + }); + swiper.emit('_slideClass', slideEl, classes.join(' ')); + }); + }; + + _proto.slidesPerViewDynamic = function slidesPerViewDynamic() { + var swiper = this; + var params = swiper.params, + slides = swiper.slides, + slidesGrid = swiper.slidesGrid, + swiperSize = swiper.size, + activeIndex = swiper.activeIndex; + var spv = 1; + + if (params.centeredSlides) { + var slideSize = slides[activeIndex].swiperSlideSize; + var breakLoop; + + for (var i = activeIndex + 1; i < slides.length; i += 1) { + if (slides[i] && !breakLoop) { + slideSize += slides[i].swiperSlideSize; + spv += 1; + if (slideSize > swiperSize) breakLoop = true; + } + } + + for (var _i = activeIndex - 1; _i >= 0; _i -= 1) { + if (slides[_i] && !breakLoop) { + slideSize += slides[_i].swiperSlideSize; + spv += 1; + if (slideSize > swiperSize) breakLoop = true; + } + } + } else { + for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) { + if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) { + spv += 1; + } + } + } + + return spv; + }; + + _proto.update = function update() { + var swiper = this; + if (!swiper || swiper.destroyed) return; + var snapGrid = swiper.snapGrid, + params = swiper.params; // Breakpoints + + if (params.breakpoints) { + swiper.setBreakpoint(); + } + + swiper.updateSize(); + swiper.updateSlides(); + swiper.updateProgress(); + swiper.updateSlidesClasses(); + + function setTranslate() { + var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; + var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); + swiper.setTranslate(newTranslate); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + } + + var translated; + + if (swiper.params.freeMode) { + setTranslate(); + + if (swiper.params.autoHeight) { + swiper.updateAutoHeight(); + } + } else { + if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { + translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true); + } else { + translated = swiper.slideTo(swiper.activeIndex, 0, false, true); + } + + if (!translated) { + setTranslate(); + } + } + + if (params.watchOverflow && snapGrid !== swiper.snapGrid) { + swiper.checkOverflow(); + } + + swiper.emit('update'); + }; + + _proto.changeDirection = function changeDirection(newDirection, needUpdate) { + if (needUpdate === void 0) { + needUpdate = true; + } + + var swiper = this; + var currentDirection = swiper.params.direction; + + if (!newDirection) { + // eslint-disable-next-line + newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; + } + + if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { + return swiper; + } + + swiper.$el.removeClass("" + swiper.params.containerModifierClass + currentDirection).addClass("" + swiper.params.containerModifierClass + newDirection); + swiper.emitContainerClasses(); + swiper.params.direction = newDirection; + swiper.slides.each(function (slideEl) { + if (newDirection === 'vertical') { + slideEl.style.width = ''; + } else { + slideEl.style.height = ''; + } + }); + swiper.emit('changeDirection'); + if (needUpdate) swiper.update(); + return swiper; + }; + + _proto.init = function init() { + var swiper = this; + if (swiper.initialized) return; + swiper.emit('beforeInit'); // Set breakpoint + + if (swiper.params.breakpoints) { + swiper.setBreakpoint(); + } // Add Classes + + + swiper.addClasses(); // Create loop + + if (swiper.params.loop) { + swiper.loopCreate(); + } // Update size + + + swiper.updateSize(); // Update slides + + swiper.updateSlides(); + + if (swiper.params.watchOverflow) { + swiper.checkOverflow(); + } // Set Grab Cursor + + + if (swiper.params.grabCursor) { + swiper.setGrabCursor(); + } + + if (swiper.params.preloadImages) { + swiper.preloadImages(); + } // Slide To Initial Slide + + + if (swiper.params.loop) { + swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit); + } else { + swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit); + } // Attach events + + + swiper.attachEvents(); // Init Flag + + swiper.initialized = true; // Emit + + swiper.emit('init'); + }; + + _proto.destroy = function destroy(deleteInstance, cleanStyles) { + if (deleteInstance === void 0) { + deleteInstance = true; + } + + if (cleanStyles === void 0) { + cleanStyles = true; + } + + var swiper = this; + var params = swiper.params, + $el = swiper.$el, + $wrapperEl = swiper.$wrapperEl, + slides = swiper.slides; + + if (typeof swiper.params === 'undefined' || swiper.destroyed) { + return null; + } + + swiper.emit('beforeDestroy'); // Init Flag + + swiper.initialized = false; // Detach events + + swiper.detachEvents(); // Destroy loop + + if (params.loop) { + swiper.loopDestroy(); + } // Cleanup styles + + + if (cleanStyles) { + swiper.removeClasses(); + $el.removeAttr('style'); + $wrapperEl.removeAttr('style'); + + if (slides && slides.length) { + slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index'); + } + } + + swiper.emit('destroy'); // Detach emitter events + + Object.keys(swiper.eventsListeners).forEach(function (eventName) { + swiper.off(eventName); + }); + + if (deleteInstance !== false) { + swiper.$el[0].swiper = null; + deleteProps(swiper); + } + + swiper.destroyed = true; + return null; + }; + + Swiper.extendDefaults = function extendDefaults(newDefaults) { + extend$1(extendedDefaults, newDefaults); + }; + + Swiper.installModule = function installModule(module) { + if (!Swiper.prototype.modules) Swiper.prototype.modules = {}; + var name = module.name || Object.keys(Swiper.prototype.modules).length + "_" + now(); + Swiper.prototype.modules[name] = module; + }; + + Swiper.use = function use(module) { + if (Array.isArray(module)) { + module.forEach(function (m) { + return Swiper.installModule(m); + }); + return Swiper; + } + + Swiper.installModule(module); + return Swiper; + }; + + _createClass(Swiper, null, [{ + key: "extendedDefaults", + get: function get() { + return extendedDefaults; + } + }, { + key: "defaults", + get: function get() { + return defaults; + } + }]); + + return Swiper; + }(); + + Swiper.use([Resize, Observer$1]); + + var Virtual = { + update: function update(force) { + var swiper = this; + var _swiper$params = swiper.params, + slidesPerView = _swiper$params.slidesPerView, + slidesPerGroup = _swiper$params.slidesPerGroup, + centeredSlides = _swiper$params.centeredSlides; + var _swiper$params$virtua = swiper.params.virtual, + addSlidesBefore = _swiper$params$virtua.addSlidesBefore, + addSlidesAfter = _swiper$params$virtua.addSlidesAfter; + var _swiper$virtual = swiper.virtual, + previousFrom = _swiper$virtual.from, + previousTo = _swiper$virtual.to, + slides = _swiper$virtual.slides, + previousSlidesGrid = _swiper$virtual.slidesGrid, + renderSlide = _swiper$virtual.renderSlide, + previousOffset = _swiper$virtual.offset; + swiper.updateActiveIndex(); + var activeIndex = swiper.activeIndex || 0; + var offsetProp; + if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; + var slidesAfter; + var slidesBefore; + + if (centeredSlides) { + slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; + slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; + } else { + slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter; + slidesBefore = slidesPerGroup + addSlidesBefore; + } + + var from = Math.max((activeIndex || 0) - slidesBefore, 0); + var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1); + var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); + extend$1(swiper.virtual, { + from: from, + to: to, + offset: offset, + slidesGrid: swiper.slidesGrid + }); + + function onRendered() { + swiper.updateSlides(); + swiper.updateProgress(); + swiper.updateSlidesClasses(); + + if (swiper.lazy && swiper.params.lazy.enabled) { + swiper.lazy.load(); + } + } + + if (previousFrom === from && previousTo === to && !force) { + if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { + swiper.slides.css(offsetProp, offset + "px"); + } + + swiper.updateProgress(); + return; + } + + if (swiper.params.virtual.renderExternal) { + swiper.params.virtual.renderExternal.call(swiper, { + offset: offset, + from: from, + to: to, + slides: function getSlides() { + var slidesToRender = []; + + for (var i = from; i <= to; i += 1) { + slidesToRender.push(slides[i]); + } + + return slidesToRender; + }() + }); + + if (swiper.params.virtual.renderExternalUpdate) { + onRendered(); + } + + return; + } + + var prependIndexes = []; + var appendIndexes = []; + + if (force) { + swiper.$wrapperEl.find("." + swiper.params.slideClass).remove(); + } else { + for (var i = previousFrom; i <= previousTo; i += 1) { + if (i < from || i > to) { + swiper.$wrapperEl.find("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + i + "\"]").remove(); + } + } + } + + for (var _i = 0; _i < slides.length; _i += 1) { + if (_i >= from && _i <= to) { + if (typeof previousTo === 'undefined' || force) { + appendIndexes.push(_i); + } else { + if (_i > previousTo) appendIndexes.push(_i); + if (_i < previousFrom) prependIndexes.push(_i); + } + } + } + + appendIndexes.forEach(function (index) { + swiper.$wrapperEl.append(renderSlide(slides[index], index)); + }); + prependIndexes.sort(function (a, b) { + return b - a; + }).forEach(function (index) { + swiper.$wrapperEl.prepend(renderSlide(slides[index], index)); + }); + swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + "px"); + onRendered(); + }, + renderSlide: function renderSlide(slide, index) { + var swiper = this; + var params = swiper.params.virtual; + + if (params.cache && swiper.virtual.cache[index]) { + return swiper.virtual.cache[index]; + } + + var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $("<div class=\"" + swiper.params.slideClass + "\" data-swiper-slide-index=\"" + index + "\">" + slide + "</div>"); + if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index); + if (params.cache) swiper.virtual.cache[index] = $slideEl; + return $slideEl; + }, + appendSlide: function appendSlide(slides) { + var swiper = this; + + if (typeof slides === 'object' && 'length' in slides) { + for (var i = 0; i < slides.length; i += 1) { + if (slides[i]) swiper.virtual.slides.push(slides[i]); + } + } else { + swiper.virtual.slides.push(slides); + } + + swiper.virtual.update(true); + }, + prependSlide: function prependSlide(slides) { + var swiper = this; + var activeIndex = swiper.activeIndex; + var newActiveIndex = activeIndex + 1; + var numberOfNewSlides = 1; + + if (Array.isArray(slides)) { + for (var i = 0; i < slides.length; i += 1) { + if (slides[i]) swiper.virtual.slides.unshift(slides[i]); + } + + newActiveIndex = activeIndex + slides.length; + numberOfNewSlides = slides.length; + } else { + swiper.virtual.slides.unshift(slides); + } + + if (swiper.params.virtual.cache) { + var cache = swiper.virtual.cache; + var newCache = {}; + Object.keys(cache).forEach(function (cachedIndex) { + var $cachedEl = cache[cachedIndex]; + var cachedElIndex = $cachedEl.attr('data-swiper-slide-index'); + + if (cachedElIndex) { + $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1); + } + + newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl; + }); + swiper.virtual.cache = newCache; + } + + swiper.virtual.update(true); + swiper.slideTo(newActiveIndex, 0); + }, + removeSlide: function removeSlide(slidesIndexes) { + var swiper = this; + if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; + var activeIndex = swiper.activeIndex; + + if (Array.isArray(slidesIndexes)) { + for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) { + swiper.virtual.slides.splice(slidesIndexes[i], 1); + + if (swiper.params.virtual.cache) { + delete swiper.virtual.cache[slidesIndexes[i]]; + } + + if (slidesIndexes[i] < activeIndex) activeIndex -= 1; + activeIndex = Math.max(activeIndex, 0); + } + } else { + swiper.virtual.slides.splice(slidesIndexes, 1); + + if (swiper.params.virtual.cache) { + delete swiper.virtual.cache[slidesIndexes]; + } + + if (slidesIndexes < activeIndex) activeIndex -= 1; + activeIndex = Math.max(activeIndex, 0); + } + + swiper.virtual.update(true); + swiper.slideTo(activeIndex, 0); + }, + removeAllSlides: function removeAllSlides() { + var swiper = this; + swiper.virtual.slides = []; + + if (swiper.params.virtual.cache) { + swiper.virtual.cache = {}; + } + + swiper.virtual.update(true); + swiper.slideTo(0, 0); + } + }; + var Virtual$1 = { + name: 'virtual', + params: { + virtual: { + enabled: false, + slides: [], + cache: true, + renderSlide: null, + renderExternal: null, + renderExternalUpdate: true, + addSlidesBefore: 0, + addSlidesAfter: 0 + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + virtual: _extends(_extends({}, Virtual), {}, { + slides: swiper.params.virtual.slides, + cache: {} + }) + }); + }, + on: { + beforeInit: function beforeInit(swiper) { + if (!swiper.params.virtual.enabled) return; + swiper.classNames.push(swiper.params.containerModifierClass + "virtual"); + var overwriteParams = { + watchSlidesProgress: true + }; + extend$1(swiper.params, overwriteParams); + extend$1(swiper.originalParams, overwriteParams); + + if (!swiper.params.initialSlide) { + swiper.virtual.update(); + } + }, + setTranslate: function setTranslate(swiper) { + if (!swiper.params.virtual.enabled) return; + swiper.virtual.update(); + } + } + }; + + var Keyboard = { + handle: function handle(event) { + var swiper = this; + var window = getWindow(); + var document = getDocument(); + var rtl = swiper.rtlTranslate; + var e = event; + if (e.originalEvent) e = e.originalEvent; // jquery fix + + var kc = e.keyCode || e.charCode; + var pageUpDown = swiper.params.keyboard.pageUpDown; + var isPageUp = pageUpDown && kc === 33; + var isPageDown = pageUpDown && kc === 34; + var isArrowLeft = kc === 37; + var isArrowRight = kc === 39; + var isArrowUp = kc === 38; + var isArrowDown = kc === 40; // Directions locks + + if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) { + return false; + } + + if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) { + return false; + } + + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return undefined; + } + + if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { + return undefined; + } + + if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { + var inView = false; // Check that swiper should be inside of visible area of window + + if (swiper.$el.parents("." + swiper.params.slideClass).length > 0 && swiper.$el.parents("." + swiper.params.slideActiveClass).length === 0) { + return undefined; + } + + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var swiperOffset = swiper.$el.offset(); + if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; + var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]]; + + for (var i = 0; i < swiperCoord.length; i += 1) { + var point = swiperCoord[i]; + + if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) { + inView = true; + } + } + + if (!inView) return undefined; + } + + if (swiper.isHorizontal()) { + if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { + if (e.preventDefault) e.preventDefault();else e.returnValue = false; + } + + if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext(); + if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev(); + } else { + if (isPageUp || isPageDown || isArrowUp || isArrowDown) { + if (e.preventDefault) e.preventDefault();else e.returnValue = false; + } + + if (isPageDown || isArrowDown) swiper.slideNext(); + if (isPageUp || isArrowUp) swiper.slidePrev(); + } + + swiper.emit('keyPress', kc); + return undefined; + }, + enable: function enable() { + var swiper = this; + var document = getDocument(); + if (swiper.keyboard.enabled) return; + $(document).on('keydown', swiper.keyboard.handle); + swiper.keyboard.enabled = true; + }, + disable: function disable() { + var swiper = this; + var document = getDocument(); + if (!swiper.keyboard.enabled) return; + $(document).off('keydown', swiper.keyboard.handle); + swiper.keyboard.enabled = false; + } + }; + var Keyboard$1 = { + name: 'keyboard', + params: { + keyboard: { + enabled: false, + onlyInViewport: true, + pageUpDown: true + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + keyboard: _extends({ + enabled: false + }, Keyboard) + }); + }, + on: { + init: function init(swiper) { + if (swiper.params.keyboard.enabled) { + swiper.keyboard.enable(); + } + }, + destroy: function destroy(swiper) { + if (swiper.keyboard.enabled) { + swiper.keyboard.disable(); + } + } + } + }; + + function isEventSupported() { + var document = getDocument(); + var eventName = 'onwheel'; + var isSupported = (eventName in document); + + if (!isSupported) { + var element = document.createElement('div'); + element.setAttribute(eventName, 'return;'); + isSupported = typeof element[eventName] === 'function'; + } + + if (!isSupported && document.implementation && document.implementation.hasFeature && // always returns true in newer browsers as per the standard. + // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature + document.implementation.hasFeature('', '') !== true) { + // This is the only way to test support for the `wheel` event in IE9+. + isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); + } + + return isSupported; + } + + var Mousewheel = { + lastScrollTime: now(), + lastEventBeforeSnap: undefined, + recentWheelEvents: [], + event: function event() { + var window = getWindow(); + if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll'; + return isEventSupported() ? 'wheel' : 'mousewheel'; + }, + normalize: function normalize(e) { + // Reasonable defaults + var PIXEL_STEP = 10; + var LINE_HEIGHT = 40; + var PAGE_HEIGHT = 800; + var sX = 0; + var sY = 0; // spinX, spinY + + var pX = 0; + var pY = 0; // pixelX, pixelY + // Legacy + + if ('detail' in e) { + sY = e.detail; + } + + if ('wheelDelta' in e) { + sY = -e.wheelDelta / 120; + } + + if ('wheelDeltaY' in e) { + sY = -e.wheelDeltaY / 120; + } + + if ('wheelDeltaX' in e) { + sX = -e.wheelDeltaX / 120; + } // side scrolling on FF with DOMMouseScroll + + + if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { + sX = sY; + sY = 0; + } + + pX = sX * PIXEL_STEP; + pY = sY * PIXEL_STEP; + + if ('deltaY' in e) { + pY = e.deltaY; + } + + if ('deltaX' in e) { + pX = e.deltaX; + } + + if (e.shiftKey && !pX) { + // if user scrolls with shift he wants horizontal scroll + pX = pY; + pY = 0; + } + + if ((pX || pY) && e.deltaMode) { + if (e.deltaMode === 1) { + // delta in LINE units + pX *= LINE_HEIGHT; + pY *= LINE_HEIGHT; + } else { + // delta in PAGE units + pX *= PAGE_HEIGHT; + pY *= PAGE_HEIGHT; + } + } // Fall-back if spin cannot be determined + + + if (pX && !sX) { + sX = pX < 1 ? -1 : 1; + } + + if (pY && !sY) { + sY = pY < 1 ? -1 : 1; + } + + return { + spinX: sX, + spinY: sY, + pixelX: pX, + pixelY: pY + }; + }, + handleMouseEnter: function handleMouseEnter() { + var swiper = this; + swiper.mouseEntered = true; + }, + handleMouseLeave: function handleMouseLeave() { + var swiper = this; + swiper.mouseEntered = false; + }, + handle: function handle(event) { + var e = event; + var swiper = this; + var params = swiper.params.mousewheel; + + if (swiper.params.cssMode) { + e.preventDefault(); + } + + var target = swiper.$el; + + if (swiper.params.mousewheel.eventsTarget !== 'container') { + target = $(swiper.params.mousewheel.eventsTarget); + } + + if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true; + if (e.originalEvent) e = e.originalEvent; // jquery fix + + var delta = 0; + var rtlFactor = swiper.rtlTranslate ? -1 : 1; + var data = Mousewheel.normalize(e); + + if (params.forceToAxis) { + if (swiper.isHorizontal()) { + if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; + } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; + } else { + delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; + } + + if (delta === 0) return true; + if (params.invert) delta = -delta; + + if (!swiper.params.freeMode) { + // Register the new event in a variable which stores the relevant data + var newEvent = { + time: now(), + delta: Math.abs(delta), + direction: Math.sign(delta), + raw: event + }; // Keep the most recent events + + var recentWheelEvents = swiper.mousewheel.recentWheelEvents; + + if (recentWheelEvents.length >= 2) { + recentWheelEvents.shift(); // only store the last N events + } + + var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; + recentWheelEvents.push(newEvent); // If there is at least one previous recorded event: + // If direction has changed or + // if the scroll is quicker than the previous one: + // Animate the slider. + // Else (this is the first time the wheel is moved): + // Animate the slider. + + if (prevEvent) { + if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { + swiper.mousewheel.animateSlider(newEvent); + } + } else { + swiper.mousewheel.animateSlider(newEvent); + } // If it's time to release the scroll: + // Return now so you don't hit the preventDefault. + + + if (swiper.mousewheel.releaseScroll(newEvent)) { + return true; + } + } else { + // Freemode or scrollContainer: + // If we recently snapped after a momentum scroll, then ignore wheel events + // to give time for the deceleration to finish. Stop ignoring after 500 msecs + // or if it's a new scroll (larger delta or inverse sign as last event before + // an end-of-momentum snap). + var _newEvent = { + time: now(), + delta: Math.abs(delta), + direction: Math.sign(delta) + }; + var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap; + var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction; + + if (!ignoreWheelEvents) { + swiper.mousewheel.lastEventBeforeSnap = undefined; + + if (swiper.params.loop) { + swiper.loopFix(); + } + + var position = swiper.getTranslate() + delta * params.sensitivity; + var wasBeginning = swiper.isBeginning; + var wasEnd = swiper.isEnd; + if (position >= swiper.minTranslate()) position = swiper.minTranslate(); + if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); + swiper.setTransition(0); + swiper.setTranslate(position); + swiper.updateProgress(); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + + if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { + swiper.updateSlidesClasses(); + } + + if (swiper.params.freeModeSticky) { + // When wheel scrolling starts with sticky (aka snap) enabled, then detect + // the end of a momentum scroll by storing recent (N=15?) wheel events. + // 1. do all N events have decreasing or same (absolute value) delta? + // 2. did all N events arrive in the last M (M=500?) msecs? + // 3. does the earliest event have an (absolute value) delta that's + // at least P (P=1?) larger than the most recent event's delta? + // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? + // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration. + // Snap immediately and ignore remaining wheel events in this scroll. + // See comment above for "remaining wheel events in this scroll" determination. + // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. + clearTimeout(swiper.mousewheel.timeout); + swiper.mousewheel.timeout = undefined; + var _recentWheelEvents = swiper.mousewheel.recentWheelEvents; + + if (_recentWheelEvents.length >= 15) { + _recentWheelEvents.shift(); // only store the last N events + + } + + var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined; + + var firstEvent = _recentWheelEvents[0]; + + _recentWheelEvents.push(_newEvent); + + if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) { + // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. + _recentWheelEvents.splice(0); + } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) { + // We're at the end of the deceleration of a momentum scroll, so there's no need + // to wait for more events. Snap ASAP on the next tick. + // Also, because there's some remaining momentum we'll bias the snap in the + // direction of the ongoing scroll because it's better UX for the scroll to snap + // in the same direction as the scroll instead of reversing to snap. Therefore, + // if it's already scrolled more than 20% in the current direction, keep going. + var snapToThreshold = delta > 0 ? 0.8 : 0.2; + swiper.mousewheel.lastEventBeforeSnap = _newEvent; + + _recentWheelEvents.splice(0); + + swiper.mousewheel.timeout = nextTick(function () { + swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); + }, 0); // no delay; move on next tick + } + + if (!swiper.mousewheel.timeout) { + // if we get here, then we haven't detected the end of a momentum scroll, so + // we'll consider a scroll "complete" when there haven't been any wheel events + // for 500ms. + swiper.mousewheel.timeout = nextTick(function () { + var snapToThreshold = 0.5; + swiper.mousewheel.lastEventBeforeSnap = _newEvent; + + _recentWheelEvents.splice(0); + + swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); + }, 500); + } + } // Emit event + + + if (!ignoreWheelEvents) swiper.emit('scroll', e); // Stop autoplay + + if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions + + if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true; + } + } + + if (e.preventDefault) e.preventDefault();else e.returnValue = false; + return false; + }, + animateSlider: function animateSlider(newEvent) { + var swiper = this; + var window = getWindow(); + + if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) { + // Prevent if delta of wheel scroll delta is below configured threshold + return false; + } + + if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) { + // Prevent if time between scrolls is below configured threshold + return false; + } // If the movement is NOT big enough and + // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): + // Don't go any further (avoid insignificant scroll movement). + + + if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) { + // Return false as a default + return true; + } // If user is scrolling towards the end: + // If the slider hasn't hit the latest slide or + // if the slider is a loop and + // if the slider isn't moving right now: + // Go to next slide and + // emit a scroll event. + // Else (the user is scrolling towards the beginning) and + // if the slider hasn't hit the first slide or + // if the slider is a loop and + // if the slider isn't moving right now: + // Go to prev slide and + // emit a scroll event. + + + if (newEvent.direction < 0) { + if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { + swiper.slideNext(); + swiper.emit('scroll', newEvent.raw); + } + } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { + swiper.slidePrev(); + swiper.emit('scroll', newEvent.raw); + } // If you got here is because an animation has been triggered so store the current time + + + swiper.mousewheel.lastScrollTime = new window.Date().getTime(); // Return false as a default + + return false; + }, + releaseScroll: function releaseScroll(newEvent) { + var swiper = this; + var params = swiper.params.mousewheel; + + if (newEvent.direction < 0) { + if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { + // Return true to animate scroll on edges + return true; + } + } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { + // Return true to animate scroll on edges + return true; + } + + return false; + }, + enable: function enable() { + var swiper = this; + var event = Mousewheel.event(); + + if (swiper.params.cssMode) { + swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle); + return true; + } + + if (!event) return false; + if (swiper.mousewheel.enabled) return false; + var target = swiper.$el; + + if (swiper.params.mousewheel.eventsTarget !== 'container') { + target = $(swiper.params.mousewheel.eventsTarget); + } + + target.on('mouseenter', swiper.mousewheel.handleMouseEnter); + target.on('mouseleave', swiper.mousewheel.handleMouseLeave); + target.on(event, swiper.mousewheel.handle); + swiper.mousewheel.enabled = true; + return true; + }, + disable: function disable() { + var swiper = this; + var event = Mousewheel.event(); + + if (swiper.params.cssMode) { + swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle); + return true; + } + + if (!event) return false; + if (!swiper.mousewheel.enabled) return false; + var target = swiper.$el; + + if (swiper.params.mousewheel.eventsTarget !== 'container') { + target = $(swiper.params.mousewheel.eventsTarget); + } + + target.off(event, swiper.mousewheel.handle); + swiper.mousewheel.enabled = false; + return true; + } + }; + var Mousewheel$1 = { + name: 'mousewheel', + params: { + mousewheel: { + enabled: false, + releaseOnEdges: false, + invert: false, + forceToAxis: false, + sensitivity: 1, + eventsTarget: 'container', + thresholdDelta: null, + thresholdTime: null + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + mousewheel: { + enabled: false, + lastScrollTime: now(), + lastEventBeforeSnap: undefined, + recentWheelEvents: [], + enable: Mousewheel.enable, + disable: Mousewheel.disable, + handle: Mousewheel.handle, + handleMouseEnter: Mousewheel.handleMouseEnter, + handleMouseLeave: Mousewheel.handleMouseLeave, + animateSlider: Mousewheel.animateSlider, + releaseScroll: Mousewheel.releaseScroll + } + }); + }, + on: { + init: function init(swiper) { + if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { + swiper.mousewheel.disable(); + } + + if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable(); + }, + destroy: function destroy(swiper) { + if (swiper.params.cssMode) { + swiper.mousewheel.enable(); + } + + if (swiper.mousewheel.enabled) swiper.mousewheel.disable(); + } + } + }; + + var Navigation = { + update: function update() { + // Update Navigation Buttons + var swiper = this; + var params = swiper.params.navigation; + if (swiper.params.loop) return; + var _swiper$navigation = swiper.navigation, + $nextEl = _swiper$navigation.$nextEl, + $prevEl = _swiper$navigation.$prevEl; + + if ($prevEl && $prevEl.length > 0) { + if (swiper.isBeginning) { + $prevEl.addClass(params.disabledClass); + } else { + $prevEl.removeClass(params.disabledClass); + } + + $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); + } + + if ($nextEl && $nextEl.length > 0) { + if (swiper.isEnd) { + $nextEl.addClass(params.disabledClass); + } else { + $nextEl.removeClass(params.disabledClass); + } + + $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); + } + }, + onPrevClick: function onPrevClick(e) { + var swiper = this; + e.preventDefault(); + if (swiper.isBeginning && !swiper.params.loop) return; + swiper.slidePrev(); + }, + onNextClick: function onNextClick(e) { + var swiper = this; + e.preventDefault(); + if (swiper.isEnd && !swiper.params.loop) return; + swiper.slideNext(); + }, + init: function init() { + var swiper = this; + var params = swiper.params.navigation; + if (!(params.nextEl || params.prevEl)) return; + var $nextEl; + var $prevEl; + + if (params.nextEl) { + $nextEl = $(params.nextEl); + + if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) { + $nextEl = swiper.$el.find(params.nextEl); + } + } + + if (params.prevEl) { + $prevEl = $(params.prevEl); + + if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) { + $prevEl = swiper.$el.find(params.prevEl); + } + } + + if ($nextEl && $nextEl.length > 0) { + $nextEl.on('click', swiper.navigation.onNextClick); + } + + if ($prevEl && $prevEl.length > 0) { + $prevEl.on('click', swiper.navigation.onPrevClick); + } + + extend$1(swiper.navigation, { + $nextEl: $nextEl, + nextEl: $nextEl && $nextEl[0], + $prevEl: $prevEl, + prevEl: $prevEl && $prevEl[0] + }); + }, + destroy: function destroy() { + var swiper = this; + var _swiper$navigation2 = swiper.navigation, + $nextEl = _swiper$navigation2.$nextEl, + $prevEl = _swiper$navigation2.$prevEl; + + if ($nextEl && $nextEl.length) { + $nextEl.off('click', swiper.navigation.onNextClick); + $nextEl.removeClass(swiper.params.navigation.disabledClass); + } + + if ($prevEl && $prevEl.length) { + $prevEl.off('click', swiper.navigation.onPrevClick); + $prevEl.removeClass(swiper.params.navigation.disabledClass); + } + } + }; + var Navigation$1 = { + name: 'navigation', + params: { + navigation: { + nextEl: null, + prevEl: null, + hideOnClick: false, + disabledClass: 'swiper-button-disabled', + hiddenClass: 'swiper-button-hidden', + lockClass: 'swiper-button-lock' + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + navigation: _extends({}, Navigation) + }); + }, + on: { + init: function init(swiper) { + swiper.navigation.init(); + swiper.navigation.update(); + }, + toEdge: function toEdge(swiper) { + swiper.navigation.update(); + }, + fromEdge: function fromEdge(swiper) { + swiper.navigation.update(); + }, + destroy: function destroy(swiper) { + swiper.navigation.destroy(); + }, + click: function click(swiper, e) { + var _swiper$navigation3 = swiper.navigation, + $nextEl = _swiper$navigation3.$nextEl, + $prevEl = _swiper$navigation3.$prevEl; + + if (swiper.params.navigation.hideOnClick && !$(e.target).is($prevEl) && !$(e.target).is($nextEl)) { + var isHidden; + + if ($nextEl) { + isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass); + } else if ($prevEl) { + isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass); + } + + if (isHidden === true) { + swiper.emit('navigationShow'); + } else { + swiper.emit('navigationHide'); + } + + if ($nextEl) { + $nextEl.toggleClass(swiper.params.navigation.hiddenClass); + } + + if ($prevEl) { + $prevEl.toggleClass(swiper.params.navigation.hiddenClass); + } + } + } + } + }; + + var Pagination = { + update: function update() { + // Render || Update Pagination bullets/items + var swiper = this; + var rtl = swiper.rtl; + var params = swiper.params.pagination; + if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; + var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; + var $el = swiper.pagination.$el; // Current/Total + + var current; + var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; + + if (swiper.params.loop) { + current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup); + + if (current > slidesLength - 1 - swiper.loopedSlides * 2) { + current -= slidesLength - swiper.loopedSlides * 2; + } + + if (current > total - 1) current -= total; + if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current; + } else if (typeof swiper.snapIndex !== 'undefined') { + current = swiper.snapIndex; + } else { + current = swiper.activeIndex || 0; + } // Types + + + if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { + var bullets = swiper.pagination.bullets; + var firstIndex; + var lastIndex; + var midIndex; + + if (params.dynamicBullets) { + swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true); + $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + "px"); + + if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) { + swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex; + + if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) { + swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1; + } else if (swiper.pagination.dynamicBulletIndex < 0) { + swiper.pagination.dynamicBulletIndex = 0; + } + } + + firstIndex = current - swiper.pagination.dynamicBulletIndex; + lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); + midIndex = (lastIndex + firstIndex) / 2; + } + + bullets.removeClass(params.bulletActiveClass + " " + params.bulletActiveClass + "-next " + params.bulletActiveClass + "-next-next " + params.bulletActiveClass + "-prev " + params.bulletActiveClass + "-prev-prev " + params.bulletActiveClass + "-main"); + + if ($el.length > 1) { + bullets.each(function (bullet) { + var $bullet = $(bullet); + var bulletIndex = $bullet.index(); + + if (bulletIndex === current) { + $bullet.addClass(params.bulletActiveClass); + } + + if (params.dynamicBullets) { + if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { + $bullet.addClass(params.bulletActiveClass + "-main"); + } + + if (bulletIndex === firstIndex) { + $bullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); + } + + if (bulletIndex === lastIndex) { + $bullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); + } + } + }); + } else { + var $bullet = bullets.eq(current); + var bulletIndex = $bullet.index(); + $bullet.addClass(params.bulletActiveClass); + + if (params.dynamicBullets) { + var $firstDisplayedBullet = bullets.eq(firstIndex); + var $lastDisplayedBullet = bullets.eq(lastIndex); + + for (var i = firstIndex; i <= lastIndex; i += 1) { + bullets.eq(i).addClass(params.bulletActiveClass + "-main"); + } + + if (swiper.params.loop) { + if (bulletIndex >= bullets.length - params.dynamicMainBullets) { + for (var _i = params.dynamicMainBullets; _i >= 0; _i -= 1) { + bullets.eq(bullets.length - _i).addClass(params.bulletActiveClass + "-main"); + } + + bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(params.bulletActiveClass + "-prev"); + } else { + $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); + $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); + } + } else { + $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); + $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); + } + } + } + + if (params.dynamicBullets) { + var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); + var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize; + var offsetProp = rtl ? 'right' : 'left'; + bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + "px"); + } + } + + if (params.type === 'fraction') { + $el.find("." + params.currentClass).text(params.formatFractionCurrent(current + 1)); + $el.find("." + params.totalClass).text(params.formatFractionTotal(total)); + } + + if (params.type === 'progressbar') { + var progressbarDirection; + + if (params.progressbarOpposite) { + progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; + } else { + progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; + } + + var scale = (current + 1) / total; + var scaleX = 1; + var scaleY = 1; + + if (progressbarDirection === 'horizontal') { + scaleX = scale; + } else { + scaleY = scale; + } + + $el.find("." + params.progressbarFillClass).transform("translate3d(0,0,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")").transition(swiper.params.speed); + } + + if (params.type === 'custom' && params.renderCustom) { + $el.html(params.renderCustom(swiper, current + 1, total)); + swiper.emit('paginationRender', $el[0]); + } else { + swiper.emit('paginationUpdate', $el[0]); + } + + $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); + }, + render: function render() { + // Render Container + var swiper = this; + var params = swiper.params.pagination; + if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; + var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; + var $el = swiper.pagination.$el; + var paginationHTML = ''; + + if (params.type === 'bullets') { + var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; + + for (var i = 0; i < numberOfBullets; i += 1) { + if (params.renderBullet) { + paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); + } else { + paginationHTML += "<" + params.bulletElement + " class=\"" + params.bulletClass + "\"></" + params.bulletElement + ">"; + } + } + + $el.html(paginationHTML); + swiper.pagination.bullets = $el.find("." + params.bulletClass); + } + + if (params.type === 'fraction') { + if (params.renderFraction) { + paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); + } else { + paginationHTML = "<span class=\"" + params.currentClass + "\"></span>" + ' / ' + ("<span class=\"" + params.totalClass + "\"></span>"); + } + + $el.html(paginationHTML); + } + + if (params.type === 'progressbar') { + if (params.renderProgressbar) { + paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); + } else { + paginationHTML = "<span class=\"" + params.progressbarFillClass + "\"></span>"; + } + + $el.html(paginationHTML); + } + + if (params.type !== 'custom') { + swiper.emit('paginationRender', swiper.pagination.$el[0]); + } + }, + init: function init() { + var swiper = this; + var params = swiper.params.pagination; + if (!params.el) return; + var $el = $(params.el); + if ($el.length === 0) return; + + if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) { + $el = swiper.$el.find(params.el); + } + + if (params.type === 'bullets' && params.clickable) { + $el.addClass(params.clickableClass); + } + + $el.addClass(params.modifierClass + params.type); + + if (params.type === 'bullets' && params.dynamicBullets) { + $el.addClass("" + params.modifierClass + params.type + "-dynamic"); + swiper.pagination.dynamicBulletIndex = 0; + + if (params.dynamicMainBullets < 1) { + params.dynamicMainBullets = 1; + } + } + + if (params.type === 'progressbar' && params.progressbarOpposite) { + $el.addClass(params.progressbarOppositeClass); + } + + if (params.clickable) { + $el.on('click', "." + params.bulletClass, function onClick(e) { + e.preventDefault(); + var index = $(this).index() * swiper.params.slidesPerGroup; + if (swiper.params.loop) index += swiper.loopedSlides; + swiper.slideTo(index); + }); + } + + extend$1(swiper.pagination, { + $el: $el, + el: $el[0] + }); + }, + destroy: function destroy() { + var swiper = this; + var params = swiper.params.pagination; + if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; + var $el = swiper.pagination.$el; + $el.removeClass(params.hiddenClass); + $el.removeClass(params.modifierClass + params.type); + if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass); + + if (params.clickable) { + $el.off('click', "." + params.bulletClass); + } + } + }; + var Pagination$1 = { + name: 'pagination', + params: { + pagination: { + el: null, + bulletElement: 'span', + clickable: false, + hideOnClick: false, + renderBullet: null, + renderProgressbar: null, + renderFraction: null, + renderCustom: null, + progressbarOpposite: false, + type: 'bullets', + // 'bullets' or 'progressbar' or 'fraction' or 'custom' + dynamicBullets: false, + dynamicMainBullets: 1, + formatFractionCurrent: function formatFractionCurrent(number) { + return number; + }, + formatFractionTotal: function formatFractionTotal(number) { + return number; + }, + bulletClass: 'swiper-pagination-bullet', + bulletActiveClass: 'swiper-pagination-bullet-active', + modifierClass: 'swiper-pagination-', + // NEW + currentClass: 'swiper-pagination-current', + totalClass: 'swiper-pagination-total', + hiddenClass: 'swiper-pagination-hidden', + progressbarFillClass: 'swiper-pagination-progressbar-fill', + progressbarOppositeClass: 'swiper-pagination-progressbar-opposite', + clickableClass: 'swiper-pagination-clickable', + // NEW + lockClass: 'swiper-pagination-lock' + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + pagination: _extends({ + dynamicBulletIndex: 0 + }, Pagination) + }); + }, + on: { + init: function init(swiper) { + swiper.pagination.init(); + swiper.pagination.render(); + swiper.pagination.update(); + }, + activeIndexChange: function activeIndexChange(swiper) { + if (swiper.params.loop) { + swiper.pagination.update(); + } else if (typeof swiper.snapIndex === 'undefined') { + swiper.pagination.update(); + } + }, + snapIndexChange: function snapIndexChange(swiper) { + if (!swiper.params.loop) { + swiper.pagination.update(); + } + }, + slidesLengthChange: function slidesLengthChange(swiper) { + if (swiper.params.loop) { + swiper.pagination.render(); + swiper.pagination.update(); + } + }, + snapGridLengthChange: function snapGridLengthChange(swiper) { + if (!swiper.params.loop) { + swiper.pagination.render(); + swiper.pagination.update(); + } + }, + destroy: function destroy(swiper) { + swiper.pagination.destroy(); + }, + click: function click(swiper, e) { + if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(e.target).hasClass(swiper.params.pagination.bulletClass)) { + var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass); + + if (isHidden === true) { + swiper.emit('paginationShow'); + } else { + swiper.emit('paginationHide'); + } + + swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass); + } + } + } + }; + + var Scrollbar = { + setTranslate: function setTranslate() { + var swiper = this; + if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; + var scrollbar = swiper.scrollbar, + rtl = swiper.rtlTranslate, + progress = swiper.progress; + var dragSize = scrollbar.dragSize, + trackSize = scrollbar.trackSize, + $dragEl = scrollbar.$dragEl, + $el = scrollbar.$el; + var params = swiper.params.scrollbar; + var newSize = dragSize; + var newPos = (trackSize - dragSize) * progress; + + if (rtl) { + newPos = -newPos; + + if (newPos > 0) { + newSize = dragSize - newPos; + newPos = 0; + } else if (-newPos + dragSize > trackSize) { + newSize = trackSize + newPos; + } + } else if (newPos < 0) { + newSize = dragSize + newPos; + newPos = 0; + } else if (newPos + dragSize > trackSize) { + newSize = trackSize - newPos; + } + + if (swiper.isHorizontal()) { + $dragEl.transform("translate3d(" + newPos + "px, 0, 0)"); + $dragEl[0].style.width = newSize + "px"; + } else { + $dragEl.transform("translate3d(0px, " + newPos + "px, 0)"); + $dragEl[0].style.height = newSize + "px"; + } + + if (params.hide) { + clearTimeout(swiper.scrollbar.timeout); + $el[0].style.opacity = 1; + swiper.scrollbar.timeout = setTimeout(function () { + $el[0].style.opacity = 0; + $el.transition(400); + }, 1000); + } + }, + setTransition: function setTransition(duration) { + var swiper = this; + if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; + swiper.scrollbar.$dragEl.transition(duration); + }, + updateSize: function updateSize() { + var swiper = this; + if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; + var scrollbar = swiper.scrollbar; + var $dragEl = scrollbar.$dragEl, + $el = scrollbar.$el; + $dragEl[0].style.width = ''; + $dragEl[0].style.height = ''; + var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight; + var divider = swiper.size / swiper.virtualSize; + var moveDivider = divider * (trackSize / swiper.size); + var dragSize; + + if (swiper.params.scrollbar.dragSize === 'auto') { + dragSize = trackSize * divider; + } else { + dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); + } + + if (swiper.isHorizontal()) { + $dragEl[0].style.width = dragSize + "px"; + } else { + $dragEl[0].style.height = dragSize + "px"; + } + + if (divider >= 1) { + $el[0].style.display = 'none'; + } else { + $el[0].style.display = ''; + } + + if (swiper.params.scrollbar.hide) { + $el[0].style.opacity = 0; + } + + extend$1(scrollbar, { + trackSize: trackSize, + divider: divider, + moveDivider: moveDivider, + dragSize: dragSize + }); + scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass); + }, + getPointerPosition: function getPointerPosition(e) { + var swiper = this; + + if (swiper.isHorizontal()) { + return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX; + } + + return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY; + }, + setDragPosition: function setDragPosition(e) { + var swiper = this; + var scrollbar = swiper.scrollbar, + rtl = swiper.rtlTranslate; + var $el = scrollbar.$el, + dragSize = scrollbar.dragSize, + trackSize = scrollbar.trackSize, + dragStartPos = scrollbar.dragStartPos; + var positionRatio; + positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); + positionRatio = Math.max(Math.min(positionRatio, 1), 0); + + if (rtl) { + positionRatio = 1 - positionRatio; + } + + var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; + swiper.updateProgress(position); + swiper.setTranslate(position); + swiper.updateActiveIndex(); + swiper.updateSlidesClasses(); + }, + onDragStart: function onDragStart(e) { + var swiper = this; + var params = swiper.params.scrollbar; + var scrollbar = swiper.scrollbar, + $wrapperEl = swiper.$wrapperEl; + var $el = scrollbar.$el, + $dragEl = scrollbar.$dragEl; + swiper.scrollbar.isTouched = true; + swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; + e.preventDefault(); + e.stopPropagation(); + $wrapperEl.transition(100); + $dragEl.transition(100); + scrollbar.setDragPosition(e); + clearTimeout(swiper.scrollbar.dragTimeout); + $el.transition(0); + + if (params.hide) { + $el.css('opacity', 1); + } + + if (swiper.params.cssMode) { + swiper.$wrapperEl.css('scroll-snap-type', 'none'); + } + + swiper.emit('scrollbarDragStart', e); + }, + onDragMove: function onDragMove(e) { + var swiper = this; + var scrollbar = swiper.scrollbar, + $wrapperEl = swiper.$wrapperEl; + var $el = scrollbar.$el, + $dragEl = scrollbar.$dragEl; + if (!swiper.scrollbar.isTouched) return; + if (e.preventDefault) e.preventDefault();else e.returnValue = false; + scrollbar.setDragPosition(e); + $wrapperEl.transition(0); + $el.transition(0); + $dragEl.transition(0); + swiper.emit('scrollbarDragMove', e); + }, + onDragEnd: function onDragEnd(e) { + var swiper = this; + var params = swiper.params.scrollbar; + var scrollbar = swiper.scrollbar, + $wrapperEl = swiper.$wrapperEl; + var $el = scrollbar.$el; + if (!swiper.scrollbar.isTouched) return; + swiper.scrollbar.isTouched = false; + + if (swiper.params.cssMode) { + swiper.$wrapperEl.css('scroll-snap-type', ''); + $wrapperEl.transition(''); + } + + if (params.hide) { + clearTimeout(swiper.scrollbar.dragTimeout); + swiper.scrollbar.dragTimeout = nextTick(function () { + $el.css('opacity', 0); + $el.transition(400); + }, 1000); + } + + swiper.emit('scrollbarDragEnd', e); + + if (params.snapOnRelease) { + swiper.slideToClosest(); + } + }, + enableDraggable: function enableDraggable() { + var swiper = this; + if (!swiper.params.scrollbar.el) return; + var document = getDocument(); + var scrollbar = swiper.scrollbar, + touchEventsTouch = swiper.touchEventsTouch, + touchEventsDesktop = swiper.touchEventsDesktop, + params = swiper.params, + support = swiper.support; + var $el = scrollbar.$el; + var target = $el[0]; + var activeListener = support.passiveListener && params.passiveListeners ? { + passive: false, + capture: false + } : false; + var passiveListener = support.passiveListener && params.passiveListeners ? { + passive: true, + capture: false + } : false; + + if (!support.touch) { + target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); + document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); + document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); + } else { + target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener); + target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener); + target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener); + } + }, + disableDraggable: function disableDraggable() { + var swiper = this; + if (!swiper.params.scrollbar.el) return; + var document = getDocument(); + var scrollbar = swiper.scrollbar, + touchEventsTouch = swiper.touchEventsTouch, + touchEventsDesktop = swiper.touchEventsDesktop, + params = swiper.params, + support = swiper.support; + var $el = scrollbar.$el; + var target = $el[0]; + var activeListener = support.passiveListener && params.passiveListeners ? { + passive: false, + capture: false + } : false; + var passiveListener = support.passiveListener && params.passiveListeners ? { + passive: true, + capture: false + } : false; + + if (!support.touch) { + target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); + document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); + document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); + } else { + target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener); + target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener); + target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener); + } + }, + init: function init() { + var swiper = this; + if (!swiper.params.scrollbar.el) return; + var scrollbar = swiper.scrollbar, + $swiperEl = swiper.$el; + var params = swiper.params.scrollbar; + var $el = $(params.el); + + if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) { + $el = $swiperEl.find(params.el); + } + + var $dragEl = $el.find("." + swiper.params.scrollbar.dragClass); + + if ($dragEl.length === 0) { + $dragEl = $("<div class=\"" + swiper.params.scrollbar.dragClass + "\"></div>"); + $el.append($dragEl); + } + + extend$1(scrollbar, { + $el: $el, + el: $el[0], + $dragEl: $dragEl, + dragEl: $dragEl[0] + }); + + if (params.draggable) { + scrollbar.enableDraggable(); + } + }, + destroy: function destroy() { + var swiper = this; + swiper.scrollbar.disableDraggable(); + } + }; + var Scrollbar$1 = { + name: 'scrollbar', + params: { + scrollbar: { + el: null, + dragSize: 'auto', + hide: false, + draggable: false, + snapOnRelease: true, + lockClass: 'swiper-scrollbar-lock', + dragClass: 'swiper-scrollbar-drag' + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + scrollbar: _extends({ + isTouched: false, + timeout: null, + dragTimeout: null + }, Scrollbar) + }); + }, + on: { + init: function init(swiper) { + swiper.scrollbar.init(); + swiper.scrollbar.updateSize(); + swiper.scrollbar.setTranslate(); + }, + update: function update(swiper) { + swiper.scrollbar.updateSize(); + }, + resize: function resize(swiper) { + swiper.scrollbar.updateSize(); + }, + observerUpdate: function observerUpdate(swiper) { + swiper.scrollbar.updateSize(); + }, + setTranslate: function setTranslate(swiper) { + swiper.scrollbar.setTranslate(); + }, + setTransition: function setTransition(swiper, duration) { + swiper.scrollbar.setTransition(duration); + }, + destroy: function destroy(swiper) { + swiper.scrollbar.destroy(); + } + } + }; + + var Parallax = { + setTransform: function setTransform(el, progress) { + var swiper = this; + var rtl = swiper.rtl; + var $el = $(el); + var rtlFactor = rtl ? -1 : 1; + var p = $el.attr('data-swiper-parallax') || '0'; + var x = $el.attr('data-swiper-parallax-x'); + var y = $el.attr('data-swiper-parallax-y'); + var scale = $el.attr('data-swiper-parallax-scale'); + var opacity = $el.attr('data-swiper-parallax-opacity'); + + if (x || y) { + x = x || '0'; + y = y || '0'; + } else if (swiper.isHorizontal()) { + x = p; + y = '0'; + } else { + y = p; + x = '0'; + } + + if (x.indexOf('%') >= 0) { + x = parseInt(x, 10) * progress * rtlFactor + "%"; + } else { + x = x * progress * rtlFactor + "px"; + } + + if (y.indexOf('%') >= 0) { + y = parseInt(y, 10) * progress + "%"; + } else { + y = y * progress + "px"; + } + + if (typeof opacity !== 'undefined' && opacity !== null) { + var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); + $el[0].style.opacity = currentOpacity; + } + + if (typeof scale === 'undefined' || scale === null) { + $el.transform("translate3d(" + x + ", " + y + ", 0px)"); + } else { + var currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); + $el.transform("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")"); + } + }, + setTranslate: function setTranslate() { + var swiper = this; + var $el = swiper.$el, + slides = swiper.slides, + progress = swiper.progress, + snapGrid = swiper.snapGrid; + $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) { + swiper.parallax.setTransform(el, progress); + }); + slides.each(function (slideEl, slideIndex) { + var slideProgress = slideEl.progress; + + if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { + slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); + } + + slideProgress = Math.min(Math.max(slideProgress, -1), 1); + $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) { + swiper.parallax.setTransform(el, slideProgress); + }); + }); + }, + setTransition: function setTransition(duration) { + if (duration === void 0) { + duration = this.params.speed; + } + + var swiper = this; + var $el = swiper.$el; + $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) { + var $parallaxEl = $(parallaxEl); + var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration; + if (duration === 0) parallaxDuration = 0; + $parallaxEl.transition(parallaxDuration); + }); + } + }; + var Parallax$1 = { + name: 'parallax', + params: { + parallax: { + enabled: false + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + parallax: _extends({}, Parallax) + }); + }, + on: { + beforeInit: function beforeInit(swiper) { + if (!swiper.params.parallax.enabled) return; + swiper.params.watchSlidesProgress = true; + swiper.originalParams.watchSlidesProgress = true; + }, + init: function init(swiper) { + if (!swiper.params.parallax.enabled) return; + swiper.parallax.setTranslate(); + }, + setTranslate: function setTranslate(swiper) { + if (!swiper.params.parallax.enabled) return; + swiper.parallax.setTranslate(); + }, + setTransition: function setTransition(swiper, duration) { + if (!swiper.params.parallax.enabled) return; + swiper.parallax.setTransition(duration); + } + } + }; + + var Zoom = { + // Calc Scale From Multi-touches + getDistanceBetweenTouches: function getDistanceBetweenTouches(e) { + if (e.targetTouches.length < 2) return 1; + var x1 = e.targetTouches[0].pageX; + var y1 = e.targetTouches[0].pageY; + var x2 = e.targetTouches[1].pageX; + var y2 = e.targetTouches[1].pageY; + var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); + return distance; + }, + // Events + onGestureStart: function onGestureStart(e) { + var swiper = this; + var support = swiper.support; + var params = swiper.params.zoom; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + zoom.fakeGestureTouched = false; + zoom.fakeGestureMoved = false; + + if (!support.gestures) { + if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { + return; + } + + zoom.fakeGestureTouched = true; + gesture.scaleStart = Zoom.getDistanceBetweenTouches(e); + } + + if (!gesture.$slideEl || !gesture.$slideEl.length) { + gesture.$slideEl = $(e.target).closest("." + swiper.params.slideClass); + if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); + gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); + gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); + gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; + + if (gesture.$imageWrapEl.length === 0) { + gesture.$imageEl = undefined; + return; + } + } + + if (gesture.$imageEl) { + gesture.$imageEl.transition(0); + } + + swiper.zoom.isScaling = true; + }, + onGestureChange: function onGestureChange(e) { + var swiper = this; + var support = swiper.support; + var params = swiper.params.zoom; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + + if (!support.gestures) { + if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { + return; + } + + zoom.fakeGestureMoved = true; + gesture.scaleMove = Zoom.getDistanceBetweenTouches(e); + } + + if (!gesture.$imageEl || gesture.$imageEl.length === 0) { + if (e.type === 'gesturechange') zoom.onGestureStart(e); + return; + } + + if (support.gestures) { + zoom.scale = e.scale * zoom.currentScale; + } else { + zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale; + } + + if (zoom.scale > gesture.maxRatio) { + zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5); + } + + if (zoom.scale < params.minRatio) { + zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5); + } + + gesture.$imageEl.transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); + }, + onGestureEnd: function onGestureEnd(e) { + var swiper = this; + var device = swiper.device; + var support = swiper.support; + var params = swiper.params.zoom; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + + if (!support.gestures) { + if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) { + return; + } + + if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) { + return; + } + + zoom.fakeGestureTouched = false; + zoom.fakeGestureMoved = false; + } + + if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; + zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); + gesture.$imageEl.transition(swiper.params.speed).transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); + zoom.currentScale = zoom.scale; + zoom.isScaling = false; + if (zoom.scale === 1) gesture.$slideEl = undefined; + }, + onTouchStart: function onTouchStart(e) { + var swiper = this; + var device = swiper.device; + var zoom = swiper.zoom; + var gesture = zoom.gesture, + image = zoom.image; + if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; + if (image.isTouched) return; + if (device.android && e.cancelable) e.preventDefault(); + image.isTouched = true; + image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; + image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; + }, + onTouchMove: function onTouchMove(e) { + var swiper = this; + var zoom = swiper.zoom; + var gesture = zoom.gesture, + image = zoom.image, + velocity = zoom.velocity; + if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; + swiper.allowClick = false; + if (!image.isTouched || !gesture.$slideEl) return; + + if (!image.isMoved) { + image.width = gesture.$imageEl[0].offsetWidth; + image.height = gesture.$imageEl[0].offsetHeight; + image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0; + image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0; + gesture.slideWidth = gesture.$slideEl[0].offsetWidth; + gesture.slideHeight = gesture.$slideEl[0].offsetHeight; + gesture.$imageWrapEl.transition(0); + + if (swiper.rtl) { + image.startX = -image.startX; + image.startY = -image.startY; + } + } // Define if we need image drag + + + var scaledWidth = image.width * zoom.scale; + var scaledHeight = image.height * zoom.scale; + if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; + image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); + image.maxX = -image.minX; + image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); + image.maxY = -image.minY; + image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + + if (!image.isMoved && !zoom.isScaling) { + if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) { + image.isTouched = false; + return; + } + + if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) { + image.isTouched = false; + return; + } + } + + if (e.cancelable) { + e.preventDefault(); + } + + e.stopPropagation(); + image.isMoved = true; + image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX; + image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY; + + if (image.currentX < image.minX) { + image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8); + } + + if (image.currentX > image.maxX) { + image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8); + } + + if (image.currentY < image.minY) { + image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8); + } + + if (image.currentY > image.maxY) { + image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8); + } // Velocity + + + if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; + if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; + if (!velocity.prevTime) velocity.prevTime = Date.now(); + velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; + velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; + if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; + if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; + velocity.prevPositionX = image.touchesCurrent.x; + velocity.prevPositionY = image.touchesCurrent.y; + velocity.prevTime = Date.now(); + gesture.$imageWrapEl.transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)"); + }, + onTouchEnd: function onTouchEnd() { + var swiper = this; + var zoom = swiper.zoom; + var gesture = zoom.gesture, + image = zoom.image, + velocity = zoom.velocity; + if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; + + if (!image.isTouched || !image.isMoved) { + image.isTouched = false; + image.isMoved = false; + return; + } + + image.isTouched = false; + image.isMoved = false; + var momentumDurationX = 300; + var momentumDurationY = 300; + var momentumDistanceX = velocity.x * momentumDurationX; + var newPositionX = image.currentX + momentumDistanceX; + var momentumDistanceY = velocity.y * momentumDurationY; + var newPositionY = image.currentY + momentumDistanceY; // Fix duration + + if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); + if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); + var momentumDuration = Math.max(momentumDurationX, momentumDurationY); + image.currentX = newPositionX; + image.currentY = newPositionY; // Define if we need image drag + + var scaledWidth = image.width * zoom.scale; + var scaledHeight = image.height * zoom.scale; + image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); + image.maxX = -image.minX; + image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); + image.maxY = -image.minY; + image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); + image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); + gesture.$imageWrapEl.transition(momentumDuration).transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)"); + }, + onTransitionEnd: function onTransitionEnd() { + var swiper = this; + var zoom = swiper.zoom; + var gesture = zoom.gesture; + + if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) { + if (gesture.$imageEl) { + gesture.$imageEl.transform('translate3d(0,0,0) scale(1)'); + } + + if (gesture.$imageWrapEl) { + gesture.$imageWrapEl.transform('translate3d(0,0,0)'); + } + + zoom.scale = 1; + zoom.currentScale = 1; + gesture.$slideEl = undefined; + gesture.$imageEl = undefined; + gesture.$imageWrapEl = undefined; + } + }, + // Toggle Zoom + toggle: function toggle(e) { + var swiper = this; + var zoom = swiper.zoom; + + if (zoom.scale && zoom.scale !== 1) { + // Zoom Out + zoom.out(); + } else { + // Zoom In + zoom.in(e); + } + }, + in: function _in(e) { + var swiper = this; + var zoom = swiper.zoom; + var params = swiper.params.zoom; + var gesture = zoom.gesture, + image = zoom.image; + + if (!gesture.$slideEl) { + if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { + gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass); + } else { + gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); + } + + gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); + gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); + } + + if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; + gesture.$slideEl.addClass("" + params.zoomedSlideClass); + var touchX; + var touchY; + var offsetX; + var offsetY; + var diffX; + var diffY; + var translateX; + var translateY; + var imageWidth; + var imageHeight; + var scaledWidth; + var scaledHeight; + var translateMinX; + var translateMinY; + var translateMaxX; + var translateMaxY; + var slideWidth; + var slideHeight; + + if (typeof image.touchesStart.x === 'undefined' && e) { + touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; + touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; + } else { + touchX = image.touchesStart.x; + touchY = image.touchesStart.y; + } + + zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; + zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; + + if (e) { + slideWidth = gesture.$slideEl[0].offsetWidth; + slideHeight = gesture.$slideEl[0].offsetHeight; + offsetX = gesture.$slideEl.offset().left; + offsetY = gesture.$slideEl.offset().top; + diffX = offsetX + slideWidth / 2 - touchX; + diffY = offsetY + slideHeight / 2 - touchY; + imageWidth = gesture.$imageEl[0].offsetWidth; + imageHeight = gesture.$imageEl[0].offsetHeight; + scaledWidth = imageWidth * zoom.scale; + scaledHeight = imageHeight * zoom.scale; + translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0); + translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0); + translateMaxX = -translateMinX; + translateMaxY = -translateMinY; + translateX = diffX * zoom.scale; + translateY = diffY * zoom.scale; + + if (translateX < translateMinX) { + translateX = translateMinX; + } + + if (translateX > translateMaxX) { + translateX = translateMaxX; + } + + if (translateY < translateMinY) { + translateY = translateMinY; + } + + if (translateY > translateMaxY) { + translateY = translateMaxY; + } + } else { + translateX = 0; + translateY = 0; + } + + gesture.$imageWrapEl.transition(300).transform("translate3d(" + translateX + "px, " + translateY + "px,0)"); + gesture.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); + }, + out: function out() { + var swiper = this; + var zoom = swiper.zoom; + var params = swiper.params.zoom; + var gesture = zoom.gesture; + + if (!gesture.$slideEl) { + if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { + gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass); + } else { + gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); + } + + gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); + gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); + } + + if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; + zoom.scale = 1; + zoom.currentScale = 1; + gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)'); + gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)'); + gesture.$slideEl.removeClass("" + params.zoomedSlideClass); + gesture.$slideEl = undefined; + }, + toggleGestures: function toggleGestures(method) { + var swiper = this; + var zoom = swiper.zoom; + var selector = zoom.slideSelector, + passive = zoom.passiveListener; + swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive); + swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive); + swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive); + }, + enableGestures: function enableGestures() { + if (this.zoom.gesturesEnabled) return; + this.zoom.gesturesEnabled = true; + this.zoom.toggleGestures('on'); + }, + disableGestures: function disableGestures() { + if (!this.zoom.gesturesEnabled) return; + this.zoom.gesturesEnabled = false; + this.zoom.toggleGestures('off'); + }, + // Attach/Detach Events + enable: function enable() { + var swiper = this; + var support = swiper.support; + var zoom = swiper.zoom; + if (zoom.enabled) return; + zoom.enabled = true; + var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? { + passive: true, + capture: false + } : false; + var activeListenerWithCapture = support.passiveListener ? { + passive: false, + capture: true + } : true; + var slideSelector = "." + swiper.params.slideClass; + swiper.zoom.passiveListener = passiveListener; + swiper.zoom.slideSelector = slideSelector; // Scale image + + if (support.gestures) { + swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener); + swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener); + } else if (swiper.touchEvents.start === 'touchstart') { + swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener); + swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture); + swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener); + + if (swiper.touchEvents.cancel) { + swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener); + } + } // Move image + + + swiper.$wrapperEl.on(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture); + }, + disable: function disable() { + var swiper = this; + var zoom = swiper.zoom; + if (!zoom.enabled) return; + var support = swiper.support; + swiper.zoom.enabled = false; + var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? { + passive: true, + capture: false + } : false; + var activeListenerWithCapture = support.passiveListener ? { + passive: false, + capture: true + } : true; + var slideSelector = "." + swiper.params.slideClass; // Scale image + + if (support.gestures) { + swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener); + swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener); + } else if (swiper.touchEvents.start === 'touchstart') { + swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener); + swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture); + swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener); + + if (swiper.touchEvents.cancel) { + swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener); + } + } // Move image + + + swiper.$wrapperEl.off(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture); + } + }; + var Zoom$1 = { + name: 'zoom', + params: { + zoom: { + enabled: false, + maxRatio: 3, + minRatio: 1, + toggle: true, + containerClass: 'swiper-zoom-container', + zoomedSlideClass: 'swiper-slide-zoomed' + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + zoom: _extends({ + enabled: false, + scale: 1, + currentScale: 1, + isScaling: false, + gesture: { + $slideEl: undefined, + slideWidth: undefined, + slideHeight: undefined, + $imageEl: undefined, + $imageWrapEl: undefined, + maxRatio: 3 + }, + image: { + isTouched: undefined, + isMoved: undefined, + currentX: undefined, + currentY: undefined, + minX: undefined, + minY: undefined, + maxX: undefined, + maxY: undefined, + width: undefined, + height: undefined, + startX: undefined, + startY: undefined, + touchesStart: {}, + touchesCurrent: {} + }, + velocity: { + x: undefined, + y: undefined, + prevPositionX: undefined, + prevPositionY: undefined, + prevTime: undefined + } + }, Zoom) + }); + var scale = 1; + Object.defineProperty(swiper.zoom, 'scale', { + get: function get() { + return scale; + }, + set: function set(value) { + if (scale !== value) { + var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined; + var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined; + swiper.emit('zoomChange', value, imageEl, slideEl); + } + + scale = value; + } + }); + }, + on: { + init: function init(swiper) { + if (swiper.params.zoom.enabled) { + swiper.zoom.enable(); + } + }, + destroy: function destroy(swiper) { + swiper.zoom.disable(); + }, + touchStart: function touchStart(swiper, e) { + if (!swiper.zoom.enabled) return; + swiper.zoom.onTouchStart(e); + }, + touchEnd: function touchEnd(swiper, e) { + if (!swiper.zoom.enabled) return; + swiper.zoom.onTouchEnd(e); + }, + doubleTap: function doubleTap(swiper, e) { + if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { + swiper.zoom.toggle(e); + } + }, + transitionEnd: function transitionEnd(swiper) { + if (swiper.zoom.enabled && swiper.params.zoom.enabled) { + swiper.zoom.onTransitionEnd(); + } + }, + slideChange: function slideChange(swiper) { + if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { + swiper.zoom.onTransitionEnd(); + } + } + } + }; + + var Lazy = { + loadInSlide: function loadInSlide(index, loadInDuplicate) { + if (loadInDuplicate === void 0) { + loadInDuplicate = true; + } + + var swiper = this; + var params = swiper.params.lazy; + if (typeof index === 'undefined') return; + if (swiper.slides.length === 0) return; + var isVirtual = swiper.virtual && swiper.params.virtual.enabled; + var $slideEl = isVirtual ? swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + index + "\"]") : swiper.slides.eq(index); + var $images = $slideEl.find("." + params.elementClass + ":not(." + params.loadedClass + "):not(." + params.loadingClass + ")"); + + if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) { + $images.push($slideEl[0]); + } + + if ($images.length === 0) return; + $images.each(function (imageEl) { + var $imageEl = $(imageEl); + $imageEl.addClass(params.loadingClass); + var background = $imageEl.attr('data-background'); + var src = $imageEl.attr('data-src'); + var srcset = $imageEl.attr('data-srcset'); + var sizes = $imageEl.attr('data-sizes'); + var $pictureEl = $imageEl.parent('picture'); + swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () { + if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return; + + if (background) { + $imageEl.css('background-image', "url(\"" + background + "\")"); + $imageEl.removeAttr('data-background'); + } else { + if (srcset) { + $imageEl.attr('srcset', srcset); + $imageEl.removeAttr('data-srcset'); + } + + if (sizes) { + $imageEl.attr('sizes', sizes); + $imageEl.removeAttr('data-sizes'); + } + + if ($pictureEl.length) { + $pictureEl.children('source').each(function (sourceEl) { + var $source = $(sourceEl); + + if ($source.attr('data-srcset')) { + $source.attr('srcset', $source.attr('data-srcset')); + $source.removeAttr('data-srcset'); + } + }); + } + + if (src) { + $imageEl.attr('src', src); + $imageEl.removeAttr('data-src'); + } + } + + $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass); + $slideEl.find("." + params.preloaderClass).remove(); + + if (swiper.params.loop && loadInDuplicate) { + var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index'); + + if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) { + var originalSlide = swiper.$wrapperEl.children("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + swiper.params.slideDuplicateClass + ")"); + swiper.lazy.loadInSlide(originalSlide.index(), false); + } else { + var duplicatedSlide = swiper.$wrapperEl.children("." + swiper.params.slideDuplicateClass + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]"); + swiper.lazy.loadInSlide(duplicatedSlide.index(), false); + } + } + + swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]); + + if (swiper.params.autoHeight) { + swiper.updateAutoHeight(); + } + }); + swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]); + }); + }, + load: function load() { + var swiper = this; + var $wrapperEl = swiper.$wrapperEl, + swiperParams = swiper.params, + slides = swiper.slides, + activeIndex = swiper.activeIndex; + var isVirtual = swiper.virtual && swiperParams.virtual.enabled; + var params = swiperParams.lazy; + var slidesPerView = swiperParams.slidesPerView; + + if (slidesPerView === 'auto') { + slidesPerView = 0; + } + + function slideExist(index) { + if (isVirtual) { + if ($wrapperEl.children("." + swiperParams.slideClass + "[data-swiper-slide-index=\"" + index + "\"]").length) { + return true; + } + } else if (slides[index]) return true; + + return false; + } + + function slideIndex(slideEl) { + if (isVirtual) { + return $(slideEl).attr('data-swiper-slide-index'); + } + + return $(slideEl).index(); + } + + if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true; + + if (swiper.params.watchSlidesVisibility) { + $wrapperEl.children("." + swiperParams.slideVisibleClass).each(function (slideEl) { + var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index(); + swiper.lazy.loadInSlide(index); + }); + } else if (slidesPerView > 1) { + for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) { + if (slideExist(i)) swiper.lazy.loadInSlide(i); + } + } else { + swiper.lazy.loadInSlide(activeIndex); + } + + if (params.loadPrevNext) { + if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) { + var amount = params.loadPrevNextAmount; + var spv = slidesPerView; + var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length); + var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides + + for (var _i = activeIndex + slidesPerView; _i < maxIndex; _i += 1) { + if (slideExist(_i)) swiper.lazy.loadInSlide(_i); + } // Prev Slides + + + for (var _i2 = minIndex; _i2 < activeIndex; _i2 += 1) { + if (slideExist(_i2)) swiper.lazy.loadInSlide(_i2); + } + } else { + var nextSlide = $wrapperEl.children("." + swiperParams.slideNextClass); + if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide)); + var prevSlide = $wrapperEl.children("." + swiperParams.slidePrevClass); + if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide)); + } + } + } + }; + var Lazy$1 = { + name: 'lazy', + params: { + lazy: { + enabled: false, + loadPrevNext: false, + loadPrevNextAmount: 1, + loadOnTransitionStart: false, + elementClass: 'swiper-lazy', + loadingClass: 'swiper-lazy-loading', + loadedClass: 'swiper-lazy-loaded', + preloaderClass: 'swiper-lazy-preloader' + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + lazy: _extends({ + initialImageLoaded: false + }, Lazy) + }); + }, + on: { + beforeInit: function beforeInit(swiper) { + if (swiper.params.lazy.enabled && swiper.params.preloadImages) { + swiper.params.preloadImages = false; + } + }, + init: function init(swiper) { + if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) { + swiper.lazy.load(); + } + }, + scroll: function scroll(swiper) { + if (swiper.params.freeMode && !swiper.params.freeModeSticky) { + swiper.lazy.load(); + } + }, + resize: function resize(swiper) { + if (swiper.params.lazy.enabled) { + swiper.lazy.load(); + } + }, + scrollbarDragMove: function scrollbarDragMove(swiper) { + if (swiper.params.lazy.enabled) { + swiper.lazy.load(); + } + }, + transitionStart: function transitionStart(swiper) { + if (swiper.params.lazy.enabled) { + if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) { + swiper.lazy.load(); + } + } + }, + transitionEnd: function transitionEnd(swiper) { + if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) { + swiper.lazy.load(); + } + }, + slideChange: function slideChange(swiper) { + if (swiper.params.lazy.enabled && swiper.params.cssMode) { + swiper.lazy.load(); + } + } + } + }; + + var Controller = { + LinearSpline: function LinearSpline(x, y) { + var binarySearch = function search() { + var maxIndex; + var minIndex; + var guess; + return function (array, val) { + minIndex = -1; + maxIndex = array.length; + + while (maxIndex - minIndex > 1) { + guess = maxIndex + minIndex >> 1; + + if (array[guess] <= val) { + minIndex = guess; + } else { + maxIndex = guess; + } + } + + return maxIndex; + }; + }(); + + this.x = x; + this.y = y; + this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value: + // (x1,y1) is the known point before given value, + // (x3,y3) is the known point after given value. + + var i1; + var i3; + + this.interpolate = function interpolate(x2) { + if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2): + + i3 = binarySearch(this.x, x2); + i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already: + // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 + + return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1]; + }; + + return this; + }, + // xxx: for now i will just save one spline function to to + getInterpolateFunction: function getInterpolateFunction(c) { + var swiper = this; + + if (!swiper.controller.spline) { + swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid); + } + }, + setTranslate: function setTranslate(_setTranslate, byController) { + var swiper = this; + var controlled = swiper.controller.control; + var multiplier; + var controlledTranslate; + var Swiper = swiper.constructor; + + function setControlledTranslate(c) { + // this will create an Interpolate function based on the snapGrids + // x is the Grid of the scrolled scroller and y will be the controlled scroller + // it makes sense to create this only once and recall it for the interpolation + // the function does a lot of value caching for performance + var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; + + if (swiper.params.controller.by === 'slide') { + swiper.controller.getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid + // but it did not work out + + controlledTranslate = -swiper.controller.spline.interpolate(-translate); + } + + if (!controlledTranslate || swiper.params.controller.by === 'container') { + multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); + controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate(); + } + + if (swiper.params.controller.inverse) { + controlledTranslate = c.maxTranslate() - controlledTranslate; + } + + c.updateProgress(controlledTranslate); + c.setTranslate(controlledTranslate, swiper); + c.updateActiveIndex(); + c.updateSlidesClasses(); + } + + if (Array.isArray(controlled)) { + for (var i = 0; i < controlled.length; i += 1) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTranslate(controlled[i]); + } + } + } else if (controlled instanceof Swiper && byController !== controlled) { + setControlledTranslate(controlled); + } + }, + setTransition: function setTransition(duration, byController) { + var swiper = this; + var Swiper = swiper.constructor; + var controlled = swiper.controller.control; + var i; + + function setControlledTransition(c) { + c.setTransition(duration, swiper); + + if (duration !== 0) { + c.transitionStart(); + + if (c.params.autoHeight) { + nextTick(function () { + c.updateAutoHeight(); + }); + } + + c.$wrapperEl.transitionEnd(function () { + if (!controlled) return; + + if (c.params.loop && swiper.params.controller.by === 'slide') { + c.loopFix(); + } + + c.transitionEnd(); + }); + } + } + + if (Array.isArray(controlled)) { + for (i = 0; i < controlled.length; i += 1) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTransition(controlled[i]); + } + } + } else if (controlled instanceof Swiper && byController !== controlled) { + setControlledTransition(controlled); + } + } + }; + var Controller$1 = { + name: 'controller', + params: { + controller: { + control: undefined, + inverse: false, + by: 'slide' // or 'container' + + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + controller: _extends({ + control: swiper.params.controller.control + }, Controller) + }); + }, + on: { + update: function update(swiper) { + if (!swiper.controller.control) return; + + if (swiper.controller.spline) { + swiper.controller.spline = undefined; + delete swiper.controller.spline; + } + }, + resize: function resize(swiper) { + if (!swiper.controller.control) return; + + if (swiper.controller.spline) { + swiper.controller.spline = undefined; + delete swiper.controller.spline; + } + }, + observerUpdate: function observerUpdate(swiper) { + if (!swiper.controller.control) return; + + if (swiper.controller.spline) { + swiper.controller.spline = undefined; + delete swiper.controller.spline; + } + }, + setTranslate: function setTranslate(swiper, translate, byController) { + if (!swiper.controller.control) return; + swiper.controller.setTranslate(translate, byController); + }, + setTransition: function setTransition(swiper, duration, byController) { + if (!swiper.controller.control) return; + swiper.controller.setTransition(duration, byController); + } + } + }; + + var A11y = { + makeElFocusable: function makeElFocusable($el) { + $el.attr('tabIndex', '0'); + return $el; + }, + makeElNotFocusable: function makeElNotFocusable($el) { + $el.attr('tabIndex', '-1'); + return $el; + }, + addElRole: function addElRole($el, role) { + $el.attr('role', role); + return $el; + }, + addElLabel: function addElLabel($el, label) { + $el.attr('aria-label', label); + return $el; + }, + disableEl: function disableEl($el) { + $el.attr('aria-disabled', true); + return $el; + }, + enableEl: function enableEl($el) { + $el.attr('aria-disabled', false); + return $el; + }, + onEnterKey: function onEnterKey(e) { + var swiper = this; + var params = swiper.params.a11y; + if (e.keyCode !== 13) return; + var $targetEl = $(e.target); + + if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) { + if (!(swiper.isEnd && !swiper.params.loop)) { + swiper.slideNext(); + } + + if (swiper.isEnd) { + swiper.a11y.notify(params.lastSlideMessage); + } else { + swiper.a11y.notify(params.nextSlideMessage); + } + } + + if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) { + if (!(swiper.isBeginning && !swiper.params.loop)) { + swiper.slidePrev(); + } + + if (swiper.isBeginning) { + swiper.a11y.notify(params.firstSlideMessage); + } else { + swiper.a11y.notify(params.prevSlideMessage); + } + } + + if (swiper.pagination && $targetEl.is("." + swiper.params.pagination.bulletClass)) { + $targetEl[0].click(); + } + }, + notify: function notify(message) { + var swiper = this; + var notification = swiper.a11y.liveRegion; + if (notification.length === 0) return; + notification.html(''); + notification.html(message); + }, + updateNavigation: function updateNavigation() { + var swiper = this; + if (swiper.params.loop || !swiper.navigation) return; + var _swiper$navigation = swiper.navigation, + $nextEl = _swiper$navigation.$nextEl, + $prevEl = _swiper$navigation.$prevEl; + + if ($prevEl && $prevEl.length > 0) { + if (swiper.isBeginning) { + swiper.a11y.disableEl($prevEl); + swiper.a11y.makeElNotFocusable($prevEl); + } else { + swiper.a11y.enableEl($prevEl); + swiper.a11y.makeElFocusable($prevEl); + } + } + + if ($nextEl && $nextEl.length > 0) { + if (swiper.isEnd) { + swiper.a11y.disableEl($nextEl); + swiper.a11y.makeElNotFocusable($nextEl); + } else { + swiper.a11y.enableEl($nextEl); + swiper.a11y.makeElFocusable($nextEl); + } + } + }, + updatePagination: function updatePagination() { + var swiper = this; + var params = swiper.params.a11y; + + if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { + swiper.pagination.bullets.each(function (bulletEl) { + var $bulletEl = $(bulletEl); + swiper.a11y.makeElFocusable($bulletEl); + swiper.a11y.addElRole($bulletEl, 'button'); + swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1)); + }); + } + }, + init: function init() { + var swiper = this; + swiper.$el.append(swiper.a11y.liveRegion); // Navigation + + var params = swiper.params.a11y; + var $nextEl; + var $prevEl; + + if (swiper.navigation && swiper.navigation.$nextEl) { + $nextEl = swiper.navigation.$nextEl; + } + + if (swiper.navigation && swiper.navigation.$prevEl) { + $prevEl = swiper.navigation.$prevEl; + } + + if ($nextEl) { + swiper.a11y.makeElFocusable($nextEl); + swiper.a11y.addElRole($nextEl, 'button'); + swiper.a11y.addElLabel($nextEl, params.nextSlideMessage); + $nextEl.on('keydown', swiper.a11y.onEnterKey); + } + + if ($prevEl) { + swiper.a11y.makeElFocusable($prevEl); + swiper.a11y.addElRole($prevEl, 'button'); + swiper.a11y.addElLabel($prevEl, params.prevSlideMessage); + $prevEl.on('keydown', swiper.a11y.onEnterKey); + } // Pagination + + + if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { + swiper.pagination.$el.on('keydown', "." + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey); + } + }, + destroy: function destroy() { + var swiper = this; + if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove(); + var $nextEl; + var $prevEl; + + if (swiper.navigation && swiper.navigation.$nextEl) { + $nextEl = swiper.navigation.$nextEl; + } + + if (swiper.navigation && swiper.navigation.$prevEl) { + $prevEl = swiper.navigation.$prevEl; + } + + if ($nextEl) { + $nextEl.off('keydown', swiper.a11y.onEnterKey); + } + + if ($prevEl) { + $prevEl.off('keydown', swiper.a11y.onEnterKey); + } // Pagination + + + if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { + swiper.pagination.$el.off('keydown', "." + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey); + } + } + }; + var A11y$1 = { + name: 'a11y', + params: { + a11y: { + enabled: true, + notificationClass: 'swiper-notification', + prevSlideMessage: 'Previous slide', + nextSlideMessage: 'Next slide', + firstSlideMessage: 'This is the first slide', + lastSlideMessage: 'This is the last slide', + paginationBulletMessage: 'Go to slide {{index}}' + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + a11y: _extends(_extends({}, A11y), {}, { + liveRegion: $("<span class=\"" + swiper.params.a11y.notificationClass + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>") + }) + }); + }, + on: { + init: function init(swiper) { + if (!swiper.params.a11y.enabled) return; + swiper.a11y.init(); + swiper.a11y.updateNavigation(); + }, + toEdge: function toEdge(swiper) { + if (!swiper.params.a11y.enabled) return; + swiper.a11y.updateNavigation(); + }, + fromEdge: function fromEdge(swiper) { + if (!swiper.params.a11y.enabled) return; + swiper.a11y.updateNavigation(); + }, + paginationUpdate: function paginationUpdate(swiper) { + if (!swiper.params.a11y.enabled) return; + swiper.a11y.updatePagination(); + }, + destroy: function destroy(swiper) { + if (!swiper.params.a11y.enabled) return; + swiper.a11y.destroy(); + } + } + }; + + var History = { + init: function init() { + var swiper = this; + var window = getWindow(); + if (!swiper.params.history) return; + + if (!window.history || !window.history.pushState) { + swiper.params.history.enabled = false; + swiper.params.hashNavigation.enabled = true; + return; + } + + var history = swiper.history; + history.initialized = true; + history.paths = History.getPathValues(swiper.params.url); + if (!history.paths.key && !history.paths.value) return; + history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit); + + if (!swiper.params.history.replaceState) { + window.addEventListener('popstate', swiper.history.setHistoryPopState); + } + }, + destroy: function destroy() { + var swiper = this; + var window = getWindow(); + + if (!swiper.params.history.replaceState) { + window.removeEventListener('popstate', swiper.history.setHistoryPopState); + } + }, + setHistoryPopState: function setHistoryPopState() { + var swiper = this; + swiper.history.paths = History.getPathValues(swiper.params.url); + swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false); + }, + getPathValues: function getPathValues(urlOverride) { + var window = getWindow(); + var location; + + if (urlOverride) { + location = new URL(urlOverride); + } else { + location = window.location; + } + + var pathArray = location.pathname.slice(1).split('/').filter(function (part) { + return part !== ''; + }); + var total = pathArray.length; + var key = pathArray[total - 2]; + var value = pathArray[total - 1]; + return { + key: key, + value: value + }; + }, + setHistory: function setHistory(key, index) { + var swiper = this; + var window = getWindow(); + if (!swiper.history.initialized || !swiper.params.history.enabled) return; + var location; + + if (swiper.params.url) { + location = new URL(swiper.params.url); + } else { + location = window.location; + } + + var slide = swiper.slides.eq(index); + var value = History.slugify(slide.attr('data-history')); + + if (!location.pathname.includes(key)) { + value = key + "/" + value; + } + + var currentState = window.history.state; + + if (currentState && currentState.value === value) { + return; + } + + if (swiper.params.history.replaceState) { + window.history.replaceState({ + value: value + }, null, value); + } else { + window.history.pushState({ + value: value + }, null, value); + } + }, + slugify: function slugify(text) { + return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, ''); + }, + scrollToSlide: function scrollToSlide(speed, value, runCallbacks) { + var swiper = this; + + if (value) { + for (var i = 0, length = swiper.slides.length; i < length; i += 1) { + var slide = swiper.slides.eq(i); + var slideHistory = History.slugify(slide.attr('data-history')); + + if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) { + var index = slide.index(); + swiper.slideTo(index, speed, runCallbacks); + } + } + } else { + swiper.slideTo(0, speed, runCallbacks); + } + } + }; + var History$1 = { + name: 'history', + params: { + history: { + enabled: false, + replaceState: false, + key: 'slides' + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + history: _extends({}, History) + }); + }, + on: { + init: function init(swiper) { + if (swiper.params.history.enabled) { + swiper.history.init(); + } + }, + destroy: function destroy(swiper) { + if (swiper.params.history.enabled) { + swiper.history.destroy(); + } + }, + transitionEnd: function transitionEnd(swiper) { + if (swiper.history.initialized) { + swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); + } + }, + slideChange: function slideChange(swiper) { + if (swiper.history.initialized && swiper.params.cssMode) { + swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); + } + } + } + }; + + var HashNavigation = { + onHashCange: function onHashCange() { + var swiper = this; + var document = getDocument(); + swiper.emit('hashChange'); + var newHash = document.location.hash.replace('#', ''); + var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash'); + + if (newHash !== activeSlideHash) { + var newIndex = swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-hash=\"" + newHash + "\"]").index(); + if (typeof newIndex === 'undefined') return; + swiper.slideTo(newIndex); + } + }, + setHash: function setHash() { + var swiper = this; + var window = getWindow(); + var document = getDocument(); + if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return; + + if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { + window.history.replaceState(null, null, "#" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || ''); + swiper.emit('hashSet'); + } else { + var slide = swiper.slides.eq(swiper.activeIndex); + var hash = slide.attr('data-hash') || slide.attr('data-history'); + document.location.hash = hash || ''; + swiper.emit('hashSet'); + } + }, + init: function init() { + var swiper = this; + var document = getDocument(); + var window = getWindow(); + if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; + swiper.hashNavigation.initialized = true; + var hash = document.location.hash.replace('#', ''); + + if (hash) { + var speed = 0; + + for (var i = 0, length = swiper.slides.length; i < length; i += 1) { + var slide = swiper.slides.eq(i); + var slideHash = slide.attr('data-hash') || slide.attr('data-history'); + + if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) { + var index = slide.index(); + swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true); + } + } + } + + if (swiper.params.hashNavigation.watchState) { + $(window).on('hashchange', swiper.hashNavigation.onHashCange); + } + }, + destroy: function destroy() { + var swiper = this; + var window = getWindow(); + + if (swiper.params.hashNavigation.watchState) { + $(window).off('hashchange', swiper.hashNavigation.onHashCange); + } + } + }; + var HashNavigation$1 = { + name: 'hash-navigation', + params: { + hashNavigation: { + enabled: false, + replaceState: false, + watchState: false + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + hashNavigation: _extends({ + initialized: false + }, HashNavigation) + }); + }, + on: { + init: function init(swiper) { + if (swiper.params.hashNavigation.enabled) { + swiper.hashNavigation.init(); + } + }, + destroy: function destroy(swiper) { + if (swiper.params.hashNavigation.enabled) { + swiper.hashNavigation.destroy(); + } + }, + transitionEnd: function transitionEnd(swiper) { + if (swiper.hashNavigation.initialized) { + swiper.hashNavigation.setHash(); + } + }, + slideChange: function slideChange(swiper) { + if (swiper.hashNavigation.initialized && swiper.params.cssMode) { + swiper.hashNavigation.setHash(); + } + } + } + }; + + var Autoplay = { + run: function run() { + var swiper = this; + var $activeSlideEl = swiper.slides.eq(swiper.activeIndex); + var delay = swiper.params.autoplay.delay; + + if ($activeSlideEl.attr('data-swiper-autoplay')) { + delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay; + } + + clearTimeout(swiper.autoplay.timeout); + swiper.autoplay.timeout = nextTick(function () { + if (swiper.params.autoplay.reverseDirection) { + if (swiper.params.loop) { + swiper.loopFix(); + swiper.slidePrev(swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else if (!swiper.isBeginning) { + swiper.slidePrev(swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else if (!swiper.params.autoplay.stopOnLastSlide) { + swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else { + swiper.autoplay.stop(); + } + } else if (swiper.params.loop) { + swiper.loopFix(); + swiper.slideNext(swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else if (!swiper.isEnd) { + swiper.slideNext(swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else if (!swiper.params.autoplay.stopOnLastSlide) { + swiper.slideTo(0, swiper.params.speed, true, true); + swiper.emit('autoplay'); + } else { + swiper.autoplay.stop(); + } + + if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run(); + }, delay); + }, + start: function start() { + var swiper = this; + if (typeof swiper.autoplay.timeout !== 'undefined') return false; + if (swiper.autoplay.running) return false; + swiper.autoplay.running = true; + swiper.emit('autoplayStart'); + swiper.autoplay.run(); + return true; + }, + stop: function stop() { + var swiper = this; + if (!swiper.autoplay.running) return false; + if (typeof swiper.autoplay.timeout === 'undefined') return false; + + if (swiper.autoplay.timeout) { + clearTimeout(swiper.autoplay.timeout); + swiper.autoplay.timeout = undefined; + } + + swiper.autoplay.running = false; + swiper.emit('autoplayStop'); + return true; + }, + pause: function pause(speed) { + var swiper = this; + if (!swiper.autoplay.running) return; + if (swiper.autoplay.paused) return; + if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout); + swiper.autoplay.paused = true; + + if (speed === 0 || !swiper.params.autoplay.waitForTransition) { + swiper.autoplay.paused = false; + swiper.autoplay.run(); + } else { + swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd); + swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd); + } + }, + onVisibilityChange: function onVisibilityChange() { + var swiper = this; + var document = getDocument(); + + if (document.visibilityState === 'hidden' && swiper.autoplay.running) { + swiper.autoplay.pause(); + } + + if (document.visibilityState === 'visible' && swiper.autoplay.paused) { + swiper.autoplay.run(); + swiper.autoplay.paused = false; + } + }, + onTransitionEnd: function onTransitionEnd(e) { + var swiper = this; + if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return; + if (e.target !== swiper.$wrapperEl[0]) return; + swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd); + swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd); + swiper.autoplay.paused = false; + + if (!swiper.autoplay.running) { + swiper.autoplay.stop(); + } else { + swiper.autoplay.run(); + } + } + }; + var Autoplay$1 = { + name: 'autoplay', + params: { + autoplay: { + enabled: false, + delay: 3000, + waitForTransition: true, + disableOnInteraction: true, + stopOnLastSlide: false, + reverseDirection: false + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + autoplay: _extends(_extends({}, Autoplay), {}, { + running: false, + paused: false + }) + }); + }, + on: { + init: function init(swiper) { + if (swiper.params.autoplay.enabled) { + swiper.autoplay.start(); + var document = getDocument(); + document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange); + } + }, + beforeTransitionStart: function beforeTransitionStart(swiper, speed, internal) { + if (swiper.autoplay.running) { + if (internal || !swiper.params.autoplay.disableOnInteraction) { + swiper.autoplay.pause(speed); + } else { + swiper.autoplay.stop(); + } + } + }, + sliderFirstMove: function sliderFirstMove(swiper) { + if (swiper.autoplay.running) { + if (swiper.params.autoplay.disableOnInteraction) { + swiper.autoplay.stop(); + } else { + swiper.autoplay.pause(); + } + } + }, + touchEnd: function touchEnd(swiper) { + if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) { + swiper.autoplay.run(); + } + }, + destroy: function destroy(swiper) { + if (swiper.autoplay.running) { + swiper.autoplay.stop(); + } + + var document = getDocument(); + document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange); + } + } + }; + + var Fade = { + setTranslate: function setTranslate() { + var swiper = this; + var slides = swiper.slides; + + for (var i = 0; i < slides.length; i += 1) { + var $slideEl = swiper.slides.eq(i); + var offset = $slideEl[0].swiperSlideOffset; + var tx = -offset; + if (!swiper.params.virtualTranslate) tx -= swiper.translate; + var ty = 0; + + if (!swiper.isHorizontal()) { + ty = tx; + tx = 0; + } + + var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0); + $slideEl.css({ + opacity: slideOpacity + }).transform("translate3d(" + tx + "px, " + ty + "px, 0px)"); + } + }, + setTransition: function setTransition(duration) { + var swiper = this; + var slides = swiper.slides, + $wrapperEl = swiper.$wrapperEl; + slides.transition(duration); + + if (swiper.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + slides.transitionEnd(function () { + if (eventTriggered) return; + if (!swiper || swiper.destroyed) return; + eventTriggered = true; + swiper.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend']; + + for (var i = 0; i < triggerEvents.length; i += 1) { + $wrapperEl.trigger(triggerEvents[i]); + } + }); + } + } + }; + var EffectFade = { + name: 'effect-fade', + params: { + fadeEffect: { + crossFade: false + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + fadeEffect: _extends({}, Fade) + }); + }, + on: { + beforeInit: function beforeInit(swiper) { + if (swiper.params.effect !== 'fade') return; + swiper.classNames.push(swiper.params.containerModifierClass + "fade"); + var overwriteParams = { + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerGroup: 1, + watchSlidesProgress: true, + spaceBetween: 0, + virtualTranslate: true + }; + extend$1(swiper.params, overwriteParams); + extend$1(swiper.originalParams, overwriteParams); + }, + setTranslate: function setTranslate(swiper) { + if (swiper.params.effect !== 'fade') return; + swiper.fadeEffect.setTranslate(); + }, + setTransition: function setTransition(swiper, duration) { + if (swiper.params.effect !== 'fade') return; + swiper.fadeEffect.setTransition(duration); + } + } + }; + + var Cube = { + setTranslate: function setTranslate() { + var swiper = this; + var $el = swiper.$el, + $wrapperEl = swiper.$wrapperEl, + slides = swiper.slides, + swiperWidth = swiper.width, + swiperHeight = swiper.height, + rtl = swiper.rtlTranslate, + swiperSize = swiper.size, + browser = swiper.browser; + var params = swiper.params.cubeEffect; + var isHorizontal = swiper.isHorizontal(); + var isVirtual = swiper.virtual && swiper.params.virtual.enabled; + var wrapperRotate = 0; + var $cubeShadowEl; + + if (params.shadow) { + if (isHorizontal) { + $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow'); + + if ($cubeShadowEl.length === 0) { + $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>'); + $wrapperEl.append($cubeShadowEl); + } + + $cubeShadowEl.css({ + height: swiperWidth + "px" + }); + } else { + $cubeShadowEl = $el.find('.swiper-cube-shadow'); + + if ($cubeShadowEl.length === 0) { + $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>'); + $el.append($cubeShadowEl); + } + } + } + + for (var i = 0; i < slides.length; i += 1) { + var $slideEl = slides.eq(i); + var slideIndex = i; + + if (isVirtual) { + slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10); + } + + var slideAngle = slideIndex * 90; + var round = Math.floor(slideAngle / 360); + + if (rtl) { + slideAngle = -slideAngle; + round = Math.floor(-slideAngle / 360); + } + + var progress = Math.max(Math.min($slideEl[0].progress, 1), -1); + var tx = 0; + var ty = 0; + var tz = 0; + + if (slideIndex % 4 === 0) { + tx = -round * 4 * swiperSize; + tz = 0; + } else if ((slideIndex - 1) % 4 === 0) { + tx = 0; + tz = -round * 4 * swiperSize; + } else if ((slideIndex - 2) % 4 === 0) { + tx = swiperSize + round * 4 * swiperSize; + tz = swiperSize; + } else if ((slideIndex - 3) % 4 === 0) { + tx = -swiperSize; + tz = 3 * swiperSize + swiperSize * 4 * round; + } + + if (rtl) { + tx = -tx; + } + + if (!isHorizontal) { + ty = tx; + tx = 0; + } + + var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)"; + + if (progress <= 1 && progress > -1) { + wrapperRotate = slideIndex * 90 + progress * 90; + if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; + } + + $slideEl.transform(transform); + + if (params.slideShadows) { + // Set shadows + var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); + var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); + + if (shadowBefore.length === 0) { + shadowBefore = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"); + $slideEl.append(shadowBefore); + } + + if (shadowAfter.length === 0) { + shadowAfter = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"); + $slideEl.append(shadowAfter); + } + + if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); + if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); + } + } + + $wrapperEl.css({ + '-webkit-transform-origin': "50% 50% -" + swiperSize / 2 + "px", + '-moz-transform-origin': "50% 50% -" + swiperSize / 2 + "px", + '-ms-transform-origin': "50% 50% -" + swiperSize / 2 + "px", + 'transform-origin': "50% 50% -" + swiperSize / 2 + "px" + }); + + if (params.shadow) { + if (isHorizontal) { + $cubeShadowEl.transform("translate3d(0px, " + (swiperWidth / 2 + params.shadowOffset) + "px, " + -swiperWidth / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + params.shadowScale + ")"); + } else { + var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; + var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); + var scale1 = params.shadowScale; + var scale2 = params.shadowScale / multiplier; + var offset = params.shadowOffset; + $cubeShadowEl.transform("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + (swiperHeight / 2 + offset) + "px, " + -swiperHeight / 2 / scale2 + "px) rotateX(-90deg)"); + } + } + + var zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0; + $wrapperEl.transform("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)"); + }, + setTransition: function setTransition(duration) { + var swiper = this; + var $el = swiper.$el, + slides = swiper.slides; + slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + + if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { + $el.find('.swiper-cube-shadow').transition(duration); + } + } + }; + var EffectCube = { + name: 'effect-cube', + params: { + cubeEffect: { + slideShadows: true, + shadow: true, + shadowOffset: 20, + shadowScale: 0.94 + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + cubeEffect: _extends({}, Cube) + }); + }, + on: { + beforeInit: function beforeInit(swiper) { + if (swiper.params.effect !== 'cube') return; + swiper.classNames.push(swiper.params.containerModifierClass + "cube"); + swiper.classNames.push(swiper.params.containerModifierClass + "3d"); + var overwriteParams = { + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerGroup: 1, + watchSlidesProgress: true, + resistanceRatio: 0, + spaceBetween: 0, + centeredSlides: false, + virtualTranslate: true + }; + extend$1(swiper.params, overwriteParams); + extend$1(swiper.originalParams, overwriteParams); + }, + setTranslate: function setTranslate(swiper) { + if (swiper.params.effect !== 'cube') return; + swiper.cubeEffect.setTranslate(); + }, + setTransition: function setTransition(swiper, duration) { + if (swiper.params.effect !== 'cube') return; + swiper.cubeEffect.setTransition(duration); + } + } + }; + + var Flip = { + setTranslate: function setTranslate() { + var swiper = this; + var slides = swiper.slides, + rtl = swiper.rtlTranslate; + + for (var i = 0; i < slides.length; i += 1) { + var $slideEl = slides.eq(i); + var progress = $slideEl[0].progress; + + if (swiper.params.flipEffect.limitRotation) { + progress = Math.max(Math.min($slideEl[0].progress, 1), -1); + } + + var offset = $slideEl[0].swiperSlideOffset; + var rotate = -180 * progress; + var rotateY = rotate; + var rotateX = 0; + var tx = -offset; + var ty = 0; + + if (!swiper.isHorizontal()) { + ty = tx; + tx = 0; + rotateX = -rotateY; + rotateY = 0; + } else if (rtl) { + rotateY = -rotateY; + } + + $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length; + + if (swiper.params.flipEffect.slideShadows) { + // Set shadows + var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); + var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); + + if (shadowBefore.length === 0) { + shadowBefore = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'left' : 'top') + "\"></div>"); + $slideEl.append(shadowBefore); + } + + if (shadowAfter.length === 0) { + shadowAfter = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'right' : 'bottom') + "\"></div>"); + $slideEl.append(shadowAfter); + } + + if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); + if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); + } + + $slideEl.transform("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)"); + } + }, + setTransition: function setTransition(duration) { + var swiper = this; + var slides = swiper.slides, + activeIndex = swiper.activeIndex, + $wrapperEl = swiper.$wrapperEl; + slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + + if (swiper.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; // eslint-disable-next-line + + slides.eq(activeIndex).transitionEnd(function onTransitionEnd() { + if (eventTriggered) return; + if (!swiper || swiper.destroyed) return; // if (!$(this).hasClass(swiper.params.slideActiveClass)) return; + + eventTriggered = true; + swiper.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend']; + + for (var i = 0; i < triggerEvents.length; i += 1) { + $wrapperEl.trigger(triggerEvents[i]); + } + }); + } + } + }; + var EffectFlip = { + name: 'effect-flip', + params: { + flipEffect: { + slideShadows: true, + limitRotation: true + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + flipEffect: _extends({}, Flip) + }); + }, + on: { + beforeInit: function beforeInit(swiper) { + if (swiper.params.effect !== 'flip') return; + swiper.classNames.push(swiper.params.containerModifierClass + "flip"); + swiper.classNames.push(swiper.params.containerModifierClass + "3d"); + var overwriteParams = { + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerGroup: 1, + watchSlidesProgress: true, + spaceBetween: 0, + virtualTranslate: true + }; + extend$1(swiper.params, overwriteParams); + extend$1(swiper.originalParams, overwriteParams); + }, + setTranslate: function setTranslate(swiper) { + if (swiper.params.effect !== 'flip') return; + swiper.flipEffect.setTranslate(); + }, + setTransition: function setTransition(swiper, duration) { + if (swiper.params.effect !== 'flip') return; + swiper.flipEffect.setTransition(duration); + } + } + }; + + var Coverflow = { + setTranslate: function setTranslate() { + var swiper = this; + var swiperWidth = swiper.width, + swiperHeight = swiper.height, + slides = swiper.slides, + slidesSizesGrid = swiper.slidesSizesGrid; + var params = swiper.params.coverflowEffect; + var isHorizontal = swiper.isHorizontal(); + var transform = swiper.translate; + var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2; + var rotate = isHorizontal ? params.rotate : -params.rotate; + var translate = params.depth; // Each slide offset from center + + for (var i = 0, length = slides.length; i < length; i += 1) { + var $slideEl = slides.eq(i); + var slideSize = slidesSizesGrid[i]; + var slideOffset = $slideEl[0].swiperSlideOffset; + var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier; + var rotateY = isHorizontal ? rotate * offsetMultiplier : 0; + var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0 + + var translateZ = -translate * Math.abs(offsetMultiplier); + var stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders + + if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { + stretch = parseFloat(params.stretch) / 100 * slideSize; + } + + var translateY = isHorizontal ? 0 : stretch * offsetMultiplier; + var translateX = isHorizontal ? stretch * offsetMultiplier : 0; + var scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values + + if (Math.abs(translateX) < 0.001) translateX = 0; + if (Math.abs(translateY) < 0.001) translateY = 0; + if (Math.abs(translateZ) < 0.001) translateZ = 0; + if (Math.abs(rotateY) < 0.001) rotateY = 0; + if (Math.abs(rotateX) < 0.001) rotateX = 0; + if (Math.abs(scale) < 0.001) scale = 0; + var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg) scale(" + scale + ")"; + $slideEl.transform(slideTransform); + $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; + + if (params.slideShadows) { + // Set shadows + var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); + var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); + + if ($shadowBeforeEl.length === 0) { + $shadowBeforeEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"); + $slideEl.append($shadowBeforeEl); + } + + if ($shadowAfterEl.length === 0) { + $shadowAfterEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"); + $slideEl.append($shadowAfterEl); + } + + if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; + if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0; + } + } + }, + setTransition: function setTransition(duration) { + var swiper = this; + swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + } + }; + var EffectCoverflow = { + name: 'effect-coverflow', + params: { + coverflowEffect: { + rotate: 50, + stretch: 0, + depth: 100, + scale: 1, + modifier: 1, + slideShadows: true + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + coverflowEffect: _extends({}, Coverflow) + }); + }, + on: { + beforeInit: function beforeInit(swiper) { + if (swiper.params.effect !== 'coverflow') return; + swiper.classNames.push(swiper.params.containerModifierClass + "coverflow"); + swiper.classNames.push(swiper.params.containerModifierClass + "3d"); + swiper.params.watchSlidesProgress = true; + swiper.originalParams.watchSlidesProgress = true; + }, + setTranslate: function setTranslate(swiper) { + if (swiper.params.effect !== 'coverflow') return; + swiper.coverflowEffect.setTranslate(); + }, + setTransition: function setTransition(swiper, duration) { + if (swiper.params.effect !== 'coverflow') return; + swiper.coverflowEffect.setTransition(duration); + } + } + }; + + var Thumbs = { + init: function init() { + var swiper = this; + var thumbsParams = swiper.params.thumbs; + if (swiper.thumbs.initialized) return false; + swiper.thumbs.initialized = true; + var SwiperClass = swiper.constructor; + + if (thumbsParams.swiper instanceof SwiperClass) { + swiper.thumbs.swiper = thumbsParams.swiper; + extend$1(swiper.thumbs.swiper.originalParams, { + watchSlidesProgress: true, + slideToClickedSlide: false + }); + extend$1(swiper.thumbs.swiper.params, { + watchSlidesProgress: true, + slideToClickedSlide: false + }); + } else if (isObject$1(thumbsParams.swiper)) { + swiper.thumbs.swiper = new SwiperClass(extend$1({}, thumbsParams.swiper, { + watchSlidesVisibility: true, + watchSlidesProgress: true, + slideToClickedSlide: false + })); + swiper.thumbs.swiperCreated = true; + } + + swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass); + swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick); + return true; + }, + onThumbClick: function onThumbClick() { + var swiper = this; + var thumbsSwiper = swiper.thumbs.swiper; + if (!thumbsSwiper) return; + var clickedIndex = thumbsSwiper.clickedIndex; + var clickedSlide = thumbsSwiper.clickedSlide; + if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return; + if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; + var slideToIndex; + + if (thumbsSwiper.params.loop) { + slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10); + } else { + slideToIndex = clickedIndex; + } + + if (swiper.params.loop) { + var currentIndex = swiper.activeIndex; + + if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) { + swiper.loopFix(); // eslint-disable-next-line + + swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; + currentIndex = swiper.activeIndex; + } + + var prevIndex = swiper.slides.eq(currentIndex).prevAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index(); + var nextIndex = swiper.slides.eq(currentIndex).nextAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index(); + if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex; + } + + swiper.slideTo(slideToIndex); + }, + update: function update(initial) { + var swiper = this; + var thumbsSwiper = swiper.thumbs.swiper; + if (!thumbsSwiper) return; + var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; + var autoScrollOffset = swiper.params.thumbs.autoScrollOffset; + var useOffset = autoScrollOffset && !thumbsSwiper.params.loop; + + if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { + var currentThumbsIndex = thumbsSwiper.activeIndex; + var newThumbsIndex; + var direction; + + if (thumbsSwiper.params.loop) { + if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) { + thumbsSwiper.loopFix(); // eslint-disable-next-line + + thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft; + currentThumbsIndex = thumbsSwiper.activeIndex; + } // Find actual thumbs index to slide to + + + var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index(); + var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index(); + if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;else newThumbsIndex = prevThumbsIndex; + direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; + } else { + newThumbsIndex = swiper.realIndex; + direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; + } + + if (useOffset) { + newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; + } + + if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { + if (thumbsSwiper.params.centeredSlides) { + if (newThumbsIndex > currentThumbsIndex) { + newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; + } else { + newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; + } + } else if (newThumbsIndex > currentThumbsIndex) { + newThumbsIndex = newThumbsIndex - slidesPerView + 1; + } + + thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); + } + } // Activate thumbs + + + var thumbsToActivate = 1; + var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; + + if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { + thumbsToActivate = swiper.params.slidesPerView; + } + + if (!swiper.params.thumbs.multipleActiveThumbs) { + thumbsToActivate = 1; + } + + thumbsToActivate = Math.floor(thumbsToActivate); + thumbsSwiper.slides.removeClass(thumbActiveClass); + + if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) { + for (var i = 0; i < thumbsToActivate; i += 1) { + thumbsSwiper.$wrapperEl.children("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]").addClass(thumbActiveClass); + } + } else { + for (var _i = 0; _i < thumbsToActivate; _i += 1) { + thumbsSwiper.slides.eq(swiper.realIndex + _i).addClass(thumbActiveClass); + } + } + } + }; + var Thumbs$1 = { + name: 'thumbs', + params: { + thumbs: { + swiper: null, + multipleActiveThumbs: true, + autoScrollOffset: 0, + slideThumbActiveClass: 'swiper-slide-thumb-active', + thumbsContainerClass: 'swiper-container-thumbs' + } + }, + create: function create() { + var swiper = this; + bindModuleMethods(swiper, { + thumbs: _extends({ + swiper: null, + initialized: false + }, Thumbs) + }); + }, + on: { + beforeInit: function beforeInit(swiper) { + var thumbs = swiper.params.thumbs; + if (!thumbs || !thumbs.swiper) return; + swiper.thumbs.init(); + swiper.thumbs.update(true); + }, + slideChange: function slideChange(swiper) { + if (!swiper.thumbs.swiper) return; + swiper.thumbs.update(); + }, + update: function update(swiper) { + if (!swiper.thumbs.swiper) return; + swiper.thumbs.update(); + }, + resize: function resize(swiper) { + if (!swiper.thumbs.swiper) return; + swiper.thumbs.update(); + }, + observerUpdate: function observerUpdate(swiper) { + if (!swiper.thumbs.swiper) return; + swiper.thumbs.update(); + }, + setTransition: function setTransition(swiper, duration) { + var thumbsSwiper = swiper.thumbs.swiper; + if (!thumbsSwiper) return; + thumbsSwiper.setTransition(duration); + }, + beforeDestroy: function beforeDestroy(swiper) { + var thumbsSwiper = swiper.thumbs.swiper; + if (!thumbsSwiper) return; + + if (swiper.thumbs.swiperCreated && thumbsSwiper) { + thumbsSwiper.destroy(); + } + } + } + }; + + // Swiper Class + var components = [Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y$1, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1]; + Swiper.use(components); + + return Swiper; + +}))); diff --git a/html/careers.html b/html/careers.html index 08e1a6cf88018861fb9396d85bf30c6b207604d1..1aa94d8e01220437c859c1f9e5d296b740fea9ca 100755 --- a/html/careers.html +++ b/html/careers.html @@ -7,7 +7,7 @@ title: Careers at Frama-C <body class="page-template page-template-page-careers page-template-page-careers-php page page-id-146 nonTouch"> <div id="wrapper" class="hfeed"> - {% include headers.html header=5 %} + {% include headers.html header="careers" %} <div id="container" class="mainContainer"> <div class="pageCareers pages"> diff --git a/html/contact.html b/html/contact.html index de4469054cc45e8cc77f1f16334ae18b4eadbc25..a4dc97656d9f987f305d283ef061b0ffcbe8aae1 100644 --- a/html/contact.html +++ b/html/contact.html @@ -69,7 +69,7 @@ function(err, data) { <div id="wrapper" class="hfeed"> - {% include headers.html header=5 %} + {% include headers.html header="contact" %} <div id="container" class="mainContainer"> <div class="pageContact pages"> diff --git a/html/documentation.html b/html/documentation.html index 7293725e3473f08271210b298deb04fac134b795..ce03825a097db19e2559eb722fa8c80017996d0a 100755 --- a/html/documentation.html +++ b/html/documentation.html @@ -9,7 +9,7 @@ title: Documentation - Frama-C <div id="wrapper" class="hfeed"> - {% include headers.html header=3 %} + {% include headers.html header="documentation" %} <div id="container" class="mainContainer"> <div class="pageDocumentation pages"> @@ -22,76 +22,84 @@ title: Documentation - Frama-C <p>The Frama-C kernel and plug-ins have <a href="/html/kernel-plugin.html">a detailed documentation page</a>. </p> - <div class="docListwrap"> - <section> - <div class="docListTitle"> - <span>Frama-C and ACSL</span> - </div> - <div class="listItem"> - <h4 class="listItemTitle"><span>ACSL</span></h4> - <div class="docItem"><a href="/html/acsl.html">Description page</a></div> - <div class="docItem"><a href="/download/acsl.pdf">Language Reference</a></div> - <div class="docItem"><a href="/download/frama-c-acsl-implementation.pdf">Language Implementation</a></div> - <div class="docItem"><a href="https://github.com/acsl-language/acsl">Official ACSL Git Repository</a></div> - <div class="docItem"><a href="https://github.com/fraunhoferfokus/acsl-by-example">ACSL by Example</a></div> - </div> - <div class="listItem"> - <h4 class="listItemTitle"><span>Frama-C</span></h4> - <div class="docItem"><a href="/html/kernel.html">Description page</a></div> - <div class="docItem"><a href="/download/frama-c-user-manual.pdf">User Manual</a></div> - <div class="docItem"><a href="https://git.frama-c.com/pub/frama-c/blob/master/INSTALL.md">Installation</a></div> - <div class="docItem"><a href="/html/get-frama-c.html">Releases</a></div> - </div> - <div class="listItem"> - <h4 class="listItemTitle"><span>Contributing</span></h4> - <div class="docItem"><a href="https://git.frama-c.com/pub/frama-c/">GitLab Repository</a></div> - <div class="docItem"><a href="https://git.frama-c.com/pub/frama-c/CONTRIBUTING.md">Contributer guide</a></div> - <div class="docItem"><a href="https://git.frama-c.com/pub/frama-c/-/issues">Known issues</a></div> - <div class="docItem"><a href="/dokuwiki/bug_reporting_guidelines.html">bug reporting guide</a></div> - </div> - <div class="listItem"> - <h4 class="listItemTitle"><span>About Frama-C</span></h4> - <div class="docItem"><a href="/dokuwiki/publications.html">List of publications</a></div> - <div class="docItem"><a href="/dokuwiki/exercises.html">Exercices</a></div> - <div class="docItem"><a href="/dokuwiki/teaching.html">Teaching</a></div> - <div class="docItem"><a href="/dokuwiki/tutorial.html">Tutorials</a></div> - </div> - </section> + <div class="tileWrapper" size="small"> + <div class="tileWrapperTitle"> + <span>Frama-C and ACSL</span> + </div> + <div class="tile"> + <h4 class="tileTitle"><span>ACSL</span></h4> + <ul> + <li><a href="/html/acsl.html">Description page</a></li> + <li><a href="/download/acsl.pdf">Language Reference</a></li> + <li><a href="/download/frama-c-acsl-implementation.pdf">Language Implementation</a></li> + <li><a href="https://github.com/acsl-language/acsl">Official ACSL Git Repository</a></li> + <li><a href="https://github.com/fraunhoferfokus/acsl-by-example">ACSL by Example</a></li> + </ul> + </div> + <div class="tile"> + <h4 class="tileTitle"><span>Frama-C</span></h4> + <ul> + <li><a href="/html/kernel.html">Description page</a></li> + <li><a href="/download/frama-c-user-manual.pdf">User Manual</a></li> + <li><a href="https://git.frama-c.com/pub/frama-c/blob/master/INSTALL.md">Installation</a></li> + <li><a href="/html/get-frama-c.html">Releases</a></li> + </ul> + </div> + <div class="tile"> + <h4 class="tileTitle"><span>Contributing</span></h4> + <ul> + <li><a href="https://git.frama-c.com/pub/frama-c/">GitLab Repository</a></li> + <li><a href="https://git.frama-c.com/pub/frama-c/CONTRIBUTING.md">Contributer guide</a></li> + <li><a href="https://git.frama-c.com/pub/frama-c/-/issues">Known issues</a></li> + <li><a href="/dokuwiki/bug_reporting_guidelines.html">Bug reporting guide</a></li> + </ul> + </div> + <div class="tile"> + <h4 class="tileTitle"><span>About Frama-C</span></h4> + <ul> + <li><a href="/dokuwiki/publications.html">List of publications</a></li> + <li><a href="/dokuwiki/exercises.html">Exercices</a></li> + <li><a href="/dokuwiki/teaching.html">Teaching</a></li> + <li><a href="/dokuwiki/tutorial.html">Tutorials</a></li> + </ul> + </div> </div> - <div class="docListwrap"> - <section> - <div class="docListTitle"> - <span>Plug-ins Manuals</span> - </div> - <div class="listItem"> - <h4 class="listItemTitle"><span>Plugin Development</span></h4> - <div class="docItem"><a href="/download/frama-c-plugin-development-guide.pdf">Developer Manual</a></div> - </div> - {% for plugin in site.fc-plugins %} - <div class="listItem"> - <h4 class="listItemTitle"> - <span> - {% if plugin.short %} - {{ plugin.short }} - {% else %} - {{ plugin.title }} - {% endif %} - </span> - </h4> - <div class="docItem"><a href="{{plugin.url}}">Description page</a></div> + <div class="tileWrapper" size="small"> + <div class="tileWrapperTitle"> + <span>Plug-ins Manuals</span> + </div> + <div class="tile"> + <h4 class="tileTitle"><span>Plugin Development</span></h4> + <ul> + <li><a href="/download/frama-c-plugin-development-guide.pdf">Developer Manual</a></li> + </ul> + </div> + {% for plugin in site.fc-plugins %} + <div class="tile"> + <h4 class="tileTitle"> + <span> + {% if plugin.short %} + {{ plugin.short }} + {% else %} + {{ plugin.title }} + {% endif %} + </span> + </h4> + <ul> + <li><a href="{{plugin.url}}">Description page</a></li> {% if plugin.manual_pdf %} - <div class="docItem"><a href="{{plugin.manual_pdf}}">User Manual</a></div> + <li><a href="{{plugin.manual_pdf}}">User Manual</a></li> {% endif %} {% for add in plugin.additional %} - <div class="docItem"><a href="{{add.link}}">{% if add.short %}{{add.short}}{% else %}{{add.name}}{% endif %}</a></div> + <li><a href="{{add.link}}">{% if add.short %}{{add.short}}{% else %}{{add.name}}{% endif %}</a></li> {% endfor %} {% if plugin.repo_url %} - <div class="docItem"><a href="{{plugin.repo_url}}">External repository</a></div> - {% endif %} - </div> - {% endfor %} - </section> + <li><a href="{{plugin.repo_url}}">External repository</a></li> + {% endif %} + </ul> + </div> + {% endfor %} </div> </div> </div> diff --git a/html/get-frama-c.html b/html/get-frama-c.html index bcf7d089dcf6051536d17656ab46a49d38e25857..2faa3835147f5ca412e1395661b26480de366bfe 100644 --- a/html/get-frama-c.html +++ b/html/get-frama-c.html @@ -14,8 +14,7 @@ title: Get Frama-C <h1 class="pageTitle">Choose for which OS you want Frama-C</h1> <div class="OS codeTabs"> - <a href="index.html#" role="button" data-tab="linux"><b>Linux</b></a> <a href="index.html#" role="button" data-tab= - "mac"><b>Mac</b></a> <a href="index.html#" role="button" data-tab="windows"><b>Windows (WSL)</b></a> + <a href="#" role="button" class="tab-up tab-up-linux" onClick="clickTab('linux')"><b>Linux</b></a> <a href="#" role="button" class="tab-up tab-up-mac" onClick="clickTab('mac')"><b>Mac</b></a> <a href="#" role="button" class="tab-up tab-up-windows" onClick="clickTab('windows')"><b>Windows (WSL)</b></a> </div> <br> <a href="/html/framac-versions.html" class="previousVersion">Previous Versions</a> @@ -86,3 +85,4 @@ opam depext --install -y frama-c</pre> <div class="clear"></div> </div> </div> + <head><script type='text/javascript' src='/assets/js/codeTabs.js'></script></head> diff --git a/html/kernel-plugin.html b/html/kernel-plugin.html index f6179737c04b9dfc5537225be49577522cf18609..f7d1cffecbe8b02ffd7748fd574073358c2af945 100755 --- a/html/kernel-plugin.html +++ b/html/kernel-plugin.html @@ -6,27 +6,23 @@ active: 1 --- -<div class="pluginListwrap"> {% for category in site.data.plugins_categories %} -<section> - <div class="pluginListTitle"> +<div class="tileWrapper" size="big"> + <div class="tileWrapperTitle"> <span>{{ category.name }}</span> </div> {% for distrib in site.data.plugins_distrib_mode %} {% for plugin in site.fc-plugins %} {% if plugin.key == category.key and plugin.distrib_mode == distrib.key %} - <a role="link" href="{{ plugin.url }}" class="listItem"> - <div> - <h4 class="listItemTitle"><span>{{ plugin.title }}</span></h4> - <p>{{ plugin.description }}</p> - <p>{{ distrib.name }}</p> - </div> + <a role="link" href="{{ plugin.url }}" class="tile"> + <h4 class="tileTitle"><span>{{ plugin.title }}</span></h4> + <p>{{ plugin.description }}</p> + <p>{{ distrib.name }}</p> </a> {% endif %} {% endfor %} {% endfor %} -</section> -{% endfor %} </div> +{% endfor %} diff --git a/html/using-frama-c.html b/html/using-frama-c.html index 16a1abc74f91677c21c412c91a61ece9f6093ab0..9f5c369c917d491e3e76f66faa02afc4dd6b6716 100644 --- a/html/using-frama-c.html +++ b/html/using-frama-c.html @@ -7,7 +7,7 @@ css: plugin <body class="page-template page-template-page-usingFramac page-template-page-usingFramac-php page page-id-12 nonTouch"> <div id="wrapper" class="hfeed"> - {% include headers.html header=1 %} + {% include headers.html header="using" %} <div id="container" class="mainContainer"> <div class="defaultPage usagePage" id="content" role="main"> diff --git a/index.html b/index.html index 8c5ed2257c74ee812198f4ec9c6d2f11352820b9..ba588ad926097ba07528e63f772cae1e4c1b361d 100755 --- a/index.html +++ b/index.html @@ -69,9 +69,9 @@ title: Frama-C </div> </div> - <div class="swiper-button-prev"><</div> + <div class="swiper-button-prev" style="color: #f7931c"></div> - <div class="swiper-button-next">></div> + <div class="swiper-button-next" style="color: #f7931c"></div> </div> </div> @@ -179,11 +179,7 @@ title: Frama-C <div id="event_calender_swiper" class="swiper-container"> <div class="swiper-wrapper"> {% for event in site.events %} - <div class="swiper-slide" - {% if forloop.last %} - data-eventdate="latest" - {% endif %} - > + <div class="swiper-slide"> <a role="button" class="eventLink"><time>{{ event.date | date: "<b>%Y</b>" }}</time><span>{{ event.event }}</span></a> </div> {% endfor %} @@ -197,10 +193,9 @@ title: Frama-C <div class="swiper-wrapper"> {% for event in site.events %} <div class="swiper-slide"> - <div class="eventDetail" id="post_details_486"> - + <div class="eventDetail"> <div class="contentBlk"> - <time>{{ event.date | date: "<b>%-d</b><b>%B</b><small>%Y</small>" }}</time> + <time>{{ event.date | date: "<b>%B </b><b>%-d</b><small> %Y</small>" }}</time> <div> <h3>{{ event.title }}</h3> @@ -241,3 +236,5 @@ title: Frama-C </div> </div> <body> + <script type='text/javascript' src='/assets/js/swiper.js'></script> + <head><script type='text/javascript' src='/assets/js/main.js'></script></head>