{"version":3,"file":"home.js","sources":["home.js"],"sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 12);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./build/scripts/components/general-lean.js\":\n/*!**************************************************!*\\\n !*** ./build/scripts/components/general-lean.js ***!\n \\**************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* global URLSearchParams */\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ((window, $) => {\\n $(function () {\\n document.addEventListener('scroll', showScrollbar);\\n document.addEventListener('resize', showScrollbar);\\n function showScrollbar() {\\n if(window.outerWidth > 992) {\\n let scrollbar = document.getElementById('scrollbar')\\n if(window.scrollY > (window.outerHeight - 60)) {\\n scrollbar.style.display = 'flex';\\n } else {\\n scrollbar.style.display = 'none';\\n }\\n } else {\\n scrollbar.style.display = 'none';\\n }\\n }\\n function getAttributionMap() {\\n let referrer = document.referrer ? document.referrer : \\\"direct\\\";\\n let medium = document.referrer ? \\\"referral\\\" : \\\"\\\";\\n let attributionMap = [\\n {\\n name: \\\"department\\\",\\n parameter: \\\"utm_department\\\",\\n default: \\\"marketing\\\",\\n api: \\\"utm_department\\\",\\n marketo: \\\"Last_Touch_Department__c\\\"\\n },\\n {\\n name: \\\"campaign\\\",\\n parameter: \\\"utm_campaign\\\",\\n default: \\\"\\\",\\n api: \\\"utm_campaign\\\",\\n marketo: \\\"Last_Touch_Campaign__c\\\"\\n },\\n {\\n name: \\\"medium\\\",\\n parameter: \\\"utm_medium\\\",\\n default: medium,\\n api: \\\"utm_medium\\\",\\n marketo: \\\"Last_Touch_Medium__c\\\"\\n },\\n {\\n name: \\\"source\\\",\\n parameter: \\\"utm_source\\\",\\n default: referrer,\\n api: \\\"utm_source\\\",\\n marketo: \\\"Last_Touch_Source__c\\\"\\n },\\n {\\n name: \\\"content\\\",\\n parameter: \\\"utm_content\\\",\\n default: \\\"\\\",\\n api: \\\"utm_content\\\",\\n marketo: \\\"Last_Touch_Content__c\\\"\\n },\\n {\\n name: \\\"term\\\",\\n parameter: \\\"utm_term\\\",\\n default: \\\"\\\",\\n api: \\\"utm_term\\\",\\n marketo: \\\"Last_Touch_Term__c\\\"\\n },\\n ];\\n return attributionMap;\\n }\\n function hasAttributionCookie() {\\n if ($.cookie(\\\"attribution\\\")) {\\n return true;\\n } else {\\n return false;\\n }\\n }\\n function hasAttributionParameters() {\\n let urlParams = new URLSearchParams(window.location.search);\\n let attributionMap = getAttributionMap();\\n let hasParameters = false;\\n attributionMap.forEach(function (element) {\\n if (urlParams.has(element.parameter)) {\\n hasParameters = true;\\n }\\n });\\n return hasParameters;\\n }\\n function getAttributionParameters() {\\n let urlParams = new URLSearchParams(window.location.search);\\n let attributionMap = getAttributionMap();\\n let attribution = {};\\n attributionMap.forEach(function (element) {\\n if (urlParams.has(element.parameter)) {\\n attribution[element.api] = urlParams\\n .get(element.parameter)\\n .toLowerCase();\\n } else {\\n attribution[element.api] = element.default;\\n }\\n });\\n return attribution;\\n }\\n function setAttributionCookie() {\\n let parameters = getAttributionParameters();\\n if (!hasAttributionCookie() || hasAttributionParameters()) {\\n $.cookie(\\\"attribution\\\", JSON.stringify(parameters), {\\n expires: 1,\\n path: \\\"/\\\",\\n domain: window.location.hostname,\\n });\\n return JSON.stringify(parameters);\\n }\\n }\\n function getAttributionValues() {\\n if (hasAttributionCookie() && !hasAttributionParameters()) {\\n return JSON.parse($.cookie(\\\"attribution\\\"));\\n } else {\\n return JSON.parse(setAttributionCookie());\\n }\\n }\\n function setHiddenAttributionFields(form) {\\n let attributionMap = getAttributionMap();\\n let attributionValues = getAttributionValues();\\n let fields = {};\\n attributionMap.forEach(function (element) {\\n if(attributionValues[element.api].length > 0) {\\n fields[element.marketo] = attributionValues[element.api];\\n }\\n });\\n form.addHiddenFields(fields);\\n }\\n function setAttributionDataLayers() {\\n let attributionVals = getAttributionValues();\\n window.dataLayer.push({ campaign: attributionVals });\\n }\\n function attributeLinks() {\\n let links = document.querySelectorAll('[href*=\\\"/login/\\\"][href*=\\\"codecov.io\\\"]')\\n links.forEach(function(link) {\\n let url = new URL(link.href);\\n let params = new URLSearchParams(url.search);\\n let attributionMap = getAttributionMap();\\n let attributionValues = getAttributionValues();\\n attributionMap.forEach(function (element) {\\n if(attributionValues[element.api].length > 0) {\\n params.set(element.parameter, attributionValues[element.api]);\\n }\\n });\\n link.href = link.href + \\\"?\\\" + params.toString();\\n if(link.id === 'github-private') {\\n link.href += '&private=true'\\n }\\n });\\n }\\n setAttributionDataLayers();\\n attributeLinks();\\n });\\n });\\n \\n\\n//# sourceURL=webpack:///./build/scripts/components/general-lean.js?\");\n\n/***/ }),\n\n/***/ \"./build/scripts/components/home-carousel.js\":\n/*!***************************************************!*\\\n !*** ./build/scripts/components/home-carousel.js ***!\n \\***************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* global URLSearchParams owlCarousel */\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = (($) => {\\n $(function () {\\n $(\\\".homepage-carousel\\\").owlCarousel({\\n loop: true,\\n margin: 20,\\n dots: false,\\n nav: false,\\n autoplay: true,\\n singleItem: false,\\n slideTransition: 'linear',\\n smartSpeed: 6000,\\n autoplaySpeed: 6000,\\n responsive: {\\n 0: {\\n items: 2\\n },\\n 576: {\\n items: 3\\n },\\n 768: {\\n items: 4\\n },\\n 992: {\\n items: 6\\n }\\n }\\n });\\n });\\n });\\n\\n//# sourceURL=webpack:///./build/scripts/components/home-carousel.js?\");\n\n/***/ }),\n\n/***/ \"./build/scripts/home.js\":\n/*!*******************************!*\\\n !*** ./build/scripts/home.js ***!\n \\*******************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ \\\"./node_modules/bootstrap/dist/js/bootstrap.js\\\");\\n/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bootstrap__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var jquery_cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery.cookie */ \\\"./node_modules/jquery.cookie/jquery.cookie.js\\\");\\n/* harmony import */ var jquery_cookie__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery_cookie__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var _fancyapps_fancybox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @fancyapps/fancybox */ \\\"./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js\\\");\\n/* harmony import */ var _fancyapps_fancybox__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_fancyapps_fancybox__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! owl.carousel */ \\\"./node_modules/owl.carousel/dist/owl.carousel.js\\\");\\n/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(owl_carousel__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var _components_general_lean__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/general-lean */ \\\"./build/scripts/components/general-lean.js\\\");\\n/* harmony import */ var _parts_menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./parts/menu */ \\\"./build/scripts/parts/menu.js\\\");\\n/* harmony import */ var _vendor_fancybox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./vendor/fancybox */ \\\"./build/scripts/vendor/fancybox.js\\\");\\n/* harmony import */ var _components_home_carousel__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/home-carousel */ \\\"./build/scripts/components/home-carousel.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\nwindow.jQuery(($) => {\\n Object(_components_general_lean__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(window, $);\\n Object(_parts_menu__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])(window, $);\\n Object(_vendor_fancybox__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])($);\\n Object(_components_home_carousel__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"])($);\\n});\\n\\n\\n//# sourceURL=webpack:///./build/scripts/home.js?\");\n\n/***/ }),\n\n/***/ \"./build/scripts/parts/menu.js\":\n/*!*************************************!*\\\n !*** ./build/scripts/parts/menu.js ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ((window, $) => {\\n $(function () {\\n $(\\\".js-menu_toggle\\\").click(function (e) {\\n $(\\\"#header\\\").toggleClass(\\\"active\\\");\\n $(this).toggleClass(\\\"active\\\");\\n });\\n $(window).resize(function () {\\n $(\\\"#header\\\").removeClass(\\\"active\\\");\\n $(\\\".js-menu_toggle\\\").removeClass(\\\"active\\\");\\n });\\n $(\\\".header__mobile-navigation > ul > li > a\\\").click(function (e) {\\n if ($(this).hasClass(\\\"has-menu\\\")) {\\n e.preventDefault();\\n }\\n $(this)\\n .parent(\\\"li\\\")\\n .toggleClass(\\\"active\\\")\\n .siblings()\\n .removeClass(\\\"active\\\");\\n });\\n });\\n});\\n\\n\\n//# sourceURL=webpack:///./build/scripts/parts/menu.js?\");\n\n/***/ }),\n\n/***/ \"./build/scripts/vendor/fancybox.js\":\n/*!******************************************!*\\\n !*** ./build/scripts/vendor/fancybox.js ***!\n \\******************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = (($) => {\\n $('.fancybox').fancybox({\\n 'helpers': {\\n 'overlay': {\\n 'locked': false\\n }\\n }\\n });\\n\\n $(\\\"a.fancybox-iframe, a.fancybox-iframed\\\").fancybox({\\n 'overlayOpacity': '0.4',\\n 'overlayColor': '#000',\\n 'hideOnContentClick': false,\\n 'autoSize': 'auto',\\n 'transitionIn': 'elastic',\\n 'transitionOut': 'elastic',\\n 'type': 'iframe',\\n 'padding': 10,\\n 'helpers': {\\n 'overlay': {\\n 'locked': false\\n }\\n }\\n });\\n\\n $(\\\"a.fancybox-media\\\").fancybox({\\n 'overlayOpacity': '0.4',\\n 'overlayColor': '#000',\\n 'hideOnContentClick': false,\\n 'autoSize': 'auto',\\n 'transitionIn': 'elastic',\\n 'transitionOut': 'elastic',\\n 'padding': 10,\\n 'helpers': {\\n 'media': {},\\n 'overlay': {\\n 'locked': false\\n }\\n },\\n });\\n});\\n\\n//# sourceURL=webpack:///./build/scripts/vendor/fancybox.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js\":\n/*!******************************************************************!*\\\n !*** ./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js ***!\n \\******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"// ==================================================\\n// fancyBox v3.5.7\\n//\\n// Licensed GPLv3 for open source use\\n// or fancyBox Commercial License for commercial use\\n//\\n// http://fancyapps.com/fancybox/\\n// Copyright 2019 fancyApps\\n//\\n// ==================================================\\n(function (window, document, $, undefined) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n window.console = window.console || {\\r\\n info: function (stuff) {}\\r\\n };\\r\\n\\r\\n // If there's no jQuery, fancyBox can't work\\r\\n // =========================================\\r\\n\\r\\n if (!$) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Check if fancyBox is already initialized\\r\\n // ========================================\\r\\n\\r\\n if ($.fn.fancybox) {\\r\\n console.info(\\\"fancyBox already initialized\\\");\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n // Private default settings\\r\\n // ========================\\r\\n\\r\\n var defaults = {\\r\\n // Close existing modals\\r\\n // Set this to false if you do not need to stack multiple instances\\r\\n closeExisting: false,\\r\\n\\r\\n // Enable infinite gallery navigation\\r\\n loop: false,\\r\\n\\r\\n // Horizontal space between slides\\r\\n gutter: 50,\\r\\n\\r\\n // Enable keyboard navigation\\r\\n keyboard: true,\\r\\n\\r\\n // Should allow caption to overlap the content\\r\\n preventCaptionOverlap: true,\\r\\n\\r\\n // Should display navigation arrows at the screen edges\\r\\n arrows: true,\\r\\n\\r\\n // Should display counter at the top left corner\\r\\n infobar: true,\\r\\n\\r\\n // Should display close button (using `btnTpl.smallBtn` template) over the content\\r\\n // Can be true, false, \\\"auto\\\"\\r\\n // If \\\"auto\\\" - will be automatically enabled for \\\"html\\\", \\\"inline\\\" or \\\"ajax\\\" items\\r\\n smallBtn: \\\"auto\\\",\\r\\n\\r\\n // Should display toolbar (buttons at the top)\\r\\n // Can be true, false, \\\"auto\\\"\\r\\n // If \\\"auto\\\" - will be automatically hidden if \\\"smallBtn\\\" is enabled\\r\\n toolbar: \\\"auto\\\",\\r\\n\\r\\n // What buttons should appear in the top right corner.\\r\\n // Buttons will be created using templates from `btnTpl` option\\r\\n // and they will be placed into toolbar (class=\\\"fancybox-toolbar\\\"` element)\\r\\n buttons: [\\r\\n \\\"zoom\\\",\\r\\n //\\\"share\\\",\\r\\n \\\"slideShow\\\",\\r\\n //\\\"fullScreen\\\",\\r\\n //\\\"download\\\",\\r\\n \\\"thumbs\\\",\\r\\n \\\"close\\\"\\r\\n ],\\r\\n\\r\\n // Detect \\\"idle\\\" time in seconds\\r\\n idleTime: 3,\\r\\n\\r\\n // Disable right-click and use simple image protection for images\\r\\n protect: false,\\r\\n\\r\\n // Shortcut to make content \\\"modal\\\" - disable keyboard navigtion, hide buttons, etc\\r\\n modal: false,\\r\\n\\r\\n image: {\\r\\n // Wait for images to load before displaying\\r\\n // true - wait for image to load and then display;\\r\\n // false - display thumbnail and load the full-sized image over top,\\r\\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\\r\\n preload: false\\r\\n },\\r\\n\\r\\n ajax: {\\r\\n // Object containing settings for ajax request\\r\\n settings: {\\r\\n // This helps to indicate that request comes from the modal\\r\\n // Feel free to change naming\\r\\n data: {\\r\\n fancybox: true\\r\\n }\\r\\n }\\r\\n },\\r\\n\\r\\n iframe: {\\r\\n // Iframe template\\r\\n tpl: '',\\r\\n\\r\\n // Preload iframe before displaying it\\r\\n // This allows to calculate iframe content width and height\\r\\n // (note: Due to \\\"Same Origin Policy\\\", you can't get cross domain data).\\r\\n preload: true,\\r\\n\\r\\n // Custom CSS styling for iframe wrapping element\\r\\n // You can use this to set custom iframe dimensions\\r\\n css: {},\\r\\n\\r\\n // Iframe tag attributes\\r\\n attr: {\\r\\n scrolling: \\\"auto\\\"\\r\\n }\\r\\n },\\r\\n\\r\\n // For HTML5 video only\\r\\n video: {\\r\\n tpl: '\\\",\\r\\n format: \\\"\\\", // custom video format\\r\\n autoStart: true\\r\\n },\\r\\n\\r\\n // Default content type if cannot be detected automatically\\r\\n defaultType: \\\"image\\\",\\r\\n\\r\\n // Open/close animation type\\r\\n // Possible values:\\r\\n // false - disable\\r\\n // \\\"zoom\\\" - zoom images from/to thumbnail\\r\\n // \\\"fade\\\"\\r\\n // \\\"zoom-in-out\\\"\\r\\n //\\r\\n animationEffect: \\\"zoom\\\",\\r\\n\\r\\n // Duration in ms for open/close animation\\r\\n animationDuration: 366,\\r\\n\\r\\n // Should image change opacity while zooming\\r\\n // If opacity is \\\"auto\\\", then opacity will be changed if image and thumbnail have different aspect ratios\\r\\n zoomOpacity: \\\"auto\\\",\\r\\n\\r\\n // Transition effect between slides\\r\\n //\\r\\n // Possible values:\\r\\n // false - disable\\r\\n // \\\"fade'\\r\\n // \\\"slide'\\r\\n // \\\"circular'\\r\\n // \\\"tube'\\r\\n // \\\"zoom-in-out'\\r\\n // \\\"rotate'\\r\\n //\\r\\n transitionEffect: \\\"fade\\\",\\r\\n\\r\\n // Duration in ms for transition animation\\r\\n transitionDuration: 366,\\r\\n\\r\\n // Custom CSS class for slide element\\r\\n slideClass: \\\"\\\",\\r\\n\\r\\n // Custom CSS class for layout\\r\\n baseClass: \\\"\\\",\\r\\n\\r\\n // Base template for layout\\r\\n baseTpl: '
' +\\r\\n '
' +\\r\\n '
' +\\r\\n '
 / 
' +\\r\\n '
{{buttons}}
' +\\r\\n '
{{arrows}}
' +\\r\\n '
' +\\r\\n '
' +\\r\\n \\\"
\\\" +\\r\\n \\\"
\\\",\\r\\n\\r\\n // Loading indicator template\\r\\n spinnerTpl: '
',\\r\\n\\r\\n // Error message template\\r\\n errorTpl: '

{{ERROR}}

',\\r\\n\\r\\n btnTpl: {\\r\\n download: '' +\\r\\n '' +\\r\\n \\\"\\\",\\r\\n\\r\\n zoom: '\\\",\\r\\n\\r\\n close: '\\\",\\r\\n\\r\\n // Arrows\\r\\n arrowLeft: '\\\",\\r\\n\\r\\n arrowRight: '\\\",\\r\\n\\r\\n // This small close button will be appended to your html/inline/ajax content by default,\\r\\n // if \\\"smallBtn\\\" option is not set to false\\r\\n smallBtn: '\\\"\\r\\n },\\r\\n\\r\\n // Container is injected into this element\\r\\n parentEl: \\\"body\\\",\\r\\n\\r\\n // Hide browser vertical scrollbars; use at your own risk\\r\\n hideScrollbar: true,\\r\\n\\r\\n // Focus handling\\r\\n // ==============\\r\\n\\r\\n // Try to focus on the first focusable element after opening\\r\\n autoFocus: true,\\r\\n\\r\\n // Put focus back to active element after closing\\r\\n backFocus: true,\\r\\n\\r\\n // Do not let user to focus on element outside modal content\\r\\n trapFocus: true,\\r\\n\\r\\n // Module specific options\\r\\n // =======================\\r\\n\\r\\n fullScreen: {\\r\\n autoStart: false\\r\\n },\\r\\n\\r\\n // Set `touch: false` to disable panning/swiping\\r\\n touch: {\\r\\n vertical: true, // Allow to drag content vertically\\r\\n momentum: true // Continue movement after releasing mouse/touch when panning\\r\\n },\\r\\n\\r\\n // Hash value when initializing manually,\\r\\n // set `false` to disable hash change\\r\\n hash: null,\\r\\n\\r\\n // Customize or add new media types\\r\\n // Example:\\r\\n /*\\r\\n media : {\\r\\n youtube : {\\r\\n params : {\\r\\n autoplay : 0\\r\\n }\\r\\n }\\r\\n }\\r\\n */\\r\\n media: {},\\r\\n\\r\\n slideShow: {\\r\\n autoStart: false,\\r\\n speed: 3000\\r\\n },\\r\\n\\r\\n thumbs: {\\r\\n autoStart: false, // Display thumbnails on opening\\r\\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\\r\\n parentEl: \\\".fancybox-container\\\", // Container is injected into this element\\r\\n axis: \\\"y\\\" // Vertical (y) or horizontal (x) scrolling\\r\\n },\\r\\n\\r\\n // Use mousewheel to navigate gallery\\r\\n // If 'auto' - enabled for images only\\r\\n wheel: \\\"auto\\\",\\r\\n\\r\\n // Callbacks\\r\\n //==========\\r\\n\\r\\n // See Documentation/API/Events for more information\\r\\n // Example:\\r\\n /*\\r\\n afterShow: function( instance, current ) {\\r\\n console.info( 'Clicked element:' );\\r\\n console.info( current.opts.$orig );\\r\\n }\\r\\n */\\r\\n\\r\\n onInit: $.noop, // When instance has been initialized\\r\\n\\r\\n beforeLoad: $.noop, // Before the content of a slide is being loaded\\r\\n afterLoad: $.noop, // When the content of a slide is done loading\\r\\n\\r\\n beforeShow: $.noop, // Before open animation starts\\r\\n afterShow: $.noop, // When content is done loading and animating\\r\\n\\r\\n beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.\\r\\n afterClose: $.noop, // After instance has been closed\\r\\n\\r\\n onActivate: $.noop, // When instance is brought to front\\r\\n onDeactivate: $.noop, // When other instance has been activated\\r\\n\\r\\n // Interaction\\r\\n // ===========\\r\\n\\r\\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\\r\\n // each option can be string or method that returns value.\\r\\n //\\r\\n // Possible values:\\r\\n // \\\"close\\\" - close instance\\r\\n // \\\"next\\\" - move to next gallery item\\r\\n // \\\"nextOrClose\\\" - move to next gallery item or close if gallery has only one item\\r\\n // \\\"toggleControls\\\" - show/hide controls\\r\\n // \\\"zoom\\\" - zoom image (if loaded)\\r\\n // false - do nothing\\r\\n\\r\\n // Clicked on the content\\r\\n clickContent: function (current, event) {\\r\\n return current.type === \\\"image\\\" ? \\\"zoom\\\" : false;\\r\\n },\\r\\n\\r\\n // Clicked on the slide\\r\\n clickSlide: \\\"close\\\",\\r\\n\\r\\n // Clicked on the background (backdrop) element;\\r\\n // if you have not changed the layout, then most likely you need to use `clickSlide` option\\r\\n clickOutside: \\\"close\\\",\\r\\n\\r\\n // Same as previous two, but for double click\\r\\n dblclickContent: false,\\r\\n dblclickSlide: false,\\r\\n dblclickOutside: false,\\r\\n\\r\\n // Custom options when mobile device is detected\\r\\n // =============================================\\r\\n\\r\\n mobile: {\\r\\n preventCaptionOverlap: false,\\r\\n idleTime: false,\\r\\n clickContent: function (current, event) {\\r\\n return current.type === \\\"image\\\" ? \\\"toggleControls\\\" : false;\\r\\n },\\r\\n clickSlide: function (current, event) {\\r\\n return current.type === \\\"image\\\" ? \\\"toggleControls\\\" : \\\"close\\\";\\r\\n },\\r\\n dblclickContent: function (current, event) {\\r\\n return current.type === \\\"image\\\" ? \\\"zoom\\\" : false;\\r\\n },\\r\\n dblclickSlide: function (current, event) {\\r\\n return current.type === \\\"image\\\" ? \\\"zoom\\\" : false;\\r\\n }\\r\\n },\\r\\n\\r\\n // Internationalization\\r\\n // ====================\\r\\n\\r\\n lang: \\\"en\\\",\\r\\n i18n: {\\r\\n en: {\\r\\n CLOSE: \\\"Close\\\",\\r\\n NEXT: \\\"Next\\\",\\r\\n PREV: \\\"Previous\\\",\\r\\n ERROR: \\\"The requested content cannot be loaded.
Please try again later.\\\",\\r\\n PLAY_START: \\\"Start slideshow\\\",\\r\\n PLAY_STOP: \\\"Pause slideshow\\\",\\r\\n FULL_SCREEN: \\\"Full screen\\\",\\r\\n THUMBS: \\\"Thumbnails\\\",\\r\\n DOWNLOAD: \\\"Download\\\",\\r\\n SHARE: \\\"Share\\\",\\r\\n ZOOM: \\\"Zoom\\\"\\r\\n },\\r\\n de: {\\r\\n CLOSE: \\\"Schließen\\\",\\r\\n NEXT: \\\"Weiter\\\",\\r\\n PREV: \\\"Zurück\\\",\\r\\n ERROR: \\\"Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.\\\",\\r\\n PLAY_START: \\\"Diaschau starten\\\",\\r\\n PLAY_STOP: \\\"Diaschau beenden\\\",\\r\\n FULL_SCREEN: \\\"Vollbild\\\",\\r\\n THUMBS: \\\"Vorschaubilder\\\",\\r\\n DOWNLOAD: \\\"Herunterladen\\\",\\r\\n SHARE: \\\"Teilen\\\",\\r\\n ZOOM: \\\"Vergrößern\\\"\\r\\n }\\r\\n }\\r\\n };\\r\\n\\r\\n // Few useful variables and methods\\r\\n // ================================\\r\\n\\r\\n var $W = $(window);\\r\\n var $D = $(document);\\r\\n\\r\\n var called = 0;\\r\\n\\r\\n // Check if an object is a jQuery object and not a native JavaScript object\\r\\n // ========================================================================\\r\\n var isQuery = function (obj) {\\r\\n return obj && obj.hasOwnProperty && obj instanceof $;\\r\\n };\\r\\n\\r\\n // Handle multiple browsers for \\\"requestAnimationFrame\\\" and \\\"cancelAnimationFrame\\\"\\r\\n // ===============================================================================\\r\\n var requestAFrame = (function () {\\r\\n return (\\r\\n window.requestAnimationFrame ||\\r\\n window.webkitRequestAnimationFrame ||\\r\\n window.mozRequestAnimationFrame ||\\r\\n window.oRequestAnimationFrame ||\\r\\n // if all else fails, use setTimeout\\r\\n function (callback) {\\r\\n return window.setTimeout(callback, 1000 / 60);\\r\\n }\\r\\n );\\r\\n })();\\r\\n\\r\\n var cancelAFrame = (function () {\\r\\n return (\\r\\n window.cancelAnimationFrame ||\\r\\n window.webkitCancelAnimationFrame ||\\r\\n window.mozCancelAnimationFrame ||\\r\\n window.oCancelAnimationFrame ||\\r\\n function (id) {\\r\\n window.clearTimeout(id);\\r\\n }\\r\\n );\\r\\n })();\\r\\n\\r\\n // Detect the supported transition-end event property name\\r\\n // =======================================================\\r\\n var transitionEnd = (function () {\\r\\n var el = document.createElement(\\\"fakeelement\\\"),\\r\\n t;\\r\\n\\r\\n var transitions = {\\r\\n transition: \\\"transitionend\\\",\\r\\n OTransition: \\\"oTransitionEnd\\\",\\r\\n MozTransition: \\\"transitionend\\\",\\r\\n WebkitTransition: \\\"webkitTransitionEnd\\\"\\r\\n };\\r\\n\\r\\n for (t in transitions) {\\r\\n if (el.style[t] !== undefined) {\\r\\n return transitions[t];\\r\\n }\\r\\n }\\r\\n\\r\\n return \\\"transitionend\\\";\\r\\n })();\\r\\n\\r\\n // Force redraw on an element.\\r\\n // This helps in cases where the browser doesn't redraw an updated element properly\\r\\n // ================================================================================\\r\\n var forceRedraw = function ($el) {\\r\\n return $el && $el.length && $el[0].offsetHeight;\\r\\n };\\r\\n\\r\\n // Exclude array (`buttons`) options from deep merging\\r\\n // ===================================================\\r\\n var mergeOpts = function (opts1, opts2) {\\r\\n var rez = $.extend(true, {}, opts1, opts2);\\r\\n\\r\\n $.each(opts2, function (key, value) {\\r\\n if ($.isArray(value)) {\\r\\n rez[key] = value;\\r\\n }\\r\\n });\\r\\n\\r\\n return rez;\\r\\n };\\r\\n\\r\\n // How much of an element is visible in viewport\\r\\n // =============================================\\r\\n\\r\\n var inViewport = function (elem) {\\r\\n var elemCenter, rez;\\r\\n\\r\\n if (!elem || elem.ownerDocument !== document) {\\r\\n return false;\\r\\n }\\r\\n\\r\\n $(\\\".fancybox-container\\\").css(\\\"pointer-events\\\", \\\"none\\\");\\r\\n\\r\\n elemCenter = {\\r\\n x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,\\r\\n y: elem.getBoundingClientRect().top + elem.offsetHeight / 2\\r\\n };\\r\\n\\r\\n rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;\\r\\n\\r\\n $(\\\".fancybox-container\\\").css(\\\"pointer-events\\\", \\\"\\\");\\r\\n\\r\\n return rez;\\r\\n };\\r\\n\\r\\n // Class definition\\r\\n // ================\\r\\n\\r\\n var FancyBox = function (content, opts, index) {\\r\\n var self = this;\\r\\n\\r\\n self.opts = mergeOpts({\\r\\n index: index\\r\\n }, $.fancybox.defaults);\\r\\n\\r\\n if ($.isPlainObject(opts)) {\\r\\n self.opts = mergeOpts(self.opts, opts);\\r\\n }\\r\\n\\r\\n if ($.fancybox.isMobile) {\\r\\n self.opts = mergeOpts(self.opts, self.opts.mobile);\\r\\n }\\r\\n\\r\\n self.id = self.opts.id || ++called;\\r\\n\\r\\n self.currIndex = parseInt(self.opts.index, 10) || 0;\\r\\n self.prevIndex = null;\\r\\n\\r\\n self.prevPos = null;\\r\\n self.currPos = 0;\\r\\n\\r\\n self.firstRun = true;\\r\\n\\r\\n // All group items\\r\\n self.group = [];\\r\\n\\r\\n // Existing slides (for current, next and previous gallery items)\\r\\n self.slides = {};\\r\\n\\r\\n // Create group elements\\r\\n self.addContent(content);\\r\\n\\r\\n if (!self.group.length) {\\r\\n return;\\r\\n }\\r\\n\\r\\n self.init();\\r\\n };\\r\\n\\r\\n $.extend(FancyBox.prototype, {\\r\\n // Create DOM structure\\r\\n // ====================\\r\\n\\r\\n init: function () {\\r\\n var self = this,\\r\\n firstItem = self.group[self.currIndex],\\r\\n firstItemOpts = firstItem.opts,\\r\\n $container,\\r\\n buttonStr;\\r\\n\\r\\n if (firstItemOpts.closeExisting) {\\r\\n $.fancybox.close(true);\\r\\n }\\r\\n\\r\\n // Hide scrollbars\\r\\n // ===============\\r\\n\\r\\n $(\\\"body\\\").addClass(\\\"fancybox-active\\\");\\r\\n\\r\\n if (\\r\\n !$.fancybox.getInstance() &&\\r\\n firstItemOpts.hideScrollbar !== false &&\\r\\n !$.fancybox.isMobile &&\\r\\n document.body.scrollHeight > window.innerHeight\\r\\n ) {\\r\\n $(\\\"head\\\").append(\\r\\n '\\\"\\r\\n );\\r\\n\\r\\n $(\\\"body\\\").addClass(\\\"compensate-for-scrollbar\\\");\\r\\n }\\r\\n\\r\\n // Build html markup and set references\\r\\n // ====================================\\r\\n\\r\\n // Build html code for buttons and insert into main template\\r\\n buttonStr = \\\"\\\";\\r\\n\\r\\n $.each(firstItemOpts.buttons, function (index, value) {\\r\\n buttonStr += firstItemOpts.btnTpl[value] || \\\"\\\";\\r\\n });\\r\\n\\r\\n // Create markup from base template, it will be initially hidden to\\r\\n // avoid unnecessary work like painting while initializing is not complete\\r\\n $container = $(\\r\\n self.translate(\\r\\n self,\\r\\n firstItemOpts.baseTpl\\r\\n .replace(\\\"{{buttons}}\\\", buttonStr)\\r\\n .replace(\\\"{{arrows}}\\\", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)\\r\\n )\\r\\n )\\r\\n .attr(\\\"id\\\", \\\"fancybox-container-\\\" + self.id)\\r\\n .addClass(firstItemOpts.baseClass)\\r\\n .data(\\\"FancyBox\\\", self)\\r\\n .appendTo(firstItemOpts.parentEl);\\r\\n\\r\\n // Create object holding references to jQuery wrapped nodes\\r\\n self.$refs = {\\r\\n container: $container\\r\\n };\\r\\n\\r\\n [\\\"bg\\\", \\\"inner\\\", \\\"infobar\\\", \\\"toolbar\\\", \\\"stage\\\", \\\"caption\\\", \\\"navigation\\\"].forEach(function (item) {\\r\\n self.$refs[item] = $container.find(\\\".fancybox-\\\" + item);\\r\\n });\\r\\n\\r\\n self.trigger(\\\"onInit\\\");\\r\\n\\r\\n // Enable events, deactive previous instances\\r\\n self.activate();\\r\\n\\r\\n // Build slides, load and reveal content\\r\\n self.jumpTo(self.currIndex);\\r\\n },\\r\\n\\r\\n // Simple i18n support - replaces object keys found in template\\r\\n // with corresponding values\\r\\n // ============================================================\\r\\n\\r\\n translate: function (obj, str) {\\r\\n var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;\\r\\n\\r\\n return str.replace(/\\\\{\\\\{(\\\\w+)\\\\}\\\\}/g, function (match, n) {\\r\\n return arr[n] === undefined ? match : arr[n];\\r\\n });\\r\\n },\\r\\n\\r\\n // Populate current group with fresh content\\r\\n // Check if each object has valid type and content\\r\\n // ===============================================\\r\\n\\r\\n addContent: function (content) {\\r\\n var self = this,\\r\\n items = $.makeArray(content),\\r\\n thumbs;\\r\\n\\r\\n $.each(items, function (i, item) {\\r\\n var obj = {},\\r\\n opts = {},\\r\\n $item,\\r\\n type,\\r\\n found,\\r\\n src,\\r\\n srcParts;\\r\\n\\r\\n // Step 1 - Make sure we have an object\\r\\n // ====================================\\r\\n\\r\\n if ($.isPlainObject(item)) {\\r\\n // We probably have manual usage here, something like\\r\\n // $.fancybox.open( [ { src : \\\"image.jpg\\\", type : \\\"image\\\" } ] )\\r\\n\\r\\n obj = item;\\r\\n opts = item.opts || item;\\r\\n } else if ($.type(item) === \\\"object\\\" && $(item).length) {\\r\\n // Here we probably have jQuery collection returned by some selector\\r\\n $item = $(item);\\r\\n\\r\\n // Support attributes like `data-options='{\\\"touch\\\" : false}'` and `data-touch='false'`\\r\\n opts = $item.data() || {};\\r\\n opts = $.extend(true, {}, opts, opts.options);\\r\\n\\r\\n // Here we store clicked element\\r\\n opts.$orig = $item;\\r\\n\\r\\n obj.src = self.opts.src || opts.src || $item.attr(\\\"href\\\");\\r\\n\\r\\n // Assume that simple syntax is used, for example:\\r\\n // `$.fancybox.open( $(\\\"#test\\\"), {} );`\\r\\n if (!obj.type && !obj.src) {\\r\\n obj.type = \\\"inline\\\";\\r\\n obj.src = item;\\r\\n }\\r\\n } else {\\r\\n // Assume we have a simple html code, for example:\\r\\n // $.fancybox.open( '

Hi!

' );\\r\\n obj = {\\r\\n type: \\\"html\\\",\\r\\n src: item + \\\"\\\"\\r\\n };\\r\\n }\\r\\n\\r\\n // Each gallery object has full collection of options\\r\\n obj.opts = $.extend(true, {}, self.opts, opts);\\r\\n\\r\\n // Do not merge buttons array\\r\\n if ($.isArray(opts.buttons)) {\\r\\n obj.opts.buttons = opts.buttons;\\r\\n }\\r\\n\\r\\n if ($.fancybox.isMobile && obj.opts.mobile) {\\r\\n obj.opts = mergeOpts(obj.opts, obj.opts.mobile);\\r\\n }\\r\\n\\r\\n // Step 2 - Make sure we have content type, if not - try to guess\\r\\n // ==============================================================\\r\\n\\r\\n type = obj.type || obj.opts.type;\\r\\n src = obj.src || \\\"\\\";\\r\\n\\r\\n if (!type && src) {\\r\\n if ((found = src.match(/\\\\.(mp4|mov|ogv|webm)((\\\\?|#).*)?$/i))) {\\r\\n type = \\\"video\\\";\\r\\n\\r\\n if (!obj.opts.video.format) {\\r\\n obj.opts.video.format = \\\"video/\\\" + (found[1] === \\\"ogv\\\" ? \\\"ogg\\\" : found[1]);\\r\\n }\\r\\n } else if (src.match(/(^data:image\\\\/[a-z0-9+\\\\/=]*,)|(\\\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\\\?|#).*)?$)/i)) {\\r\\n type = \\\"image\\\";\\r\\n } else if (src.match(/\\\\.(pdf)((\\\\?|#).*)?$/i)) {\\r\\n type = \\\"iframe\\\";\\r\\n obj = $.extend(true, obj, {\\r\\n contentType: \\\"pdf\\\",\\r\\n opts: {\\r\\n iframe: {\\r\\n preload: false\\r\\n }\\r\\n }\\r\\n });\\r\\n } else if (src.charAt(0) === \\\"#\\\") {\\r\\n type = \\\"inline\\\";\\r\\n }\\r\\n }\\r\\n\\r\\n if (type) {\\r\\n obj.type = type;\\r\\n } else {\\r\\n self.trigger(\\\"objectNeedsType\\\", obj);\\r\\n }\\r\\n\\r\\n if (!obj.contentType) {\\r\\n obj.contentType = $.inArray(obj.type, [\\\"html\\\", \\\"inline\\\", \\\"ajax\\\"]) > -1 ? \\\"html\\\" : obj.type;\\r\\n }\\r\\n\\r\\n // Step 3 - Some adjustments\\r\\n // =========================\\r\\n\\r\\n obj.index = self.group.length;\\r\\n\\r\\n if (obj.opts.smallBtn == \\\"auto\\\") {\\r\\n obj.opts.smallBtn = $.inArray(obj.type, [\\\"html\\\", \\\"inline\\\", \\\"ajax\\\"]) > -1;\\r\\n }\\r\\n\\r\\n if (obj.opts.toolbar === \\\"auto\\\") {\\r\\n obj.opts.toolbar = !obj.opts.smallBtn;\\r\\n }\\r\\n\\r\\n // Find thumbnail image, check if exists and if is in the viewport\\r\\n obj.$thumb = obj.opts.$thumb || null;\\r\\n\\r\\n if (obj.opts.$trigger && obj.index === self.opts.index) {\\r\\n obj.$thumb = obj.opts.$trigger.find(\\\"img:first\\\");\\r\\n\\r\\n if (obj.$thumb.length) {\\r\\n obj.opts.$orig = obj.opts.$trigger;\\r\\n }\\r\\n }\\r\\n\\r\\n if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {\\r\\n obj.$thumb = obj.opts.$orig.find(\\\"img:first\\\");\\r\\n }\\r\\n\\r\\n if (obj.$thumb && !obj.$thumb.length) {\\r\\n obj.$thumb = null;\\r\\n }\\r\\n\\r\\n obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);\\r\\n\\r\\n // \\\"caption\\\" is a \\\"special\\\" option, it can be used to customize caption per gallery item\\r\\n if ($.type(obj.opts.caption) === \\\"function\\\") {\\r\\n obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);\\r\\n }\\r\\n\\r\\n if ($.type(self.opts.caption) === \\\"function\\\") {\\r\\n obj.opts.caption = self.opts.caption.apply(item, [self, obj]);\\r\\n }\\r\\n\\r\\n // Make sure we have caption as a string or jQuery object\\r\\n if (!(obj.opts.caption instanceof $)) {\\r\\n obj.opts.caption = obj.opts.caption === undefined ? \\\"\\\" : obj.opts.caption + \\\"\\\";\\r\\n }\\r\\n\\r\\n // Check if url contains \\\"filter\\\" used to filter the content\\r\\n // Example: \\\"ajax.html #something\\\"\\r\\n if (obj.type === \\\"ajax\\\") {\\r\\n srcParts = src.split(/\\\\s+/, 2);\\r\\n\\r\\n if (srcParts.length > 1) {\\r\\n obj.src = srcParts.shift();\\r\\n\\r\\n obj.opts.filter = srcParts.shift();\\r\\n }\\r\\n }\\r\\n\\r\\n // Hide all buttons and disable interactivity for modal items\\r\\n if (obj.opts.modal) {\\r\\n obj.opts = $.extend(true, obj.opts, {\\r\\n trapFocus: true,\\r\\n // Remove buttons\\r\\n infobar: 0,\\r\\n toolbar: 0,\\r\\n\\r\\n smallBtn: 0,\\r\\n\\r\\n // Disable keyboard navigation\\r\\n keyboard: 0,\\r\\n\\r\\n // Disable some modules\\r\\n slideShow: 0,\\r\\n fullScreen: 0,\\r\\n thumbs: 0,\\r\\n touch: 0,\\r\\n\\r\\n // Disable click event handlers\\r\\n clickContent: false,\\r\\n clickSlide: false,\\r\\n clickOutside: false,\\r\\n dblclickContent: false,\\r\\n dblclickSlide: false,\\r\\n dblclickOutside: false\\r\\n });\\r\\n }\\r\\n\\r\\n // Step 4 - Add processed object to group\\r\\n // ======================================\\r\\n\\r\\n self.group.push(obj);\\r\\n });\\r\\n\\r\\n // Update controls if gallery is already opened\\r\\n if (Object.keys(self.slides).length) {\\r\\n self.updateControls();\\r\\n\\r\\n // Update thumbnails, if needed\\r\\n thumbs = self.Thumbs;\\r\\n\\r\\n if (thumbs && thumbs.isActive) {\\r\\n thumbs.create();\\r\\n\\r\\n thumbs.focus();\\r\\n }\\r\\n }\\r\\n },\\r\\n\\r\\n // Attach an event handler functions for:\\r\\n // - navigation buttons\\r\\n // - browser scrolling, resizing;\\r\\n // - focusing\\r\\n // - keyboard\\r\\n // - detecting inactivity\\r\\n // ======================================\\r\\n\\r\\n addEvents: function () {\\r\\n var self = this;\\r\\n\\r\\n self.removeEvents();\\r\\n\\r\\n // Make navigation elements clickable\\r\\n // ==================================\\r\\n\\r\\n self.$refs.container\\r\\n .on(\\\"click.fb-close\\\", \\\"[data-fancybox-close]\\\", function (e) {\\r\\n e.stopPropagation();\\r\\n e.preventDefault();\\r\\n\\r\\n self.close(e);\\r\\n })\\r\\n .on(\\\"touchstart.fb-prev click.fb-prev\\\", \\\"[data-fancybox-prev]\\\", function (e) {\\r\\n e.stopPropagation();\\r\\n e.preventDefault();\\r\\n\\r\\n self.previous();\\r\\n })\\r\\n .on(\\\"touchstart.fb-next click.fb-next\\\", \\\"[data-fancybox-next]\\\", function (e) {\\r\\n e.stopPropagation();\\r\\n e.preventDefault();\\r\\n\\r\\n self.next();\\r\\n })\\r\\n .on(\\\"click.fb\\\", \\\"[data-fancybox-zoom]\\\", function (e) {\\r\\n // Click handler for zoom button\\r\\n self[self.isScaledDown() ? \\\"scaleToActual\\\" : \\\"scaleToFit\\\"]();\\r\\n });\\r\\n\\r\\n // Handle page scrolling and browser resizing\\r\\n // ==========================================\\r\\n\\r\\n $W.on(\\\"orientationchange.fb resize.fb\\\", function (e) {\\r\\n if (e && e.originalEvent && e.originalEvent.type === \\\"resize\\\") {\\r\\n if (self.requestId) {\\r\\n cancelAFrame(self.requestId);\\r\\n }\\r\\n\\r\\n self.requestId = requestAFrame(function () {\\r\\n self.update(e);\\r\\n });\\r\\n } else {\\r\\n if (self.current && self.current.type === \\\"iframe\\\") {\\r\\n self.$refs.stage.hide();\\r\\n }\\r\\n\\r\\n setTimeout(\\r\\n function () {\\r\\n self.$refs.stage.show();\\r\\n\\r\\n self.update(e);\\r\\n },\\r\\n $.fancybox.isMobile ? 600 : 250\\r\\n );\\r\\n }\\r\\n });\\r\\n\\r\\n $D.on(\\\"keydown.fb\\\", function (e) {\\r\\n var instance = $.fancybox ? $.fancybox.getInstance() : null,\\r\\n current = instance.current,\\r\\n keycode = e.keyCode || e.which;\\r\\n\\r\\n // Trap keyboard focus inside of the modal\\r\\n // =======================================\\r\\n\\r\\n if (keycode == 9) {\\r\\n if (current.opts.trapFocus) {\\r\\n self.focus(e);\\r\\n }\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n // Enable keyboard navigation\\r\\n // ==========================\\r\\n\\r\\n if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is(\\\"input,textarea,video,audio,select\\\")) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Backspace and Esc keys\\r\\n if (keycode === 8 || keycode === 27) {\\r\\n e.preventDefault();\\r\\n\\r\\n self.close(e);\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n // Left arrow and Up arrow\\r\\n if (keycode === 37 || keycode === 38) {\\r\\n e.preventDefault();\\r\\n\\r\\n self.previous();\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n // Righ arrow and Down arrow\\r\\n if (keycode === 39 || keycode === 40) {\\r\\n e.preventDefault();\\r\\n\\r\\n self.next();\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n self.trigger(\\\"afterKeydown\\\", e, keycode);\\r\\n });\\r\\n\\r\\n // Hide controls after some inactivity period\\r\\n if (self.group[self.currIndex].opts.idleTime) {\\r\\n self.idleSecondsCounter = 0;\\r\\n\\r\\n $D.on(\\r\\n \\\"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\\\",\\r\\n function (e) {\\r\\n self.idleSecondsCounter = 0;\\r\\n\\r\\n if (self.isIdle) {\\r\\n self.showControls();\\r\\n }\\r\\n\\r\\n self.isIdle = false;\\r\\n }\\r\\n );\\r\\n\\r\\n self.idleInterval = window.setInterval(function () {\\r\\n self.idleSecondsCounter++;\\r\\n\\r\\n if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {\\r\\n self.isIdle = true;\\r\\n self.idleSecondsCounter = 0;\\r\\n\\r\\n self.hideControls();\\r\\n }\\r\\n }, 1000);\\r\\n }\\r\\n },\\r\\n\\r\\n // Remove events added by the core\\r\\n // ===============================\\r\\n\\r\\n removeEvents: function () {\\r\\n var self = this;\\r\\n\\r\\n $W.off(\\\"orientationchange.fb resize.fb\\\");\\r\\n $D.off(\\\"keydown.fb .fb-idle\\\");\\r\\n\\r\\n this.$refs.container.off(\\\".fb-close .fb-prev .fb-next\\\");\\r\\n\\r\\n if (self.idleInterval) {\\r\\n window.clearInterval(self.idleInterval);\\r\\n\\r\\n self.idleInterval = null;\\r\\n }\\r\\n },\\r\\n\\r\\n // Change to previous gallery item\\r\\n // ===============================\\r\\n\\r\\n previous: function (duration) {\\r\\n return this.jumpTo(this.currPos - 1, duration);\\r\\n },\\r\\n\\r\\n // Change to next gallery item\\r\\n // ===========================\\r\\n\\r\\n next: function (duration) {\\r\\n return this.jumpTo(this.currPos + 1, duration);\\r\\n },\\r\\n\\r\\n // Switch to selected gallery item\\r\\n // ===============================\\r\\n\\r\\n jumpTo: function (pos, duration) {\\r\\n var self = this,\\r\\n groupLen = self.group.length,\\r\\n firstRun,\\r\\n isMoved,\\r\\n loop,\\r\\n current,\\r\\n previous,\\r\\n slidePos,\\r\\n stagePos,\\r\\n prop,\\r\\n diff;\\r\\n\\r\\n if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Should loop?\\r\\n pos = parseInt(pos, 10);\\r\\n loop = self.current ? self.current.opts.loop : self.opts.loop;\\r\\n\\r\\n if (!loop && (pos < 0 || pos >= groupLen)) {\\r\\n return false;\\r\\n }\\r\\n\\r\\n // Check if opening for the first time; this helps to speed things up\\r\\n firstRun = self.firstRun = !Object.keys(self.slides).length;\\r\\n\\r\\n // Create slides\\r\\n previous = self.current;\\r\\n\\r\\n self.prevIndex = self.currIndex;\\r\\n self.prevPos = self.currPos;\\r\\n\\r\\n current = self.createSlide(pos);\\r\\n\\r\\n if (groupLen > 1) {\\r\\n if (loop || current.index < groupLen - 1) {\\r\\n self.createSlide(pos + 1);\\r\\n }\\r\\n\\r\\n if (loop || current.index > 0) {\\r\\n self.createSlide(pos - 1);\\r\\n }\\r\\n }\\r\\n\\r\\n self.current = current;\\r\\n self.currIndex = current.index;\\r\\n self.currPos = current.pos;\\r\\n\\r\\n self.trigger(\\\"beforeShow\\\", firstRun);\\r\\n\\r\\n self.updateControls();\\r\\n\\r\\n // Validate duration length\\r\\n current.forcedDuration = undefined;\\r\\n\\r\\n if ($.isNumeric(duration)) {\\r\\n current.forcedDuration = duration;\\r\\n } else {\\r\\n duration = current.opts[firstRun ? \\\"animationDuration\\\" : \\\"transitionDuration\\\"];\\r\\n }\\r\\n\\r\\n duration = parseInt(duration, 10);\\r\\n\\r\\n // Check if user has swiped the slides or if still animating\\r\\n isMoved = self.isMoved(current);\\r\\n\\r\\n // Make sure current slide is visible\\r\\n current.$slide.addClass(\\\"fancybox-slide--current\\\");\\r\\n\\r\\n // Fresh start - reveal container, current slide and start loading content\\r\\n if (firstRun) {\\r\\n if (current.opts.animationEffect && duration) {\\r\\n self.$refs.container.css(\\\"transition-duration\\\", duration + \\\"ms\\\");\\r\\n }\\r\\n\\r\\n self.$refs.container.addClass(\\\"fancybox-is-open\\\").trigger(\\\"focus\\\");\\r\\n\\r\\n // Attempt to load content into slide\\r\\n // This will later call `afterLoad` -> `revealContent`\\r\\n self.loadSlide(current);\\r\\n\\r\\n self.preload(\\\"image\\\");\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n // Get actual slide/stage positions (before cleaning up)\\r\\n slidePos = $.fancybox.getTranslate(previous.$slide);\\r\\n stagePos = $.fancybox.getTranslate(self.$refs.stage);\\r\\n\\r\\n // Clean up all slides\\r\\n $.each(self.slides, function (index, slide) {\\r\\n $.fancybox.stop(slide.$slide, true);\\r\\n });\\r\\n\\r\\n if (previous.pos !== current.pos) {\\r\\n previous.isComplete = false;\\r\\n }\\r\\n\\r\\n previous.$slide.removeClass(\\\"fancybox-slide--complete fancybox-slide--current\\\");\\r\\n\\r\\n // If slides are out of place, then animate them to correct position\\r\\n if (isMoved) {\\r\\n // Calculate horizontal swipe distance\\r\\n diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);\\r\\n\\r\\n $.each(self.slides, function (index, slide) {\\r\\n slide.$slide.removeClass(\\\"fancybox-animated\\\").removeClass(function (index, className) {\\r\\n return (className.match(/(^|\\\\s)fancybox-fx-\\\\S+/g) || []).join(\\\" \\\");\\r\\n });\\r\\n\\r\\n // Make sure that each slide is in equal distance\\r\\n // This is mostly needed for freshly added slides, because they are not yet positioned\\r\\n var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;\\r\\n\\r\\n $.fancybox.setTranslate(slide.$slide, {\\r\\n top: 0,\\r\\n left: leftPos - stagePos.left + diff\\r\\n });\\r\\n\\r\\n if (slide.pos !== current.pos) {\\r\\n slide.$slide.addClass(\\\"fancybox-slide--\\\" + (slide.pos > current.pos ? \\\"next\\\" : \\\"previous\\\"));\\r\\n }\\r\\n\\r\\n // Redraw to make sure that transition will start\\r\\n forceRedraw(slide.$slide);\\r\\n\\r\\n // Animate the slide\\r\\n $.fancybox.animate(\\r\\n slide.$slide, {\\r\\n top: 0,\\r\\n left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter\\r\\n },\\r\\n duration,\\r\\n function () {\\r\\n slide.$slide\\r\\n .css({\\r\\n transform: \\\"\\\",\\r\\n opacity: \\\"\\\"\\r\\n })\\r\\n .removeClass(\\\"fancybox-slide--next fancybox-slide--previous\\\");\\r\\n\\r\\n if (slide.pos === self.currPos) {\\r\\n self.complete();\\r\\n }\\r\\n }\\r\\n );\\r\\n });\\r\\n } else if (duration && current.opts.transitionEffect) {\\r\\n // Set transition effect for previously active slide\\r\\n prop = \\\"fancybox-animated fancybox-fx-\\\" + current.opts.transitionEffect;\\r\\n\\r\\n previous.$slide.addClass(\\\"fancybox-slide--\\\" + (previous.pos > current.pos ? \\\"next\\\" : \\\"previous\\\"));\\r\\n\\r\\n $.fancybox.animate(\\r\\n previous.$slide,\\r\\n prop,\\r\\n duration,\\r\\n function () {\\r\\n previous.$slide.removeClass(prop).removeClass(\\\"fancybox-slide--next fancybox-slide--previous\\\");\\r\\n },\\r\\n false\\r\\n );\\r\\n }\\r\\n\\r\\n if (current.isLoaded) {\\r\\n self.revealContent(current);\\r\\n } else {\\r\\n self.loadSlide(current);\\r\\n }\\r\\n\\r\\n self.preload(\\\"image\\\");\\r\\n },\\r\\n\\r\\n // Create new \\\"slide\\\" element\\r\\n // These are gallery items that are actually added to DOM\\r\\n // =======================================================\\r\\n\\r\\n createSlide: function (pos) {\\r\\n var self = this,\\r\\n $slide,\\r\\n index;\\r\\n\\r\\n index = pos % self.group.length;\\r\\n index = index < 0 ? self.group.length + index : index;\\r\\n\\r\\n if (!self.slides[pos] && self.group[index]) {\\r\\n $slide = $('
').appendTo(self.$refs.stage);\\r\\n\\r\\n self.slides[pos] = $.extend(true, {}, self.group[index], {\\r\\n pos: pos,\\r\\n $slide: $slide,\\r\\n isLoaded: false\\r\\n });\\r\\n\\r\\n self.updateSlide(self.slides[pos]);\\r\\n }\\r\\n\\r\\n return self.slides[pos];\\r\\n },\\r\\n\\r\\n // Scale image to the actual size of the image;\\r\\n // x and y values should be relative to the slide\\r\\n // ==============================================\\r\\n\\r\\n scaleToActual: function (x, y, duration) {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n $content = current.$content,\\r\\n canvasWidth = $.fancybox.getTranslate(current.$slide).width,\\r\\n canvasHeight = $.fancybox.getTranslate(current.$slide).height,\\r\\n newImgWidth = current.width,\\r\\n newImgHeight = current.height,\\r\\n imgPos,\\r\\n posX,\\r\\n posY,\\r\\n scaleX,\\r\\n scaleY;\\r\\n\\r\\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \\\"image\\\" && current.isLoaded && !current.hasError)) {\\r\\n return;\\r\\n }\\r\\n\\r\\n self.isAnimating = true;\\r\\n\\r\\n $.fancybox.stop($content);\\r\\n\\r\\n x = x === undefined ? canvasWidth * 0.5 : x;\\r\\n y = y === undefined ? canvasHeight * 0.5 : y;\\r\\n\\r\\n imgPos = $.fancybox.getTranslate($content);\\r\\n\\r\\n imgPos.top -= $.fancybox.getTranslate(current.$slide).top;\\r\\n imgPos.left -= $.fancybox.getTranslate(current.$slide).left;\\r\\n\\r\\n scaleX = newImgWidth / imgPos.width;\\r\\n scaleY = newImgHeight / imgPos.height;\\r\\n\\r\\n // Get center position for original image\\r\\n posX = canvasWidth * 0.5 - newImgWidth * 0.5;\\r\\n posY = canvasHeight * 0.5 - newImgHeight * 0.5;\\r\\n\\r\\n // Make sure image does not move away from edges\\r\\n if (newImgWidth > canvasWidth) {\\r\\n posX = imgPos.left * scaleX - (x * scaleX - x);\\r\\n\\r\\n if (posX > 0) {\\r\\n posX = 0;\\r\\n }\\r\\n\\r\\n if (posX < canvasWidth - newImgWidth) {\\r\\n posX = canvasWidth - newImgWidth;\\r\\n }\\r\\n }\\r\\n\\r\\n if (newImgHeight > canvasHeight) {\\r\\n posY = imgPos.top * scaleY - (y * scaleY - y);\\r\\n\\r\\n if (posY > 0) {\\r\\n posY = 0;\\r\\n }\\r\\n\\r\\n if (posY < canvasHeight - newImgHeight) {\\r\\n posY = canvasHeight - newImgHeight;\\r\\n }\\r\\n }\\r\\n\\r\\n self.updateCursor(newImgWidth, newImgHeight);\\r\\n\\r\\n $.fancybox.animate(\\r\\n $content, {\\r\\n top: posY,\\r\\n left: posX,\\r\\n scaleX: scaleX,\\r\\n scaleY: scaleY\\r\\n },\\r\\n duration || 366,\\r\\n function () {\\r\\n self.isAnimating = false;\\r\\n }\\r\\n );\\r\\n\\r\\n // Stop slideshow\\r\\n if (self.SlideShow && self.SlideShow.isActive) {\\r\\n self.SlideShow.stop();\\r\\n }\\r\\n },\\r\\n\\r\\n // Scale image to fit inside parent element\\r\\n // ========================================\\r\\n\\r\\n scaleToFit: function (duration) {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n $content = current.$content,\\r\\n end;\\r\\n\\r\\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \\\"image\\\" && current.isLoaded && !current.hasError)) {\\r\\n return;\\r\\n }\\r\\n\\r\\n self.isAnimating = true;\\r\\n\\r\\n $.fancybox.stop($content);\\r\\n\\r\\n end = self.getFitPos(current);\\r\\n\\r\\n self.updateCursor(end.width, end.height);\\r\\n\\r\\n $.fancybox.animate(\\r\\n $content, {\\r\\n top: end.top,\\r\\n left: end.left,\\r\\n scaleX: end.width / $content.width(),\\r\\n scaleY: end.height / $content.height()\\r\\n },\\r\\n duration || 366,\\r\\n function () {\\r\\n self.isAnimating = false;\\r\\n }\\r\\n );\\r\\n },\\r\\n\\r\\n // Calculate image size to fit inside viewport\\r\\n // ===========================================\\r\\n\\r\\n getFitPos: function (slide) {\\r\\n var self = this,\\r\\n $content = slide.$content,\\r\\n $slide = slide.$slide,\\r\\n width = slide.width || slide.opts.width,\\r\\n height = slide.height || slide.opts.height,\\r\\n maxWidth,\\r\\n maxHeight,\\r\\n minRatio,\\r\\n aspectRatio,\\r\\n rez = {};\\r\\n\\r\\n if (!slide.isLoaded || !$content || !$content.length) {\\r\\n return false;\\r\\n }\\r\\n\\r\\n maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;\\r\\n maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;\\r\\n\\r\\n maxWidth -=\\r\\n parseFloat($slide.css(\\\"paddingLeft\\\")) +\\r\\n parseFloat($slide.css(\\\"paddingRight\\\")) +\\r\\n parseFloat($content.css(\\\"marginLeft\\\")) +\\r\\n parseFloat($content.css(\\\"marginRight\\\"));\\r\\n\\r\\n maxHeight -=\\r\\n parseFloat($slide.css(\\\"paddingTop\\\")) +\\r\\n parseFloat($slide.css(\\\"paddingBottom\\\")) +\\r\\n parseFloat($content.css(\\\"marginTop\\\")) +\\r\\n parseFloat($content.css(\\\"marginBottom\\\"));\\r\\n\\r\\n if (!width || !height) {\\r\\n width = maxWidth;\\r\\n height = maxHeight;\\r\\n }\\r\\n\\r\\n minRatio = Math.min(1, maxWidth / width, maxHeight / height);\\r\\n\\r\\n width = minRatio * width;\\r\\n height = minRatio * height;\\r\\n\\r\\n // Adjust width/height to precisely fit into container\\r\\n if (width > maxWidth - 0.5) {\\r\\n width = maxWidth;\\r\\n }\\r\\n\\r\\n if (height > maxHeight - 0.5) {\\r\\n height = maxHeight;\\r\\n }\\r\\n\\r\\n if (slide.type === \\\"image\\\") {\\r\\n rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css(\\\"paddingTop\\\"));\\r\\n rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css(\\\"paddingLeft\\\"));\\r\\n } else if (slide.contentType === \\\"video\\\") {\\r\\n // Force aspect ratio for the video\\r\\n // \\\"I say the whole world must learn of our peaceful ways… by force!\\\"\\r\\n aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;\\r\\n\\r\\n if (height > width / aspectRatio) {\\r\\n height = width / aspectRatio;\\r\\n } else if (width > height * aspectRatio) {\\r\\n width = height * aspectRatio;\\r\\n }\\r\\n }\\r\\n\\r\\n rez.width = width;\\r\\n rez.height = height;\\r\\n\\r\\n return rez;\\r\\n },\\r\\n\\r\\n // Update content size and position for all slides\\r\\n // ==============================================\\r\\n\\r\\n update: function (e) {\\r\\n var self = this;\\r\\n\\r\\n $.each(self.slides, function (key, slide) {\\r\\n self.updateSlide(slide, e);\\r\\n });\\r\\n },\\r\\n\\r\\n // Update slide content position and size\\r\\n // ======================================\\r\\n\\r\\n updateSlide: function (slide, e) {\\r\\n var self = this,\\r\\n $content = slide && slide.$content,\\r\\n width = slide.width || slide.opts.width,\\r\\n height = slide.height || slide.opts.height,\\r\\n $slide = slide.$slide;\\r\\n\\r\\n // First, prevent caption overlap, if needed\\r\\n self.adjustCaption(slide);\\r\\n\\r\\n // Then resize content to fit inside the slide\\r\\n if ($content && (width || height || slide.contentType === \\\"video\\\") && !slide.hasError) {\\r\\n $.fancybox.stop($content);\\r\\n\\r\\n $.fancybox.setTranslate($content, self.getFitPos(slide));\\r\\n\\r\\n if (slide.pos === self.currPos) {\\r\\n self.isAnimating = false;\\r\\n\\r\\n self.updateCursor();\\r\\n }\\r\\n }\\r\\n\\r\\n // Then some adjustments\\r\\n self.adjustLayout(slide);\\r\\n\\r\\n if ($slide.length) {\\r\\n $slide.trigger(\\\"refresh\\\");\\r\\n\\r\\n if (slide.pos === self.currPos) {\\r\\n self.$refs.toolbar\\r\\n .add(self.$refs.navigation.find(\\\".fancybox-button--arrow_right\\\"))\\r\\n .toggleClass(\\\"compensate-for-scrollbar\\\", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);\\r\\n }\\r\\n }\\r\\n\\r\\n self.trigger(\\\"onUpdate\\\", slide, e);\\r\\n },\\r\\n\\r\\n // Horizontally center slide\\r\\n // =========================\\r\\n\\r\\n centerSlide: function (duration) {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n $slide = current.$slide;\\r\\n\\r\\n if (self.isClosing || !current) {\\r\\n return;\\r\\n }\\r\\n\\r\\n $slide.siblings().css({\\r\\n transform: \\\"\\\",\\r\\n opacity: \\\"\\\"\\r\\n });\\r\\n\\r\\n $slide\\r\\n .parent()\\r\\n .children()\\r\\n .removeClass(\\\"fancybox-slide--previous fancybox-slide--next\\\");\\r\\n\\r\\n $.fancybox.animate(\\r\\n $slide, {\\r\\n top: 0,\\r\\n left: 0,\\r\\n opacity: 1\\r\\n },\\r\\n duration === undefined ? 0 : duration,\\r\\n function () {\\r\\n // Clean up\\r\\n $slide.css({\\r\\n transform: \\\"\\\",\\r\\n opacity: \\\"\\\"\\r\\n });\\r\\n\\r\\n if (!current.isComplete) {\\r\\n self.complete();\\r\\n }\\r\\n },\\r\\n false\\r\\n );\\r\\n },\\r\\n\\r\\n // Check if current slide is moved (swiped)\\r\\n // ========================================\\r\\n\\r\\n isMoved: function (slide) {\\r\\n var current = slide || this.current,\\r\\n slidePos,\\r\\n stagePos;\\r\\n\\r\\n if (!current) {\\r\\n return false;\\r\\n }\\r\\n\\r\\n stagePos = $.fancybox.getTranslate(this.$refs.stage);\\r\\n slidePos = $.fancybox.getTranslate(current.$slide);\\r\\n\\r\\n return (\\r\\n !current.$slide.hasClass(\\\"fancybox-animated\\\") &&\\r\\n (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)\\r\\n );\\r\\n },\\r\\n\\r\\n // Update cursor style depending if content can be zoomed\\r\\n // ======================================================\\r\\n\\r\\n updateCursor: function (nextWidth, nextHeight) {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n $container = self.$refs.container,\\r\\n canPan,\\r\\n isZoomable;\\r\\n\\r\\n if (!current || self.isClosing || !self.Guestures) {\\r\\n return;\\r\\n }\\r\\n\\r\\n $container.removeClass(\\\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\\\");\\r\\n\\r\\n canPan = self.canPan(nextWidth, nextHeight);\\r\\n\\r\\n isZoomable = canPan ? true : self.isZoomable();\\r\\n\\r\\n $container.toggleClass(\\\"fancybox-is-zoomable\\\", isZoomable);\\r\\n\\r\\n $(\\\"[data-fancybox-zoom]\\\").prop(\\\"disabled\\\", !isZoomable);\\r\\n\\r\\n if (canPan) {\\r\\n $container.addClass(\\\"fancybox-can-pan\\\");\\r\\n } else if (\\r\\n isZoomable &&\\r\\n (current.opts.clickContent === \\\"zoom\\\" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == \\\"zoom\\\"))\\r\\n ) {\\r\\n $container.addClass(\\\"fancybox-can-zoomIn\\\");\\r\\n } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== \\\"video\\\") {\\r\\n $container.addClass(\\\"fancybox-can-swipe\\\");\\r\\n }\\r\\n },\\r\\n\\r\\n // Check if current slide is zoomable\\r\\n // ==================================\\r\\n\\r\\n isZoomable: function () {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n fitPos;\\r\\n\\r\\n // Assume that slide is zoomable if:\\r\\n // - image is still loading\\r\\n // - actual size of the image is smaller than available area\\r\\n if (current && !self.isClosing && current.type === \\\"image\\\" && !current.hasError) {\\r\\n if (!current.isLoaded) {\\r\\n return true;\\r\\n }\\r\\n\\r\\n fitPos = self.getFitPos(current);\\r\\n\\r\\n if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {\\r\\n return true;\\r\\n }\\r\\n }\\r\\n\\r\\n return false;\\r\\n },\\r\\n\\r\\n // Check if current image dimensions are smaller than actual\\r\\n // =========================================================\\r\\n\\r\\n isScaledDown: function (nextWidth, nextHeight) {\\r\\n var self = this,\\r\\n rez = false,\\r\\n current = self.current,\\r\\n $content = current.$content;\\r\\n\\r\\n if (nextWidth !== undefined && nextHeight !== undefined) {\\r\\n rez = nextWidth < current.width && nextHeight < current.height;\\r\\n } else if ($content) {\\r\\n rez = $.fancybox.getTranslate($content);\\r\\n rez = rez.width < current.width && rez.height < current.height;\\r\\n }\\r\\n\\r\\n return rez;\\r\\n },\\r\\n\\r\\n // Check if image dimensions exceed parent element\\r\\n // ===============================================\\r\\n\\r\\n canPan: function (nextWidth, nextHeight) {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n pos = null,\\r\\n rez = false;\\r\\n\\r\\n if (current.type === \\\"image\\\" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {\\r\\n rez = self.getFitPos(current);\\r\\n\\r\\n if (nextWidth !== undefined && nextHeight !== undefined) {\\r\\n pos = {\\r\\n width: nextWidth,\\r\\n height: nextHeight\\r\\n };\\r\\n } else if (current.isComplete) {\\r\\n pos = $.fancybox.getTranslate(current.$content);\\r\\n }\\r\\n\\r\\n if (pos && rez) {\\r\\n rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;\\r\\n }\\r\\n }\\r\\n\\r\\n return rez;\\r\\n },\\r\\n\\r\\n // Load content into the slide\\r\\n // ===========================\\r\\n\\r\\n loadSlide: function (slide) {\\r\\n var self = this,\\r\\n type,\\r\\n $slide,\\r\\n ajaxLoad;\\r\\n\\r\\n if (slide.isLoading || slide.isLoaded) {\\r\\n return;\\r\\n }\\r\\n\\r\\n slide.isLoading = true;\\r\\n\\r\\n if (self.trigger(\\\"beforeLoad\\\", slide) === false) {\\r\\n slide.isLoading = false;\\r\\n\\r\\n return false;\\r\\n }\\r\\n\\r\\n type = slide.type;\\r\\n $slide = slide.$slide;\\r\\n\\r\\n $slide\\r\\n .off(\\\"refresh\\\")\\r\\n .trigger(\\\"onReset\\\")\\r\\n .addClass(slide.opts.slideClass);\\r\\n\\r\\n // Create content depending on the type\\r\\n switch (type) {\\r\\n case \\\"image\\\":\\r\\n self.setImage(slide);\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"iframe\\\":\\r\\n self.setIframe(slide);\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"html\\\":\\r\\n self.setContent(slide, slide.src || slide.content);\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"video\\\":\\r\\n self.setContent(\\r\\n slide,\\r\\n slide.opts.video.tpl\\r\\n .replace(/\\\\{\\\\{src\\\\}\\\\}/gi, slide.src)\\r\\n .replace(\\\"{{format}}\\\", slide.opts.videoFormat || slide.opts.video.format || \\\"\\\")\\r\\n .replace(\\\"{{poster}}\\\", slide.thumb || \\\"\\\")\\r\\n );\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"inline\\\":\\r\\n if ($(slide.src).length) {\\r\\n self.setContent(slide, $(slide.src));\\r\\n } else {\\r\\n self.setError(slide);\\r\\n }\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"ajax\\\":\\r\\n self.showLoading(slide);\\r\\n\\r\\n ajaxLoad = $.ajax(\\r\\n $.extend({}, slide.opts.ajax.settings, {\\r\\n url: slide.src,\\r\\n success: function (data, textStatus) {\\r\\n if (textStatus === \\\"success\\\") {\\r\\n self.setContent(slide, data);\\r\\n }\\r\\n },\\r\\n error: function (jqXHR, textStatus) {\\r\\n if (jqXHR && textStatus !== \\\"abort\\\") {\\r\\n self.setError(slide);\\r\\n }\\r\\n }\\r\\n })\\r\\n );\\r\\n\\r\\n $slide.one(\\\"onReset\\\", function () {\\r\\n ajaxLoad.abort();\\r\\n });\\r\\n\\r\\n break;\\r\\n\\r\\n default:\\r\\n self.setError(slide);\\r\\n\\r\\n break;\\r\\n }\\r\\n\\r\\n return true;\\r\\n },\\r\\n\\r\\n // Use thumbnail image, if possible\\r\\n // ================================\\r\\n\\r\\n setImage: function (slide) {\\r\\n var self = this,\\r\\n ghost;\\r\\n\\r\\n // Check if need to show loading icon\\r\\n setTimeout(function () {\\r\\n var $img = slide.$image;\\r\\n\\r\\n if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {\\r\\n self.showLoading(slide);\\r\\n }\\r\\n }, 50);\\r\\n\\r\\n //Check if image has srcset\\r\\n self.checkSrcset(slide);\\r\\n\\r\\n // This will be wrapper containing both ghost and actual image\\r\\n slide.$content = $('
')\\r\\n .addClass(\\\"fancybox-is-hidden\\\")\\r\\n .appendTo(slide.$slide.addClass(\\\"fancybox-slide--image\\\"));\\r\\n\\r\\n // If we have a thumbnail, we can display it while actual image is loading\\r\\n // Users will not stare at black screen and actual image will appear gradually\\r\\n if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {\\r\\n slide.width = slide.opts.width;\\r\\n slide.height = slide.opts.height;\\r\\n\\r\\n ghost = document.createElement(\\\"img\\\");\\r\\n\\r\\n ghost.onerror = function () {\\r\\n $(this).remove();\\r\\n\\r\\n slide.$ghost = null;\\r\\n };\\r\\n\\r\\n ghost.onload = function () {\\r\\n self.afterLoad(slide);\\r\\n };\\r\\n\\r\\n slide.$ghost = $(ghost)\\r\\n .addClass(\\\"fancybox-image\\\")\\r\\n .appendTo(slide.$content)\\r\\n .attr(\\\"src\\\", slide.thumb);\\r\\n }\\r\\n\\r\\n // Start loading actual image\\r\\n self.setBigImage(slide);\\r\\n },\\r\\n\\r\\n // Check if image has srcset and get the source\\r\\n // ============================================\\r\\n checkSrcset: function (slide) {\\r\\n var srcset = slide.opts.srcset || slide.opts.image.srcset,\\r\\n found,\\r\\n temp,\\r\\n pxRatio,\\r\\n windowWidth;\\r\\n\\r\\n // If we have \\\"srcset\\\", then we need to find first matching \\\"src\\\" value.\\r\\n // This is necessary, because when you set an src attribute, the browser will preload the image\\r\\n // before any javascript or even CSS is applied.\\r\\n if (srcset) {\\r\\n pxRatio = window.devicePixelRatio || 1;\\r\\n windowWidth = window.innerWidth * pxRatio;\\r\\n\\r\\n temp = srcset.split(\\\",\\\").map(function (el) {\\r\\n var ret = {};\\r\\n\\r\\n el.trim()\\r\\n .split(/\\\\s+/)\\r\\n .forEach(function (el, i) {\\r\\n var value = parseInt(el.substring(0, el.length - 1), 10);\\r\\n\\r\\n if (i === 0) {\\r\\n return (ret.url = el);\\r\\n }\\r\\n\\r\\n if (value) {\\r\\n ret.value = value;\\r\\n ret.postfix = el[el.length - 1];\\r\\n }\\r\\n });\\r\\n\\r\\n return ret;\\r\\n });\\r\\n\\r\\n // Sort by value\\r\\n temp.sort(function (a, b) {\\r\\n return a.value - b.value;\\r\\n });\\r\\n\\r\\n // Ok, now we have an array of all srcset values\\r\\n for (var j = 0; j < temp.length; j++) {\\r\\n var el = temp[j];\\r\\n\\r\\n if ((el.postfix === \\\"w\\\" && el.value >= windowWidth) || (el.postfix === \\\"x\\\" && el.value >= pxRatio)) {\\r\\n found = el;\\r\\n break;\\r\\n }\\r\\n }\\r\\n\\r\\n // If not found, take the last one\\r\\n if (!found && temp.length) {\\r\\n found = temp[temp.length - 1];\\r\\n }\\r\\n\\r\\n if (found) {\\r\\n slide.src = found.url;\\r\\n\\r\\n // If we have default width/height values, we can calculate height for matching source\\r\\n if (slide.width && slide.height && found.postfix == \\\"w\\\") {\\r\\n slide.height = (slide.width / slide.height) * found.value;\\r\\n slide.width = found.value;\\r\\n }\\r\\n\\r\\n slide.opts.srcset = srcset;\\r\\n }\\r\\n }\\r\\n },\\r\\n\\r\\n // Create full-size image\\r\\n // ======================\\r\\n\\r\\n setBigImage: function (slide) {\\r\\n var self = this,\\r\\n img = document.createElement(\\\"img\\\"),\\r\\n $img = $(img);\\r\\n\\r\\n slide.$image = $img\\r\\n .one(\\\"error\\\", function () {\\r\\n self.setError(slide);\\r\\n })\\r\\n .one(\\\"load\\\", function () {\\r\\n var sizes;\\r\\n\\r\\n if (!slide.$ghost) {\\r\\n self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);\\r\\n\\r\\n self.afterLoad(slide);\\r\\n }\\r\\n\\r\\n if (self.isClosing) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if (slide.opts.srcset) {\\r\\n sizes = slide.opts.sizes;\\r\\n\\r\\n if (!sizes || sizes === \\\"auto\\\") {\\r\\n sizes =\\r\\n (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? \\\"100\\\" : Math.round((slide.width / slide.height) * 100)) +\\r\\n \\\"vw\\\";\\r\\n }\\r\\n\\r\\n $img.attr(\\\"sizes\\\", sizes).attr(\\\"srcset\\\", slide.opts.srcset);\\r\\n }\\r\\n\\r\\n // Hide temporary image after some delay\\r\\n if (slide.$ghost) {\\r\\n setTimeout(function () {\\r\\n if (slide.$ghost && !self.isClosing) {\\r\\n slide.$ghost.hide();\\r\\n }\\r\\n }, Math.min(300, Math.max(1000, slide.height / 1600)));\\r\\n }\\r\\n\\r\\n self.hideLoading(slide);\\r\\n })\\r\\n .addClass(\\\"fancybox-image\\\")\\r\\n .attr(\\\"src\\\", slide.src)\\r\\n .appendTo(slide.$content);\\r\\n\\r\\n if ((img.complete || img.readyState == \\\"complete\\\") && $img.naturalWidth && $img.naturalHeight) {\\r\\n $img.trigger(\\\"load\\\");\\r\\n } else if (img.error) {\\r\\n $img.trigger(\\\"error\\\");\\r\\n }\\r\\n },\\r\\n\\r\\n // Computes the slide size from image size and maxWidth/maxHeight\\r\\n // ==============================================================\\r\\n\\r\\n resolveImageSlideSize: function (slide, imgWidth, imgHeight) {\\r\\n var maxWidth = parseInt(slide.opts.width, 10),\\r\\n maxHeight = parseInt(slide.opts.height, 10);\\r\\n\\r\\n // Sets the default values from the image\\r\\n slide.width = imgWidth;\\r\\n slide.height = imgHeight;\\r\\n\\r\\n if (maxWidth > 0) {\\r\\n slide.width = maxWidth;\\r\\n slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);\\r\\n }\\r\\n\\r\\n if (maxHeight > 0) {\\r\\n slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);\\r\\n slide.height = maxHeight;\\r\\n }\\r\\n },\\r\\n\\r\\n // Create iframe wrapper, iframe and bindings\\r\\n // ==========================================\\r\\n\\r\\n setIframe: function (slide) {\\r\\n var self = this,\\r\\n opts = slide.opts.iframe,\\r\\n $slide = slide.$slide,\\r\\n $iframe;\\r\\n\\r\\n slide.$content = $('
')\\r\\n .css(opts.css)\\r\\n .appendTo($slide);\\r\\n\\r\\n $slide.addClass(\\\"fancybox-slide--\\\" + slide.contentType);\\r\\n\\r\\n slide.$iframe = $iframe = $(opts.tpl.replace(/\\\\{rnd\\\\}/g, new Date().getTime()))\\r\\n .attr(opts.attr)\\r\\n .appendTo(slide.$content);\\r\\n\\r\\n if (opts.preload) {\\r\\n self.showLoading(slide);\\r\\n\\r\\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\\r\\n // (due to browser security policy)\\r\\n\\r\\n $iframe.on(\\\"load.fb error.fb\\\", function (e) {\\r\\n this.isReady = 1;\\r\\n\\r\\n slide.$slide.trigger(\\\"refresh\\\");\\r\\n\\r\\n self.afterLoad(slide);\\r\\n });\\r\\n\\r\\n // Recalculate iframe content size\\r\\n // ===============================\\r\\n\\r\\n $slide.on(\\\"refresh.fb\\\", function () {\\r\\n var $content = slide.$content,\\r\\n frameWidth = opts.css.width,\\r\\n frameHeight = opts.css.height,\\r\\n $contents,\\r\\n $body;\\r\\n\\r\\n if ($iframe[0].isReady !== 1) {\\r\\n return;\\r\\n }\\r\\n\\r\\n try {\\r\\n $contents = $iframe.contents();\\r\\n $body = $contents.find(\\\"body\\\");\\r\\n } catch (ignore) {}\\r\\n\\r\\n // Calculate content dimensions, if it is accessible\\r\\n if ($body && $body.length && $body.children().length) {\\r\\n // Avoid scrolling to top (if multiple instances)\\r\\n $slide.css(\\\"overflow\\\", \\\"visible\\\");\\r\\n\\r\\n $content.css({\\r\\n width: \\\"100%\\\",\\r\\n \\\"max-width\\\": \\\"100%\\\",\\r\\n height: \\\"9999px\\\"\\r\\n });\\r\\n\\r\\n if (frameWidth === undefined) {\\r\\n frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));\\r\\n }\\r\\n\\r\\n $content.css(\\\"width\\\", frameWidth ? frameWidth : \\\"\\\").css(\\\"max-width\\\", \\\"\\\");\\r\\n\\r\\n if (frameHeight === undefined) {\\r\\n frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));\\r\\n }\\r\\n\\r\\n $content.css(\\\"height\\\", frameHeight ? frameHeight : \\\"\\\");\\r\\n\\r\\n $slide.css(\\\"overflow\\\", \\\"auto\\\");\\r\\n }\\r\\n\\r\\n $content.removeClass(\\\"fancybox-is-hidden\\\");\\r\\n });\\r\\n } else {\\r\\n self.afterLoad(slide);\\r\\n }\\r\\n\\r\\n $iframe.attr(\\\"src\\\", slide.src);\\r\\n\\r\\n // Remove iframe if closing or changing gallery item\\r\\n $slide.one(\\\"onReset\\\", function () {\\r\\n // This helps IE not to throw errors when closing\\r\\n try {\\r\\n $(this)\\r\\n .find(\\\"iframe\\\")\\r\\n .hide()\\r\\n .unbind()\\r\\n .attr(\\\"src\\\", \\\"//about:blank\\\");\\r\\n } catch (ignore) {}\\r\\n\\r\\n $(this)\\r\\n .off(\\\"refresh.fb\\\")\\r\\n .empty();\\r\\n\\r\\n slide.isLoaded = false;\\r\\n slide.isRevealed = false;\\r\\n });\\r\\n },\\r\\n\\r\\n // Wrap and append content to the slide\\r\\n // ======================================\\r\\n\\r\\n setContent: function (slide, content) {\\r\\n var self = this;\\r\\n\\r\\n if (self.isClosing) {\\r\\n return;\\r\\n }\\r\\n\\r\\n self.hideLoading(slide);\\r\\n\\r\\n if (slide.$content) {\\r\\n $.fancybox.stop(slide.$content);\\r\\n }\\r\\n\\r\\n slide.$slide.empty();\\r\\n\\r\\n // If content is a jQuery object, then it will be moved to the slide.\\r\\n // The placeholder is created so we will know where to put it back.\\r\\n if (isQuery(content) && content.parent().length) {\\r\\n // Make sure content is not already moved to fancyBox\\r\\n if (content.hasClass(\\\"fancybox-content\\\") || content.parent().hasClass(\\\"fancybox-content\\\")) {\\r\\n content.parents(\\\".fancybox-slide\\\").trigger(\\\"onReset\\\");\\r\\n }\\r\\n\\r\\n // Create temporary element marking original place of the content\\r\\n slide.$placeholder = $(\\\"
\\\")\\r\\n .hide()\\r\\n .insertAfter(content);\\r\\n\\r\\n // Make sure content is visible\\r\\n content.css(\\\"display\\\", \\\"inline-block\\\");\\r\\n } else if (!slide.hasError) {\\r\\n // If content is just a plain text, try to convert it to html\\r\\n if ($.type(content) === \\\"string\\\") {\\r\\n content = $(\\\"
\\\")\\r\\n .append($.trim(content))\\r\\n .contents();\\r\\n }\\r\\n\\r\\n // If \\\"filter\\\" option is provided, then filter content\\r\\n if (slide.opts.filter) {\\r\\n content = $(\\\"
\\\")\\r\\n .html(content)\\r\\n .find(slide.opts.filter);\\r\\n }\\r\\n }\\r\\n\\r\\n slide.$slide.one(\\\"onReset\\\", function () {\\r\\n // Pause all html5 video/audio\\r\\n $(this)\\r\\n .find(\\\"video,audio\\\")\\r\\n .trigger(\\\"pause\\\");\\r\\n\\r\\n // Put content back\\r\\n if (slide.$placeholder) {\\r\\n slide.$placeholder.after(content.removeClass(\\\"fancybox-content\\\").hide()).remove();\\r\\n\\r\\n slide.$placeholder = null;\\r\\n }\\r\\n\\r\\n // Remove custom close button\\r\\n if (slide.$smallBtn) {\\r\\n slide.$smallBtn.remove();\\r\\n\\r\\n slide.$smallBtn = null;\\r\\n }\\r\\n\\r\\n // Remove content and mark slide as not loaded\\r\\n if (!slide.hasError) {\\r\\n $(this).empty();\\r\\n\\r\\n slide.isLoaded = false;\\r\\n slide.isRevealed = false;\\r\\n }\\r\\n });\\r\\n\\r\\n $(content).appendTo(slide.$slide);\\r\\n\\r\\n if ($(content).is(\\\"video,audio\\\")) {\\r\\n $(content).addClass(\\\"fancybox-video\\\");\\r\\n\\r\\n $(content).wrap(\\\"
\\\");\\r\\n\\r\\n slide.contentType = \\\"video\\\";\\r\\n\\r\\n slide.opts.width = slide.opts.width || $(content).attr(\\\"width\\\");\\r\\n slide.opts.height = slide.opts.height || $(content).attr(\\\"height\\\");\\r\\n }\\r\\n\\r\\n slide.$content = slide.$slide\\r\\n .children()\\r\\n .filter(\\\"div,form,main,video,audio,article,.fancybox-content\\\")\\r\\n .first();\\r\\n\\r\\n slide.$content.siblings().hide();\\r\\n\\r\\n // Re-check if there is a valid content\\r\\n // (in some cases, ajax response can contain various elements or plain text)\\r\\n if (!slide.$content.length) {\\r\\n slide.$content = slide.$slide\\r\\n .wrapInner(\\\"
\\\")\\r\\n .children()\\r\\n .first();\\r\\n }\\r\\n\\r\\n slide.$content.addClass(\\\"fancybox-content\\\");\\r\\n\\r\\n slide.$slide.addClass(\\\"fancybox-slide--\\\" + slide.contentType);\\r\\n\\r\\n self.afterLoad(slide);\\r\\n },\\r\\n\\r\\n // Display error message\\r\\n // =====================\\r\\n\\r\\n setError: function (slide) {\\r\\n slide.hasError = true;\\r\\n\\r\\n slide.$slide\\r\\n .trigger(\\\"onReset\\\")\\r\\n .removeClass(\\\"fancybox-slide--\\\" + slide.contentType)\\r\\n .addClass(\\\"fancybox-slide--error\\\");\\r\\n\\r\\n slide.contentType = \\\"html\\\";\\r\\n\\r\\n this.setContent(slide, this.translate(slide, slide.opts.errorTpl));\\r\\n\\r\\n if (slide.pos === this.currPos) {\\r\\n this.isAnimating = false;\\r\\n }\\r\\n },\\r\\n\\r\\n // Show loading icon inside the slide\\r\\n // ==================================\\r\\n\\r\\n showLoading: function (slide) {\\r\\n var self = this;\\r\\n\\r\\n slide = slide || self.current;\\r\\n\\r\\n if (slide && !slide.$spinner) {\\r\\n slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))\\r\\n .appendTo(slide.$slide)\\r\\n .hide()\\r\\n .fadeIn(\\\"fast\\\");\\r\\n }\\r\\n },\\r\\n\\r\\n // Remove loading icon from the slide\\r\\n // ==================================\\r\\n\\r\\n hideLoading: function (slide) {\\r\\n var self = this;\\r\\n\\r\\n slide = slide || self.current;\\r\\n\\r\\n if (slide && slide.$spinner) {\\r\\n slide.$spinner.stop().remove();\\r\\n\\r\\n delete slide.$spinner;\\r\\n }\\r\\n },\\r\\n\\r\\n // Adjustments after slide content has been loaded\\r\\n // ===============================================\\r\\n\\r\\n afterLoad: function (slide) {\\r\\n var self = this;\\r\\n\\r\\n if (self.isClosing) {\\r\\n return;\\r\\n }\\r\\n\\r\\n slide.isLoading = false;\\r\\n slide.isLoaded = true;\\r\\n\\r\\n self.trigger(\\\"afterLoad\\\", slide);\\r\\n\\r\\n self.hideLoading(slide);\\r\\n\\r\\n // Add small close button\\r\\n if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {\\r\\n slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);\\r\\n }\\r\\n\\r\\n // Disable right click\\r\\n if (slide.opts.protect && slide.$content && !slide.hasError) {\\r\\n slide.$content.on(\\\"contextmenu.fb\\\", function (e) {\\r\\n if (e.button == 2) {\\r\\n e.preventDefault();\\r\\n }\\r\\n\\r\\n return true;\\r\\n });\\r\\n\\r\\n // Add fake element on top of the image\\r\\n // This makes a bit harder for user to select image\\r\\n if (slide.type === \\\"image\\\") {\\r\\n $('
').appendTo(slide.$content);\\r\\n }\\r\\n }\\r\\n\\r\\n self.adjustCaption(slide);\\r\\n\\r\\n self.adjustLayout(slide);\\r\\n\\r\\n if (slide.pos === self.currPos) {\\r\\n self.updateCursor();\\r\\n }\\r\\n\\r\\n self.revealContent(slide);\\r\\n },\\r\\n\\r\\n // Prevent caption overlap,\\r\\n // fix css inconsistency across browsers\\r\\n // =====================================\\r\\n\\r\\n adjustCaption: function (slide) {\\r\\n var self = this,\\r\\n current = slide || self.current,\\r\\n caption = current.opts.caption,\\r\\n preventOverlap = current.opts.preventCaptionOverlap,\\r\\n $caption = self.$refs.caption,\\r\\n $clone,\\r\\n captionH = false;\\r\\n\\r\\n $caption.toggleClass(\\\"fancybox-caption--separate\\\", preventOverlap);\\r\\n\\r\\n if (preventOverlap && caption && caption.length) {\\r\\n if (current.pos !== self.currPos) {\\r\\n $clone = $caption.clone().appendTo($caption.parent());\\r\\n\\r\\n $clone\\r\\n .children()\\r\\n .eq(0)\\r\\n .empty()\\r\\n .html(caption);\\r\\n\\r\\n captionH = $clone.outerHeight(true);\\r\\n\\r\\n $clone.empty().remove();\\r\\n } else if (self.$caption) {\\r\\n captionH = self.$caption.outerHeight(true);\\r\\n }\\r\\n\\r\\n current.$slide.css(\\\"padding-bottom\\\", captionH || \\\"\\\");\\r\\n }\\r\\n },\\r\\n\\r\\n // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):\\r\\n // https://bugzilla.mozilla.org/show_bug.cgi?id=748518\\r\\n // ====================================================================================\\r\\n\\r\\n adjustLayout: function (slide) {\\r\\n var self = this,\\r\\n current = slide || self.current,\\r\\n scrollHeight,\\r\\n marginBottom,\\r\\n inlinePadding,\\r\\n actualPadding;\\r\\n\\r\\n if (current.isLoaded && current.opts.disableLayoutFix !== true) {\\r\\n current.$content.css(\\\"margin-bottom\\\", \\\"\\\");\\r\\n\\r\\n // If we would always set margin-bottom for the content,\\r\\n // then it would potentially break vertical align\\r\\n if (current.$content.outerHeight() > current.$slide.height() + 0.5) {\\r\\n inlinePadding = current.$slide[0].style[\\\"padding-bottom\\\"];\\r\\n actualPadding = current.$slide.css(\\\"padding-bottom\\\");\\r\\n\\r\\n if (parseFloat(actualPadding) > 0) {\\r\\n scrollHeight = current.$slide[0].scrollHeight;\\r\\n\\r\\n current.$slide.css(\\\"padding-bottom\\\", 0);\\r\\n\\r\\n if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {\\r\\n marginBottom = actualPadding;\\r\\n }\\r\\n\\r\\n current.$slide.css(\\\"padding-bottom\\\", inlinePadding);\\r\\n }\\r\\n }\\r\\n\\r\\n current.$content.css(\\\"margin-bottom\\\", marginBottom);\\r\\n }\\r\\n },\\r\\n\\r\\n // Make content visible\\r\\n // This method is called right after content has been loaded or\\r\\n // user navigates gallery and transition should start\\r\\n // ============================================================\\r\\n\\r\\n revealContent: function (slide) {\\r\\n var self = this,\\r\\n $slide = slide.$slide,\\r\\n end = false,\\r\\n start = false,\\r\\n isMoved = self.isMoved(slide),\\r\\n isRevealed = slide.isRevealed,\\r\\n effect,\\r\\n effectClassName,\\r\\n duration,\\r\\n opacity;\\r\\n\\r\\n slide.isRevealed = true;\\r\\n\\r\\n effect = slide.opts[self.firstRun ? \\\"animationEffect\\\" : \\\"transitionEffect\\\"];\\r\\n duration = slide.opts[self.firstRun ? \\\"animationDuration\\\" : \\\"transitionDuration\\\"];\\r\\n\\r\\n duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);\\r\\n\\r\\n if (isMoved || slide.pos !== self.currPos || !duration) {\\r\\n effect = false;\\r\\n }\\r\\n\\r\\n // Check if can zoom\\r\\n if (effect === \\\"zoom\\\") {\\r\\n if (slide.pos === self.currPos && duration && slide.type === \\\"image\\\" && !slide.hasError && (start = self.getThumbPos(slide))) {\\r\\n end = self.getFitPos(slide);\\r\\n } else {\\r\\n effect = \\\"fade\\\";\\r\\n }\\r\\n }\\r\\n\\r\\n // Zoom animation\\r\\n // ==============\\r\\n if (effect === \\\"zoom\\\") {\\r\\n self.isAnimating = true;\\r\\n\\r\\n end.scaleX = end.width / start.width;\\r\\n end.scaleY = end.height / start.height;\\r\\n\\r\\n // Check if we need to animate opacity\\r\\n opacity = slide.opts.zoomOpacity;\\r\\n\\r\\n if (opacity == \\\"auto\\\") {\\r\\n opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;\\r\\n }\\r\\n\\r\\n if (opacity) {\\r\\n start.opacity = 0.1;\\r\\n end.opacity = 1;\\r\\n }\\r\\n\\r\\n // Draw image at start position\\r\\n $.fancybox.setTranslate(slide.$content.removeClass(\\\"fancybox-is-hidden\\\"), start);\\r\\n\\r\\n forceRedraw(slide.$content);\\r\\n\\r\\n // Start animation\\r\\n $.fancybox.animate(slide.$content, end, duration, function () {\\r\\n self.isAnimating = false;\\r\\n\\r\\n self.complete();\\r\\n });\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n self.updateSlide(slide);\\r\\n\\r\\n // Simply show content if no effect\\r\\n // ================================\\r\\n if (!effect) {\\r\\n slide.$content.removeClass(\\\"fancybox-is-hidden\\\");\\r\\n\\r\\n if (!isRevealed && isMoved && slide.type === \\\"image\\\" && !slide.hasError) {\\r\\n slide.$content.hide().fadeIn(\\\"fast\\\");\\r\\n }\\r\\n\\r\\n if (slide.pos === self.currPos) {\\r\\n self.complete();\\r\\n }\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n // Prepare for CSS transiton\\r\\n // =========================\\r\\n $.fancybox.stop($slide);\\r\\n\\r\\n //effectClassName = \\\"fancybox-animated fancybox-slide--\\\" + (slide.pos >= self.prevPos ? \\\"next\\\" : \\\"previous\\\") + \\\" fancybox-fx-\\\" + effect;\\r\\n effectClassName = \\\"fancybox-slide--\\\" + (slide.pos >= self.prevPos ? \\\"next\\\" : \\\"previous\\\") + \\\" fancybox-animated fancybox-fx-\\\" + effect;\\r\\n\\r\\n $slide.addClass(effectClassName).removeClass(\\\"fancybox-slide--current\\\"); //.addClass(effectClassName);\\r\\n\\r\\n slide.$content.removeClass(\\\"fancybox-is-hidden\\\");\\r\\n\\r\\n // Force reflow\\r\\n forceRedraw($slide);\\r\\n\\r\\n if (slide.type !== \\\"image\\\") {\\r\\n slide.$content.hide().show(0);\\r\\n }\\r\\n\\r\\n $.fancybox.animate(\\r\\n $slide,\\r\\n \\\"fancybox-slide--current\\\",\\r\\n duration,\\r\\n function () {\\r\\n $slide.removeClass(effectClassName).css({\\r\\n transform: \\\"\\\",\\r\\n opacity: \\\"\\\"\\r\\n });\\r\\n\\r\\n if (slide.pos === self.currPos) {\\r\\n self.complete();\\r\\n }\\r\\n },\\r\\n true\\r\\n );\\r\\n },\\r\\n\\r\\n // Check if we can and have to zoom from thumbnail\\r\\n //================================================\\r\\n\\r\\n getThumbPos: function (slide) {\\r\\n var rez = false,\\r\\n $thumb = slide.$thumb,\\r\\n thumbPos,\\r\\n btw,\\r\\n brw,\\r\\n bbw,\\r\\n blw;\\r\\n\\r\\n if (!$thumb || !inViewport($thumb[0])) {\\r\\n return false;\\r\\n }\\r\\n\\r\\n thumbPos = $.fancybox.getTranslate($thumb);\\r\\n\\r\\n btw = parseFloat($thumb.css(\\\"border-top-width\\\") || 0);\\r\\n brw = parseFloat($thumb.css(\\\"border-right-width\\\") || 0);\\r\\n bbw = parseFloat($thumb.css(\\\"border-bottom-width\\\") || 0);\\r\\n blw = parseFloat($thumb.css(\\\"border-left-width\\\") || 0);\\r\\n\\r\\n rez = {\\r\\n top: thumbPos.top + btw,\\r\\n left: thumbPos.left + blw,\\r\\n width: thumbPos.width - brw - blw,\\r\\n height: thumbPos.height - btw - bbw,\\r\\n scaleX: 1,\\r\\n scaleY: 1\\r\\n };\\r\\n\\r\\n return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;\\r\\n },\\r\\n\\r\\n // Final adjustments after current gallery item is moved to position\\r\\n // and it`s content is loaded\\r\\n // ==================================================================\\r\\n\\r\\n complete: function () {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n slides = {},\\r\\n $el;\\r\\n\\r\\n if (self.isMoved() || !current.isLoaded) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if (!current.isComplete) {\\r\\n current.isComplete = true;\\r\\n\\r\\n current.$slide.siblings().trigger(\\\"onReset\\\");\\r\\n\\r\\n self.preload(\\\"inline\\\");\\r\\n\\r\\n // Trigger any CSS transiton inside the slide\\r\\n forceRedraw(current.$slide);\\r\\n\\r\\n current.$slide.addClass(\\\"fancybox-slide--complete\\\");\\r\\n\\r\\n // Remove unnecessary slides\\r\\n $.each(self.slides, function (key, slide) {\\r\\n if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {\\r\\n slides[slide.pos] = slide;\\r\\n } else if (slide) {\\r\\n $.fancybox.stop(slide.$slide);\\r\\n\\r\\n slide.$slide.off().remove();\\r\\n }\\r\\n });\\r\\n\\r\\n self.slides = slides;\\r\\n }\\r\\n\\r\\n self.isAnimating = false;\\r\\n\\r\\n self.updateCursor();\\r\\n\\r\\n self.trigger(\\\"afterShow\\\");\\r\\n\\r\\n // Autoplay first html5 video/audio\\r\\n if (!!current.opts.video.autoStart) {\\r\\n current.$slide\\r\\n .find(\\\"video,audio\\\")\\r\\n .filter(\\\":visible:first\\\")\\r\\n .trigger(\\\"play\\\")\\r\\n .one(\\\"ended\\\", function () {\\r\\n if (Document.exitFullscreen) {\\r\\n Document.exitFullscreen();\\r\\n } else if (this.webkitExitFullscreen) {\\r\\n this.webkitExitFullscreen();\\r\\n }\\r\\n\\r\\n self.next();\\r\\n });\\r\\n }\\r\\n\\r\\n // Try to focus on the first focusable element\\r\\n if (current.opts.autoFocus && current.contentType === \\\"html\\\") {\\r\\n // Look for the first input with autofocus attribute\\r\\n $el = current.$content.find(\\\"input[autofocus]:enabled:visible:first\\\");\\r\\n\\r\\n if ($el.length) {\\r\\n $el.trigger(\\\"focus\\\");\\r\\n } else {\\r\\n self.focus(null, true);\\r\\n }\\r\\n }\\r\\n\\r\\n // Avoid jumping\\r\\n current.$slide.scrollTop(0).scrollLeft(0);\\r\\n },\\r\\n\\r\\n // Preload next and previous slides\\r\\n // ================================\\r\\n\\r\\n preload: function (type) {\\r\\n var self = this,\\r\\n prev,\\r\\n next;\\r\\n\\r\\n if (self.group.length < 2) {\\r\\n return;\\r\\n }\\r\\n\\r\\n next = self.slides[self.currPos + 1];\\r\\n prev = self.slides[self.currPos - 1];\\r\\n\\r\\n if (prev && prev.type === type) {\\r\\n self.loadSlide(prev);\\r\\n }\\r\\n\\r\\n if (next && next.type === type) {\\r\\n self.loadSlide(next);\\r\\n }\\r\\n },\\r\\n\\r\\n // Try to find and focus on the first focusable element\\r\\n // ====================================================\\r\\n\\r\\n focus: function (e, firstRun) {\\r\\n var self = this,\\r\\n focusableStr = [\\r\\n \\\"a[href]\\\",\\r\\n \\\"area[href]\\\",\\r\\n 'input:not([disabled]):not([type=\\\"hidden\\\"]):not([aria-hidden])',\\r\\n \\\"select:not([disabled]):not([aria-hidden])\\\",\\r\\n \\\"textarea:not([disabled]):not([aria-hidden])\\\",\\r\\n \\\"button:not([disabled]):not([aria-hidden])\\\",\\r\\n \\\"iframe\\\",\\r\\n \\\"object\\\",\\r\\n \\\"embed\\\",\\r\\n \\\"video\\\",\\r\\n \\\"audio\\\",\\r\\n \\\"[contenteditable]\\\",\\r\\n '[tabindex]:not([tabindex^=\\\"-\\\"])'\\r\\n ].join(\\\",\\\"),\\r\\n focusableItems,\\r\\n focusedItemIndex;\\r\\n\\r\\n if (self.isClosing) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if (e || !self.current || !self.current.isComplete) {\\r\\n // Focus on any element inside fancybox\\r\\n focusableItems = self.$refs.container.find(\\\"*:visible\\\");\\r\\n } else {\\r\\n // Focus inside current slide\\r\\n focusableItems = self.current.$slide.find(\\\"*:visible\\\" + (firstRun ? \\\":not(.fancybox-close-small)\\\" : \\\"\\\"));\\r\\n }\\r\\n\\r\\n focusableItems = focusableItems.filter(focusableStr).filter(function () {\\r\\n return $(this).css(\\\"visibility\\\") !== \\\"hidden\\\" && !$(this).hasClass(\\\"disabled\\\");\\r\\n });\\r\\n\\r\\n if (focusableItems.length) {\\r\\n focusedItemIndex = focusableItems.index(document.activeElement);\\r\\n\\r\\n if (e && e.shiftKey) {\\r\\n // Back tab\\r\\n if (focusedItemIndex < 0 || focusedItemIndex == 0) {\\r\\n e.preventDefault();\\r\\n\\r\\n focusableItems.eq(focusableItems.length - 1).trigger(\\\"focus\\\");\\r\\n }\\r\\n } else {\\r\\n // Outside or Forward tab\\r\\n if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {\\r\\n if (e) {\\r\\n e.preventDefault();\\r\\n }\\r\\n\\r\\n focusableItems.eq(0).trigger(\\\"focus\\\");\\r\\n }\\r\\n }\\r\\n } else {\\r\\n self.$refs.container.trigger(\\\"focus\\\");\\r\\n }\\r\\n },\\r\\n\\r\\n // Activates current instance - brings container to the front and enables keyboard,\\r\\n // notifies other instances about deactivating\\r\\n // =================================================================================\\r\\n\\r\\n activate: function () {\\r\\n var self = this;\\r\\n\\r\\n // Deactivate all instances\\r\\n $(\\\".fancybox-container\\\").each(function () {\\r\\n var instance = $(this).data(\\\"FancyBox\\\");\\r\\n\\r\\n // Skip self and closing instances\\r\\n if (instance && instance.id !== self.id && !instance.isClosing) {\\r\\n instance.trigger(\\\"onDeactivate\\\");\\r\\n\\r\\n instance.removeEvents();\\r\\n\\r\\n instance.isVisible = false;\\r\\n }\\r\\n });\\r\\n\\r\\n self.isVisible = true;\\r\\n\\r\\n if (self.current || self.isIdle) {\\r\\n self.update();\\r\\n\\r\\n self.updateControls();\\r\\n }\\r\\n\\r\\n self.trigger(\\\"onActivate\\\");\\r\\n\\r\\n self.addEvents();\\r\\n },\\r\\n\\r\\n // Start closing procedure\\r\\n // This will start \\\"zoom-out\\\" animation if needed and clean everything up afterwards\\r\\n // =================================================================================\\r\\n\\r\\n close: function (e, d) {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n effect,\\r\\n duration,\\r\\n $content,\\r\\n domRect,\\r\\n opacity,\\r\\n start,\\r\\n end;\\r\\n\\r\\n var done = function () {\\r\\n self.cleanUp(e);\\r\\n };\\r\\n\\r\\n if (self.isClosing) {\\r\\n return false;\\r\\n }\\r\\n\\r\\n self.isClosing = true;\\r\\n\\r\\n // If beforeClose callback prevents closing, make sure content is centered\\r\\n if (self.trigger(\\\"beforeClose\\\", e) === false) {\\r\\n self.isClosing = false;\\r\\n\\r\\n requestAFrame(function () {\\r\\n self.update();\\r\\n });\\r\\n\\r\\n return false;\\r\\n }\\r\\n\\r\\n // Remove all events\\r\\n // If there are multiple instances, they will be set again by \\\"activate\\\" method\\r\\n self.removeEvents();\\r\\n\\r\\n $content = current.$content;\\r\\n effect = current.opts.animationEffect;\\r\\n duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;\\r\\n\\r\\n current.$slide.removeClass(\\\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\\\");\\r\\n\\r\\n if (e !== true) {\\r\\n $.fancybox.stop(current.$slide);\\r\\n } else {\\r\\n effect = false;\\r\\n }\\r\\n\\r\\n // Remove other slides\\r\\n current.$slide\\r\\n .siblings()\\r\\n .trigger(\\\"onReset\\\")\\r\\n .remove();\\r\\n\\r\\n // Trigger animations\\r\\n if (duration) {\\r\\n self.$refs.container\\r\\n .removeClass(\\\"fancybox-is-open\\\")\\r\\n .addClass(\\\"fancybox-is-closing\\\")\\r\\n .css(\\\"transition-duration\\\", duration + \\\"ms\\\");\\r\\n }\\r\\n\\r\\n // Clean up\\r\\n self.hideLoading(current);\\r\\n\\r\\n self.hideControls(true);\\r\\n\\r\\n self.updateCursor();\\r\\n\\r\\n // Check if possible to zoom-out\\r\\n if (\\r\\n effect === \\\"zoom\\\" &&\\r\\n !($content && duration && current.type === \\\"image\\\" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))\\r\\n ) {\\r\\n effect = \\\"fade\\\";\\r\\n }\\r\\n\\r\\n if (effect === \\\"zoom\\\") {\\r\\n $.fancybox.stop($content);\\r\\n\\r\\n domRect = $.fancybox.getTranslate($content);\\r\\n\\r\\n start = {\\r\\n top: domRect.top,\\r\\n left: domRect.left,\\r\\n scaleX: domRect.width / end.width,\\r\\n scaleY: domRect.height / end.height,\\r\\n width: end.width,\\r\\n height: end.height\\r\\n };\\r\\n\\r\\n // Check if we need to animate opacity\\r\\n opacity = current.opts.zoomOpacity;\\r\\n\\r\\n if (opacity == \\\"auto\\\") {\\r\\n opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;\\r\\n }\\r\\n\\r\\n if (opacity) {\\r\\n end.opacity = 0;\\r\\n }\\r\\n\\r\\n $.fancybox.setTranslate($content, start);\\r\\n\\r\\n forceRedraw($content);\\r\\n\\r\\n $.fancybox.animate($content, end, duration, done);\\r\\n\\r\\n return true;\\r\\n }\\r\\n\\r\\n if (effect && duration) {\\r\\n $.fancybox.animate(\\r\\n current.$slide.addClass(\\\"fancybox-slide--previous\\\").removeClass(\\\"fancybox-slide--current\\\"),\\r\\n \\\"fancybox-animated fancybox-fx-\\\" + effect,\\r\\n duration,\\r\\n done\\r\\n );\\r\\n } else {\\r\\n // If skip animation\\r\\n if (e === true) {\\r\\n setTimeout(done, duration);\\r\\n } else {\\r\\n done();\\r\\n }\\r\\n }\\r\\n\\r\\n return true;\\r\\n },\\r\\n\\r\\n // Final adjustments after removing the instance\\r\\n // =============================================\\r\\n\\r\\n cleanUp: function (e) {\\r\\n var self = this,\\r\\n instance,\\r\\n $focus = self.current.opts.$orig,\\r\\n x,\\r\\n y;\\r\\n\\r\\n self.current.$slide.trigger(\\\"onReset\\\");\\r\\n\\r\\n self.$refs.container.empty().remove();\\r\\n\\r\\n self.trigger(\\\"afterClose\\\", e);\\r\\n\\r\\n // Place back focus\\r\\n if (!!self.current.opts.backFocus) {\\r\\n if (!$focus || !$focus.length || !$focus.is(\\\":visible\\\")) {\\r\\n $focus = self.$trigger;\\r\\n }\\r\\n\\r\\n if ($focus && $focus.length) {\\r\\n x = window.scrollX;\\r\\n y = window.scrollY;\\r\\n\\r\\n $focus.trigger(\\\"focus\\\");\\r\\n\\r\\n $(\\\"html, body\\\")\\r\\n .scrollTop(y)\\r\\n .scrollLeft(x);\\r\\n }\\r\\n }\\r\\n\\r\\n self.current = null;\\r\\n\\r\\n // Check if there are other instances\\r\\n instance = $.fancybox.getInstance();\\r\\n\\r\\n if (instance) {\\r\\n instance.activate();\\r\\n } else {\\r\\n $(\\\"body\\\").removeClass(\\\"fancybox-active compensate-for-scrollbar\\\");\\r\\n\\r\\n $(\\\"#fancybox-style-noscroll\\\").remove();\\r\\n }\\r\\n },\\r\\n\\r\\n // Call callback and trigger an event\\r\\n // ==================================\\r\\n\\r\\n trigger: function (name, slide) {\\r\\n var args = Array.prototype.slice.call(arguments, 1),\\r\\n self = this,\\r\\n obj = slide && slide.opts ? slide : self.current,\\r\\n rez;\\r\\n\\r\\n if (obj) {\\r\\n args.unshift(obj);\\r\\n } else {\\r\\n obj = self;\\r\\n }\\r\\n\\r\\n args.unshift(self);\\r\\n\\r\\n if ($.isFunction(obj.opts[name])) {\\r\\n rez = obj.opts[name].apply(obj, args);\\r\\n }\\r\\n\\r\\n if (rez === false) {\\r\\n return rez;\\r\\n }\\r\\n\\r\\n if (name === \\\"afterClose\\\" || !self.$refs) {\\r\\n $D.trigger(name + \\\".fb\\\", args);\\r\\n } else {\\r\\n self.$refs.container.trigger(name + \\\".fb\\\", args);\\r\\n }\\r\\n },\\r\\n\\r\\n // Update infobar values, navigation button states and reveal caption\\r\\n // ==================================================================\\r\\n\\r\\n updateControls: function () {\\r\\n var self = this,\\r\\n current = self.current,\\r\\n index = current.index,\\r\\n $container = self.$refs.container,\\r\\n $caption = self.$refs.caption,\\r\\n caption = current.opts.caption;\\r\\n\\r\\n // Recalculate content dimensions\\r\\n current.$slide.trigger(\\\"refresh\\\");\\r\\n\\r\\n // Set caption\\r\\n if (caption && caption.length) {\\r\\n self.$caption = $caption;\\r\\n\\r\\n $caption\\r\\n .children()\\r\\n .eq(0)\\r\\n .html(caption);\\r\\n } else {\\r\\n self.$caption = null;\\r\\n }\\r\\n\\r\\n if (!self.hasHiddenControls && !self.isIdle) {\\r\\n self.showControls();\\r\\n }\\r\\n\\r\\n // Update info and navigation elements\\r\\n $container.find(\\\"[data-fancybox-count]\\\").html(self.group.length);\\r\\n $container.find(\\\"[data-fancybox-index]\\\").html(index + 1);\\r\\n\\r\\n $container.find(\\\"[data-fancybox-prev]\\\").prop(\\\"disabled\\\", !current.opts.loop && index <= 0);\\r\\n $container.find(\\\"[data-fancybox-next]\\\").prop(\\\"disabled\\\", !current.opts.loop && index >= self.group.length - 1);\\r\\n\\r\\n if (current.type === \\\"image\\\") {\\r\\n // Re-enable buttons; update download button source\\r\\n $container\\r\\n .find(\\\"[data-fancybox-zoom]\\\")\\r\\n .show()\\r\\n .end()\\r\\n .find(\\\"[data-fancybox-download]\\\")\\r\\n .attr(\\\"href\\\", current.opts.image.src || current.src)\\r\\n .show();\\r\\n } else if (current.opts.toolbar) {\\r\\n $container.find(\\\"[data-fancybox-download],[data-fancybox-zoom]\\\").hide();\\r\\n }\\r\\n\\r\\n // Make sure focus is not on disabled button/element\\r\\n if ($(document.activeElement).is(\\\":hidden,[disabled]\\\")) {\\r\\n self.$refs.container.trigger(\\\"focus\\\");\\r\\n }\\r\\n },\\r\\n\\r\\n // Hide toolbar and caption\\r\\n // ========================\\r\\n\\r\\n hideControls: function (andCaption) {\\r\\n var self = this,\\r\\n arr = [\\\"infobar\\\", \\\"toolbar\\\", \\\"nav\\\"];\\r\\n\\r\\n if (andCaption || !self.current.opts.preventCaptionOverlap) {\\r\\n arr.push(\\\"caption\\\");\\r\\n }\\r\\n\\r\\n this.$refs.container.removeClass(\\r\\n arr\\r\\n .map(function (i) {\\r\\n return \\\"fancybox-show-\\\" + i;\\r\\n })\\r\\n .join(\\\" \\\")\\r\\n );\\r\\n\\r\\n this.hasHiddenControls = true;\\r\\n },\\r\\n\\r\\n showControls: function () {\\r\\n var self = this,\\r\\n opts = self.current ? self.current.opts : self.opts,\\r\\n $container = self.$refs.container;\\r\\n\\r\\n self.hasHiddenControls = false;\\r\\n self.idleSecondsCounter = 0;\\r\\n\\r\\n $container\\r\\n .toggleClass(\\\"fancybox-show-toolbar\\\", !!(opts.toolbar && opts.buttons))\\r\\n .toggleClass(\\\"fancybox-show-infobar\\\", !!(opts.infobar && self.group.length > 1))\\r\\n .toggleClass(\\\"fancybox-show-caption\\\", !!self.$caption)\\r\\n .toggleClass(\\\"fancybox-show-nav\\\", !!(opts.arrows && self.group.length > 1))\\r\\n .toggleClass(\\\"fancybox-is-modal\\\", !!opts.modal);\\r\\n },\\r\\n\\r\\n // Toggle toolbar and caption\\r\\n // ==========================\\r\\n\\r\\n toggleControls: function () {\\r\\n if (this.hasHiddenControls) {\\r\\n this.showControls();\\r\\n } else {\\r\\n this.hideControls();\\r\\n }\\r\\n }\\r\\n });\\r\\n\\r\\n $.fancybox = {\\r\\n version: \\\"3.5.7\\\",\\r\\n defaults: defaults,\\r\\n\\r\\n // Get current instance and execute a command.\\r\\n //\\r\\n // Examples of usage:\\r\\n //\\r\\n // $instance = $.fancybox.getInstance();\\r\\n // $.fancybox.getInstance().jumpTo( 1 );\\r\\n // $.fancybox.getInstance( 'jumpTo', 1 );\\r\\n // $.fancybox.getInstance( function() {\\r\\n // console.info( this.currIndex );\\r\\n // });\\r\\n // ======================================================\\r\\n\\r\\n getInstance: function (command) {\\r\\n var instance = $('.fancybox-container:not(\\\".fancybox-is-closing\\\"):last').data(\\\"FancyBox\\\"),\\r\\n args = Array.prototype.slice.call(arguments, 1);\\r\\n\\r\\n if (instance instanceof FancyBox) {\\r\\n if ($.type(command) === \\\"string\\\") {\\r\\n instance[command].apply(instance, args);\\r\\n } else if ($.type(command) === \\\"function\\\") {\\r\\n command.apply(instance, args);\\r\\n }\\r\\n\\r\\n return instance;\\r\\n }\\r\\n\\r\\n return false;\\r\\n },\\r\\n\\r\\n // Create new instance\\r\\n // ===================\\r\\n\\r\\n open: function (items, opts, index) {\\r\\n return new FancyBox(items, opts, index);\\r\\n },\\r\\n\\r\\n // Close current or all instances\\r\\n // ==============================\\r\\n\\r\\n close: function (all) {\\r\\n var instance = this.getInstance();\\r\\n\\r\\n if (instance) {\\r\\n instance.close();\\r\\n\\r\\n // Try to find and close next instance\\r\\n if (all === true) {\\r\\n this.close(all);\\r\\n }\\r\\n }\\r\\n },\\r\\n\\r\\n // Close all instances and unbind all events\\r\\n // =========================================\\r\\n\\r\\n destroy: function () {\\r\\n this.close(true);\\r\\n\\r\\n $D.add(\\\"body\\\").off(\\\"click.fb-start\\\", \\\"**\\\");\\r\\n },\\r\\n\\r\\n // Try to detect mobile devices\\r\\n // ============================\\r\\n\\r\\n isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\\r\\n\\r\\n // Detect if 'translate3d' support is available\\r\\n // ============================================\\r\\n\\r\\n use3d: (function () {\\r\\n var div = document.createElement(\\\"div\\\");\\r\\n\\r\\n return (\\r\\n window.getComputedStyle &&\\r\\n window.getComputedStyle(div) &&\\r\\n window.getComputedStyle(div).getPropertyValue(\\\"transform\\\") &&\\r\\n !(document.documentMode && document.documentMode < 11)\\r\\n );\\r\\n })(),\\r\\n\\r\\n // Helper function to get current visual state of an element\\r\\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\\r\\n // =====================================================================\\r\\n\\r\\n getTranslate: function ($el) {\\r\\n var domRect;\\r\\n\\r\\n if (!$el || !$el.length) {\\r\\n return false;\\r\\n }\\r\\n\\r\\n domRect = $el[0].getBoundingClientRect();\\r\\n\\r\\n return {\\r\\n top: domRect.top || 0,\\r\\n left: domRect.left || 0,\\r\\n width: domRect.width,\\r\\n height: domRect.height,\\r\\n opacity: parseFloat($el.css(\\\"opacity\\\"))\\r\\n };\\r\\n },\\r\\n\\r\\n // Shortcut for setting \\\"translate3d\\\" properties for element\\r\\n // Can set be used to set opacity, too\\r\\n // ========================================================\\r\\n\\r\\n setTranslate: function ($el, props) {\\r\\n var str = \\\"\\\",\\r\\n css = {};\\r\\n\\r\\n if (!$el || !props) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if (props.left !== undefined || props.top !== undefined) {\\r\\n str =\\r\\n (props.left === undefined ? $el.position().left : props.left) +\\r\\n \\\"px, \\\" +\\r\\n (props.top === undefined ? $el.position().top : props.top) +\\r\\n \\\"px\\\";\\r\\n\\r\\n if (this.use3d) {\\r\\n str = \\\"translate3d(\\\" + str + \\\", 0px)\\\";\\r\\n } else {\\r\\n str = \\\"translate(\\\" + str + \\\")\\\";\\r\\n }\\r\\n }\\r\\n\\r\\n if (props.scaleX !== undefined && props.scaleY !== undefined) {\\r\\n str += \\\" scale(\\\" + props.scaleX + \\\", \\\" + props.scaleY + \\\")\\\";\\r\\n } else if (props.scaleX !== undefined) {\\r\\n str += \\\" scaleX(\\\" + props.scaleX + \\\")\\\";\\r\\n }\\r\\n\\r\\n if (str.length) {\\r\\n css.transform = str;\\r\\n }\\r\\n\\r\\n if (props.opacity !== undefined) {\\r\\n css.opacity = props.opacity;\\r\\n }\\r\\n\\r\\n if (props.width !== undefined) {\\r\\n css.width = props.width;\\r\\n }\\r\\n\\r\\n if (props.height !== undefined) {\\r\\n css.height = props.height;\\r\\n }\\r\\n\\r\\n return $el.css(css);\\r\\n },\\r\\n\\r\\n // Simple CSS transition handler\\r\\n // =============================\\r\\n\\r\\n animate: function ($el, to, duration, callback, leaveAnimationName) {\\r\\n var self = this,\\r\\n from;\\r\\n\\r\\n if ($.isFunction(duration)) {\\r\\n callback = duration;\\r\\n duration = null;\\r\\n }\\r\\n\\r\\n self.stop($el);\\r\\n\\r\\n from = self.getTranslate($el);\\r\\n\\r\\n $el.on(transitionEnd, function (e) {\\r\\n // Skip events from child elements and z-index change\\r\\n if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == \\\"z-index\\\")) {\\r\\n return;\\r\\n }\\r\\n\\r\\n self.stop($el);\\r\\n\\r\\n if ($.isNumeric(duration)) {\\r\\n $el.css(\\\"transition-duration\\\", \\\"\\\");\\r\\n }\\r\\n\\r\\n if ($.isPlainObject(to)) {\\r\\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\\r\\n self.setTranslate($el, {\\r\\n top: to.top,\\r\\n left: to.left,\\r\\n width: from.width * to.scaleX,\\r\\n height: from.height * to.scaleY,\\r\\n scaleX: 1,\\r\\n scaleY: 1\\r\\n });\\r\\n }\\r\\n } else if (leaveAnimationName !== true) {\\r\\n $el.removeClass(to);\\r\\n }\\r\\n\\r\\n if ($.isFunction(callback)) {\\r\\n callback(e);\\r\\n }\\r\\n });\\r\\n\\r\\n if ($.isNumeric(duration)) {\\r\\n $el.css(\\\"transition-duration\\\", duration + \\\"ms\\\");\\r\\n }\\r\\n\\r\\n // Start animation by changing CSS properties or class name\\r\\n if ($.isPlainObject(to)) {\\r\\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\\r\\n delete to.width;\\r\\n delete to.height;\\r\\n\\r\\n if ($el.parent().hasClass(\\\"fancybox-slide--image\\\")) {\\r\\n $el.parent().addClass(\\\"fancybox-is-scaling\\\");\\r\\n }\\r\\n }\\r\\n\\r\\n $.fancybox.setTranslate($el, to);\\r\\n } else {\\r\\n $el.addClass(to);\\r\\n }\\r\\n\\r\\n // Make sure that `transitionend` callback gets fired\\r\\n $el.data(\\r\\n \\\"timer\\\",\\r\\n setTimeout(function () {\\r\\n $el.trigger(transitionEnd);\\r\\n }, duration + 33)\\r\\n );\\r\\n },\\r\\n\\r\\n stop: function ($el, callCallback) {\\r\\n if ($el && $el.length) {\\r\\n clearTimeout($el.data(\\\"timer\\\"));\\r\\n\\r\\n if (callCallback) {\\r\\n $el.trigger(transitionEnd);\\r\\n }\\r\\n\\r\\n $el.off(transitionEnd).css(\\\"transition-duration\\\", \\\"\\\");\\r\\n\\r\\n $el.parent().removeClass(\\\"fancybox-is-scaling\\\");\\r\\n }\\r\\n }\\r\\n };\\r\\n\\r\\n // Default click handler for \\\"fancyboxed\\\" links\\r\\n // ============================================\\r\\n\\r\\n function _run(e, opts) {\\r\\n var items = [],\\r\\n index = 0,\\r\\n $target,\\r\\n value,\\r\\n instance;\\r\\n\\r\\n // Avoid opening multiple times\\r\\n if (e && e.isDefaultPrevented()) {\\r\\n return;\\r\\n }\\r\\n\\r\\n e.preventDefault();\\r\\n\\r\\n opts = opts || {};\\r\\n\\r\\n if (e && e.data) {\\r\\n opts = mergeOpts(e.data.options, opts);\\r\\n }\\r\\n\\r\\n $target = opts.$target || $(e.currentTarget).trigger(\\\"blur\\\");\\r\\n instance = $.fancybox.getInstance();\\r\\n\\r\\n if (instance && instance.$trigger && instance.$trigger.is($target)) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if (opts.selector) {\\r\\n items = $(opts.selector);\\r\\n } else {\\r\\n // Get all related items and find index for clicked one\\r\\n value = $target.attr(\\\"data-fancybox\\\") || \\\"\\\";\\r\\n\\r\\n if (value) {\\r\\n items = e.data ? e.data.items : [];\\r\\n items = items.length ? items.filter('[data-fancybox=\\\"' + value + '\\\"]') : $('[data-fancybox=\\\"' + value + '\\\"]');\\r\\n } else {\\r\\n items = [$target];\\r\\n }\\r\\n }\\r\\n\\r\\n index = $(items).index($target);\\r\\n\\r\\n // Sometimes current item can not be found\\r\\n if (index < 0) {\\r\\n index = 0;\\r\\n }\\r\\n\\r\\n instance = $.fancybox.open(items, opts, index);\\r\\n\\r\\n // Save last active element\\r\\n instance.$trigger = $target;\\r\\n }\\r\\n\\r\\n // Create a jQuery plugin\\r\\n // ======================\\r\\n\\r\\n $.fn.fancybox = function (options) {\\r\\n var selector;\\r\\n\\r\\n options = options || {};\\r\\n selector = options.selector || false;\\r\\n\\r\\n if (selector) {\\r\\n // Use body element instead of document so it executes first\\r\\n $(\\\"body\\\")\\r\\n .off(\\\"click.fb-start\\\", selector)\\r\\n .on(\\\"click.fb-start\\\", selector, {\\r\\n options: options\\r\\n }, _run);\\r\\n } else {\\r\\n this.off(\\\"click.fb-start\\\").on(\\r\\n \\\"click.fb-start\\\", {\\r\\n items: this,\\r\\n options: options\\r\\n },\\r\\n _run\\r\\n );\\r\\n }\\r\\n\\r\\n return this;\\r\\n };\\r\\n\\r\\n // Self initializing plugin for all elements having `data-fancybox` attribute\\r\\n // ==========================================================================\\r\\n\\r\\n $D.on(\\\"click.fb-start\\\", \\\"[data-fancybox]\\\", _run);\\r\\n\\r\\n // Enable \\\"trigger elements\\\"\\r\\n // =========================\\r\\n\\r\\n $D.on(\\\"click.fb-start\\\", \\\"[data-fancybox-trigger]\\\", function (e) {\\r\\n $('[data-fancybox=\\\"' + $(this).attr(\\\"data-fancybox-trigger\\\") + '\\\"]')\\r\\n .eq($(this).attr(\\\"data-fancybox-index\\\") || 0)\\r\\n .trigger(\\\"click.fb-start\\\", {\\r\\n $trigger: $(this)\\r\\n });\\r\\n });\\r\\n\\r\\n // Track focus event for better accessibility styling\\r\\n // ==================================================\\r\\n (function () {\\r\\n var buttonStr = \\\".fancybox-button\\\",\\r\\n focusStr = \\\"fancybox-focus\\\",\\r\\n $pressed = null;\\r\\n\\r\\n $D.on(\\\"mousedown mouseup focus blur\\\", buttonStr, function (e) {\\r\\n switch (e.type) {\\r\\n case \\\"mousedown\\\":\\r\\n $pressed = $(this);\\r\\n break;\\r\\n case \\\"mouseup\\\":\\r\\n $pressed = null;\\r\\n break;\\r\\n case \\\"focusin\\\":\\r\\n $(buttonStr).removeClass(focusStr);\\r\\n\\r\\n if (!$(this).is($pressed) && !$(this).is(\\\"[disabled]\\\")) {\\r\\n $(this).addClass(focusStr);\\r\\n }\\r\\n break;\\r\\n case \\\"focusout\\\":\\r\\n $(buttonStr).removeClass(focusStr);\\r\\n break;\\r\\n }\\r\\n });\\r\\n })();\\r\\n})(window, document, jQuery);\\n// ==========================================================================\\r\\n//\\r\\n// Media\\r\\n// Adds additional media type support\\r\\n//\\r\\n// ==========================================================================\\r\\n(function ($) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n // Object containing properties for each media type\\r\\n var defaults = {\\r\\n youtube: {\\r\\n matcher: /(youtube\\\\.com|youtu\\\\.be|youtube\\\\-nocookie\\\\.com)\\\\/(watch\\\\?(.*&)?v=|v\\\\/|u\\\\/|embed\\\\/?)?(videoseries\\\\?list=(.*)|[\\\\w-]{11}|\\\\?listType=(.*)&list=(.*))(.*)/i,\\r\\n params: {\\r\\n autoplay: 1,\\r\\n autohide: 1,\\r\\n fs: 1,\\r\\n rel: 0,\\r\\n hd: 1,\\r\\n wmode: \\\"transparent\\\",\\r\\n enablejsapi: 1,\\r\\n html5: 1\\r\\n },\\r\\n paramPlace: 8,\\r\\n type: \\\"iframe\\\",\\r\\n url: \\\"https://www.youtube-nocookie.com/embed/$4\\\",\\r\\n thumb: \\\"https://img.youtube.com/vi/$4/hqdefault.jpg\\\"\\r\\n },\\r\\n\\r\\n vimeo: {\\r\\n matcher: /^.+vimeo.com\\\\/(.*\\\\/)?([\\\\d]+)(.*)?/,\\r\\n params: {\\r\\n autoplay: 1,\\r\\n hd: 1,\\r\\n show_title: 1,\\r\\n show_byline: 1,\\r\\n show_portrait: 0,\\r\\n fullscreen: 1\\r\\n },\\r\\n paramPlace: 3,\\r\\n type: \\\"iframe\\\",\\r\\n url: \\\"//player.vimeo.com/video/$2\\\"\\r\\n },\\r\\n\\r\\n instagram: {\\r\\n matcher: /(instagr\\\\.am|instagram\\\\.com)\\\\/p\\\\/([a-zA-Z0-9_\\\\-]+)\\\\/?/i,\\r\\n type: \\\"image\\\",\\r\\n url: \\\"//$1/p/$2/media/?size=l\\\"\\r\\n },\\r\\n\\r\\n // Examples:\\r\\n // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\\r\\n // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\\r\\n // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en\\r\\n // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\\r\\n gmap_place: {\\r\\n matcher: /(maps\\\\.)?google\\\\.([a-z]{2,3}(\\\\.[a-z]{2})?)\\\\/(((maps\\\\/(place\\\\/(.*)\\\\/)?\\\\@(.*),(\\\\d+.?\\\\d+?)z))|(\\\\?ll=))(.*)?/i,\\r\\n type: \\\"iframe\\\",\\r\\n url: function (rez) {\\r\\n return (\\r\\n \\\"//maps.google.\\\" +\\r\\n rez[2] +\\r\\n \\\"/?ll=\\\" +\\r\\n (rez[9] ? rez[9] + \\\"&z=\\\" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\\\\//, \\\"&\\\") : \\\"\\\") : rez[12] + \\\"\\\").replace(/\\\\?/, \\\"&\\\") +\\r\\n \\\"&output=\\\" +\\r\\n (rez[12] && rez[12].indexOf(\\\"layer=c\\\") > 0 ? \\\"svembed\\\" : \\\"embed\\\")\\r\\n );\\r\\n }\\r\\n },\\r\\n\\r\\n // Examples:\\r\\n // https://www.google.com/maps/search/Empire+State+Building/\\r\\n // https://www.google.com/maps/search/?api=1&query=centurylink+field\\r\\n // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\\r\\n gmap_search: {\\r\\n matcher: /(maps\\\\.)?google\\\\.([a-z]{2,3}(\\\\.[a-z]{2})?)\\\\/(maps\\\\/search\\\\/)(.*)/i,\\r\\n type: \\\"iframe\\\",\\r\\n url: function (rez) {\\r\\n return \\\"//maps.google.\\\" + rez[2] + \\\"/maps?q=\\\" + rez[5].replace(\\\"query=\\\", \\\"q=\\\").replace(\\\"api=1\\\", \\\"\\\") + \\\"&output=embed\\\";\\r\\n }\\r\\n }\\r\\n };\\r\\n\\r\\n // Formats matching url to final form\\r\\n var format = function (url, rez, params) {\\r\\n if (!url) {\\r\\n return;\\r\\n }\\r\\n\\r\\n params = params || \\\"\\\";\\r\\n\\r\\n if ($.type(params) === \\\"object\\\") {\\r\\n params = $.param(params, true);\\r\\n }\\r\\n\\r\\n $.each(rez, function (key, value) {\\r\\n url = url.replace(\\\"$\\\" + key, value || \\\"\\\");\\r\\n });\\r\\n\\r\\n if (params.length) {\\r\\n url += (url.indexOf(\\\"?\\\") > 0 ? \\\"&\\\" : \\\"?\\\") + params;\\r\\n }\\r\\n\\r\\n return url;\\r\\n };\\r\\n\\r\\n $(document).on(\\\"objectNeedsType.fb\\\", function (e, instance, item) {\\r\\n var url = item.src || \\\"\\\",\\r\\n type = false,\\r\\n media,\\r\\n thumb,\\r\\n rez,\\r\\n params,\\r\\n urlParams,\\r\\n paramObj,\\r\\n provider;\\r\\n\\r\\n media = $.extend(true, {}, defaults, item.opts.media);\\r\\n\\r\\n // Look for any matching media type\\r\\n $.each(media, function (providerName, providerOpts) {\\r\\n rez = url.match(providerOpts.matcher);\\r\\n\\r\\n if (!rez) {\\r\\n return;\\r\\n }\\r\\n\\r\\n type = providerOpts.type;\\r\\n provider = providerName;\\r\\n paramObj = {};\\r\\n\\r\\n if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {\\r\\n urlParams = rez[providerOpts.paramPlace];\\r\\n\\r\\n if (urlParams[0] == \\\"?\\\") {\\r\\n urlParams = urlParams.substring(1);\\r\\n }\\r\\n\\r\\n urlParams = urlParams.split(\\\"&\\\");\\r\\n\\r\\n for (var m = 0; m < urlParams.length; ++m) {\\r\\n var p = urlParams[m].split(\\\"=\\\", 2);\\r\\n\\r\\n if (p.length == 2) {\\r\\n paramObj[p[0]] = decodeURIComponent(p[1].replace(/\\\\+/g, \\\" \\\"));\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);\\r\\n\\r\\n url =\\r\\n $.type(providerOpts.url) === \\\"function\\\" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);\\r\\n\\r\\n thumb =\\r\\n $.type(providerOpts.thumb) === \\\"function\\\" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);\\r\\n\\r\\n if (providerName === \\\"youtube\\\") {\\r\\n url = url.replace(/&t=((\\\\d+)m)?(\\\\d+)s/, function (match, p1, m, s) {\\r\\n return \\\"&start=\\\" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));\\r\\n });\\r\\n } else if (providerName === \\\"vimeo\\\") {\\r\\n url = url.replace(\\\"&%23\\\", \\\"#\\\");\\r\\n }\\r\\n\\r\\n return false;\\r\\n });\\r\\n\\r\\n // If it is found, then change content type and update the url\\r\\n\\r\\n if (type) {\\r\\n if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {\\r\\n item.opts.thumb = thumb;\\r\\n }\\r\\n\\r\\n if (type === \\\"iframe\\\") {\\r\\n item.opts = $.extend(true, item.opts, {\\r\\n iframe: {\\r\\n preload: false,\\r\\n attr: {\\r\\n scrolling: \\\"no\\\"\\r\\n }\\r\\n }\\r\\n });\\r\\n }\\r\\n\\r\\n $.extend(item, {\\r\\n type: type,\\r\\n src: url,\\r\\n origSrc: item.src,\\r\\n contentSource: provider,\\r\\n contentType: type === \\\"image\\\" ? \\\"image\\\" : provider == \\\"gmap_place\\\" || provider == \\\"gmap_search\\\" ? \\\"map\\\" : \\\"video\\\"\\r\\n });\\r\\n } else if (url) {\\r\\n item.type = item.opts.defaultType;\\r\\n }\\r\\n });\\r\\n\\r\\n // Load YouTube/Video API on request to detect when video finished playing\\r\\n var VideoAPILoader = {\\r\\n youtube: {\\r\\n src: \\\"https://www.youtube.com/iframe_api\\\",\\r\\n class: \\\"YT\\\",\\r\\n loading: false,\\r\\n loaded: false\\r\\n },\\r\\n\\r\\n vimeo: {\\r\\n src: \\\"https://player.vimeo.com/api/player.js\\\",\\r\\n class: \\\"Vimeo\\\",\\r\\n loading: false,\\r\\n loaded: false\\r\\n },\\r\\n\\r\\n load: function (vendor) {\\r\\n var _this = this,\\r\\n script;\\r\\n\\r\\n if (this[vendor].loaded) {\\r\\n setTimeout(function () {\\r\\n _this.done(vendor);\\r\\n });\\r\\n return;\\r\\n }\\r\\n\\r\\n if (this[vendor].loading) {\\r\\n return;\\r\\n }\\r\\n\\r\\n this[vendor].loading = true;\\r\\n\\r\\n script = document.createElement(\\\"script\\\");\\r\\n script.type = \\\"text/javascript\\\";\\r\\n script.src = this[vendor].src;\\r\\n\\r\\n if (vendor === \\\"youtube\\\") {\\r\\n window.onYouTubeIframeAPIReady = function () {\\r\\n _this[vendor].loaded = true;\\r\\n _this.done(vendor);\\r\\n };\\r\\n } else {\\r\\n script.onload = function () {\\r\\n _this[vendor].loaded = true;\\r\\n _this.done(vendor);\\r\\n };\\r\\n }\\r\\n\\r\\n document.body.appendChild(script);\\r\\n },\\r\\n done: function (vendor) {\\r\\n var instance, $el, player;\\r\\n\\r\\n if (vendor === \\\"youtube\\\") {\\r\\n delete window.onYouTubeIframeAPIReady;\\r\\n }\\r\\n\\r\\n instance = $.fancybox.getInstance();\\r\\n\\r\\n if (instance) {\\r\\n $el = instance.current.$content.find(\\\"iframe\\\");\\r\\n\\r\\n if (vendor === \\\"youtube\\\" && YT !== undefined && YT) {\\r\\n player = new YT.Player($el.attr(\\\"id\\\"), {\\r\\n events: {\\r\\n onStateChange: function (e) {\\r\\n if (e.data == 0) {\\r\\n instance.next();\\r\\n }\\r\\n }\\r\\n }\\r\\n });\\r\\n } else if (vendor === \\\"vimeo\\\" && Vimeo !== undefined && Vimeo) {\\r\\n player = new Vimeo.Player($el);\\r\\n\\r\\n player.on(\\\"ended\\\", function () {\\r\\n instance.next();\\r\\n });\\r\\n }\\r\\n }\\r\\n }\\r\\n };\\r\\n\\r\\n $(document).on({\\r\\n \\\"afterShow.fb\\\": function (e, instance, current) {\\r\\n if (instance.group.length > 1 && (current.contentSource === \\\"youtube\\\" || current.contentSource === \\\"vimeo\\\")) {\\r\\n VideoAPILoader.load(current.contentSource);\\r\\n }\\r\\n }\\r\\n });\\r\\n})(jQuery);\\n// ==========================================================================\\r\\n//\\r\\n// Guestures\\r\\n// Adds touch guestures, handles click and tap events\\r\\n//\\r\\n// ==========================================================================\\r\\n(function (window, document, $) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n var requestAFrame = (function () {\\r\\n return (\\r\\n window.requestAnimationFrame ||\\r\\n window.webkitRequestAnimationFrame ||\\r\\n window.mozRequestAnimationFrame ||\\r\\n window.oRequestAnimationFrame ||\\r\\n // if all else fails, use setTimeout\\r\\n function (callback) {\\r\\n return window.setTimeout(callback, 1000 / 60);\\r\\n }\\r\\n );\\r\\n })();\\r\\n\\r\\n var cancelAFrame = (function () {\\r\\n return (\\r\\n window.cancelAnimationFrame ||\\r\\n window.webkitCancelAnimationFrame ||\\r\\n window.mozCancelAnimationFrame ||\\r\\n window.oCancelAnimationFrame ||\\r\\n function (id) {\\r\\n window.clearTimeout(id);\\r\\n }\\r\\n );\\r\\n })();\\r\\n\\r\\n var getPointerXY = function (e) {\\r\\n var result = [];\\r\\n\\r\\n e = e.originalEvent || e || window.e;\\r\\n e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];\\r\\n\\r\\n for (var key in e) {\\r\\n if (e[key].pageX) {\\r\\n result.push({\\r\\n x: e[key].pageX,\\r\\n y: e[key].pageY\\r\\n });\\r\\n } else if (e[key].clientX) {\\r\\n result.push({\\r\\n x: e[key].clientX,\\r\\n y: e[key].clientY\\r\\n });\\r\\n }\\r\\n }\\r\\n\\r\\n return result;\\r\\n };\\r\\n\\r\\n var distance = function (point2, point1, what) {\\r\\n if (!point1 || !point2) {\\r\\n return 0;\\r\\n }\\r\\n\\r\\n if (what === \\\"x\\\") {\\r\\n return point2.x - point1.x;\\r\\n } else if (what === \\\"y\\\") {\\r\\n return point2.y - point1.y;\\r\\n }\\r\\n\\r\\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\\r\\n };\\r\\n\\r\\n var isClickable = function ($el) {\\r\\n if (\\r\\n $el.is('a,area,button,[role=\\\"button\\\"],input,label,select,summary,textarea,video,audio,iframe') ||\\r\\n $.isFunction($el.get(0).onclick) ||\\r\\n $el.data(\\\"selectable\\\")\\r\\n ) {\\r\\n return true;\\r\\n }\\r\\n\\r\\n // Check for attributes like data-fancybox-next or data-fancybox-close\\r\\n for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {\\r\\n if (atts[i].nodeName.substr(0, 14) === \\\"data-fancybox-\\\") {\\r\\n return true;\\r\\n }\\r\\n }\\r\\n\\r\\n return false;\\r\\n };\\r\\n\\r\\n var hasScrollbars = function (el) {\\r\\n var overflowY = window.getComputedStyle(el)[\\\"overflow-y\\\"],\\r\\n overflowX = window.getComputedStyle(el)[\\\"overflow-x\\\"],\\r\\n vertical = (overflowY === \\\"scroll\\\" || overflowY === \\\"auto\\\") && el.scrollHeight > el.clientHeight,\\r\\n horizontal = (overflowX === \\\"scroll\\\" || overflowX === \\\"auto\\\") && el.scrollWidth > el.clientWidth;\\r\\n\\r\\n return vertical || horizontal;\\r\\n };\\r\\n\\r\\n var isScrollable = function ($el) {\\r\\n var rez = false;\\r\\n\\r\\n while (true) {\\r\\n rez = hasScrollbars($el.get(0));\\r\\n\\r\\n if (rez) {\\r\\n break;\\r\\n }\\r\\n\\r\\n $el = $el.parent();\\r\\n\\r\\n if (!$el.length || $el.hasClass(\\\"fancybox-stage\\\") || $el.is(\\\"body\\\")) {\\r\\n break;\\r\\n }\\r\\n }\\r\\n\\r\\n return rez;\\r\\n };\\r\\n\\r\\n var Guestures = function (instance) {\\r\\n var self = this;\\r\\n\\r\\n self.instance = instance;\\r\\n\\r\\n self.$bg = instance.$refs.bg;\\r\\n self.$stage = instance.$refs.stage;\\r\\n self.$container = instance.$refs.container;\\r\\n\\r\\n self.destroy();\\r\\n\\r\\n self.$container.on(\\\"touchstart.fb.touch mousedown.fb.touch\\\", $.proxy(self, \\\"ontouchstart\\\"));\\r\\n };\\r\\n\\r\\n Guestures.prototype.destroy = function () {\\r\\n var self = this;\\r\\n\\r\\n self.$container.off(\\\".fb.touch\\\");\\r\\n\\r\\n $(document).off(\\\".fb.touch\\\");\\r\\n\\r\\n if (self.requestId) {\\r\\n cancelAFrame(self.requestId);\\r\\n self.requestId = null;\\r\\n }\\r\\n\\r\\n if (self.tapped) {\\r\\n clearTimeout(self.tapped);\\r\\n self.tapped = null;\\r\\n }\\r\\n };\\r\\n\\r\\n Guestures.prototype.ontouchstart = function (e) {\\r\\n var self = this,\\r\\n $target = $(e.target),\\r\\n instance = self.instance,\\r\\n current = instance.current,\\r\\n $slide = current.$slide,\\r\\n $content = current.$content,\\r\\n isTouchDevice = e.type == \\\"touchstart\\\";\\r\\n\\r\\n // Do not respond to both (touch and mouse) events\\r\\n if (isTouchDevice) {\\r\\n self.$container.off(\\\"mousedown.fb.touch\\\");\\r\\n }\\r\\n\\r\\n // Ignore right click\\r\\n if (e.originalEvent && e.originalEvent.button == 2) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Ignore taping on links, buttons, input elements\\r\\n if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {\\r\\n return;\\r\\n }\\r\\n // Ignore clicks on the scrollbar\\r\\n if (!$target.is(\\\"img\\\") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Ignore clicks while zooming or closing\\r\\n if (!current || instance.isAnimating || current.$slide.hasClass(\\\"fancybox-animated\\\")) {\\r\\n e.stopPropagation();\\r\\n e.preventDefault();\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n self.realPoints = self.startPoints = getPointerXY(e);\\r\\n\\r\\n if (!self.startPoints.length) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Allow other scripts to catch touch event if \\\"touch\\\" is set to false\\r\\n if (current.touch) {\\r\\n e.stopPropagation();\\r\\n }\\r\\n\\r\\n self.startEvent = e;\\r\\n\\r\\n self.canTap = true;\\r\\n self.$target = $target;\\r\\n self.$content = $content;\\r\\n self.opts = current.opts.touch;\\r\\n\\r\\n self.isPanning = false;\\r\\n self.isSwiping = false;\\r\\n self.isZooming = false;\\r\\n self.isScrolling = false;\\r\\n self.canPan = instance.canPan();\\r\\n\\r\\n self.startTime = new Date().getTime();\\r\\n self.distanceX = self.distanceY = self.distance = 0;\\r\\n\\r\\n self.canvasWidth = Math.round($slide[0].clientWidth);\\r\\n self.canvasHeight = Math.round($slide[0].clientHeight);\\r\\n\\r\\n self.contentLastPos = null;\\r\\n self.contentStartPos = $.fancybox.getTranslate(self.$content) || {\\r\\n top: 0,\\r\\n left: 0\\r\\n };\\r\\n self.sliderStartPos = $.fancybox.getTranslate($slide);\\r\\n\\r\\n // Since position will be absolute, but we need to make it relative to the stage\\r\\n self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);\\r\\n\\r\\n self.sliderStartPos.top -= self.stagePos.top;\\r\\n self.sliderStartPos.left -= self.stagePos.left;\\r\\n\\r\\n self.contentStartPos.top -= self.stagePos.top;\\r\\n self.contentStartPos.left -= self.stagePos.left;\\r\\n\\r\\n $(document)\\r\\n .off(\\\".fb.touch\\\")\\r\\n .on(isTouchDevice ? \\\"touchend.fb.touch touchcancel.fb.touch\\\" : \\\"mouseup.fb.touch mouseleave.fb.touch\\\", $.proxy(self, \\\"ontouchend\\\"))\\r\\n .on(isTouchDevice ? \\\"touchmove.fb.touch\\\" : \\\"mousemove.fb.touch\\\", $.proxy(self, \\\"ontouchmove\\\"));\\r\\n\\r\\n if ($.fancybox.isMobile) {\\r\\n document.addEventListener(\\\"scroll\\\", self.onscroll, true);\\r\\n }\\r\\n\\r\\n // Skip if clicked outside the sliding area\\r\\n if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {\\r\\n if ($target.is(\\\".fancybox-image\\\")) {\\r\\n e.preventDefault();\\r\\n }\\r\\n\\r\\n if (!($.fancybox.isMobile && $target.parents(\\\".fancybox-caption\\\").length)) {\\r\\n return;\\r\\n }\\r\\n }\\r\\n\\r\\n self.isScrollable = isScrollable($target) || isScrollable($target.parent());\\r\\n\\r\\n // Check if element is scrollable and try to prevent default behavior (scrolling)\\r\\n if (!($.fancybox.isMobile && self.isScrollable)) {\\r\\n e.preventDefault();\\r\\n }\\r\\n\\r\\n // One finger or mouse click - swipe or pan an image\\r\\n if (self.startPoints.length === 1 || current.hasError) {\\r\\n if (self.canPan) {\\r\\n $.fancybox.stop(self.$content);\\r\\n\\r\\n self.isPanning = true;\\r\\n } else {\\r\\n self.isSwiping = true;\\r\\n }\\r\\n\\r\\n self.$container.addClass(\\\"fancybox-is-grabbing\\\");\\r\\n }\\r\\n\\r\\n // Two fingers - zoom image\\r\\n if (self.startPoints.length === 2 && current.type === \\\"image\\\" && (current.isLoaded || current.$ghost)) {\\r\\n self.canTap = false;\\r\\n self.isSwiping = false;\\r\\n self.isPanning = false;\\r\\n\\r\\n self.isZooming = true;\\r\\n\\r\\n $.fancybox.stop(self.$content);\\r\\n\\r\\n self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();\\r\\n self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();\\r\\n\\r\\n self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;\\r\\n self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;\\r\\n\\r\\n self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);\\r\\n }\\r\\n };\\r\\n\\r\\n Guestures.prototype.onscroll = function (e) {\\r\\n var self = this;\\r\\n\\r\\n self.isScrolling = true;\\r\\n\\r\\n document.removeEventListener(\\\"scroll\\\", self.onscroll, true);\\r\\n };\\r\\n\\r\\n Guestures.prototype.ontouchmove = function (e) {\\r\\n var self = this;\\r\\n\\r\\n // Make sure user has not released over iframe or disabled element\\r\\n if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {\\r\\n self.ontouchend(e);\\r\\n return;\\r\\n }\\r\\n\\r\\n if (self.isScrolling) {\\r\\n self.canTap = false;\\r\\n return;\\r\\n }\\r\\n\\r\\n self.newPoints = getPointerXY(e);\\r\\n\\r\\n if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if (!(self.isSwiping && self.isSwiping === true)) {\\r\\n e.preventDefault();\\r\\n }\\r\\n\\r\\n self.distanceX = distance(self.newPoints[0], self.startPoints[0], \\\"x\\\");\\r\\n self.distanceY = distance(self.newPoints[0], self.startPoints[0], \\\"y\\\");\\r\\n\\r\\n self.distance = distance(self.newPoints[0], self.startPoints[0]);\\r\\n\\r\\n // Skip false ontouchmove events (Chrome)\\r\\n if (self.distance > 0) {\\r\\n if (self.isSwiping) {\\r\\n self.onSwipe(e);\\r\\n } else if (self.isPanning) {\\r\\n self.onPan();\\r\\n } else if (self.isZooming) {\\r\\n self.onZoom();\\r\\n }\\r\\n }\\r\\n };\\r\\n\\r\\n Guestures.prototype.onSwipe = function (e) {\\r\\n var self = this,\\r\\n instance = self.instance,\\r\\n swiping = self.isSwiping,\\r\\n left = self.sliderStartPos.left || 0,\\r\\n angle;\\r\\n\\r\\n // If direction is not yet determined\\r\\n if (swiping === true) {\\r\\n // We need at least 10px distance to correctly calculate an angle\\r\\n if (Math.abs(self.distance) > 10) {\\r\\n self.canTap = false;\\r\\n\\r\\n if (instance.group.length < 2 && self.opts.vertical) {\\r\\n self.isSwiping = \\\"y\\\";\\r\\n } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === \\\"auto\\\" && $(window).width() > 800)) {\\r\\n self.isSwiping = \\\"x\\\";\\r\\n } else {\\r\\n angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);\\r\\n\\r\\n self.isSwiping = angle > 45 && angle < 135 ? \\\"y\\\" : \\\"x\\\";\\r\\n }\\r\\n\\r\\n if (self.isSwiping === \\\"y\\\" && $.fancybox.isMobile && self.isScrollable) {\\r\\n self.isScrolling = true;\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n instance.isDragging = self.isSwiping;\\r\\n\\r\\n // Reset points to avoid jumping, because we dropped first swipes to calculate the angle\\r\\n self.startPoints = self.newPoints;\\r\\n\\r\\n $.each(instance.slides, function (index, slide) {\\r\\n var slidePos, stagePos;\\r\\n\\r\\n $.fancybox.stop(slide.$slide);\\r\\n\\r\\n slidePos = $.fancybox.getTranslate(slide.$slide);\\r\\n stagePos = $.fancybox.getTranslate(instance.$refs.stage);\\r\\n\\r\\n slide.$slide\\r\\n .css({\\r\\n transform: \\\"\\\",\\r\\n opacity: \\\"\\\",\\r\\n \\\"transition-duration\\\": \\\"\\\"\\r\\n })\\r\\n .removeClass(\\\"fancybox-animated\\\")\\r\\n .removeClass(function (index, className) {\\r\\n return (className.match(/(^|\\\\s)fancybox-fx-\\\\S+/g) || []).join(\\\" \\\");\\r\\n });\\r\\n\\r\\n if (slide.pos === instance.current.pos) {\\r\\n self.sliderStartPos.top = slidePos.top - stagePos.top;\\r\\n self.sliderStartPos.left = slidePos.left - stagePos.left;\\r\\n }\\r\\n\\r\\n $.fancybox.setTranslate(slide.$slide, {\\r\\n top: slidePos.top - stagePos.top,\\r\\n left: slidePos.left - stagePos.left\\r\\n });\\r\\n });\\r\\n\\r\\n // Stop slideshow\\r\\n if (instance.SlideShow && instance.SlideShow.isActive) {\\r\\n instance.SlideShow.stop();\\r\\n }\\r\\n }\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n // Sticky edges\\r\\n if (swiping == \\\"x\\\") {\\r\\n if (\\r\\n self.distanceX > 0 &&\\r\\n (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))\\r\\n ) {\\r\\n left = left + Math.pow(self.distanceX, 0.8);\\r\\n } else if (\\r\\n self.distanceX < 0 &&\\r\\n (self.instance.group.length < 2 ||\\r\\n (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))\\r\\n ) {\\r\\n left = left - Math.pow(-self.distanceX, 0.8);\\r\\n } else {\\r\\n left = left + self.distanceX;\\r\\n }\\r\\n }\\r\\n\\r\\n self.sliderLastPos = {\\r\\n top: swiping == \\\"x\\\" ? 0 : self.sliderStartPos.top + self.distanceY,\\r\\n left: left\\r\\n };\\r\\n\\r\\n if (self.requestId) {\\r\\n cancelAFrame(self.requestId);\\r\\n\\r\\n self.requestId = null;\\r\\n }\\r\\n\\r\\n self.requestId = requestAFrame(function () {\\r\\n if (self.sliderLastPos) {\\r\\n $.each(self.instance.slides, function (index, slide) {\\r\\n var pos = slide.pos - self.instance.currPos;\\r\\n\\r\\n $.fancybox.setTranslate(slide.$slide, {\\r\\n top: self.sliderLastPos.top,\\r\\n left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter\\r\\n });\\r\\n });\\r\\n\\r\\n self.$container.addClass(\\\"fancybox-is-sliding\\\");\\r\\n }\\r\\n });\\r\\n };\\r\\n\\r\\n Guestures.prototype.onPan = function () {\\r\\n var self = this;\\r\\n\\r\\n // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)\\r\\n if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {\\r\\n self.startPoints = self.newPoints;\\r\\n return;\\r\\n }\\r\\n\\r\\n self.canTap = false;\\r\\n\\r\\n self.contentLastPos = self.limitMovement();\\r\\n\\r\\n if (self.requestId) {\\r\\n cancelAFrame(self.requestId);\\r\\n }\\r\\n\\r\\n self.requestId = requestAFrame(function () {\\r\\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\\r\\n });\\r\\n };\\r\\n\\r\\n // Make panning sticky to the edges\\r\\n Guestures.prototype.limitMovement = function () {\\r\\n var self = this;\\r\\n\\r\\n var canvasWidth = self.canvasWidth;\\r\\n var canvasHeight = self.canvasHeight;\\r\\n\\r\\n var distanceX = self.distanceX;\\r\\n var distanceY = self.distanceY;\\r\\n\\r\\n var contentStartPos = self.contentStartPos;\\r\\n\\r\\n var currentOffsetX = contentStartPos.left;\\r\\n var currentOffsetY = contentStartPos.top;\\r\\n\\r\\n var currentWidth = contentStartPos.width;\\r\\n var currentHeight = contentStartPos.height;\\r\\n\\r\\n var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;\\r\\n\\r\\n if (currentWidth > canvasWidth) {\\r\\n newOffsetX = currentOffsetX + distanceX;\\r\\n } else {\\r\\n newOffsetX = currentOffsetX;\\r\\n }\\r\\n\\r\\n newOffsetY = currentOffsetY + distanceY;\\r\\n\\r\\n // Slow down proportionally to traveled distance\\r\\n minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);\\r\\n minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);\\r\\n\\r\\n maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);\\r\\n maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);\\r\\n\\r\\n // ->\\r\\n if (distanceX > 0 && newOffsetX > minTranslateX) {\\r\\n newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;\\r\\n }\\r\\n\\r\\n // <-\\r\\n if (distanceX < 0 && newOffsetX < maxTranslateX) {\\r\\n newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;\\r\\n }\\r\\n\\r\\n // \\\\/\\r\\n if (distanceY > 0 && newOffsetY > minTranslateY) {\\r\\n newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;\\r\\n }\\r\\n\\r\\n // /\\\\\\r\\n if (distanceY < 0 && newOffsetY < maxTranslateY) {\\r\\n newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;\\r\\n }\\r\\n\\r\\n return {\\r\\n top: newOffsetY,\\r\\n left: newOffsetX\\r\\n };\\r\\n };\\r\\n\\r\\n Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {\\r\\n var self = this;\\r\\n\\r\\n var canvasWidth = self.canvasWidth;\\r\\n var canvasHeight = self.canvasHeight;\\r\\n\\r\\n if (newWidth > canvasWidth) {\\r\\n newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\\r\\n newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\\r\\n } else {\\r\\n // Center horizontally\\r\\n newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);\\r\\n }\\r\\n\\r\\n if (newHeight > canvasHeight) {\\r\\n newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\\r\\n newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\\r\\n } else {\\r\\n // Center vertically\\r\\n newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);\\r\\n }\\r\\n\\r\\n return {\\r\\n top: newOffsetY,\\r\\n left: newOffsetX\\r\\n };\\r\\n };\\r\\n\\r\\n Guestures.prototype.onZoom = function () {\\r\\n var self = this;\\r\\n\\r\\n // Calculate current distance between points to get pinch ratio and new width and height\\r\\n var contentStartPos = self.contentStartPos;\\r\\n\\r\\n var currentWidth = contentStartPos.width;\\r\\n var currentHeight = contentStartPos.height;\\r\\n\\r\\n var currentOffsetX = contentStartPos.left;\\r\\n var currentOffsetY = contentStartPos.top;\\r\\n\\r\\n var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);\\r\\n\\r\\n var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\\r\\n\\r\\n var newWidth = Math.floor(currentWidth * pinchRatio);\\r\\n var newHeight = Math.floor(currentHeight * pinchRatio);\\r\\n\\r\\n // This is the translation due to pinch-zooming\\r\\n var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\\r\\n var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\\r\\n\\r\\n // Point between the two touches\\r\\n var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();\\r\\n var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();\\r\\n\\r\\n // And this is the translation due to translation of the centerpoint\\r\\n // between the two fingers\\r\\n var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\\r\\n var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\\r\\n\\r\\n // The new offset is the old/current one plus the total translation\\r\\n var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);\\r\\n var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);\\r\\n\\r\\n var newPos = {\\r\\n top: newOffsetY,\\r\\n left: newOffsetX,\\r\\n scaleX: pinchRatio,\\r\\n scaleY: pinchRatio\\r\\n };\\r\\n\\r\\n self.canTap = false;\\r\\n\\r\\n self.newWidth = newWidth;\\r\\n self.newHeight = newHeight;\\r\\n\\r\\n self.contentLastPos = newPos;\\r\\n\\r\\n if (self.requestId) {\\r\\n cancelAFrame(self.requestId);\\r\\n }\\r\\n\\r\\n self.requestId = requestAFrame(function () {\\r\\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\\r\\n });\\r\\n };\\r\\n\\r\\n Guestures.prototype.ontouchend = function (e) {\\r\\n var self = this;\\r\\n\\r\\n var swiping = self.isSwiping;\\r\\n var panning = self.isPanning;\\r\\n var zooming = self.isZooming;\\r\\n var scrolling = self.isScrolling;\\r\\n\\r\\n self.endPoints = getPointerXY(e);\\r\\n self.dMs = Math.max(new Date().getTime() - self.startTime, 1);\\r\\n\\r\\n self.$container.removeClass(\\\"fancybox-is-grabbing\\\");\\r\\n\\r\\n $(document).off(\\\".fb.touch\\\");\\r\\n\\r\\n document.removeEventListener(\\\"scroll\\\", self.onscroll, true);\\r\\n\\r\\n if (self.requestId) {\\r\\n cancelAFrame(self.requestId);\\r\\n\\r\\n self.requestId = null;\\r\\n }\\r\\n\\r\\n self.isSwiping = false;\\r\\n self.isPanning = false;\\r\\n self.isZooming = false;\\r\\n self.isScrolling = false;\\r\\n\\r\\n self.instance.isDragging = false;\\r\\n\\r\\n if (self.canTap) {\\r\\n return self.onTap(e);\\r\\n }\\r\\n\\r\\n self.speed = 100;\\r\\n\\r\\n // Speed in px/ms\\r\\n self.velocityX = (self.distanceX / self.dMs) * 0.5;\\r\\n self.velocityY = (self.distanceY / self.dMs) * 0.5;\\r\\n\\r\\n if (panning) {\\r\\n self.endPanning();\\r\\n } else if (zooming) {\\r\\n self.endZooming();\\r\\n } else {\\r\\n self.endSwiping(swiping, scrolling);\\r\\n }\\r\\n\\r\\n return;\\r\\n };\\r\\n\\r\\n Guestures.prototype.endSwiping = function (swiping, scrolling) {\\r\\n var self = this,\\r\\n ret = false,\\r\\n len = self.instance.group.length,\\r\\n distanceX = Math.abs(self.distanceX),\\r\\n canAdvance = swiping == \\\"x\\\" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),\\r\\n speedX = 300;\\r\\n\\r\\n self.sliderLastPos = null;\\r\\n\\r\\n // Close if swiped vertically / navigate if horizontally\\r\\n if (swiping == \\\"y\\\" && !scrolling && Math.abs(self.distanceY) > 50) {\\r\\n // Continue vertical movement\\r\\n $.fancybox.animate(\\r\\n self.instance.current.$slide, {\\r\\n top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,\\r\\n opacity: 0\\r\\n },\\r\\n 200\\r\\n );\\r\\n ret = self.instance.close(true, 250);\\r\\n } else if (canAdvance && self.distanceX > 0) {\\r\\n ret = self.instance.previous(speedX);\\r\\n } else if (canAdvance && self.distanceX < 0) {\\r\\n ret = self.instance.next(speedX);\\r\\n }\\r\\n\\r\\n if (ret === false && (swiping == \\\"x\\\" || swiping == \\\"y\\\")) {\\r\\n self.instance.centerSlide(200);\\r\\n }\\r\\n\\r\\n self.$container.removeClass(\\\"fancybox-is-sliding\\\");\\r\\n };\\r\\n\\r\\n // Limit panning from edges\\r\\n // ========================\\r\\n Guestures.prototype.endPanning = function () {\\r\\n var self = this,\\r\\n newOffsetX,\\r\\n newOffsetY,\\r\\n newPos;\\r\\n\\r\\n if (!self.contentLastPos) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if (self.opts.momentum === false || self.dMs > 350) {\\r\\n newOffsetX = self.contentLastPos.left;\\r\\n newOffsetY = self.contentLastPos.top;\\r\\n } else {\\r\\n // Continue movement\\r\\n newOffsetX = self.contentLastPos.left + self.velocityX * 500;\\r\\n newOffsetY = self.contentLastPos.top + self.velocityY * 500;\\r\\n }\\r\\n\\r\\n newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);\\r\\n\\r\\n newPos.width = self.contentStartPos.width;\\r\\n newPos.height = self.contentStartPos.height;\\r\\n\\r\\n $.fancybox.animate(self.$content, newPos, 366);\\r\\n };\\r\\n\\r\\n Guestures.prototype.endZooming = function () {\\r\\n var self = this;\\r\\n\\r\\n var current = self.instance.current;\\r\\n\\r\\n var newOffsetX, newOffsetY, newPos, reset;\\r\\n\\r\\n var newWidth = self.newWidth;\\r\\n var newHeight = self.newHeight;\\r\\n\\r\\n if (!self.contentLastPos) {\\r\\n return;\\r\\n }\\r\\n\\r\\n newOffsetX = self.contentLastPos.left;\\r\\n newOffsetY = self.contentLastPos.top;\\r\\n\\r\\n reset = {\\r\\n top: newOffsetY,\\r\\n left: newOffsetX,\\r\\n width: newWidth,\\r\\n height: newHeight,\\r\\n scaleX: 1,\\r\\n scaleY: 1\\r\\n };\\r\\n\\r\\n // Reset scalex/scaleY values; this helps for perfomance and does not break animation\\r\\n $.fancybox.setTranslate(self.$content, reset);\\r\\n\\r\\n if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {\\r\\n self.instance.scaleToFit(150);\\r\\n } else if (newWidth > current.width || newHeight > current.height) {\\r\\n self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);\\r\\n } else {\\r\\n newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);\\r\\n\\r\\n $.fancybox.animate(self.$content, newPos, 150);\\r\\n }\\r\\n };\\r\\n\\r\\n Guestures.prototype.onTap = function (e) {\\r\\n var self = this;\\r\\n var $target = $(e.target);\\r\\n\\r\\n var instance = self.instance;\\r\\n var current = instance.current;\\r\\n\\r\\n var endPoints = (e && getPointerXY(e)) || self.startPoints;\\r\\n\\r\\n var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;\\r\\n var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;\\r\\n\\r\\n var where;\\r\\n\\r\\n var process = function (prefix) {\\r\\n var action = current.opts[prefix];\\r\\n\\r\\n if ($.isFunction(action)) {\\r\\n action = action.apply(instance, [current, e]);\\r\\n }\\r\\n\\r\\n if (!action) {\\r\\n return;\\r\\n }\\r\\n\\r\\n switch (action) {\\r\\n case \\\"close\\\":\\r\\n instance.close(self.startEvent);\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"toggleControls\\\":\\r\\n instance.toggleControls();\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"next\\\":\\r\\n instance.next();\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"nextOrClose\\\":\\r\\n if (instance.group.length > 1) {\\r\\n instance.next();\\r\\n } else {\\r\\n instance.close(self.startEvent);\\r\\n }\\r\\n\\r\\n break;\\r\\n\\r\\n case \\\"zoom\\\":\\r\\n if (current.type == \\\"image\\\" && (current.isLoaded || current.$ghost)) {\\r\\n if (instance.canPan()) {\\r\\n instance.scaleToFit();\\r\\n } else if (instance.isScaledDown()) {\\r\\n instance.scaleToActual(tapX, tapY);\\r\\n } else if (instance.group.length < 2) {\\r\\n instance.close(self.startEvent);\\r\\n }\\r\\n }\\r\\n\\r\\n break;\\r\\n }\\r\\n };\\r\\n\\r\\n // Ignore right click\\r\\n if (e.originalEvent && e.originalEvent.button == 2) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Skip if clicked on the scrollbar\\r\\n if (!$target.is(\\\"img\\\") && tapX > $target[0].clientWidth + $target.offset().left) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Check where is clicked\\r\\n if ($target.is(\\\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\\\")) {\\r\\n where = \\\"Outside\\\";\\r\\n } else if ($target.is(\\\".fancybox-slide\\\")) {\\r\\n where = \\\"Slide\\\";\\r\\n } else if (\\r\\n instance.current.$content &&\\r\\n instance.current.$content\\r\\n .find($target)\\r\\n .addBack()\\r\\n .filter($target).length\\r\\n ) {\\r\\n where = \\\"Content\\\";\\r\\n } else {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Check if this is a double tap\\r\\n if (self.tapped) {\\r\\n // Stop previously created single tap\\r\\n clearTimeout(self.tapped);\\r\\n self.tapped = null;\\r\\n\\r\\n // Skip if distance between taps is too big\\r\\n if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {\\r\\n return this;\\r\\n }\\r\\n\\r\\n // OK, now we assume that this is a double-tap\\r\\n process(\\\"dblclick\\\" + where);\\r\\n } else {\\r\\n // Single tap will be processed if user has not clicked second time within 300ms\\r\\n // or there is no need to wait for double-tap\\r\\n self.tapX = tapX;\\r\\n self.tapY = tapY;\\r\\n\\r\\n if (current.opts[\\\"dblclick\\\" + where] && current.opts[\\\"dblclick\\\" + where] !== current.opts[\\\"click\\\" + where]) {\\r\\n self.tapped = setTimeout(function () {\\r\\n self.tapped = null;\\r\\n\\r\\n if (!instance.isAnimating) {\\r\\n process(\\\"click\\\" + where);\\r\\n }\\r\\n }, 500);\\r\\n } else {\\r\\n process(\\\"click\\\" + where);\\r\\n }\\r\\n }\\r\\n\\r\\n return this;\\r\\n };\\r\\n\\r\\n $(document)\\r\\n .on(\\\"onActivate.fb\\\", function (e, instance) {\\r\\n if (instance && !instance.Guestures) {\\r\\n instance.Guestures = new Guestures(instance);\\r\\n }\\r\\n })\\r\\n .on(\\\"beforeClose.fb\\\", function (e, instance) {\\r\\n if (instance && instance.Guestures) {\\r\\n instance.Guestures.destroy();\\r\\n }\\r\\n });\\r\\n})(window, document, jQuery);\\n// ==========================================================================\\r\\n//\\r\\n// SlideShow\\r\\n// Enables slideshow functionality\\r\\n//\\r\\n// Example of usage:\\r\\n// $.fancybox.getInstance().SlideShow.start()\\r\\n//\\r\\n// ==========================================================================\\r\\n(function (document, $) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n $.extend(true, $.fancybox.defaults, {\\r\\n btnTpl: {\\r\\n slideShow: '\\\"\\r\\n },\\r\\n slideShow: {\\r\\n autoStart: false,\\r\\n speed: 3000,\\r\\n progress: true\\r\\n }\\r\\n });\\r\\n\\r\\n var SlideShow = function (instance) {\\r\\n this.instance = instance;\\r\\n this.init();\\r\\n };\\r\\n\\r\\n $.extend(SlideShow.prototype, {\\r\\n timer: null,\\r\\n isActive: false,\\r\\n $button: null,\\r\\n\\r\\n init: function () {\\r\\n var self = this,\\r\\n instance = self.instance,\\r\\n opts = instance.group[instance.currIndex].opts.slideShow;\\r\\n\\r\\n self.$button = instance.$refs.toolbar.find(\\\"[data-fancybox-play]\\\").on(\\\"click\\\", function () {\\r\\n self.toggle();\\r\\n });\\r\\n\\r\\n if (instance.group.length < 2 || !opts) {\\r\\n self.$button.hide();\\r\\n } else if (opts.progress) {\\r\\n self.$progress = $('
').appendTo(instance.$refs.inner);\\r\\n }\\r\\n },\\r\\n\\r\\n set: function (force) {\\r\\n var self = this,\\r\\n instance = self.instance,\\r\\n current = instance.current;\\r\\n\\r\\n // Check if reached last element\\r\\n if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {\\r\\n if (self.isActive && current.contentType !== \\\"video\\\") {\\r\\n if (self.$progress) {\\r\\n $.fancybox.animate(self.$progress.show(), {\\r\\n scaleX: 1\\r\\n }, current.opts.slideShow.speed);\\r\\n }\\r\\n\\r\\n self.timer = setTimeout(function () {\\r\\n if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {\\r\\n instance.jumpTo(0);\\r\\n } else {\\r\\n instance.next();\\r\\n }\\r\\n }, current.opts.slideShow.speed);\\r\\n }\\r\\n } else {\\r\\n self.stop();\\r\\n instance.idleSecondsCounter = 0;\\r\\n instance.showControls();\\r\\n }\\r\\n },\\r\\n\\r\\n clear: function () {\\r\\n var self = this;\\r\\n\\r\\n clearTimeout(self.timer);\\r\\n\\r\\n self.timer = null;\\r\\n\\r\\n if (self.$progress) {\\r\\n self.$progress.removeAttr(\\\"style\\\").hide();\\r\\n }\\r\\n },\\r\\n\\r\\n start: function () {\\r\\n var self = this,\\r\\n current = self.instance.current;\\r\\n\\r\\n if (current) {\\r\\n self.$button\\r\\n .attr(\\\"title\\\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)\\r\\n .removeClass(\\\"fancybox-button--play\\\")\\r\\n .addClass(\\\"fancybox-button--pause\\\");\\r\\n\\r\\n self.isActive = true;\\r\\n\\r\\n if (current.isComplete) {\\r\\n self.set(true);\\r\\n }\\r\\n\\r\\n self.instance.trigger(\\\"onSlideShowChange\\\", true);\\r\\n }\\r\\n },\\r\\n\\r\\n stop: function () {\\r\\n var self = this,\\r\\n current = self.instance.current;\\r\\n\\r\\n self.clear();\\r\\n\\r\\n self.$button\\r\\n .attr(\\\"title\\\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)\\r\\n .removeClass(\\\"fancybox-button--pause\\\")\\r\\n .addClass(\\\"fancybox-button--play\\\");\\r\\n\\r\\n self.isActive = false;\\r\\n\\r\\n self.instance.trigger(\\\"onSlideShowChange\\\", false);\\r\\n\\r\\n if (self.$progress) {\\r\\n self.$progress.removeAttr(\\\"style\\\").hide();\\r\\n }\\r\\n },\\r\\n\\r\\n toggle: function () {\\r\\n var self = this;\\r\\n\\r\\n if (self.isActive) {\\r\\n self.stop();\\r\\n } else {\\r\\n self.start();\\r\\n }\\r\\n }\\r\\n });\\r\\n\\r\\n $(document).on({\\r\\n \\\"onInit.fb\\\": function (e, instance) {\\r\\n if (instance && !instance.SlideShow) {\\r\\n instance.SlideShow = new SlideShow(instance);\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"beforeShow.fb\\\": function (e, instance, current, firstRun) {\\r\\n var SlideShow = instance && instance.SlideShow;\\r\\n\\r\\n if (firstRun) {\\r\\n if (SlideShow && current.opts.slideShow.autoStart) {\\r\\n SlideShow.start();\\r\\n }\\r\\n } else if (SlideShow && SlideShow.isActive) {\\r\\n SlideShow.clear();\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"afterShow.fb\\\": function (e, instance, current) {\\r\\n var SlideShow = instance && instance.SlideShow;\\r\\n\\r\\n if (SlideShow && SlideShow.isActive) {\\r\\n SlideShow.set();\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"afterKeydown.fb\\\": function (e, instance, current, keypress, keycode) {\\r\\n var SlideShow = instance && instance.SlideShow;\\r\\n\\r\\n // \\\"P\\\" or Spacebar\\r\\n if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is(\\\"button,a,input\\\")) {\\r\\n keypress.preventDefault();\\r\\n\\r\\n SlideShow.toggle();\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"beforeClose.fb onDeactivate.fb\\\": function (e, instance) {\\r\\n var SlideShow = instance && instance.SlideShow;\\r\\n\\r\\n if (SlideShow) {\\r\\n SlideShow.stop();\\r\\n }\\r\\n }\\r\\n });\\r\\n\\r\\n // Page Visibility API to pause slideshow when window is not active\\r\\n $(document).on(\\\"visibilitychange\\\", function () {\\r\\n var instance = $.fancybox.getInstance(),\\r\\n SlideShow = instance && instance.SlideShow;\\r\\n\\r\\n if (SlideShow && SlideShow.isActive) {\\r\\n if (document.hidden) {\\r\\n SlideShow.clear();\\r\\n } else {\\r\\n SlideShow.set();\\r\\n }\\r\\n }\\r\\n });\\r\\n})(document, jQuery);\\n// ==========================================================================\\r\\n//\\r\\n// FullScreen\\r\\n// Adds fullscreen functionality\\r\\n//\\r\\n// ==========================================================================\\r\\n(function (document, $) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n // Collection of methods supported by user browser\\r\\n var fn = (function () {\\r\\n var fnMap = [\\r\\n [\\\"requestFullscreen\\\", \\\"exitFullscreen\\\", \\\"fullscreenElement\\\", \\\"fullscreenEnabled\\\", \\\"fullscreenchange\\\", \\\"fullscreenerror\\\"],\\r\\n // new WebKit\\r\\n [\\r\\n \\\"webkitRequestFullscreen\\\",\\r\\n \\\"webkitExitFullscreen\\\",\\r\\n \\\"webkitFullscreenElement\\\",\\r\\n \\\"webkitFullscreenEnabled\\\",\\r\\n \\\"webkitfullscreenchange\\\",\\r\\n \\\"webkitfullscreenerror\\\"\\r\\n ],\\r\\n // old WebKit (Safari 5.1)\\r\\n [\\r\\n \\\"webkitRequestFullScreen\\\",\\r\\n \\\"webkitCancelFullScreen\\\",\\r\\n \\\"webkitCurrentFullScreenElement\\\",\\r\\n \\\"webkitCancelFullScreen\\\",\\r\\n \\\"webkitfullscreenchange\\\",\\r\\n \\\"webkitfullscreenerror\\\"\\r\\n ],\\r\\n [\\r\\n \\\"mozRequestFullScreen\\\",\\r\\n \\\"mozCancelFullScreen\\\",\\r\\n \\\"mozFullScreenElement\\\",\\r\\n \\\"mozFullScreenEnabled\\\",\\r\\n \\\"mozfullscreenchange\\\",\\r\\n \\\"mozfullscreenerror\\\"\\r\\n ],\\r\\n [\\\"msRequestFullscreen\\\", \\\"msExitFullscreen\\\", \\\"msFullscreenElement\\\", \\\"msFullscreenEnabled\\\", \\\"MSFullscreenChange\\\", \\\"MSFullscreenError\\\"]\\r\\n ];\\r\\n\\r\\n var ret = {};\\r\\n\\r\\n for (var i = 0; i < fnMap.length; i++) {\\r\\n var val = fnMap[i];\\r\\n\\r\\n if (val && val[1] in document) {\\r\\n for (var j = 0; j < val.length; j++) {\\r\\n ret[fnMap[0][j]] = val[j];\\r\\n }\\r\\n\\r\\n return ret;\\r\\n }\\r\\n }\\r\\n\\r\\n return false;\\r\\n })();\\r\\n\\r\\n if (fn) {\\r\\n var FullScreen = {\\r\\n request: function (elem) {\\r\\n elem = elem || document.documentElement;\\r\\n\\r\\n elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);\\r\\n },\\r\\n exit: function () {\\r\\n document[fn.exitFullscreen]();\\r\\n },\\r\\n toggle: function (elem) {\\r\\n elem = elem || document.documentElement;\\r\\n\\r\\n if (this.isFullscreen()) {\\r\\n this.exit();\\r\\n } else {\\r\\n this.request(elem);\\r\\n }\\r\\n },\\r\\n isFullscreen: function () {\\r\\n return Boolean(document[fn.fullscreenElement]);\\r\\n },\\r\\n enabled: function () {\\r\\n return Boolean(document[fn.fullscreenEnabled]);\\r\\n }\\r\\n };\\r\\n\\r\\n $.extend(true, $.fancybox.defaults, {\\r\\n btnTpl: {\\r\\n fullScreen: '\\\"\\r\\n },\\r\\n fullScreen: {\\r\\n autoStart: false\\r\\n }\\r\\n });\\r\\n\\r\\n $(document).on(fn.fullscreenchange, function () {\\r\\n var isFullscreen = FullScreen.isFullscreen(),\\r\\n instance = $.fancybox.getInstance();\\r\\n\\r\\n if (instance) {\\r\\n // If image is zooming, then force to stop and reposition properly\\r\\n if (instance.current && instance.current.type === \\\"image\\\" && instance.isAnimating) {\\r\\n instance.isAnimating = false;\\r\\n\\r\\n instance.update(true, true, 0);\\r\\n\\r\\n if (!instance.isComplete) {\\r\\n instance.complete();\\r\\n }\\r\\n }\\r\\n\\r\\n instance.trigger(\\\"onFullscreenChange\\\", isFullscreen);\\r\\n\\r\\n instance.$refs.container.toggleClass(\\\"fancybox-is-fullscreen\\\", isFullscreen);\\r\\n\\r\\n instance.$refs.toolbar\\r\\n .find(\\\"[data-fancybox-fullscreen]\\\")\\r\\n .toggleClass(\\\"fancybox-button--fsenter\\\", !isFullscreen)\\r\\n .toggleClass(\\\"fancybox-button--fsexit\\\", isFullscreen);\\r\\n }\\r\\n });\\r\\n }\\r\\n\\r\\n $(document).on({\\r\\n \\\"onInit.fb\\\": function (e, instance) {\\r\\n var $container;\\r\\n\\r\\n if (!fn) {\\r\\n instance.$refs.toolbar.find(\\\"[data-fancybox-fullscreen]\\\").remove();\\r\\n\\r\\n return;\\r\\n }\\r\\n\\r\\n if (instance && instance.group[instance.currIndex].opts.fullScreen) {\\r\\n $container = instance.$refs.container;\\r\\n\\r\\n $container.on(\\\"click.fb-fullscreen\\\", \\\"[data-fancybox-fullscreen]\\\", function (e) {\\r\\n e.stopPropagation();\\r\\n e.preventDefault();\\r\\n\\r\\n FullScreen.toggle();\\r\\n });\\r\\n\\r\\n if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {\\r\\n FullScreen.request();\\r\\n }\\r\\n\\r\\n // Expose API\\r\\n instance.FullScreen = FullScreen;\\r\\n } else if (instance) {\\r\\n instance.$refs.toolbar.find(\\\"[data-fancybox-fullscreen]\\\").hide();\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"afterKeydown.fb\\\": function (e, instance, current, keypress, keycode) {\\r\\n // \\\"F\\\"\\r\\n if (instance && instance.FullScreen && keycode === 70) {\\r\\n keypress.preventDefault();\\r\\n\\r\\n instance.FullScreen.toggle();\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"beforeClose.fb\\\": function (e, instance) {\\r\\n if (instance && instance.FullScreen && instance.$refs.container.hasClass(\\\"fancybox-is-fullscreen\\\")) {\\r\\n FullScreen.exit();\\r\\n }\\r\\n }\\r\\n });\\r\\n})(document, jQuery);\\n// ==========================================================================\\r\\n//\\r\\n// Thumbs\\r\\n// Displays thumbnails in a grid\\r\\n//\\r\\n// ==========================================================================\\r\\n(function (document, $) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n var CLASS = \\\"fancybox-thumbs\\\",\\r\\n CLASS_ACTIVE = CLASS + \\\"-active\\\";\\r\\n\\r\\n // Make sure there are default values\\r\\n $.fancybox.defaults = $.extend(\\r\\n true, {\\r\\n btnTpl: {\\r\\n thumbs: '\\\"\\r\\n },\\r\\n thumbs: {\\r\\n autoStart: false, // Display thumbnails on opening\\r\\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\\r\\n parentEl: \\\".fancybox-container\\\", // Container is injected into this element\\r\\n axis: \\\"y\\\" // Vertical (y) or horizontal (x) scrolling\\r\\n }\\r\\n },\\r\\n $.fancybox.defaults\\r\\n );\\r\\n\\r\\n var FancyThumbs = function (instance) {\\r\\n this.init(instance);\\r\\n };\\r\\n\\r\\n $.extend(FancyThumbs.prototype, {\\r\\n $button: null,\\r\\n $grid: null,\\r\\n $list: null,\\r\\n isVisible: false,\\r\\n isActive: false,\\r\\n\\r\\n init: function (instance) {\\r\\n var self = this,\\r\\n group = instance.group,\\r\\n enabled = 0;\\r\\n\\r\\n self.instance = instance;\\r\\n self.opts = group[instance.currIndex].opts.thumbs;\\r\\n\\r\\n instance.Thumbs = self;\\r\\n\\r\\n self.$button = instance.$refs.toolbar.find(\\\"[data-fancybox-thumbs]\\\");\\r\\n\\r\\n // Enable thumbs if at least two group items have thumbnails\\r\\n for (var i = 0, len = group.length; i < len; i++) {\\r\\n if (group[i].thumb) {\\r\\n enabled++;\\r\\n }\\r\\n\\r\\n if (enabled > 1) {\\r\\n break;\\r\\n }\\r\\n }\\r\\n\\r\\n if (enabled > 1 && !!self.opts) {\\r\\n self.$button.removeAttr(\\\"style\\\").on(\\\"click\\\", function () {\\r\\n self.toggle();\\r\\n });\\r\\n\\r\\n self.isActive = true;\\r\\n } else {\\r\\n self.$button.hide();\\r\\n }\\r\\n },\\r\\n\\r\\n create: function () {\\r\\n var self = this,\\r\\n instance = self.instance,\\r\\n parentEl = self.opts.parentEl,\\r\\n list = [],\\r\\n src;\\r\\n\\r\\n if (!self.$grid) {\\r\\n // Create main element\\r\\n self.$grid = $('
').appendTo(\\r\\n instance.$refs.container\\r\\n .find(parentEl)\\r\\n .addBack()\\r\\n .filter(parentEl)\\r\\n );\\r\\n\\r\\n // Add \\\"click\\\" event that performs gallery navigation\\r\\n self.$grid.on(\\\"click\\\", \\\"a\\\", function () {\\r\\n instance.jumpTo($(this).attr(\\\"data-index\\\"));\\r\\n });\\r\\n }\\r\\n\\r\\n // Build the list\\r\\n if (!self.$list) {\\r\\n self.$list = $('
').appendTo(self.$grid);\\r\\n }\\r\\n\\r\\n $.each(instance.group, function (i, item) {\\r\\n src = item.thumb;\\r\\n\\r\\n if (!src && item.type === \\\"image\\\") {\\r\\n src = item.src;\\r\\n }\\r\\n\\r\\n list.push(\\r\\n '\\\"\\r\\n );\\r\\n });\\r\\n\\r\\n self.$list[0].innerHTML = list.join(\\\"\\\");\\r\\n\\r\\n if (self.opts.axis === \\\"x\\\") {\\r\\n // Set fixed width for list element to enable horizontal scrolling\\r\\n self.$list.width(\\r\\n parseInt(self.$grid.css(\\\"padding-right\\\"), 10) +\\r\\n instance.group.length *\\r\\n self.$list\\r\\n .children()\\r\\n .eq(0)\\r\\n .outerWidth(true)\\r\\n );\\r\\n }\\r\\n },\\r\\n\\r\\n focus: function (duration) {\\r\\n var self = this,\\r\\n $list = self.$list,\\r\\n $grid = self.$grid,\\r\\n thumb,\\r\\n thumbPos;\\r\\n\\r\\n if (!self.instance.current) {\\r\\n return;\\r\\n }\\r\\n\\r\\n thumb = $list\\r\\n .children()\\r\\n .removeClass(CLASS_ACTIVE)\\r\\n .filter('[data-index=\\\"' + self.instance.current.index + '\\\"]')\\r\\n .addClass(CLASS_ACTIVE);\\r\\n\\r\\n thumbPos = thumb.position();\\r\\n\\r\\n // Check if need to scroll to make current thumb visible\\r\\n if (self.opts.axis === \\\"y\\\" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {\\r\\n $list.stop().animate({\\r\\n scrollTop: $list.scrollTop() + thumbPos.top\\r\\n },\\r\\n duration\\r\\n );\\r\\n } else if (\\r\\n self.opts.axis === \\\"x\\\" &&\\r\\n (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))\\r\\n ) {\\r\\n $list\\r\\n .parent()\\r\\n .stop()\\r\\n .animate({\\r\\n scrollLeft: thumbPos.left\\r\\n },\\r\\n duration\\r\\n );\\r\\n }\\r\\n },\\r\\n\\r\\n update: function () {\\r\\n var that = this;\\r\\n that.instance.$refs.container.toggleClass(\\\"fancybox-show-thumbs\\\", this.isVisible);\\r\\n\\r\\n if (that.isVisible) {\\r\\n if (!that.$grid) {\\r\\n that.create();\\r\\n }\\r\\n\\r\\n that.instance.trigger(\\\"onThumbsShow\\\");\\r\\n\\r\\n that.focus(0);\\r\\n } else if (that.$grid) {\\r\\n that.instance.trigger(\\\"onThumbsHide\\\");\\r\\n }\\r\\n\\r\\n // Update content position\\r\\n that.instance.update();\\r\\n },\\r\\n\\r\\n hide: function () {\\r\\n this.isVisible = false;\\r\\n this.update();\\r\\n },\\r\\n\\r\\n show: function () {\\r\\n this.isVisible = true;\\r\\n this.update();\\r\\n },\\r\\n\\r\\n toggle: function () {\\r\\n this.isVisible = !this.isVisible;\\r\\n this.update();\\r\\n }\\r\\n });\\r\\n\\r\\n $(document).on({\\r\\n \\\"onInit.fb\\\": function (e, instance) {\\r\\n var Thumbs;\\r\\n\\r\\n if (instance && !instance.Thumbs) {\\r\\n Thumbs = new FancyThumbs(instance);\\r\\n\\r\\n if (Thumbs.isActive && Thumbs.opts.autoStart === true) {\\r\\n Thumbs.show();\\r\\n }\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"beforeShow.fb\\\": function (e, instance, item, firstRun) {\\r\\n var Thumbs = instance && instance.Thumbs;\\r\\n\\r\\n if (Thumbs && Thumbs.isVisible) {\\r\\n Thumbs.focus(firstRun ? 0 : 250);\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"afterKeydown.fb\\\": function (e, instance, current, keypress, keycode) {\\r\\n var Thumbs = instance && instance.Thumbs;\\r\\n\\r\\n // \\\"G\\\"\\r\\n if (Thumbs && Thumbs.isActive && keycode === 71) {\\r\\n keypress.preventDefault();\\r\\n\\r\\n Thumbs.toggle();\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"beforeClose.fb\\\": function (e, instance) {\\r\\n var Thumbs = instance && instance.Thumbs;\\r\\n\\r\\n if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {\\r\\n Thumbs.$grid.hide();\\r\\n }\\r\\n }\\r\\n });\\r\\n})(document, jQuery);\\n//// ==========================================================================\\r\\n//\\r\\n// Share\\r\\n// Displays simple form for sharing current url\\r\\n//\\r\\n// ==========================================================================\\r\\n(function (document, $) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n $.extend(true, $.fancybox.defaults, {\\r\\n btnTpl: {\\r\\n share: '\\\"\\r\\n },\\r\\n share: {\\r\\n url: function (instance, item) {\\r\\n return (\\r\\n (!instance.currentHash && !(item.type === \\\"inline\\\" || item.type === \\\"html\\\") ? item.origSrc || item.src : false) || window.location\\r\\n );\\r\\n },\\r\\n tpl: '
' +\\r\\n \\\"

{{SHARE}}

\\\" +\\r\\n \\\"

\\\" +\\r\\n '' +\\r\\n '' +\\r\\n \\\"Facebook\\\" +\\r\\n \\\"\\\" +\\r\\n '' +\\r\\n '' +\\r\\n \\\"Twitter\\\" +\\r\\n \\\"\\\" +\\r\\n '' +\\r\\n '' +\\r\\n \\\"Pinterest\\\" +\\r\\n \\\"\\\" +\\r\\n \\\"

\\\" +\\r\\n '

' +\\r\\n \\\"
\\\"\\r\\n }\\r\\n });\\r\\n\\r\\n function escapeHtml(string) {\\r\\n var entityMap = {\\r\\n \\\"&\\\": \\\"&\\\",\\r\\n \\\"<\\\": \\\"<\\\",\\r\\n \\\">\\\": \\\">\\\",\\r\\n '\\\"': \\\""\\\",\\r\\n \\\"'\\\": \\\"'\\\",\\r\\n \\\"/\\\": \\\"/\\\",\\r\\n \\\"`\\\": \\\"`\\\",\\r\\n \\\"=\\\": \\\"=\\\"\\r\\n };\\r\\n\\r\\n return String(string).replace(/[&<>\\\"'`=\\\\/]/g, function (s) {\\r\\n return entityMap[s];\\r\\n });\\r\\n }\\r\\n\\r\\n $(document).on(\\\"click\\\", \\\"[data-fancybox-share]\\\", function () {\\r\\n var instance = $.fancybox.getInstance(),\\r\\n current = instance.current || null,\\r\\n url,\\r\\n tpl;\\r\\n\\r\\n if (!current) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if ($.type(current.opts.share.url) === \\\"function\\\") {\\r\\n url = current.opts.share.url.apply(current, [instance, current]);\\r\\n }\\r\\n\\r\\n tpl = current.opts.share.tpl\\r\\n .replace(/\\\\{\\\\{media\\\\}\\\\}/g, current.type === \\\"image\\\" ? encodeURIComponent(current.src) : \\\"\\\")\\r\\n .replace(/\\\\{\\\\{url\\\\}\\\\}/g, encodeURIComponent(url))\\r\\n .replace(/\\\\{\\\\{url_raw\\\\}\\\\}/g, escapeHtml(url))\\r\\n .replace(/\\\\{\\\\{descr\\\\}\\\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \\\"\\\");\\r\\n\\r\\n $.fancybox.open({\\r\\n src: instance.translate(instance, tpl),\\r\\n type: \\\"html\\\",\\r\\n opts: {\\r\\n touch: false,\\r\\n animationEffect: false,\\r\\n afterLoad: function (shareInstance, shareCurrent) {\\r\\n // Close self if parent instance is closing\\r\\n instance.$refs.container.one(\\\"beforeClose.fb\\\", function () {\\r\\n shareInstance.close(null, 0);\\r\\n });\\r\\n\\r\\n // Opening links in a popup window\\r\\n shareCurrent.$content.find(\\\".fancybox-share__button\\\").click(function () {\\r\\n window.open(this.href, \\\"Share\\\", \\\"width=550, height=450\\\");\\r\\n return false;\\r\\n });\\r\\n },\\r\\n mobile: {\\r\\n autoFocus: false\\r\\n }\\r\\n }\\r\\n });\\r\\n });\\r\\n})(document, jQuery);\\n// ==========================================================================\\r\\n//\\r\\n// Hash\\r\\n// Enables linking to each modal\\r\\n//\\r\\n// ==========================================================================\\r\\n(function (window, document, $) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\\r\\n if (!$.escapeSelector) {\\r\\n $.escapeSelector = function (sel) {\\r\\n var rcssescape = /([\\\\0-\\\\x1f\\\\x7f]|^-?\\\\d)|^-$|[^\\\\x80-\\\\uFFFF\\\\w-]/g;\\r\\n var fcssescape = function (ch, asCodePoint) {\\r\\n if (asCodePoint) {\\r\\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\\r\\n if (ch === \\\"\\\\0\\\") {\\r\\n return \\\"\\\\uFFFD\\\";\\r\\n }\\r\\n\\r\\n // Control characters and (dependent upon position) numbers get escaped as code points\\r\\n return ch.slice(0, -1) + \\\"\\\\\\\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \\\" \\\";\\r\\n }\\r\\n\\r\\n // Other potentially-special ASCII characters get backslash-escaped\\r\\n return \\\"\\\\\\\\\\\" + ch;\\r\\n };\\r\\n\\r\\n return (sel + \\\"\\\").replace(rcssescape, fcssescape);\\r\\n };\\r\\n }\\r\\n\\r\\n // Get info about gallery name and current index from url\\r\\n function parseUrl() {\\r\\n var hash = window.location.hash.substr(1),\\r\\n rez = hash.split(\\\"-\\\"),\\r\\n index = rez.length > 1 && /^\\\\+?\\\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\\r\\n gallery = rez.join(\\\"-\\\");\\r\\n\\r\\n return {\\r\\n hash: hash,\\r\\n /* Index is starting from 1 */\\r\\n index: index < 1 ? 1 : index,\\r\\n gallery: gallery\\r\\n };\\r\\n }\\r\\n\\r\\n // Trigger click evnt on links to open new fancyBox instance\\r\\n function triggerFromUrl(url) {\\r\\n if (url.gallery !== \\\"\\\") {\\r\\n // If we can find element matching 'data-fancybox' atribute,\\r\\n // then triggering click event should start fancyBox\\r\\n $(\\\"[data-fancybox='\\\" + $.escapeSelector(url.gallery) + \\\"']\\\")\\r\\n .eq(url.index - 1)\\r\\n .focus()\\r\\n .trigger(\\\"click.fb-start\\\");\\r\\n }\\r\\n }\\r\\n\\r\\n // Get gallery name from current instance\\r\\n function getGalleryID(instance) {\\r\\n var opts, ret;\\r\\n\\r\\n if (!instance) {\\r\\n return false;\\r\\n }\\r\\n\\r\\n opts = instance.current ? instance.current.opts : instance.opts;\\r\\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\\\"fancybox\\\") || opts.$orig.data(\\\"fancybox-trigger\\\") : \\\"\\\");\\r\\n\\r\\n return ret === \\\"\\\" ? false : ret;\\r\\n }\\r\\n\\r\\n // Start when DOM becomes ready\\r\\n $(function () {\\r\\n // Check if user has disabled this module\\r\\n if ($.fancybox.defaults.hash === false) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Update hash when opening/closing fancyBox\\r\\n $(document).on({\\r\\n \\\"onInit.fb\\\": function (e, instance) {\\r\\n var url, gallery;\\r\\n\\r\\n if (instance.group[instance.currIndex].opts.hash === false) {\\r\\n return;\\r\\n }\\r\\n\\r\\n url = parseUrl();\\r\\n gallery = getGalleryID(instance);\\r\\n\\r\\n // Make sure gallery start index matches index from hash\\r\\n if (gallery && url.gallery && gallery == url.gallery) {\\r\\n instance.currIndex = url.index - 1;\\r\\n }\\r\\n },\\r\\n\\r\\n \\\"beforeShow.fb\\\": function (e, instance, current, firstRun) {\\r\\n var gallery;\\r\\n\\r\\n if (!current || current.opts.hash === false) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Check if need to update window hash\\r\\n gallery = getGalleryID(instance);\\r\\n\\r\\n if (!gallery) {\\r\\n return;\\r\\n }\\r\\n\\r\\n // Variable containing last hash value set by fancyBox\\r\\n // It will be used to determine if fancyBox needs to close after hash change is detected\\r\\n instance.currentHash = gallery + (instance.group.length > 1 ? \\\"-\\\" + (current.index + 1) : \\\"\\\");\\r\\n\\r\\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\\r\\n if (window.location.hash === \\\"#\\\" + instance.currentHash) {\\r\\n return;\\r\\n }\\r\\n\\r\\n if (firstRun && !instance.origHash) {\\r\\n instance.origHash = window.location.hash;\\r\\n }\\r\\n\\r\\n if (instance.hashTimer) {\\r\\n clearTimeout(instance.hashTimer);\\r\\n }\\r\\n\\r\\n // Update hash\\r\\n instance.hashTimer = setTimeout(function () {\\r\\n if (\\\"replaceState\\\" in window.history) {\\r\\n window.history[firstRun ? \\\"pushState\\\" : \\\"replaceState\\\"]({},\\r\\n document.title,\\r\\n window.location.pathname + window.location.search + \\\"#\\\" + instance.currentHash\\r\\n );\\r\\n\\r\\n if (firstRun) {\\r\\n instance.hasCreatedHistory = true;\\r\\n }\\r\\n } else {\\r\\n window.location.hash = instance.currentHash;\\r\\n }\\r\\n\\r\\n instance.hashTimer = null;\\r\\n }, 300);\\r\\n },\\r\\n\\r\\n \\\"beforeClose.fb\\\": function (e, instance, current) {\\r\\n if (!current || current.opts.hash === false) {\\r\\n return;\\r\\n }\\r\\n\\r\\n clearTimeout(instance.hashTimer);\\r\\n\\r\\n // Goto previous history entry\\r\\n if (instance.currentHash && instance.hasCreatedHistory) {\\r\\n window.history.back();\\r\\n } else if (instance.currentHash) {\\r\\n if (\\\"replaceState\\\" in window.history) {\\r\\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \\\"\\\"));\\r\\n } else {\\r\\n window.location.hash = instance.origHash;\\r\\n }\\r\\n }\\r\\n\\r\\n instance.currentHash = null;\\r\\n }\\r\\n });\\r\\n\\r\\n // Check if need to start/close after url has changed\\r\\n $(window).on(\\\"hashchange.fb\\\", function () {\\r\\n var url = parseUrl(),\\r\\n fb = null;\\r\\n\\r\\n // Find last fancyBox instance that has \\\"hash\\\"\\r\\n $.each(\\r\\n $(\\\".fancybox-container\\\")\\r\\n .get()\\r\\n .reverse(),\\r\\n function (index, value) {\\r\\n var tmp = $(value).data(\\\"FancyBox\\\");\\r\\n\\r\\n if (tmp && tmp.currentHash) {\\r\\n fb = tmp;\\r\\n return false;\\r\\n }\\r\\n }\\r\\n );\\r\\n\\r\\n if (fb) {\\r\\n // Now, compare hash values\\r\\n if (fb.currentHash !== url.gallery + \\\"-\\\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\\r\\n fb.currentHash = null;\\r\\n\\r\\n fb.close();\\r\\n }\\r\\n } else if (url.gallery !== \\\"\\\") {\\r\\n triggerFromUrl(url);\\r\\n }\\r\\n });\\r\\n\\r\\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\\r\\n setTimeout(function () {\\r\\n if (!$.fancybox.getInstance()) {\\r\\n triggerFromUrl(parseUrl());\\r\\n }\\r\\n }, 50);\\r\\n });\\r\\n})(window, document, jQuery);\\n// ==========================================================================\\r\\n//\\r\\n// Wheel\\r\\n// Basic mouse weheel support for gallery navigation\\r\\n//\\r\\n// ==========================================================================\\r\\n(function (document, $) {\\r\\n \\\"use strict\\\";\\r\\n\\r\\n var prevTime = new Date().getTime();\\r\\n\\r\\n $(document).on({\\r\\n \\\"onInit.fb\\\": function (e, instance, current) {\\r\\n instance.$refs.stage.on(\\\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\\\", function (e) {\\r\\n var current = instance.current,\\r\\n currTime = new Date().getTime();\\r\\n\\r\\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \\\"auto\\\" && current.type !== \\\"image\\\")) {\\r\\n return;\\r\\n }\\r\\n\\r\\n e.preventDefault();\\r\\n e.stopPropagation();\\r\\n\\r\\n if (current.$slide.hasClass(\\\"fancybox-animated\\\")) {\\r\\n return;\\r\\n }\\r\\n\\r\\n e = e.originalEvent || e;\\r\\n\\r\\n if (currTime - prevTime < 250) {\\r\\n return;\\r\\n }\\r\\n\\r\\n prevTime = currTime;\\r\\n\\r\\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \\\"next\\\" : \\\"previous\\\"]();\\r\\n });\\r\\n }\\r\\n });\\r\\n})(document, jQuery);\\n\\n//# sourceURL=webpack:///./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/bootstrap/dist/js/bootstrap.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/bootstrap/dist/js/bootstrap.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/*!\\n * Bootstrap v4.6.1 (https://getbootstrap.com/)\\n * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n */\\n(function (global, factory) {\\n true ? factory(exports, __webpack_require__(/*! jquery */ \\\"jquery\\\"), __webpack_require__(/*! popper.js */ \\\"./node_modules/popper.js/dist/esm/popper.js\\\")) :\\n undefined;\\n})(this, (function (exports, $, Popper) { 'use strict';\\n\\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\\n\\n var $__default = /*#__PURE__*/_interopDefaultLegacy($);\\n var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);\\n\\n function _defineProperties(target, props) {\\n for (var i = 0; i < props.length; i++) {\\n var descriptor = props[i];\\n descriptor.enumerable = descriptor.enumerable || false;\\n descriptor.configurable = true;\\n if (\\\"value\\\" in descriptor) descriptor.writable = true;\\n Object.defineProperty(target, descriptor.key, descriptor);\\n }\\n }\\n\\n function _createClass(Constructor, protoProps, staticProps) {\\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\\n if (staticProps) _defineProperties(Constructor, staticProps);\\n return Constructor;\\n }\\n\\n function _extends() {\\n _extends = Object.assign || function (target) {\\n for (var i = 1; i < arguments.length; i++) {\\n var source = arguments[i];\\n\\n for (var key in source) {\\n if (Object.prototype.hasOwnProperty.call(source, key)) {\\n target[key] = source[key];\\n }\\n }\\n }\\n\\n return target;\\n };\\n\\n return _extends.apply(this, arguments);\\n }\\n\\n function _inheritsLoose(subClass, superClass) {\\n subClass.prototype = Object.create(superClass.prototype);\\n subClass.prototype.constructor = subClass;\\n\\n _setPrototypeOf(subClass, superClass);\\n }\\n\\n function _setPrototypeOf(o, p) {\\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\\n o.__proto__ = p;\\n return o;\\n };\\n\\n return _setPrototypeOf(o, p);\\n }\\n\\n /**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v4.6.1): util.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n /**\\n * Private TransitionEnd Helpers\\n */\\n\\n var TRANSITION_END = 'transitionend';\\n var MAX_UID = 1000000;\\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\\n\\n function toType(obj) {\\n if (obj === null || typeof obj === 'undefined') {\\n return \\\"\\\" + obj;\\n }\\n\\n return {}.toString.call(obj).match(/\\\\s([a-z]+)/i)[1].toLowerCase();\\n }\\n\\n function getSpecialTransitionEndEvent() {\\n return {\\n bindType: TRANSITION_END,\\n delegateType: TRANSITION_END,\\n handle: function handle(event) {\\n if ($__default[\\\"default\\\"](event.target).is(this)) {\\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\\n }\\n\\n return undefined;\\n }\\n };\\n }\\n\\n function transitionEndEmulator(duration) {\\n var _this = this;\\n\\n var called = false;\\n $__default[\\\"default\\\"](this).one(Util.TRANSITION_END, function () {\\n called = true;\\n });\\n setTimeout(function () {\\n if (!called) {\\n Util.triggerTransitionEnd(_this);\\n }\\n }, duration);\\n return this;\\n }\\n\\n function setTransitionEndSupport() {\\n $__default[\\\"default\\\"].fn.emulateTransitionEnd = transitionEndEmulator;\\n $__default[\\\"default\\\"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\\n }\\n /**\\n * Public Util API\\n */\\n\\n\\n var Util = {\\n TRANSITION_END: 'bsTransitionEnd',\\n getUID: function getUID(prefix) {\\n do {\\n // eslint-disable-next-line no-bitwise\\n prefix += ~~(Math.random() * MAX_UID); // \\\"~~\\\" acts like a faster Math.floor() here\\n } while (document.getElementById(prefix));\\n\\n return prefix;\\n },\\n getSelectorFromElement: function getSelectorFromElement(element) {\\n var selector = element.getAttribute('data-target');\\n\\n if (!selector || selector === '#') {\\n var hrefAttr = element.getAttribute('href');\\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\\n }\\n\\n try {\\n return document.querySelector(selector) ? selector : null;\\n } catch (_) {\\n return null;\\n }\\n },\\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\\n if (!element) {\\n return 0;\\n } // Get transition-duration of the element\\n\\n\\n var transitionDuration = $__default[\\\"default\\\"](element).css('transition-duration');\\n var transitionDelay = $__default[\\\"default\\\"](element).css('transition-delay');\\n var floatTransitionDuration = parseFloat(transitionDuration);\\n var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\\n\\n if (!floatTransitionDuration && !floatTransitionDelay) {\\n return 0;\\n } // If multiple durations are defined, take the first\\n\\n\\n transitionDuration = transitionDuration.split(',')[0];\\n transitionDelay = transitionDelay.split(',')[0];\\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\\n },\\n reflow: function reflow(element) {\\n return element.offsetHeight;\\n },\\n triggerTransitionEnd: function triggerTransitionEnd(element) {\\n $__default[\\\"default\\\"](element).trigger(TRANSITION_END);\\n },\\n supportsTransitionEnd: function supportsTransitionEnd() {\\n return Boolean(TRANSITION_END);\\n },\\n isElement: function isElement(obj) {\\n return (obj[0] || obj).nodeType;\\n },\\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\\n for (var property in configTypes) {\\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\\n var expectedTypes = configTypes[property];\\n var value = config[property];\\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\\n\\n if (!new RegExp(expectedTypes).test(valueType)) {\\n throw new Error(componentName.toUpperCase() + \\\": \\\" + (\\\"Option \\\\\\\"\\\" + property + \\\"\\\\\\\" provided type \\\\\\\"\\\" + valueType + \\\"\\\\\\\" \\\") + (\\\"but expected type \\\\\\\"\\\" + expectedTypes + \\\"\\\\\\\".\\\"));\\n }\\n }\\n }\\n },\\n findShadowRoot: function findShadowRoot(element) {\\n if (!document.documentElement.attachShadow) {\\n return null;\\n } // Can find the shadow root otherwise it'll return the document\\n\\n\\n if (typeof element.getRootNode === 'function') {\\n var root = element.getRootNode();\\n return root instanceof ShadowRoot ? root : null;\\n }\\n\\n if (element instanceof ShadowRoot) {\\n return element;\\n } // when we don't find a shadow root\\n\\n\\n if (!element.parentNode) {\\n return null;\\n }\\n\\n return Util.findShadowRoot(element.parentNode);\\n },\\n jQueryDetection: function jQueryDetection() {\\n if (typeof $__default[\\\"default\\\"] === 'undefined') {\\n throw new TypeError('Bootstrap\\\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\\\'s JavaScript.');\\n }\\n\\n var version = $__default[\\\"default\\\"].fn.jquery.split(' ')[0].split('.');\\n var minMajor = 1;\\n var ltMajor = 2;\\n var minMinor = 9;\\n var minPatch = 1;\\n var maxMajor = 4;\\n\\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\\n throw new Error('Bootstrap\\\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\\n }\\n }\\n };\\n Util.jQueryDetection();\\n setTransitionEndSupport();\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$a = 'alert';\\n var VERSION$a = '4.6.1';\\n var DATA_KEY$a = 'bs.alert';\\n var EVENT_KEY$a = \\\".\\\" + DATA_KEY$a;\\n var DATA_API_KEY$7 = '.data-api';\\n var JQUERY_NO_CONFLICT$a = $__default[\\\"default\\\"].fn[NAME$a];\\n var CLASS_NAME_ALERT = 'alert';\\n var CLASS_NAME_FADE$5 = 'fade';\\n var CLASS_NAME_SHOW$7 = 'show';\\n var EVENT_CLOSE = \\\"close\\\" + EVENT_KEY$a;\\n var EVENT_CLOSED = \\\"closed\\\" + EVENT_KEY$a;\\n var EVENT_CLICK_DATA_API$6 = \\\"click\\\" + EVENT_KEY$a + DATA_API_KEY$7;\\n var SELECTOR_DISMISS = '[data-dismiss=\\\"alert\\\"]';\\n /**\\n * Class definition\\n */\\n\\n var Alert = /*#__PURE__*/function () {\\n function Alert(element) {\\n this._element = element;\\n } // Getters\\n\\n\\n var _proto = Alert.prototype;\\n\\n // Public\\n _proto.close = function close(element) {\\n var rootElement = this._element;\\n\\n if (element) {\\n rootElement = this._getRootElement(element);\\n }\\n\\n var customEvent = this._triggerCloseEvent(rootElement);\\n\\n if (customEvent.isDefaultPrevented()) {\\n return;\\n }\\n\\n this._removeElement(rootElement);\\n };\\n\\n _proto.dispose = function dispose() {\\n $__default[\\\"default\\\"].removeData(this._element, DATA_KEY$a);\\n this._element = null;\\n } // Private\\n ;\\n\\n _proto._getRootElement = function _getRootElement(element) {\\n var selector = Util.getSelectorFromElement(element);\\n var parent = false;\\n\\n if (selector) {\\n parent = document.querySelector(selector);\\n }\\n\\n if (!parent) {\\n parent = $__default[\\\"default\\\"](element).closest(\\\".\\\" + CLASS_NAME_ALERT)[0];\\n }\\n\\n return parent;\\n };\\n\\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\\n var closeEvent = $__default[\\\"default\\\"].Event(EVENT_CLOSE);\\n $__default[\\\"default\\\"](element).trigger(closeEvent);\\n return closeEvent;\\n };\\n\\n _proto._removeElement = function _removeElement(element) {\\n var _this = this;\\n\\n $__default[\\\"default\\\"](element).removeClass(CLASS_NAME_SHOW$7);\\n\\n if (!$__default[\\\"default\\\"](element).hasClass(CLASS_NAME_FADE$5)) {\\n this._destroyElement(element);\\n\\n return;\\n }\\n\\n var transitionDuration = Util.getTransitionDurationFromElement(element);\\n $__default[\\\"default\\\"](element).one(Util.TRANSITION_END, function (event) {\\n return _this._destroyElement(element, event);\\n }).emulateTransitionEnd(transitionDuration);\\n };\\n\\n _proto._destroyElement = function _destroyElement(element) {\\n $__default[\\\"default\\\"](element).detach().trigger(EVENT_CLOSED).remove();\\n } // Static\\n ;\\n\\n Alert._jQueryInterface = function _jQueryInterface(config) {\\n return this.each(function () {\\n var $element = $__default[\\\"default\\\"](this);\\n var data = $element.data(DATA_KEY$a);\\n\\n if (!data) {\\n data = new Alert(this);\\n $element.data(DATA_KEY$a, data);\\n }\\n\\n if (config === 'close') {\\n data[config](this);\\n }\\n });\\n };\\n\\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\\n return function (event) {\\n if (event) {\\n event.preventDefault();\\n }\\n\\n alertInstance.close(this);\\n };\\n };\\n\\n _createClass(Alert, null, [{\\n key: \\\"VERSION\\\",\\n get: function get() {\\n return VERSION$a;\\n }\\n }]);\\n\\n return Alert;\\n }();\\n /**\\n * Data API implementation\\n */\\n\\n\\n $__default[\\\"default\\\"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\\n /**\\n * jQuery\\n */\\n\\n $__default[\\\"default\\\"].fn[NAME$a] = Alert._jQueryInterface;\\n $__default[\\\"default\\\"].fn[NAME$a].Constructor = Alert;\\n\\n $__default[\\\"default\\\"].fn[NAME$a].noConflict = function () {\\n $__default[\\\"default\\\"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\\n return Alert._jQueryInterface;\\n };\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$9 = 'button';\\n var VERSION$9 = '4.6.1';\\n var DATA_KEY$9 = 'bs.button';\\n var EVENT_KEY$9 = \\\".\\\" + DATA_KEY$9;\\n var DATA_API_KEY$6 = '.data-api';\\n var JQUERY_NO_CONFLICT$9 = $__default[\\\"default\\\"].fn[NAME$9];\\n var CLASS_NAME_ACTIVE$3 = 'active';\\n var CLASS_NAME_BUTTON = 'btn';\\n var CLASS_NAME_FOCUS = 'focus';\\n var EVENT_CLICK_DATA_API$5 = \\\"click\\\" + EVENT_KEY$9 + DATA_API_KEY$6;\\n var EVENT_FOCUS_BLUR_DATA_API = \\\"focus\\\" + EVENT_KEY$9 + DATA_API_KEY$6 + \\\" \\\" + (\\\"blur\\\" + EVENT_KEY$9 + DATA_API_KEY$6);\\n var EVENT_LOAD_DATA_API$2 = \\\"load\\\" + EVENT_KEY$9 + DATA_API_KEY$6;\\n var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\\\"button\\\"]';\\n var SELECTOR_DATA_TOGGLES = '[data-toggle=\\\"buttons\\\"]';\\n var SELECTOR_DATA_TOGGLE$4 = '[data-toggle=\\\"button\\\"]';\\n var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\\\"buttons\\\"] .btn';\\n var SELECTOR_INPUT = 'input:not([type=\\\"hidden\\\"])';\\n var SELECTOR_ACTIVE$2 = '.active';\\n var SELECTOR_BUTTON = '.btn';\\n /**\\n * Class definition\\n */\\n\\n var Button = /*#__PURE__*/function () {\\n function Button(element) {\\n this._element = element;\\n this.shouldAvoidTriggerChange = false;\\n } // Getters\\n\\n\\n var _proto = Button.prototype;\\n\\n // Public\\n _proto.toggle = function toggle() {\\n var triggerChangeEvent = true;\\n var addAriaPressed = true;\\n var rootElement = $__default[\\\"default\\\"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];\\n\\n if (rootElement) {\\n var input = this._element.querySelector(SELECTOR_INPUT);\\n\\n if (input) {\\n if (input.type === 'radio') {\\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) {\\n triggerChangeEvent = false;\\n } else {\\n var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);\\n\\n if (activeElement) {\\n $__default[\\\"default\\\"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);\\n }\\n }\\n }\\n\\n if (triggerChangeEvent) {\\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\\n if (input.type === 'checkbox' || input.type === 'radio') {\\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);\\n }\\n\\n if (!this.shouldAvoidTriggerChange) {\\n $__default[\\\"default\\\"](input).trigger('change');\\n }\\n }\\n\\n input.focus();\\n addAriaPressed = false;\\n }\\n }\\n\\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\\n if (addAriaPressed) {\\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));\\n }\\n\\n if (triggerChangeEvent) {\\n $__default[\\\"default\\\"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);\\n }\\n }\\n };\\n\\n _proto.dispose = function dispose() {\\n $__default[\\\"default\\\"].removeData(this._element, DATA_KEY$9);\\n this._element = null;\\n } // Static\\n ;\\n\\n Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {\\n return this.each(function () {\\n var $element = $__default[\\\"default\\\"](this);\\n var data = $element.data(DATA_KEY$9);\\n\\n if (!data) {\\n data = new Button(this);\\n $element.data(DATA_KEY$9, data);\\n }\\n\\n data.shouldAvoidTriggerChange = avoidTriggerChange;\\n\\n if (config === 'toggle') {\\n data[config]();\\n }\\n });\\n };\\n\\n _createClass(Button, null, [{\\n key: \\\"VERSION\\\",\\n get: function get() {\\n return VERSION$9;\\n }\\n }]);\\n\\n return Button;\\n }();\\n /**\\n * Data API implementation\\n */\\n\\n\\n $__default[\\\"default\\\"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\\n var button = event.target;\\n var initialButton = button;\\n\\n if (!$__default[\\\"default\\\"](button).hasClass(CLASS_NAME_BUTTON)) {\\n button = $__default[\\\"default\\\"](button).closest(SELECTOR_BUTTON)[0];\\n }\\n\\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\\n event.preventDefault(); // work around Firefox bug #1540995\\n } else {\\n var inputBtn = button.querySelector(SELECTOR_INPUT);\\n\\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\\n event.preventDefault(); // work around Firefox bug #1540995\\n\\n return;\\n }\\n\\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\\n Button._jQueryInterface.call($__default[\\\"default\\\"](button), 'toggle', initialButton.tagName === 'INPUT');\\n }\\n }\\n }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\\n var button = $__default[\\\"default\\\"](event.target).closest(SELECTOR_BUTTON)[0];\\n $__default[\\\"default\\\"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));\\n });\\n $__default[\\\"default\\\"](window).on(EVENT_LOAD_DATA_API$2, function () {\\n // ensure correct active class is set to match the controls' actual values/states\\n // find all checkboxes/readio buttons inside data-toggle groups\\n var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));\\n\\n for (var i = 0, len = buttons.length; i < len; i++) {\\n var button = buttons[i];\\n var input = button.querySelector(SELECTOR_INPUT);\\n\\n if (input.checked || input.hasAttribute('checked')) {\\n button.classList.add(CLASS_NAME_ACTIVE$3);\\n } else {\\n button.classList.remove(CLASS_NAME_ACTIVE$3);\\n }\\n } // find all button toggles\\n\\n\\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));\\n\\n for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\\n var _button = buttons[_i];\\n\\n if (_button.getAttribute('aria-pressed') === 'true') {\\n _button.classList.add(CLASS_NAME_ACTIVE$3);\\n } else {\\n _button.classList.remove(CLASS_NAME_ACTIVE$3);\\n }\\n }\\n });\\n /**\\n * jQuery\\n */\\n\\n $__default[\\\"default\\\"].fn[NAME$9] = Button._jQueryInterface;\\n $__default[\\\"default\\\"].fn[NAME$9].Constructor = Button;\\n\\n $__default[\\\"default\\\"].fn[NAME$9].noConflict = function () {\\n $__default[\\\"default\\\"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\\n return Button._jQueryInterface;\\n };\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$8 = 'carousel';\\n var VERSION$8 = '4.6.1';\\n var DATA_KEY$8 = 'bs.carousel';\\n var EVENT_KEY$8 = \\\".\\\" + DATA_KEY$8;\\n var DATA_API_KEY$5 = '.data-api';\\n var JQUERY_NO_CONFLICT$8 = $__default[\\\"default\\\"].fn[NAME$8];\\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\\n\\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\\n\\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\\n\\n var SWIPE_THRESHOLD = 40;\\n var CLASS_NAME_CAROUSEL = 'carousel';\\n var CLASS_NAME_ACTIVE$2 = 'active';\\n var CLASS_NAME_SLIDE = 'slide';\\n var CLASS_NAME_RIGHT = 'carousel-item-right';\\n var CLASS_NAME_LEFT = 'carousel-item-left';\\n var CLASS_NAME_NEXT = 'carousel-item-next';\\n var CLASS_NAME_PREV = 'carousel-item-prev';\\n var CLASS_NAME_POINTER_EVENT = 'pointer-event';\\n var DIRECTION_NEXT = 'next';\\n var DIRECTION_PREV = 'prev';\\n var DIRECTION_LEFT = 'left';\\n var DIRECTION_RIGHT = 'right';\\n var EVENT_SLIDE = \\\"slide\\\" + EVENT_KEY$8;\\n var EVENT_SLID = \\\"slid\\\" + EVENT_KEY$8;\\n var EVENT_KEYDOWN = \\\"keydown\\\" + EVENT_KEY$8;\\n var EVENT_MOUSEENTER = \\\"mouseenter\\\" + EVENT_KEY$8;\\n var EVENT_MOUSELEAVE = \\\"mouseleave\\\" + EVENT_KEY$8;\\n var EVENT_TOUCHSTART = \\\"touchstart\\\" + EVENT_KEY$8;\\n var EVENT_TOUCHMOVE = \\\"touchmove\\\" + EVENT_KEY$8;\\n var EVENT_TOUCHEND = \\\"touchend\\\" + EVENT_KEY$8;\\n var EVENT_POINTERDOWN = \\\"pointerdown\\\" + EVENT_KEY$8;\\n var EVENT_POINTERUP = \\\"pointerup\\\" + EVENT_KEY$8;\\n var EVENT_DRAG_START = \\\"dragstart\\\" + EVENT_KEY$8;\\n var EVENT_LOAD_DATA_API$1 = \\\"load\\\" + EVENT_KEY$8 + DATA_API_KEY$5;\\n var EVENT_CLICK_DATA_API$4 = \\\"click\\\" + EVENT_KEY$8 + DATA_API_KEY$5;\\n var SELECTOR_ACTIVE$1 = '.active';\\n var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\\n var SELECTOR_ITEM = '.carousel-item';\\n var SELECTOR_ITEM_IMG = '.carousel-item img';\\n var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\\n var SELECTOR_INDICATORS = '.carousel-indicators';\\n var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';\\n var SELECTOR_DATA_RIDE = '[data-ride=\\\"carousel\\\"]';\\n var Default$7 = {\\n interval: 5000,\\n keyboard: true,\\n slide: false,\\n pause: 'hover',\\n wrap: true,\\n touch: true\\n };\\n var DefaultType$7 = {\\n interval: '(number|boolean)',\\n keyboard: 'boolean',\\n slide: '(boolean|string)',\\n pause: '(string|boolean)',\\n wrap: 'boolean',\\n touch: 'boolean'\\n };\\n var PointerType = {\\n TOUCH: 'touch',\\n PEN: 'pen'\\n };\\n /**\\n * Class definition\\n */\\n\\n var Carousel = /*#__PURE__*/function () {\\n function Carousel(element, config) {\\n this._items = null;\\n this._interval = null;\\n this._activeElement = null;\\n this._isPaused = false;\\n this._isSliding = false;\\n this.touchTimeout = null;\\n this.touchStartX = 0;\\n this.touchDeltaX = 0;\\n this._config = this._getConfig(config);\\n this._element = element;\\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);\\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\\n\\n this._addEventListeners();\\n } // Getters\\n\\n\\n var _proto = Carousel.prototype;\\n\\n // Public\\n _proto.next = function next() {\\n if (!this._isSliding) {\\n this._slide(DIRECTION_NEXT);\\n }\\n };\\n\\n _proto.nextWhenVisible = function nextWhenVisible() {\\n var $element = $__default[\\\"default\\\"](this._element); // Don't call next when the page isn't visible\\n // or the carousel or its parent isn't visible\\n\\n if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {\\n this.next();\\n }\\n };\\n\\n _proto.prev = function prev() {\\n if (!this._isSliding) {\\n this._slide(DIRECTION_PREV);\\n }\\n };\\n\\n _proto.pause = function pause(event) {\\n if (!event) {\\n this._isPaused = true;\\n }\\n\\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\\n Util.triggerTransitionEnd(this._element);\\n this.cycle(true);\\n }\\n\\n clearInterval(this._interval);\\n this._interval = null;\\n };\\n\\n _proto.cycle = function cycle(event) {\\n if (!event) {\\n this._isPaused = false;\\n }\\n\\n if (this._interval) {\\n clearInterval(this._interval);\\n this._interval = null;\\n }\\n\\n if (this._config.interval && !this._isPaused) {\\n this._updateInterval();\\n\\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\\n }\\n };\\n\\n _proto.to = function to(index) {\\n var _this = this;\\n\\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\\n\\n var activeIndex = this._getItemIndex(this._activeElement);\\n\\n if (index > this._items.length - 1 || index < 0) {\\n return;\\n }\\n\\n if (this._isSliding) {\\n $__default[\\\"default\\\"](this._element).one(EVENT_SLID, function () {\\n return _this.to(index);\\n });\\n return;\\n }\\n\\n if (activeIndex === index) {\\n this.pause();\\n this.cycle();\\n return;\\n }\\n\\n var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;\\n\\n this._slide(direction, this._items[index]);\\n };\\n\\n _proto.dispose = function dispose() {\\n $__default[\\\"default\\\"](this._element).off(EVENT_KEY$8);\\n $__default[\\\"default\\\"].removeData(this._element, DATA_KEY$8);\\n this._items = null;\\n this._config = null;\\n this._element = null;\\n this._interval = null;\\n this._isPaused = null;\\n this._isSliding = null;\\n this._activeElement = null;\\n this._indicatorsElement = null;\\n } // Private\\n ;\\n\\n _proto._getConfig = function _getConfig(config) {\\n config = _extends({}, Default$7, config);\\n Util.typeCheckConfig(NAME$8, config, DefaultType$7);\\n return config;\\n };\\n\\n _proto._handleSwipe = function _handleSwipe() {\\n var absDeltax = Math.abs(this.touchDeltaX);\\n\\n if (absDeltax <= SWIPE_THRESHOLD) {\\n return;\\n }\\n\\n var direction = absDeltax / this.touchDeltaX;\\n this.touchDeltaX = 0; // swipe left\\n\\n if (direction > 0) {\\n this.prev();\\n } // swipe right\\n\\n\\n if (direction < 0) {\\n this.next();\\n }\\n };\\n\\n _proto._addEventListeners = function _addEventListeners() {\\n var _this2 = this;\\n\\n if (this._config.keyboard) {\\n $__default[\\\"default\\\"](this._element).on(EVENT_KEYDOWN, function (event) {\\n return _this2._keydown(event);\\n });\\n }\\n\\n if (this._config.pause === 'hover') {\\n $__default[\\\"default\\\"](this._element).on(EVENT_MOUSEENTER, function (event) {\\n return _this2.pause(event);\\n }).on(EVENT_MOUSELEAVE, function (event) {\\n return _this2.cycle(event);\\n });\\n }\\n\\n if (this._config.touch) {\\n this._addTouchEventListeners();\\n }\\n };\\n\\n _proto._addTouchEventListeners = function _addTouchEventListeners() {\\n var _this3 = this;\\n\\n if (!this._touchSupported) {\\n return;\\n }\\n\\n var start = function start(event) {\\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\\n _this3.touchStartX = event.originalEvent.clientX;\\n } else if (!_this3._pointerEvent) {\\n _this3.touchStartX = event.originalEvent.touches[0].clientX;\\n }\\n };\\n\\n var move = function move(event) {\\n // ensure swiping with one touch and not pinching\\n _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;\\n };\\n\\n var end = function end(event) {\\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\\n _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\\n }\\n\\n _this3._handleSwipe();\\n\\n if (_this3._config.pause === 'hover') {\\n // If it's a touch-enabled device, mouseenter/leave are fired as\\n // part of the mouse compatibility events on first tap - the carousel\\n // would stop cycling until user tapped out of it;\\n // here, we listen for touchend, explicitly pause the carousel\\n // (as if it's the second time we tap on it, mouseenter compat event\\n // is NOT fired) and after a timeout (to allow for mouse compatibility\\n // events to fire) we explicitly restart cycling\\n _this3.pause();\\n\\n if (_this3.touchTimeout) {\\n clearTimeout(_this3.touchTimeout);\\n }\\n\\n _this3.touchTimeout = setTimeout(function (event) {\\n return _this3.cycle(event);\\n }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\\n }\\n };\\n\\n $__default[\\\"default\\\"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {\\n return e.preventDefault();\\n });\\n\\n if (this._pointerEvent) {\\n $__default[\\\"default\\\"](this._element).on(EVENT_POINTERDOWN, function (event) {\\n return start(event);\\n });\\n $__default[\\\"default\\\"](this._element).on(EVENT_POINTERUP, function (event) {\\n return end(event);\\n });\\n\\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\\n } else {\\n $__default[\\\"default\\\"](this._element).on(EVENT_TOUCHSTART, function (event) {\\n return start(event);\\n });\\n $__default[\\\"default\\\"](this._element).on(EVENT_TOUCHMOVE, function (event) {\\n return move(event);\\n });\\n $__default[\\\"default\\\"](this._element).on(EVENT_TOUCHEND, function (event) {\\n return end(event);\\n });\\n }\\n };\\n\\n _proto._keydown = function _keydown(event) {\\n if (/input|textarea/i.test(event.target.tagName)) {\\n return;\\n }\\n\\n switch (event.which) {\\n case ARROW_LEFT_KEYCODE:\\n event.preventDefault();\\n this.prev();\\n break;\\n\\n case ARROW_RIGHT_KEYCODE:\\n event.preventDefault();\\n this.next();\\n break;\\n }\\n };\\n\\n _proto._getItemIndex = function _getItemIndex(element) {\\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];\\n return this._items.indexOf(element);\\n };\\n\\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\\n var isNextDirection = direction === DIRECTION_NEXT;\\n var isPrevDirection = direction === DIRECTION_PREV;\\n\\n var activeIndex = this._getItemIndex(activeElement);\\n\\n var lastItemIndex = this._items.length - 1;\\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\\n\\n if (isGoingToWrap && !this._config.wrap) {\\n return activeElement;\\n }\\n\\n var delta = direction === DIRECTION_PREV ? -1 : 1;\\n var itemIndex = (activeIndex + delta) % this._items.length;\\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\\n };\\n\\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\\n var targetIndex = this._getItemIndex(relatedTarget);\\n\\n var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));\\n\\n var slideEvent = $__default[\\\"default\\\"].Event(EVENT_SLIDE, {\\n relatedTarget: relatedTarget,\\n direction: eventDirectionName,\\n from: fromIndex,\\n to: targetIndex\\n });\\n $__default[\\\"default\\\"](this._element).trigger(slideEvent);\\n return slideEvent;\\n };\\n\\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\\n if (this._indicatorsElement) {\\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));\\n $__default[\\\"default\\\"](indicators).removeClass(CLASS_NAME_ACTIVE$2);\\n\\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\\n\\n if (nextIndicator) {\\n $__default[\\\"default\\\"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);\\n }\\n }\\n };\\n\\n _proto._updateInterval = function _updateInterval() {\\n var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);\\n\\n if (!element) {\\n return;\\n }\\n\\n var elementInterval = parseInt(element.getAttribute('data-interval'), 10);\\n\\n if (elementInterval) {\\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\\n this._config.interval = elementInterval;\\n } else {\\n this._config.interval = this._config.defaultInterval || this._config.interval;\\n }\\n };\\n\\n _proto._slide = function _slide(direction, element) {\\n var _this4 = this;\\n\\n var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\\n\\n var activeElementIndex = this._getItemIndex(activeElement);\\n\\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\\n\\n var nextElementIndex = this._getItemIndex(nextElement);\\n\\n var isCycling = Boolean(this._interval);\\n var directionalClassName;\\n var orderClassName;\\n var eventDirectionName;\\n\\n if (direction === DIRECTION_NEXT) {\\n directionalClassName = CLASS_NAME_LEFT;\\n orderClassName = CLASS_NAME_NEXT;\\n eventDirectionName = DIRECTION_LEFT;\\n } else {\\n directionalClassName = CLASS_NAME_RIGHT;\\n orderClassName = CLASS_NAME_PREV;\\n eventDirectionName = DIRECTION_RIGHT;\\n }\\n\\n if (nextElement && $__default[\\\"default\\\"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {\\n this._isSliding = false;\\n return;\\n }\\n\\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\\n\\n if (slideEvent.isDefaultPrevented()) {\\n return;\\n }\\n\\n if (!activeElement || !nextElement) {\\n // Some weirdness is happening, so we bail\\n return;\\n }\\n\\n this._isSliding = true;\\n\\n if (isCycling) {\\n this.pause();\\n }\\n\\n this._setActiveIndicatorElement(nextElement);\\n\\n this._activeElement = nextElement;\\n var slidEvent = $__default[\\\"default\\\"].Event(EVENT_SLID, {\\n relatedTarget: nextElement,\\n direction: eventDirectionName,\\n from: activeElementIndex,\\n to: nextElementIndex\\n });\\n\\n if ($__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_SLIDE)) {\\n $__default[\\\"default\\\"](nextElement).addClass(orderClassName);\\n Util.reflow(nextElement);\\n $__default[\\\"default\\\"](activeElement).addClass(directionalClassName);\\n $__default[\\\"default\\\"](nextElement).addClass(directionalClassName);\\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\\n $__default[\\\"default\\\"](activeElement).one(Util.TRANSITION_END, function () {\\n $__default[\\\"default\\\"](nextElement).removeClass(directionalClassName + \\\" \\\" + orderClassName).addClass(CLASS_NAME_ACTIVE$2);\\n $__default[\\\"default\\\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + \\\" \\\" + orderClassName + \\\" \\\" + directionalClassName);\\n _this4._isSliding = false;\\n setTimeout(function () {\\n return $__default[\\\"default\\\"](_this4._element).trigger(slidEvent);\\n }, 0);\\n }).emulateTransitionEnd(transitionDuration);\\n } else {\\n $__default[\\\"default\\\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);\\n $__default[\\\"default\\\"](nextElement).addClass(CLASS_NAME_ACTIVE$2);\\n this._isSliding = false;\\n $__default[\\\"default\\\"](this._element).trigger(slidEvent);\\n }\\n\\n if (isCycling) {\\n this.cycle();\\n }\\n } // Static\\n ;\\n\\n Carousel._jQueryInterface = function _jQueryInterface(config) {\\n return this.each(function () {\\n var data = $__default[\\\"default\\\"](this).data(DATA_KEY$8);\\n\\n var _config = _extends({}, Default$7, $__default[\\\"default\\\"](this).data());\\n\\n if (typeof config === 'object') {\\n _config = _extends({}, _config, config);\\n }\\n\\n var action = typeof config === 'string' ? config : _config.slide;\\n\\n if (!data) {\\n data = new Carousel(this, _config);\\n $__default[\\\"default\\\"](this).data(DATA_KEY$8, data);\\n }\\n\\n if (typeof config === 'number') {\\n data.to(config);\\n } else if (typeof action === 'string') {\\n if (typeof data[action] === 'undefined') {\\n throw new TypeError(\\\"No method named \\\\\\\"\\\" + action + \\\"\\\\\\\"\\\");\\n }\\n\\n data[action]();\\n } else if (_config.interval && _config.ride) {\\n data.pause();\\n data.cycle();\\n }\\n });\\n };\\n\\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\\n var selector = Util.getSelectorFromElement(this);\\n\\n if (!selector) {\\n return;\\n }\\n\\n var target = $__default[\\\"default\\\"](selector)[0];\\n\\n if (!target || !$__default[\\\"default\\\"](target).hasClass(CLASS_NAME_CAROUSEL)) {\\n return;\\n }\\n\\n var config = _extends({}, $__default[\\\"default\\\"](target).data(), $__default[\\\"default\\\"](this).data());\\n\\n var slideIndex = this.getAttribute('data-slide-to');\\n\\n if (slideIndex) {\\n config.interval = false;\\n }\\n\\n Carousel._jQueryInterface.call($__default[\\\"default\\\"](target), config);\\n\\n if (slideIndex) {\\n $__default[\\\"default\\\"](target).data(DATA_KEY$8).to(slideIndex);\\n }\\n\\n event.preventDefault();\\n };\\n\\n _createClass(Carousel, null, [{\\n key: \\\"VERSION\\\",\\n get: function get() {\\n return VERSION$8;\\n }\\n }, {\\n key: \\\"Default\\\",\\n get: function get() {\\n return Default$7;\\n }\\n }]);\\n\\n return Carousel;\\n }();\\n /**\\n * Data API implementation\\n */\\n\\n\\n $__default[\\\"default\\\"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);\\n $__default[\\\"default\\\"](window).on(EVENT_LOAD_DATA_API$1, function () {\\n var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));\\n\\n for (var i = 0, len = carousels.length; i < len; i++) {\\n var $carousel = $__default[\\\"default\\\"](carousels[i]);\\n\\n Carousel._jQueryInterface.call($carousel, $carousel.data());\\n }\\n });\\n /**\\n * jQuery\\n */\\n\\n $__default[\\\"default\\\"].fn[NAME$8] = Carousel._jQueryInterface;\\n $__default[\\\"default\\\"].fn[NAME$8].Constructor = Carousel;\\n\\n $__default[\\\"default\\\"].fn[NAME$8].noConflict = function () {\\n $__default[\\\"default\\\"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\\n return Carousel._jQueryInterface;\\n };\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$7 = 'collapse';\\n var VERSION$7 = '4.6.1';\\n var DATA_KEY$7 = 'bs.collapse';\\n var EVENT_KEY$7 = \\\".\\\" + DATA_KEY$7;\\n var DATA_API_KEY$4 = '.data-api';\\n var JQUERY_NO_CONFLICT$7 = $__default[\\\"default\\\"].fn[NAME$7];\\n var CLASS_NAME_SHOW$6 = 'show';\\n var CLASS_NAME_COLLAPSE = 'collapse';\\n var CLASS_NAME_COLLAPSING = 'collapsing';\\n var CLASS_NAME_COLLAPSED = 'collapsed';\\n var DIMENSION_WIDTH = 'width';\\n var DIMENSION_HEIGHT = 'height';\\n var EVENT_SHOW$4 = \\\"show\\\" + EVENT_KEY$7;\\n var EVENT_SHOWN$4 = \\\"shown\\\" + EVENT_KEY$7;\\n var EVENT_HIDE$4 = \\\"hide\\\" + EVENT_KEY$7;\\n var EVENT_HIDDEN$4 = \\\"hidden\\\" + EVENT_KEY$7;\\n var EVENT_CLICK_DATA_API$3 = \\\"click\\\" + EVENT_KEY$7 + DATA_API_KEY$4;\\n var SELECTOR_ACTIVES = '.show, .collapsing';\\n var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\\\"collapse\\\"]';\\n var Default$6 = {\\n toggle: true,\\n parent: ''\\n };\\n var DefaultType$6 = {\\n toggle: 'boolean',\\n parent: '(string|element)'\\n };\\n /**\\n * Class definition\\n */\\n\\n var Collapse = /*#__PURE__*/function () {\\n function Collapse(element, config) {\\n this._isTransitioning = false;\\n this._element = element;\\n this._config = this._getConfig(config);\\n this._triggerArray = [].slice.call(document.querySelectorAll(\\\"[data-toggle=\\\\\\\"collapse\\\\\\\"][href=\\\\\\\"#\\\" + element.id + \\\"\\\\\\\"],\\\" + (\\\"[data-toggle=\\\\\\\"collapse\\\\\\\"][data-target=\\\\\\\"#\\\" + element.id + \\\"\\\\\\\"]\\\")));\\n var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));\\n\\n for (var i = 0, len = toggleList.length; i < len; i++) {\\n var elem = toggleList[i];\\n var selector = Util.getSelectorFromElement(elem);\\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\\n return foundElem === element;\\n });\\n\\n if (selector !== null && filterElement.length > 0) {\\n this._selector = selector;\\n\\n this._triggerArray.push(elem);\\n }\\n }\\n\\n this._parent = this._config.parent ? this._getParent() : null;\\n\\n if (!this._config.parent) {\\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\\n }\\n\\n if (this._config.toggle) {\\n this.toggle();\\n }\\n } // Getters\\n\\n\\n var _proto = Collapse.prototype;\\n\\n // Public\\n _proto.toggle = function toggle() {\\n if ($__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\\n this.hide();\\n } else {\\n this.show();\\n }\\n };\\n\\n _proto.show = function show() {\\n var _this = this;\\n\\n if (this._isTransitioning || $__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\\n return;\\n }\\n\\n var actives;\\n var activesData;\\n\\n if (this._parent) {\\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {\\n if (typeof _this._config.parent === 'string') {\\n return elem.getAttribute('data-parent') === _this._config.parent;\\n }\\n\\n return elem.classList.contains(CLASS_NAME_COLLAPSE);\\n });\\n\\n if (actives.length === 0) {\\n actives = null;\\n }\\n }\\n\\n if (actives) {\\n activesData = $__default[\\\"default\\\"](actives).not(this._selector).data(DATA_KEY$7);\\n\\n if (activesData && activesData._isTransitioning) {\\n return;\\n }\\n }\\n\\n var startEvent = $__default[\\\"default\\\"].Event(EVENT_SHOW$4);\\n $__default[\\\"default\\\"](this._element).trigger(startEvent);\\n\\n if (startEvent.isDefaultPrevented()) {\\n return;\\n }\\n\\n if (actives) {\\n Collapse._jQueryInterface.call($__default[\\\"default\\\"](actives).not(this._selector), 'hide');\\n\\n if (!activesData) {\\n $__default[\\\"default\\\"](actives).data(DATA_KEY$7, null);\\n }\\n }\\n\\n var dimension = this._getDimension();\\n\\n $__default[\\\"default\\\"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);\\n this._element.style[dimension] = 0;\\n\\n if (this._triggerArray.length) {\\n $__default[\\\"default\\\"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);\\n }\\n\\n this.setTransitioning(true);\\n\\n var complete = function complete() {\\n $__default[\\\"default\\\"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + \\\" \\\" + CLASS_NAME_SHOW$6);\\n _this._element.style[dimension] = '';\\n\\n _this.setTransitioning(false);\\n\\n $__default[\\\"default\\\"](_this._element).trigger(EVENT_SHOWN$4);\\n };\\n\\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\\n var scrollSize = \\\"scroll\\\" + capitalizedDimension;\\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\\n $__default[\\\"default\\\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\\n this._element.style[dimension] = this._element[scrollSize] + \\\"px\\\";\\n };\\n\\n _proto.hide = function hide() {\\n var _this2 = this;\\n\\n if (this._isTransitioning || !$__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\\n return;\\n }\\n\\n var startEvent = $__default[\\\"default\\\"].Event(EVENT_HIDE$4);\\n $__default[\\\"default\\\"](this._element).trigger(startEvent);\\n\\n if (startEvent.isDefaultPrevented()) {\\n return;\\n }\\n\\n var dimension = this._getDimension();\\n\\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \\\"px\\\";\\n Util.reflow(this._element);\\n $__default[\\\"default\\\"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + \\\" \\\" + CLASS_NAME_SHOW$6);\\n var triggerArrayLength = this._triggerArray.length;\\n\\n if (triggerArrayLength > 0) {\\n for (var i = 0; i < triggerArrayLength; i++) {\\n var trigger = this._triggerArray[i];\\n var selector = Util.getSelectorFromElement(trigger);\\n\\n if (selector !== null) {\\n var $elem = $__default[\\\"default\\\"]([].slice.call(document.querySelectorAll(selector)));\\n\\n if (!$elem.hasClass(CLASS_NAME_SHOW$6)) {\\n $__default[\\\"default\\\"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);\\n }\\n }\\n }\\n }\\n\\n this.setTransitioning(true);\\n\\n var complete = function complete() {\\n _this2.setTransitioning(false);\\n\\n $__default[\\\"default\\\"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);\\n };\\n\\n this._element.style[dimension] = '';\\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\\n $__default[\\\"default\\\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\\n };\\n\\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\\n this._isTransitioning = isTransitioning;\\n };\\n\\n _proto.dispose = function dispose() {\\n $__default[\\\"default\\\"].removeData(this._element, DATA_KEY$7);\\n this._config = null;\\n this._parent = null;\\n this._element = null;\\n this._triggerArray = null;\\n this._isTransitioning = null;\\n } // Private\\n ;\\n\\n _proto._getConfig = function _getConfig(config) {\\n config = _extends({}, Default$6, config);\\n config.toggle = Boolean(config.toggle); // Coerce string values\\n\\n Util.typeCheckConfig(NAME$7, config, DefaultType$6);\\n return config;\\n };\\n\\n _proto._getDimension = function _getDimension() {\\n var hasWidth = $__default[\\\"default\\\"](this._element).hasClass(DIMENSION_WIDTH);\\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;\\n };\\n\\n _proto._getParent = function _getParent() {\\n var _this3 = this;\\n\\n var parent;\\n\\n if (Util.isElement(this._config.parent)) {\\n parent = this._config.parent; // It's a jQuery object\\n\\n if (typeof this._config.parent.jquery !== 'undefined') {\\n parent = this._config.parent[0];\\n }\\n } else {\\n parent = document.querySelector(this._config.parent);\\n }\\n\\n var selector = \\\"[data-toggle=\\\\\\\"collapse\\\\\\\"][data-parent=\\\\\\\"\\\" + this._config.parent + \\\"\\\\\\\"]\\\";\\n var children = [].slice.call(parent.querySelectorAll(selector));\\n $__default[\\\"default\\\"](children).each(function (i, element) {\\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\\n });\\n return parent;\\n };\\n\\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\\n var isOpen = $__default[\\\"default\\\"](element).hasClass(CLASS_NAME_SHOW$6);\\n\\n if (triggerArray.length) {\\n $__default[\\\"default\\\"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\\n }\\n } // Static\\n ;\\n\\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\\n var selector = Util.getSelectorFromElement(element);\\n return selector ? document.querySelector(selector) : null;\\n };\\n\\n Collapse._jQueryInterface = function _jQueryInterface(config) {\\n return this.each(function () {\\n var $element = $__default[\\\"default\\\"](this);\\n var data = $element.data(DATA_KEY$7);\\n\\n var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});\\n\\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\\n _config.toggle = false;\\n }\\n\\n if (!data) {\\n data = new Collapse(this, _config);\\n $element.data(DATA_KEY$7, data);\\n }\\n\\n if (typeof config === 'string') {\\n if (typeof data[config] === 'undefined') {\\n throw new TypeError(\\\"No method named \\\\\\\"\\\" + config + \\\"\\\\\\\"\\\");\\n }\\n\\n data[config]();\\n }\\n });\\n };\\n\\n _createClass(Collapse, null, [{\\n key: \\\"VERSION\\\",\\n get: function get() {\\n return VERSION$7;\\n }\\n }, {\\n key: \\\"Default\\\",\\n get: function get() {\\n return Default$6;\\n }\\n }]);\\n\\n return Collapse;\\n }();\\n /**\\n * Data API implementation\\n */\\n\\n\\n $__default[\\\"default\\\"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\\n // preventDefault only for elements (which change the URL) not inside the collapsible element\\n if (event.currentTarget.tagName === 'A') {\\n event.preventDefault();\\n }\\n\\n var $trigger = $__default[\\\"default\\\"](this);\\n var selector = Util.getSelectorFromElement(this);\\n var selectors = [].slice.call(document.querySelectorAll(selector));\\n $__default[\\\"default\\\"](selectors).each(function () {\\n var $target = $__default[\\\"default\\\"](this);\\n var data = $target.data(DATA_KEY$7);\\n var config = data ? 'toggle' : $trigger.data();\\n\\n Collapse._jQueryInterface.call($target, config);\\n });\\n });\\n /**\\n * jQuery\\n */\\n\\n $__default[\\\"default\\\"].fn[NAME$7] = Collapse._jQueryInterface;\\n $__default[\\\"default\\\"].fn[NAME$7].Constructor = Collapse;\\n\\n $__default[\\\"default\\\"].fn[NAME$7].noConflict = function () {\\n $__default[\\\"default\\\"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\\n return Collapse._jQueryInterface;\\n };\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$6 = 'dropdown';\\n var VERSION$6 = '4.6.1';\\n var DATA_KEY$6 = 'bs.dropdown';\\n var EVENT_KEY$6 = \\\".\\\" + DATA_KEY$6;\\n var DATA_API_KEY$3 = '.data-api';\\n var JQUERY_NO_CONFLICT$6 = $__default[\\\"default\\\"].fn[NAME$6];\\n var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\\n\\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\\n\\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\\n\\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\\n\\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\\n\\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\\n\\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \\\"|\\\" + ARROW_DOWN_KEYCODE + \\\"|\\\" + ESCAPE_KEYCODE$1);\\n var CLASS_NAME_DISABLED$1 = 'disabled';\\n var CLASS_NAME_SHOW$5 = 'show';\\n var CLASS_NAME_DROPUP = 'dropup';\\n var CLASS_NAME_DROPRIGHT = 'dropright';\\n var CLASS_NAME_DROPLEFT = 'dropleft';\\n var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';\\n var CLASS_NAME_POSITION_STATIC = 'position-static';\\n var EVENT_HIDE$3 = \\\"hide\\\" + EVENT_KEY$6;\\n var EVENT_HIDDEN$3 = \\\"hidden\\\" + EVENT_KEY$6;\\n var EVENT_SHOW$3 = \\\"show\\\" + EVENT_KEY$6;\\n var EVENT_SHOWN$3 = \\\"shown\\\" + EVENT_KEY$6;\\n var EVENT_CLICK = \\\"click\\\" + EVENT_KEY$6;\\n var EVENT_CLICK_DATA_API$2 = \\\"click\\\" + EVENT_KEY$6 + DATA_API_KEY$3;\\n var EVENT_KEYDOWN_DATA_API = \\\"keydown\\\" + EVENT_KEY$6 + DATA_API_KEY$3;\\n var EVENT_KEYUP_DATA_API = \\\"keyup\\\" + EVENT_KEY$6 + DATA_API_KEY$3;\\n var SELECTOR_DATA_TOGGLE$2 = '[data-toggle=\\\"dropdown\\\"]';\\n var SELECTOR_FORM_CHILD = '.dropdown form';\\n var SELECTOR_MENU = '.dropdown-menu';\\n var SELECTOR_NAVBAR_NAV = '.navbar-nav';\\n var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\\n var PLACEMENT_TOP = 'top-start';\\n var PLACEMENT_TOPEND = 'top-end';\\n var PLACEMENT_BOTTOM = 'bottom-start';\\n var PLACEMENT_BOTTOMEND = 'bottom-end';\\n var PLACEMENT_RIGHT = 'right-start';\\n var PLACEMENT_LEFT = 'left-start';\\n var Default$5 = {\\n offset: 0,\\n flip: true,\\n boundary: 'scrollParent',\\n reference: 'toggle',\\n display: 'dynamic',\\n popperConfig: null\\n };\\n var DefaultType$5 = {\\n offset: '(number|string|function)',\\n flip: 'boolean',\\n boundary: '(string|element)',\\n reference: '(string|element)',\\n display: 'string',\\n popperConfig: '(null|object)'\\n };\\n /**\\n * Class definition\\n */\\n\\n var Dropdown = /*#__PURE__*/function () {\\n function Dropdown(element, config) {\\n this._element = element;\\n this._popper = null;\\n this._config = this._getConfig(config);\\n this._menu = this._getMenuElement();\\n this._inNavbar = this._detectNavbar();\\n\\n this._addEventListeners();\\n } // Getters\\n\\n\\n var _proto = Dropdown.prototype;\\n\\n // Public\\n _proto.toggle = function toggle() {\\n if (this._element.disabled || $__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {\\n return;\\n }\\n\\n var isActive = $__default[\\\"default\\\"](this._menu).hasClass(CLASS_NAME_SHOW$5);\\n\\n Dropdown._clearMenus();\\n\\n if (isActive) {\\n return;\\n }\\n\\n this.show(true);\\n };\\n\\n _proto.show = function show(usePopper) {\\n if (usePopper === void 0) {\\n usePopper = false;\\n }\\n\\n if (this._element.disabled || $__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default[\\\"default\\\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {\\n return;\\n }\\n\\n var relatedTarget = {\\n relatedTarget: this._element\\n };\\n var showEvent = $__default[\\\"default\\\"].Event(EVENT_SHOW$3, relatedTarget);\\n\\n var parent = Dropdown._getParentFromElement(this._element);\\n\\n $__default[\\\"default\\\"](parent).trigger(showEvent);\\n\\n if (showEvent.isDefaultPrevented()) {\\n return;\\n } // Totally disable Popper for Dropdowns in Navbar\\n\\n\\n if (!this._inNavbar && usePopper) {\\n // Check for Popper dependency\\n if (typeof Popper__default[\\\"default\\\"] === 'undefined') {\\n throw new TypeError('Bootstrap\\\\'s dropdowns require Popper (https://popper.js.org)');\\n }\\n\\n var referenceElement = this._element;\\n\\n if (this._config.reference === 'parent') {\\n referenceElement = parent;\\n } else if (Util.isElement(this._config.reference)) {\\n referenceElement = this._config.reference; // Check if it's jQuery element\\n\\n if (typeof this._config.reference.jquery !== 'undefined') {\\n referenceElement = this._config.reference[0];\\n }\\n } // If boundary is not `scrollParent`, then set position to `static`\\n // to allow the menu to \\\"escape\\\" the scroll parent's boundaries\\n // https://github.com/twbs/bootstrap/issues/24251\\n\\n\\n if (this._config.boundary !== 'scrollParent') {\\n $__default[\\\"default\\\"](parent).addClass(CLASS_NAME_POSITION_STATIC);\\n }\\n\\n this._popper = new Popper__default[\\\"default\\\"](referenceElement, this._menu, this._getPopperConfig());\\n } // If this is a touch-enabled device we add extra\\n // empty mouseover listeners to the body's immediate children;\\n // only needed because of broken event delegation on iOS\\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\\n\\n\\n if ('ontouchstart' in document.documentElement && $__default[\\\"default\\\"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\\n $__default[\\\"default\\\"](document.body).children().on('mouseover', null, $__default[\\\"default\\\"].noop);\\n }\\n\\n this._element.focus();\\n\\n this._element.setAttribute('aria-expanded', true);\\n\\n $__default[\\\"default\\\"](this._menu).toggleClass(CLASS_NAME_SHOW$5);\\n $__default[\\\"default\\\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\\\"default\\\"].Event(EVENT_SHOWN$3, relatedTarget));\\n };\\n\\n _proto.hide = function hide() {\\n if (this._element.disabled || $__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default[\\\"default\\\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {\\n return;\\n }\\n\\n var relatedTarget = {\\n relatedTarget: this._element\\n };\\n var hideEvent = $__default[\\\"default\\\"].Event(EVENT_HIDE$3, relatedTarget);\\n\\n var parent = Dropdown._getParentFromElement(this._element);\\n\\n $__default[\\\"default\\\"](parent).trigger(hideEvent);\\n\\n if (hideEvent.isDefaultPrevented()) {\\n return;\\n }\\n\\n if (this._popper) {\\n this._popper.destroy();\\n }\\n\\n $__default[\\\"default\\\"](this._menu).toggleClass(CLASS_NAME_SHOW$5);\\n $__default[\\\"default\\\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\\\"default\\\"].Event(EVENT_HIDDEN$3, relatedTarget));\\n };\\n\\n _proto.dispose = function dispose() {\\n $__default[\\\"default\\\"].removeData(this._element, DATA_KEY$6);\\n $__default[\\\"default\\\"](this._element).off(EVENT_KEY$6);\\n this._element = null;\\n this._menu = null;\\n\\n if (this._popper !== null) {\\n this._popper.destroy();\\n\\n this._popper = null;\\n }\\n };\\n\\n _proto.update = function update() {\\n this._inNavbar = this._detectNavbar();\\n\\n if (this._popper !== null) {\\n this._popper.scheduleUpdate();\\n }\\n } // Private\\n ;\\n\\n _proto._addEventListeners = function _addEventListeners() {\\n var _this = this;\\n\\n $__default[\\\"default\\\"](this._element).on(EVENT_CLICK, function (event) {\\n event.preventDefault();\\n event.stopPropagation();\\n\\n _this.toggle();\\n });\\n };\\n\\n _proto._getConfig = function _getConfig(config) {\\n config = _extends({}, this.constructor.Default, $__default[\\\"default\\\"](this._element).data(), config);\\n Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\\n return config;\\n };\\n\\n _proto._getMenuElement = function _getMenuElement() {\\n if (!this._menu) {\\n var parent = Dropdown._getParentFromElement(this._element);\\n\\n if (parent) {\\n this._menu = parent.querySelector(SELECTOR_MENU);\\n }\\n }\\n\\n return this._menu;\\n };\\n\\n _proto._getPlacement = function _getPlacement() {\\n var $parentDropdown = $__default[\\\"default\\\"](this._element.parentNode);\\n var placement = PLACEMENT_BOTTOM; // Handle dropup\\n\\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\\n placement = $__default[\\\"default\\\"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;\\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\\n placement = PLACEMENT_RIGHT;\\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\\n placement = PLACEMENT_LEFT;\\n } else if ($__default[\\\"default\\\"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\\n placement = PLACEMENT_BOTTOMEND;\\n }\\n\\n return placement;\\n };\\n\\n _proto._detectNavbar = function _detectNavbar() {\\n return $__default[\\\"default\\\"](this._element).closest('.navbar').length > 0;\\n };\\n\\n _proto._getOffset = function _getOffset() {\\n var _this2 = this;\\n\\n var offset = {};\\n\\n if (typeof this._config.offset === 'function') {\\n offset.fn = function (data) {\\n data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));\\n return data;\\n };\\n } else {\\n offset.offset = this._config.offset;\\n }\\n\\n return offset;\\n };\\n\\n _proto._getPopperConfig = function _getPopperConfig() {\\n var popperConfig = {\\n placement: this._getPlacement(),\\n modifiers: {\\n offset: this._getOffset(),\\n flip: {\\n enabled: this._config.flip\\n },\\n preventOverflow: {\\n boundariesElement: this._config.boundary\\n }\\n }\\n }; // Disable Popper if we have a static display\\n\\n if (this._config.display === 'static') {\\n popperConfig.modifiers.applyStyle = {\\n enabled: false\\n };\\n }\\n\\n return _extends({}, popperConfig, this._config.popperConfig);\\n } // Static\\n ;\\n\\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\\n return this.each(function () {\\n var data = $__default[\\\"default\\\"](this).data(DATA_KEY$6);\\n\\n var _config = typeof config === 'object' ? config : null;\\n\\n if (!data) {\\n data = new Dropdown(this, _config);\\n $__default[\\\"default\\\"](this).data(DATA_KEY$6, data);\\n }\\n\\n if (typeof config === 'string') {\\n if (typeof data[config] === 'undefined') {\\n throw new TypeError(\\\"No method named \\\\\\\"\\\" + config + \\\"\\\\\\\"\\\");\\n }\\n\\n data[config]();\\n }\\n });\\n };\\n\\n Dropdown._clearMenus = function _clearMenus(event) {\\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\\n return;\\n }\\n\\n var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));\\n\\n for (var i = 0, len = toggles.length; i < len; i++) {\\n var parent = Dropdown._getParentFromElement(toggles[i]);\\n\\n var context = $__default[\\\"default\\\"](toggles[i]).data(DATA_KEY$6);\\n var relatedTarget = {\\n relatedTarget: toggles[i]\\n };\\n\\n if (event && event.type === 'click') {\\n relatedTarget.clickEvent = event;\\n }\\n\\n if (!context) {\\n continue;\\n }\\n\\n var dropdownMenu = context._menu;\\n\\n if (!$__default[\\\"default\\\"](parent).hasClass(CLASS_NAME_SHOW$5)) {\\n continue;\\n }\\n\\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default[\\\"default\\\"].contains(parent, event.target)) {\\n continue;\\n }\\n\\n var hideEvent = $__default[\\\"default\\\"].Event(EVENT_HIDE$3, relatedTarget);\\n $__default[\\\"default\\\"](parent).trigger(hideEvent);\\n\\n if (hideEvent.isDefaultPrevented()) {\\n continue;\\n } // If this is a touch-enabled device we remove the extra\\n // empty mouseover listeners we added for iOS support\\n\\n\\n if ('ontouchstart' in document.documentElement) {\\n $__default[\\\"default\\\"](document.body).children().off('mouseover', null, $__default[\\\"default\\\"].noop);\\n }\\n\\n toggles[i].setAttribute('aria-expanded', 'false');\\n\\n if (context._popper) {\\n context._popper.destroy();\\n }\\n\\n $__default[\\\"default\\\"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);\\n $__default[\\\"default\\\"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default[\\\"default\\\"].Event(EVENT_HIDDEN$3, relatedTarget));\\n }\\n };\\n\\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\\n var parent;\\n var selector = Util.getSelectorFromElement(element);\\n\\n if (selector) {\\n parent = document.querySelector(selector);\\n }\\n\\n return parent || element.parentNode;\\n } // eslint-disable-next-line complexity\\n ;\\n\\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\\n // If not input/textarea:\\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\\n // If input/textarea:\\n // - If space key => not a dropdown command\\n // - If key is other than escape\\n // - If key is not up or down => not a dropdown command\\n // - If trigger inside the menu => not a dropdown command\\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default[\\\"default\\\"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\\n return;\\n }\\n\\n if (this.disabled || $__default[\\\"default\\\"](this).hasClass(CLASS_NAME_DISABLED$1)) {\\n return;\\n }\\n\\n var parent = Dropdown._getParentFromElement(this);\\n\\n var isActive = $__default[\\\"default\\\"](parent).hasClass(CLASS_NAME_SHOW$5);\\n\\n if (!isActive && event.which === ESCAPE_KEYCODE$1) {\\n return;\\n }\\n\\n event.preventDefault();\\n event.stopPropagation();\\n\\n if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {\\n if (event.which === ESCAPE_KEYCODE$1) {\\n $__default[\\\"default\\\"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');\\n }\\n\\n $__default[\\\"default\\\"](this).trigger('click');\\n return;\\n }\\n\\n var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {\\n return $__default[\\\"default\\\"](item).is(':visible');\\n });\\n\\n if (items.length === 0) {\\n return;\\n }\\n\\n var index = items.indexOf(event.target);\\n\\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\\n // Up\\n index--;\\n }\\n\\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\\n // Down\\n index++;\\n }\\n\\n if (index < 0) {\\n index = 0;\\n }\\n\\n items[index].focus();\\n };\\n\\n _createClass(Dropdown, null, [{\\n key: \\\"VERSION\\\",\\n get: function get() {\\n return VERSION$6;\\n }\\n }, {\\n key: \\\"Default\\\",\\n get: function get() {\\n return Default$5;\\n }\\n }, {\\n key: \\\"DefaultType\\\",\\n get: function get() {\\n return DefaultType$5;\\n }\\n }]);\\n\\n return Dropdown;\\n }();\\n /**\\n * Data API implementation\\n */\\n\\n\\n $__default[\\\"default\\\"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + \\\" \\\" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\\n event.preventDefault();\\n event.stopPropagation();\\n\\n Dropdown._jQueryInterface.call($__default[\\\"default\\\"](this), 'toggle');\\n }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) {\\n e.stopPropagation();\\n });\\n /**\\n * jQuery\\n */\\n\\n $__default[\\\"default\\\"].fn[NAME$6] = Dropdown._jQueryInterface;\\n $__default[\\\"default\\\"].fn[NAME$6].Constructor = Dropdown;\\n\\n $__default[\\\"default\\\"].fn[NAME$6].noConflict = function () {\\n $__default[\\\"default\\\"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\\n return Dropdown._jQueryInterface;\\n };\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$5 = 'modal';\\n var VERSION$5 = '4.6.1';\\n var DATA_KEY$5 = 'bs.modal';\\n var EVENT_KEY$5 = \\\".\\\" + DATA_KEY$5;\\n var DATA_API_KEY$2 = '.data-api';\\n var JQUERY_NO_CONFLICT$5 = $__default[\\\"default\\\"].fn[NAME$5];\\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\\n\\n var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\\n var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\\n var CLASS_NAME_BACKDROP = 'modal-backdrop';\\n var CLASS_NAME_OPEN = 'modal-open';\\n var CLASS_NAME_FADE$4 = 'fade';\\n var CLASS_NAME_SHOW$4 = 'show';\\n var CLASS_NAME_STATIC = 'modal-static';\\n var EVENT_HIDE$2 = \\\"hide\\\" + EVENT_KEY$5;\\n var EVENT_HIDE_PREVENTED = \\\"hidePrevented\\\" + EVENT_KEY$5;\\n var EVENT_HIDDEN$2 = \\\"hidden\\\" + EVENT_KEY$5;\\n var EVENT_SHOW$2 = \\\"show\\\" + EVENT_KEY$5;\\n var EVENT_SHOWN$2 = \\\"shown\\\" + EVENT_KEY$5;\\n var EVENT_FOCUSIN = \\\"focusin\\\" + EVENT_KEY$5;\\n var EVENT_RESIZE = \\\"resize\\\" + EVENT_KEY$5;\\n var EVENT_CLICK_DISMISS$1 = \\\"click.dismiss\\\" + EVENT_KEY$5;\\n var EVENT_KEYDOWN_DISMISS = \\\"keydown.dismiss\\\" + EVENT_KEY$5;\\n var EVENT_MOUSEUP_DISMISS = \\\"mouseup.dismiss\\\" + EVENT_KEY$5;\\n var EVENT_MOUSEDOWN_DISMISS = \\\"mousedown.dismiss\\\" + EVENT_KEY$5;\\n var EVENT_CLICK_DATA_API$1 = \\\"click\\\" + EVENT_KEY$5 + DATA_API_KEY$2;\\n var SELECTOR_DIALOG = '.modal-dialog';\\n var SELECTOR_MODAL_BODY = '.modal-body';\\n var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\\\"modal\\\"]';\\n var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\\\"modal\\\"]';\\n var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\\n var SELECTOR_STICKY_CONTENT = '.sticky-top';\\n var Default$4 = {\\n backdrop: true,\\n keyboard: true,\\n focus: true,\\n show: true\\n };\\n var DefaultType$4 = {\\n backdrop: '(boolean|string)',\\n keyboard: 'boolean',\\n focus: 'boolean',\\n show: 'boolean'\\n };\\n /**\\n * Class definition\\n */\\n\\n var Modal = /*#__PURE__*/function () {\\n function Modal(element, config) {\\n this._config = this._getConfig(config);\\n this._element = element;\\n this._dialog = element.querySelector(SELECTOR_DIALOG);\\n this._backdrop = null;\\n this._isShown = false;\\n this._isBodyOverflowing = false;\\n this._ignoreBackdropClick = false;\\n this._isTransitioning = false;\\n this._scrollbarWidth = 0;\\n } // Getters\\n\\n\\n var _proto = Modal.prototype;\\n\\n // Public\\n _proto.toggle = function toggle(relatedTarget) {\\n return this._isShown ? this.hide() : this.show(relatedTarget);\\n };\\n\\n _proto.show = function show(relatedTarget) {\\n var _this = this;\\n\\n if (this._isShown || this._isTransitioning) {\\n return;\\n }\\n\\n var showEvent = $__default[\\\"default\\\"].Event(EVENT_SHOW$2, {\\n relatedTarget: relatedTarget\\n });\\n $__default[\\\"default\\\"](this._element).trigger(showEvent);\\n\\n if (showEvent.isDefaultPrevented()) {\\n return;\\n }\\n\\n this._isShown = true;\\n\\n if ($__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_FADE$4)) {\\n this._isTransitioning = true;\\n }\\n\\n this._checkScrollbar();\\n\\n this._setScrollbar();\\n\\n this._adjustDialog();\\n\\n this._setEscapeEvent();\\n\\n this._setResizeEvent();\\n\\n $__default[\\\"default\\\"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) {\\n return _this.hide(event);\\n });\\n $__default[\\\"default\\\"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {\\n $__default[\\\"default\\\"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {\\n if ($__default[\\\"default\\\"](event.target).is(_this._element)) {\\n _this._ignoreBackdropClick = true;\\n }\\n });\\n });\\n\\n this._showBackdrop(function () {\\n return _this._showElement(relatedTarget);\\n });\\n };\\n\\n _proto.hide = function hide(event) {\\n var _this2 = this;\\n\\n if (event) {\\n event.preventDefault();\\n }\\n\\n if (!this._isShown || this._isTransitioning) {\\n return;\\n }\\n\\n var hideEvent = $__default[\\\"default\\\"].Event(EVENT_HIDE$2);\\n $__default[\\\"default\\\"](this._element).trigger(hideEvent);\\n\\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\\n return;\\n }\\n\\n this._isShown = false;\\n var transition = $__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_FADE$4);\\n\\n if (transition) {\\n this._isTransitioning = true;\\n }\\n\\n this._setEscapeEvent();\\n\\n this._setResizeEvent();\\n\\n $__default[\\\"default\\\"](document).off(EVENT_FOCUSIN);\\n $__default[\\\"default\\\"](this._element).removeClass(CLASS_NAME_SHOW$4);\\n $__default[\\\"default\\\"](this._element).off(EVENT_CLICK_DISMISS$1);\\n $__default[\\\"default\\\"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\\n\\n if (transition) {\\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\\n $__default[\\\"default\\\"](this._element).one(Util.TRANSITION_END, function (event) {\\n return _this2._hideModal(event);\\n }).emulateTransitionEnd(transitionDuration);\\n } else {\\n this._hideModal();\\n }\\n };\\n\\n _proto.dispose = function dispose() {\\n [window, this._element, this._dialog].forEach(function (htmlElement) {\\n return $__default[\\\"default\\\"](htmlElement).off(EVENT_KEY$5);\\n });\\n /**\\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\\n * Do not move `document` in `htmlElements` array\\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\\n */\\n\\n $__default[\\\"default\\\"](document).off(EVENT_FOCUSIN);\\n $__default[\\\"default\\\"].removeData(this._element, DATA_KEY$5);\\n this._config = null;\\n this._element = null;\\n this._dialog = null;\\n this._backdrop = null;\\n this._isShown = null;\\n this._isBodyOverflowing = null;\\n this._ignoreBackdropClick = null;\\n this._isTransitioning = null;\\n this._scrollbarWidth = null;\\n };\\n\\n _proto.handleUpdate = function handleUpdate() {\\n this._adjustDialog();\\n } // Private\\n ;\\n\\n _proto._getConfig = function _getConfig(config) {\\n config = _extends({}, Default$4, config);\\n Util.typeCheckConfig(NAME$5, config, DefaultType$4);\\n return config;\\n };\\n\\n _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\\n var _this3 = this;\\n\\n var hideEventPrevented = $__default[\\\"default\\\"].Event(EVENT_HIDE_PREVENTED);\\n $__default[\\\"default\\\"](this._element).trigger(hideEventPrevented);\\n\\n if (hideEventPrevented.isDefaultPrevented()) {\\n return;\\n }\\n\\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\\n\\n if (!isModalOverflowing) {\\n this._element.style.overflowY = 'hidden';\\n }\\n\\n this._element.classList.add(CLASS_NAME_STATIC);\\n\\n var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);\\n $__default[\\\"default\\\"](this._element).off(Util.TRANSITION_END);\\n $__default[\\\"default\\\"](this._element).one(Util.TRANSITION_END, function () {\\n _this3._element.classList.remove(CLASS_NAME_STATIC);\\n\\n if (!isModalOverflowing) {\\n $__default[\\\"default\\\"](_this3._element).one(Util.TRANSITION_END, function () {\\n _this3._element.style.overflowY = '';\\n }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\\n }\\n }).emulateTransitionEnd(modalTransitionDuration);\\n\\n this._element.focus();\\n };\\n\\n _proto._showElement = function _showElement(relatedTarget) {\\n var _this4 = this;\\n\\n var transition = $__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_FADE$4);\\n var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;\\n\\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\\n // Don't move modal's DOM position\\n document.body.appendChild(this._element);\\n }\\n\\n this._element.style.display = 'block';\\n\\n this._element.removeAttribute('aria-hidden');\\n\\n this._element.setAttribute('aria-modal', true);\\n\\n this._element.setAttribute('role', 'dialog');\\n\\n if ($__default[\\\"default\\\"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\\n modalBody.scrollTop = 0;\\n } else {\\n this._element.scrollTop = 0;\\n }\\n\\n if (transition) {\\n Util.reflow(this._element);\\n }\\n\\n $__default[\\\"default\\\"](this._element).addClass(CLASS_NAME_SHOW$4);\\n\\n if (this._config.focus) {\\n this._enforceFocus();\\n }\\n\\n var shownEvent = $__default[\\\"default\\\"].Event(EVENT_SHOWN$2, {\\n relatedTarget: relatedTarget\\n });\\n\\n var transitionComplete = function transitionComplete() {\\n if (_this4._config.focus) {\\n _this4._element.focus();\\n }\\n\\n _this4._isTransitioning = false;\\n $__default[\\\"default\\\"](_this4._element).trigger(shownEvent);\\n };\\n\\n if (transition) {\\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\\n $__default[\\\"default\\\"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\\n } else {\\n transitionComplete();\\n }\\n };\\n\\n _proto._enforceFocus = function _enforceFocus() {\\n var _this5 = this;\\n\\n $__default[\\\"default\\\"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\\n .on(EVENT_FOCUSIN, function (event) {\\n if (document !== event.target && _this5._element !== event.target && $__default[\\\"default\\\"](_this5._element).has(event.target).length === 0) {\\n _this5._element.focus();\\n }\\n });\\n };\\n\\n _proto._setEscapeEvent = function _setEscapeEvent() {\\n var _this6 = this;\\n\\n if (this._isShown) {\\n $__default[\\\"default\\\"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {\\n if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\\n event.preventDefault();\\n\\n _this6.hide();\\n } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\\n _this6._triggerBackdropTransition();\\n }\\n });\\n } else if (!this._isShown) {\\n $__default[\\\"default\\\"](this._element).off(EVENT_KEYDOWN_DISMISS);\\n }\\n };\\n\\n _proto._setResizeEvent = function _setResizeEvent() {\\n var _this7 = this;\\n\\n if (this._isShown) {\\n $__default[\\\"default\\\"](window).on(EVENT_RESIZE, function (event) {\\n return _this7.handleUpdate(event);\\n });\\n } else {\\n $__default[\\\"default\\\"](window).off(EVENT_RESIZE);\\n }\\n };\\n\\n _proto._hideModal = function _hideModal() {\\n var _this8 = this;\\n\\n this._element.style.display = 'none';\\n\\n this._element.setAttribute('aria-hidden', true);\\n\\n this._element.removeAttribute('aria-modal');\\n\\n this._element.removeAttribute('role');\\n\\n this._isTransitioning = false;\\n\\n this._showBackdrop(function () {\\n $__default[\\\"default\\\"](document.body).removeClass(CLASS_NAME_OPEN);\\n\\n _this8._resetAdjustments();\\n\\n _this8._resetScrollbar();\\n\\n $__default[\\\"default\\\"](_this8._element).trigger(EVENT_HIDDEN$2);\\n });\\n };\\n\\n _proto._removeBackdrop = function _removeBackdrop() {\\n if (this._backdrop) {\\n $__default[\\\"default\\\"](this._backdrop).remove();\\n this._backdrop = null;\\n }\\n };\\n\\n _proto._showBackdrop = function _showBackdrop(callback) {\\n var _this9 = this;\\n\\n var animate = $__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';\\n\\n if (this._isShown && this._config.backdrop) {\\n this._backdrop = document.createElement('div');\\n this._backdrop.className = CLASS_NAME_BACKDROP;\\n\\n if (animate) {\\n this._backdrop.classList.add(animate);\\n }\\n\\n $__default[\\\"default\\\"](this._backdrop).appendTo(document.body);\\n $__default[\\\"default\\\"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) {\\n if (_this9._ignoreBackdropClick) {\\n _this9._ignoreBackdropClick = false;\\n return;\\n }\\n\\n if (event.target !== event.currentTarget) {\\n return;\\n }\\n\\n if (_this9._config.backdrop === 'static') {\\n _this9._triggerBackdropTransition();\\n } else {\\n _this9.hide();\\n }\\n });\\n\\n if (animate) {\\n Util.reflow(this._backdrop);\\n }\\n\\n $__default[\\\"default\\\"](this._backdrop).addClass(CLASS_NAME_SHOW$4);\\n\\n if (!callback) {\\n return;\\n }\\n\\n if (!animate) {\\n callback();\\n return;\\n }\\n\\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\\n $__default[\\\"default\\\"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\\n } else if (!this._isShown && this._backdrop) {\\n $__default[\\\"default\\\"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);\\n\\n var callbackRemove = function callbackRemove() {\\n _this9._removeBackdrop();\\n\\n if (callback) {\\n callback();\\n }\\n };\\n\\n if ($__default[\\\"default\\\"](this._element).hasClass(CLASS_NAME_FADE$4)) {\\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\\n\\n $__default[\\\"default\\\"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\\n } else {\\n callbackRemove();\\n }\\n } else if (callback) {\\n callback();\\n }\\n } // ----------------------------------------------------------------------\\n // the following methods are used to handle overflowing modals\\n // todo (fat): these should probably be refactored out of modal.js\\n // ----------------------------------------------------------------------\\n ;\\n\\n _proto._adjustDialog = function _adjustDialog() {\\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\\n\\n if (!this._isBodyOverflowing && isModalOverflowing) {\\n this._element.style.paddingLeft = this._scrollbarWidth + \\\"px\\\";\\n }\\n\\n if (this._isBodyOverflowing && !isModalOverflowing) {\\n this._element.style.paddingRight = this._scrollbarWidth + \\\"px\\\";\\n }\\n };\\n\\n _proto._resetAdjustments = function _resetAdjustments() {\\n this._element.style.paddingLeft = '';\\n this._element.style.paddingRight = '';\\n };\\n\\n _proto._checkScrollbar = function _checkScrollbar() {\\n var rect = document.body.getBoundingClientRect();\\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;\\n this._scrollbarWidth = this._getScrollbarWidth();\\n };\\n\\n _proto._setScrollbar = function _setScrollbar() {\\n var _this10 = this;\\n\\n if (this._isBodyOverflowing) {\\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\\n var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\\n var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding\\n\\n $__default[\\\"default\\\"](fixedContent).each(function (index, element) {\\n var actualPadding = element.style.paddingRight;\\n var calculatedPadding = $__default[\\\"default\\\"](element).css('padding-right');\\n $__default[\\\"default\\\"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \\\"px\\\");\\n }); // Adjust sticky content margin\\n\\n $__default[\\\"default\\\"](stickyContent).each(function (index, element) {\\n var actualMargin = element.style.marginRight;\\n var calculatedMargin = $__default[\\\"default\\\"](element).css('margin-right');\\n $__default[\\\"default\\\"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \\\"px\\\");\\n }); // Adjust body padding\\n\\n var actualPadding = document.body.style.paddingRight;\\n var calculatedPadding = $__default[\\\"default\\\"](document.body).css('padding-right');\\n $__default[\\\"default\\\"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \\\"px\\\");\\n }\\n\\n $__default[\\\"default\\\"](document.body).addClass(CLASS_NAME_OPEN);\\n };\\n\\n _proto._resetScrollbar = function _resetScrollbar() {\\n // Restore fixed content padding\\n var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\\n $__default[\\\"default\\\"](fixedContent).each(function (index, element) {\\n var padding = $__default[\\\"default\\\"](element).data('padding-right');\\n $__default[\\\"default\\\"](element).removeData('padding-right');\\n element.style.paddingRight = padding ? padding : '';\\n }); // Restore sticky content\\n\\n var elements = [].slice.call(document.querySelectorAll(\\\"\\\" + SELECTOR_STICKY_CONTENT));\\n $__default[\\\"default\\\"](elements).each(function (index, element) {\\n var margin = $__default[\\\"default\\\"](element).data('margin-right');\\n\\n if (typeof margin !== 'undefined') {\\n $__default[\\\"default\\\"](element).css('margin-right', margin).removeData('margin-right');\\n }\\n }); // Restore body padding\\n\\n var padding = $__default[\\\"default\\\"](document.body).data('padding-right');\\n $__default[\\\"default\\\"](document.body).removeData('padding-right');\\n document.body.style.paddingRight = padding ? padding : '';\\n };\\n\\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\\n // thx d.walsh\\n var scrollDiv = document.createElement('div');\\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;\\n document.body.appendChild(scrollDiv);\\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\\n document.body.removeChild(scrollDiv);\\n return scrollbarWidth;\\n } // Static\\n ;\\n\\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\\n return this.each(function () {\\n var data = $__default[\\\"default\\\"](this).data(DATA_KEY$5);\\n\\n var _config = _extends({}, Default$4, $__default[\\\"default\\\"](this).data(), typeof config === 'object' && config ? config : {});\\n\\n if (!data) {\\n data = new Modal(this, _config);\\n $__default[\\\"default\\\"](this).data(DATA_KEY$5, data);\\n }\\n\\n if (typeof config === 'string') {\\n if (typeof data[config] === 'undefined') {\\n throw new TypeError(\\\"No method named \\\\\\\"\\\" + config + \\\"\\\\\\\"\\\");\\n }\\n\\n data[config](relatedTarget);\\n } else if (_config.show) {\\n data.show(relatedTarget);\\n }\\n });\\n };\\n\\n _createClass(Modal, null, [{\\n key: \\\"VERSION\\\",\\n get: function get() {\\n return VERSION$5;\\n }\\n }, {\\n key: \\\"Default\\\",\\n get: function get() {\\n return Default$4;\\n }\\n }]);\\n\\n return Modal;\\n }();\\n /**\\n * Data API implementation\\n */\\n\\n\\n $__default[\\\"default\\\"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\\n var _this11 = this;\\n\\n var target;\\n var selector = Util.getSelectorFromElement(this);\\n\\n if (selector) {\\n target = document.querySelector(selector);\\n }\\n\\n var config = $__default[\\\"default\\\"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default[\\\"default\\\"](target).data(), $__default[\\\"default\\\"](this).data());\\n\\n if (this.tagName === 'A' || this.tagName === 'AREA') {\\n event.preventDefault();\\n }\\n\\n var $target = $__default[\\\"default\\\"](target).one(EVENT_SHOW$2, function (showEvent) {\\n if (showEvent.isDefaultPrevented()) {\\n // Only register focus restorer if modal will actually get shown\\n return;\\n }\\n\\n $target.one(EVENT_HIDDEN$2, function () {\\n if ($__default[\\\"default\\\"](_this11).is(':visible')) {\\n _this11.focus();\\n }\\n });\\n });\\n\\n Modal._jQueryInterface.call($__default[\\\"default\\\"](target), config, this);\\n });\\n /**\\n * jQuery\\n */\\n\\n $__default[\\\"default\\\"].fn[NAME$5] = Modal._jQueryInterface;\\n $__default[\\\"default\\\"].fn[NAME$5].Constructor = Modal;\\n\\n $__default[\\\"default\\\"].fn[NAME$5].noConflict = function () {\\n $__default[\\\"default\\\"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;\\n return Modal._jQueryInterface;\\n };\\n\\n /**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v4.6.1): tools/sanitizer.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\\\w-]*$/i;\\n var DefaultWhitelist = {\\n // Global attributes allowed on any supplied element below.\\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\\n a: ['target', 'href', 'title', 'rel'],\\n area: [],\\n b: [],\\n br: [],\\n col: [],\\n code: [],\\n div: [],\\n em: [],\\n hr: [],\\n h1: [],\\n h2: [],\\n h3: [],\\n h4: [],\\n h5: [],\\n h6: [],\\n i: [],\\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\\n li: [],\\n ol: [],\\n p: [],\\n pre: [],\\n s: [],\\n small: [],\\n span: [],\\n sub: [],\\n sup: [],\\n strong: [],\\n u: [],\\n ul: []\\n };\\n /**\\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\\n *\\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\\n */\\n\\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\\n /**\\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\\n *\\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\\n */\\n\\n var DATA_URL_PATTERN = /^data:(?:image\\\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\\\/(?:mpeg|mp4|ogg|webm)|audio\\\\/(?:mp3|oga|ogg|opus));base64,[\\\\d+/a-z]+=*$/i;\\n\\n function allowedAttribute(attr, allowedAttributeList) {\\n var attrName = attr.nodeName.toLowerCase();\\n\\n if (allowedAttributeList.indexOf(attrName) !== -1) {\\n if (uriAttrs.indexOf(attrName) !== -1) {\\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\\n }\\n\\n return true;\\n }\\n\\n var regExp = allowedAttributeList.filter(function (attrRegex) {\\n return attrRegex instanceof RegExp;\\n }); // Check if a regular expression validates the attribute.\\n\\n for (var i = 0, len = regExp.length; i < len; i++) {\\n if (regExp[i].test(attrName)) {\\n return true;\\n }\\n }\\n\\n return false;\\n }\\n\\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\\n if (unsafeHtml.length === 0) {\\n return unsafeHtml;\\n }\\n\\n if (sanitizeFn && typeof sanitizeFn === 'function') {\\n return sanitizeFn(unsafeHtml);\\n }\\n\\n var domParser = new window.DOMParser();\\n var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\\n var whitelistKeys = Object.keys(whiteList);\\n var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\\n\\n var _loop = function _loop(i, len) {\\n var el = elements[i];\\n var elName = el.nodeName.toLowerCase();\\n\\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\\n el.parentNode.removeChild(el);\\n return \\\"continue\\\";\\n }\\n\\n var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread\\n\\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\\n attributeList.forEach(function (attr) {\\n if (!allowedAttribute(attr, whitelistedAttributes)) {\\n el.removeAttribute(attr.nodeName);\\n }\\n });\\n };\\n\\n for (var i = 0, len = elements.length; i < len; i++) {\\n var _ret = _loop(i);\\n\\n if (_ret === \\\"continue\\\") continue;\\n }\\n\\n return createdDocument.body.innerHTML;\\n }\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$4 = 'tooltip';\\n var VERSION$4 = '4.6.1';\\n var DATA_KEY$4 = 'bs.tooltip';\\n var EVENT_KEY$4 = \\\".\\\" + DATA_KEY$4;\\n var JQUERY_NO_CONFLICT$4 = $__default[\\\"default\\\"].fn[NAME$4];\\n var CLASS_PREFIX$1 = 'bs-tooltip';\\n var BSCLS_PREFIX_REGEX$1 = new RegExp(\\\"(^|\\\\\\\\s)\\\" + CLASS_PREFIX$1 + \\\"\\\\\\\\S+\\\", 'g');\\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\\n var CLASS_NAME_FADE$3 = 'fade';\\n var CLASS_NAME_SHOW$3 = 'show';\\n var HOVER_STATE_SHOW = 'show';\\n var HOVER_STATE_OUT = 'out';\\n var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\\n var SELECTOR_ARROW = '.arrow';\\n var TRIGGER_HOVER = 'hover';\\n var TRIGGER_FOCUS = 'focus';\\n var TRIGGER_CLICK = 'click';\\n var TRIGGER_MANUAL = 'manual';\\n var AttachmentMap = {\\n AUTO: 'auto',\\n TOP: 'top',\\n RIGHT: 'right',\\n BOTTOM: 'bottom',\\n LEFT: 'left'\\n };\\n var Default$3 = {\\n animation: true,\\n template: '
' + '
' + '
',\\n trigger: 'hover focus',\\n title: '',\\n delay: 0,\\n html: false,\\n selector: false,\\n placement: 'top',\\n offset: 0,\\n container: false,\\n fallbackPlacement: 'flip',\\n boundary: 'scrollParent',\\n customClass: '',\\n sanitize: true,\\n sanitizeFn: null,\\n whiteList: DefaultWhitelist,\\n popperConfig: null\\n };\\n var DefaultType$3 = {\\n animation: 'boolean',\\n template: 'string',\\n title: '(string|element|function)',\\n trigger: 'string',\\n delay: '(number|object)',\\n html: 'boolean',\\n selector: '(string|boolean)',\\n placement: '(string|function)',\\n offset: '(number|string|function)',\\n container: '(string|element|boolean)',\\n fallbackPlacement: '(string|array)',\\n boundary: '(string|element)',\\n customClass: '(string|function)',\\n sanitize: 'boolean',\\n sanitizeFn: '(null|function)',\\n whiteList: 'object',\\n popperConfig: '(null|object)'\\n };\\n var Event$1 = {\\n HIDE: \\\"hide\\\" + EVENT_KEY$4,\\n HIDDEN: \\\"hidden\\\" + EVENT_KEY$4,\\n SHOW: \\\"show\\\" + EVENT_KEY$4,\\n SHOWN: \\\"shown\\\" + EVENT_KEY$4,\\n INSERTED: \\\"inserted\\\" + EVENT_KEY$4,\\n CLICK: \\\"click\\\" + EVENT_KEY$4,\\n FOCUSIN: \\\"focusin\\\" + EVENT_KEY$4,\\n FOCUSOUT: \\\"focusout\\\" + EVENT_KEY$4,\\n MOUSEENTER: \\\"mouseenter\\\" + EVENT_KEY$4,\\n MOUSELEAVE: \\\"mouseleave\\\" + EVENT_KEY$4\\n };\\n /**\\n * Class definition\\n */\\n\\n var Tooltip = /*#__PURE__*/function () {\\n function Tooltip(element, config) {\\n if (typeof Popper__default[\\\"default\\\"] === 'undefined') {\\n throw new TypeError('Bootstrap\\\\'s tooltips require Popper (https://popper.js.org)');\\n } // Private\\n\\n\\n this._isEnabled = true;\\n this._timeout = 0;\\n this._hoverState = '';\\n this._activeTrigger = {};\\n this._popper = null; // Protected\\n\\n this.element = element;\\n this.config = this._getConfig(config);\\n this.tip = null;\\n\\n this._setListeners();\\n } // Getters\\n\\n\\n var _proto = Tooltip.prototype;\\n\\n // Public\\n _proto.enable = function enable() {\\n this._isEnabled = true;\\n };\\n\\n _proto.disable = function disable() {\\n this._isEnabled = false;\\n };\\n\\n _proto.toggleEnabled = function toggleEnabled() {\\n this._isEnabled = !this._isEnabled;\\n };\\n\\n _proto.toggle = function toggle(event) {\\n if (!this._isEnabled) {\\n return;\\n }\\n\\n if (event) {\\n var dataKey = this.constructor.DATA_KEY;\\n var context = $__default[\\\"default\\\"](event.currentTarget).data(dataKey);\\n\\n if (!context) {\\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\\n $__default[\\\"default\\\"](event.currentTarget).data(dataKey, context);\\n }\\n\\n context._activeTrigger.click = !context._activeTrigger.click;\\n\\n if (context._isWithActiveTrigger()) {\\n context._enter(null, context);\\n } else {\\n context._leave(null, context);\\n }\\n } else {\\n if ($__default[\\\"default\\\"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {\\n this._leave(null, this);\\n\\n return;\\n }\\n\\n this._enter(null, this);\\n }\\n };\\n\\n _proto.dispose = function dispose() {\\n clearTimeout(this._timeout);\\n $__default[\\\"default\\\"].removeData(this.element, this.constructor.DATA_KEY);\\n $__default[\\\"default\\\"](this.element).off(this.constructor.EVENT_KEY);\\n $__default[\\\"default\\\"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\\n\\n if (this.tip) {\\n $__default[\\\"default\\\"](this.tip).remove();\\n }\\n\\n this._isEnabled = null;\\n this._timeout = null;\\n this._hoverState = null;\\n this._activeTrigger = null;\\n\\n if (this._popper) {\\n this._popper.destroy();\\n }\\n\\n this._popper = null;\\n this.element = null;\\n this.config = null;\\n this.tip = null;\\n };\\n\\n _proto.show = function show() {\\n var _this = this;\\n\\n if ($__default[\\\"default\\\"](this.element).css('display') === 'none') {\\n throw new Error('Please use show on visible elements');\\n }\\n\\n var showEvent = $__default[\\\"default\\\"].Event(this.constructor.Event.SHOW);\\n\\n if (this.isWithContent() && this._isEnabled) {\\n $__default[\\\"default\\\"](this.element).trigger(showEvent);\\n var shadowRoot = Util.findShadowRoot(this.element);\\n var isInTheDom = $__default[\\\"default\\\"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\\n\\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\\n return;\\n }\\n\\n var tip = this.getTipElement();\\n var tipId = Util.getUID(this.constructor.NAME);\\n tip.setAttribute('id', tipId);\\n this.element.setAttribute('aria-describedby', tipId);\\n this.setContent();\\n\\n if (this.config.animation) {\\n $__default[\\\"default\\\"](tip).addClass(CLASS_NAME_FADE$3);\\n }\\n\\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\\n\\n var attachment = this._getAttachment(placement);\\n\\n this.addAttachmentClass(attachment);\\n\\n var container = this._getContainer();\\n\\n $__default[\\\"default\\\"](tip).data(this.constructor.DATA_KEY, this);\\n\\n if (!$__default[\\\"default\\\"].contains(this.element.ownerDocument.documentElement, this.tip)) {\\n $__default[\\\"default\\\"](tip).appendTo(container);\\n }\\n\\n $__default[\\\"default\\\"](this.element).trigger(this.constructor.Event.INSERTED);\\n this._popper = new Popper__default[\\\"default\\\"](this.element, tip, this._getPopperConfig(attachment));\\n $__default[\\\"default\\\"](tip).addClass(CLASS_NAME_SHOW$3);\\n $__default[\\\"default\\\"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra\\n // empty mouseover listeners to the body's immediate children;\\n // only needed because of broken event delegation on iOS\\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\\n\\n if ('ontouchstart' in document.documentElement) {\\n $__default[\\\"default\\\"](document.body).children().on('mouseover', null, $__default[\\\"default\\\"].noop);\\n }\\n\\n var complete = function complete() {\\n if (_this.config.animation) {\\n _this._fixTransition();\\n }\\n\\n var prevHoverState = _this._hoverState;\\n _this._hoverState = null;\\n $__default[\\\"default\\\"](_this.element).trigger(_this.constructor.Event.SHOWN);\\n\\n if (prevHoverState === HOVER_STATE_OUT) {\\n _this._leave(null, _this);\\n }\\n };\\n\\n if ($__default[\\\"default\\\"](this.tip).hasClass(CLASS_NAME_FADE$3)) {\\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\\n $__default[\\\"default\\\"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\\n } else {\\n complete();\\n }\\n }\\n };\\n\\n _proto.hide = function hide(callback) {\\n var _this2 = this;\\n\\n var tip = this.getTipElement();\\n var hideEvent = $__default[\\\"default\\\"].Event(this.constructor.Event.HIDE);\\n\\n var complete = function complete() {\\n if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\\n tip.parentNode.removeChild(tip);\\n }\\n\\n _this2._cleanTipClass();\\n\\n _this2.element.removeAttribute('aria-describedby');\\n\\n $__default[\\\"default\\\"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);\\n\\n if (_this2._popper !== null) {\\n _this2._popper.destroy();\\n }\\n\\n if (callback) {\\n callback();\\n }\\n };\\n\\n $__default[\\\"default\\\"](this.element).trigger(hideEvent);\\n\\n if (hideEvent.isDefaultPrevented()) {\\n return;\\n }\\n\\n $__default[\\\"default\\\"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\\n // empty mouseover listeners we added for iOS support\\n\\n if ('ontouchstart' in document.documentElement) {\\n $__default[\\\"default\\\"](document.body).children().off('mouseover', null, $__default[\\\"default\\\"].noop);\\n }\\n\\n this._activeTrigger[TRIGGER_CLICK] = false;\\n this._activeTrigger[TRIGGER_FOCUS] = false;\\n this._activeTrigger[TRIGGER_HOVER] = false;\\n\\n if ($__default[\\\"default\\\"](this.tip).hasClass(CLASS_NAME_FADE$3)) {\\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\\n $__default[\\\"default\\\"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\\n } else {\\n complete();\\n }\\n\\n this._hoverState = '';\\n };\\n\\n _proto.update = function update() {\\n if (this._popper !== null) {\\n this._popper.scheduleUpdate();\\n }\\n } // Protected\\n ;\\n\\n _proto.isWithContent = function isWithContent() {\\n return Boolean(this.getTitle());\\n };\\n\\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\\n $__default[\\\"default\\\"](this.getTipElement()).addClass(CLASS_PREFIX$1 + \\\"-\\\" + attachment);\\n };\\n\\n _proto.getTipElement = function getTipElement() {\\n this.tip = this.tip || $__default[\\\"default\\\"](this.config.template)[0];\\n return this.tip;\\n };\\n\\n _proto.setContent = function setContent() {\\n var tip = this.getTipElement();\\n this.setElementContent($__default[\\\"default\\\"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\\n $__default[\\\"default\\\"](tip).removeClass(CLASS_NAME_FADE$3 + \\\" \\\" + CLASS_NAME_SHOW$3);\\n };\\n\\n _proto.setElementContent = function setElementContent($element, content) {\\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\\n // Content is a DOM node or a jQuery\\n if (this.config.html) {\\n if (!$__default[\\\"default\\\"](content).parent().is($element)) {\\n $element.empty().append(content);\\n }\\n } else {\\n $element.text($__default[\\\"default\\\"](content).text());\\n }\\n\\n return;\\n }\\n\\n if (this.config.html) {\\n if (this.config.sanitize) {\\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\\n }\\n\\n $element.html(content);\\n } else {\\n $element.text(content);\\n }\\n };\\n\\n _proto.getTitle = function getTitle() {\\n var title = this.element.getAttribute('data-original-title');\\n\\n if (!title) {\\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\\n }\\n\\n return title;\\n } // Private\\n ;\\n\\n _proto._getPopperConfig = function _getPopperConfig(attachment) {\\n var _this3 = this;\\n\\n var defaultBsConfig = {\\n placement: attachment,\\n modifiers: {\\n offset: this._getOffset(),\\n flip: {\\n behavior: this.config.fallbackPlacement\\n },\\n arrow: {\\n element: SELECTOR_ARROW\\n },\\n preventOverflow: {\\n boundariesElement: this.config.boundary\\n }\\n },\\n onCreate: function onCreate(data) {\\n if (data.originalPlacement !== data.placement) {\\n _this3._handlePopperPlacementChange(data);\\n }\\n },\\n onUpdate: function onUpdate(data) {\\n return _this3._handlePopperPlacementChange(data);\\n }\\n };\\n return _extends({}, defaultBsConfig, this.config.popperConfig);\\n };\\n\\n _proto._getOffset = function _getOffset() {\\n var _this4 = this;\\n\\n var offset = {};\\n\\n if (typeof this.config.offset === 'function') {\\n offset.fn = function (data) {\\n data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));\\n return data;\\n };\\n } else {\\n offset.offset = this.config.offset;\\n }\\n\\n return offset;\\n };\\n\\n _proto._getContainer = function _getContainer() {\\n if (this.config.container === false) {\\n return document.body;\\n }\\n\\n if (Util.isElement(this.config.container)) {\\n return $__default[\\\"default\\\"](this.config.container);\\n }\\n\\n return $__default[\\\"default\\\"](document).find(this.config.container);\\n };\\n\\n _proto._getAttachment = function _getAttachment(placement) {\\n return AttachmentMap[placement.toUpperCase()];\\n };\\n\\n _proto._setListeners = function _setListeners() {\\n var _this5 = this;\\n\\n var triggers = this.config.trigger.split(' ');\\n triggers.forEach(function (trigger) {\\n if (trigger === 'click') {\\n $__default[\\\"default\\\"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\\n return _this5.toggle(event);\\n });\\n } else if (trigger !== TRIGGER_MANUAL) {\\n var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\\n var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\\n $__default[\\\"default\\\"](_this5.element).on(eventIn, _this5.config.selector, function (event) {\\n return _this5._enter(event);\\n }).on(eventOut, _this5.config.selector, function (event) {\\n return _this5._leave(event);\\n });\\n }\\n });\\n\\n this._hideModalHandler = function () {\\n if (_this5.element) {\\n _this5.hide();\\n }\\n };\\n\\n $__default[\\\"default\\\"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\\n\\n if (this.config.selector) {\\n this.config = _extends({}, this.config, {\\n trigger: 'manual',\\n selector: ''\\n });\\n } else {\\n this._fixTitle();\\n }\\n };\\n\\n _proto._fixTitle = function _fixTitle() {\\n var titleType = typeof this.element.getAttribute('data-original-title');\\n\\n if (this.element.getAttribute('title') || titleType !== 'string') {\\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\\n this.element.setAttribute('title', '');\\n }\\n };\\n\\n _proto._enter = function _enter(event, context) {\\n var dataKey = this.constructor.DATA_KEY;\\n context = context || $__default[\\\"default\\\"](event.currentTarget).data(dataKey);\\n\\n if (!context) {\\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\\n $__default[\\\"default\\\"](event.currentTarget).data(dataKey, context);\\n }\\n\\n if (event) {\\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\\n }\\n\\n if ($__default[\\\"default\\\"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\\n context._hoverState = HOVER_STATE_SHOW;\\n return;\\n }\\n\\n clearTimeout(context._timeout);\\n context._hoverState = HOVER_STATE_SHOW;\\n\\n if (!context.config.delay || !context.config.delay.show) {\\n context.show();\\n return;\\n }\\n\\n context._timeout = setTimeout(function () {\\n if (context._hoverState === HOVER_STATE_SHOW) {\\n context.show();\\n }\\n }, context.config.delay.show);\\n };\\n\\n _proto._leave = function _leave(event, context) {\\n var dataKey = this.constructor.DATA_KEY;\\n context = context || $__default[\\\"default\\\"](event.currentTarget).data(dataKey);\\n\\n if (!context) {\\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\\n $__default[\\\"default\\\"](event.currentTarget).data(dataKey, context);\\n }\\n\\n if (event) {\\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;\\n }\\n\\n if (context._isWithActiveTrigger()) {\\n return;\\n }\\n\\n clearTimeout(context._timeout);\\n context._hoverState = HOVER_STATE_OUT;\\n\\n if (!context.config.delay || !context.config.delay.hide) {\\n context.hide();\\n return;\\n }\\n\\n context._timeout = setTimeout(function () {\\n if (context._hoverState === HOVER_STATE_OUT) {\\n context.hide();\\n }\\n }, context.config.delay.hide);\\n };\\n\\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\\n for (var trigger in this._activeTrigger) {\\n if (this._activeTrigger[trigger]) {\\n return true;\\n }\\n }\\n\\n return false;\\n };\\n\\n _proto._getConfig = function _getConfig(config) {\\n var dataAttributes = $__default[\\\"default\\\"](this.element).data();\\n Object.keys(dataAttributes).forEach(function (dataAttr) {\\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\\n delete dataAttributes[dataAttr];\\n }\\n });\\n config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\\n\\n if (typeof config.delay === 'number') {\\n config.delay = {\\n show: config.delay,\\n hide: config.delay\\n };\\n }\\n\\n if (typeof config.title === 'number') {\\n config.title = config.title.toString();\\n }\\n\\n if (typeof config.content === 'number') {\\n config.content = config.content.toString();\\n }\\n\\n Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\\n\\n if (config.sanitize) {\\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\\n }\\n\\n return config;\\n };\\n\\n _proto._getDelegateConfig = function _getDelegateConfig() {\\n var config = {};\\n\\n if (this.config) {\\n for (var key in this.config) {\\n if (this.constructor.Default[key] !== this.config[key]) {\\n config[key] = this.config[key];\\n }\\n }\\n }\\n\\n return config;\\n };\\n\\n _proto._cleanTipClass = function _cleanTipClass() {\\n var $tip = $__default[\\\"default\\\"](this.getTipElement());\\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\\n\\n if (tabClass !== null && tabClass.length) {\\n $tip.removeClass(tabClass.join(''));\\n }\\n };\\n\\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\\n this.tip = popperData.instance.popper;\\n\\n this._cleanTipClass();\\n\\n this.addAttachmentClass(this._getAttachment(popperData.placement));\\n };\\n\\n _proto._fixTransition = function _fixTransition() {\\n var tip = this.getTipElement();\\n var initConfigAnimation = this.config.animation;\\n\\n if (tip.getAttribute('x-placement') !== null) {\\n return;\\n }\\n\\n $__default[\\\"default\\\"](tip).removeClass(CLASS_NAME_FADE$3);\\n this.config.animation = false;\\n this.hide();\\n this.show();\\n this.config.animation = initConfigAnimation;\\n } // Static\\n ;\\n\\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\\n return this.each(function () {\\n var $element = $__default[\\\"default\\\"](this);\\n var data = $element.data(DATA_KEY$4);\\n\\n var _config = typeof config === 'object' && config;\\n\\n if (!data && /dispose|hide/.test(config)) {\\n return;\\n }\\n\\n if (!data) {\\n data = new Tooltip(this, _config);\\n $element.data(DATA_KEY$4, data);\\n }\\n\\n if (typeof config === 'string') {\\n if (typeof data[config] === 'undefined') {\\n throw new TypeError(\\\"No method named \\\\\\\"\\\" + config + \\\"\\\\\\\"\\\");\\n }\\n\\n data[config]();\\n }\\n });\\n };\\n\\n _createClass(Tooltip, null, [{\\n key: \\\"VERSION\\\",\\n get: function get() {\\n return VERSION$4;\\n }\\n }, {\\n key: \\\"Default\\\",\\n get: function get() {\\n return Default$3;\\n }\\n }, {\\n key: \\\"NAME\\\",\\n get: function get() {\\n return NAME$4;\\n }\\n }, {\\n key: \\\"DATA_KEY\\\",\\n get: function get() {\\n return DATA_KEY$4;\\n }\\n }, {\\n key: \\\"Event\\\",\\n get: function get() {\\n return Event$1;\\n }\\n }, {\\n key: \\\"EVENT_KEY\\\",\\n get: function get() {\\n return EVENT_KEY$4;\\n }\\n }, {\\n key: \\\"DefaultType\\\",\\n get: function get() {\\n return DefaultType$3;\\n }\\n }]);\\n\\n return Tooltip;\\n }();\\n /**\\n * jQuery\\n */\\n\\n\\n $__default[\\\"default\\\"].fn[NAME$4] = Tooltip._jQueryInterface;\\n $__default[\\\"default\\\"].fn[NAME$4].Constructor = Tooltip;\\n\\n $__default[\\\"default\\\"].fn[NAME$4].noConflict = function () {\\n $__default[\\\"default\\\"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\\n return Tooltip._jQueryInterface;\\n };\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$3 = 'popover';\\n var VERSION$3 = '4.6.1';\\n var DATA_KEY$3 = 'bs.popover';\\n var EVENT_KEY$3 = \\\".\\\" + DATA_KEY$3;\\n var JQUERY_NO_CONFLICT$3 = $__default[\\\"default\\\"].fn[NAME$3];\\n var CLASS_PREFIX = 'bs-popover';\\n var BSCLS_PREFIX_REGEX = new RegExp(\\\"(^|\\\\\\\\s)\\\" + CLASS_PREFIX + \\\"\\\\\\\\S+\\\", 'g');\\n var CLASS_NAME_FADE$2 = 'fade';\\n var CLASS_NAME_SHOW$2 = 'show';\\n var SELECTOR_TITLE = '.popover-header';\\n var SELECTOR_CONTENT = '.popover-body';\\n\\n var Default$2 = _extends({}, Tooltip.Default, {\\n placement: 'right',\\n trigger: 'click',\\n content: '',\\n template: '
' + '
' + '

' + '
'\\n });\\n\\n var DefaultType$2 = _extends({}, Tooltip.DefaultType, {\\n content: '(string|element|function)'\\n });\\n\\n var Event = {\\n HIDE: \\\"hide\\\" + EVENT_KEY$3,\\n HIDDEN: \\\"hidden\\\" + EVENT_KEY$3,\\n SHOW: \\\"show\\\" + EVENT_KEY$3,\\n SHOWN: \\\"shown\\\" + EVENT_KEY$3,\\n INSERTED: \\\"inserted\\\" + EVENT_KEY$3,\\n CLICK: \\\"click\\\" + EVENT_KEY$3,\\n FOCUSIN: \\\"focusin\\\" + EVENT_KEY$3,\\n FOCUSOUT: \\\"focusout\\\" + EVENT_KEY$3,\\n MOUSEENTER: \\\"mouseenter\\\" + EVENT_KEY$3,\\n MOUSELEAVE: \\\"mouseleave\\\" + EVENT_KEY$3\\n };\\n /**\\n * Class definition\\n */\\n\\n var Popover = /*#__PURE__*/function (_Tooltip) {\\n _inheritsLoose(Popover, _Tooltip);\\n\\n function Popover() {\\n return _Tooltip.apply(this, arguments) || this;\\n }\\n\\n var _proto = Popover.prototype;\\n\\n // Overrides\\n _proto.isWithContent = function isWithContent() {\\n return this.getTitle() || this._getContent();\\n };\\n\\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\\n $__default[\\\"default\\\"](this.getTipElement()).addClass(CLASS_PREFIX + \\\"-\\\" + attachment);\\n };\\n\\n _proto.getTipElement = function getTipElement() {\\n this.tip = this.tip || $__default[\\\"default\\\"](this.config.template)[0];\\n return this.tip;\\n };\\n\\n _proto.setContent = function setContent() {\\n var $tip = $__default[\\\"default\\\"](this.getTipElement()); // We use append for html objects to maintain js events\\n\\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());\\n\\n var content = this._getContent();\\n\\n if (typeof content === 'function') {\\n content = content.call(this.element);\\n }\\n\\n this.setElementContent($tip.find(SELECTOR_CONTENT), content);\\n $tip.removeClass(CLASS_NAME_FADE$2 + \\\" \\\" + CLASS_NAME_SHOW$2);\\n } // Private\\n ;\\n\\n _proto._getContent = function _getContent() {\\n return this.element.getAttribute('data-content') || this.config.content;\\n };\\n\\n _proto._cleanTipClass = function _cleanTipClass() {\\n var $tip = $__default[\\\"default\\\"](this.getTipElement());\\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\\n\\n if (tabClass !== null && tabClass.length > 0) {\\n $tip.removeClass(tabClass.join(''));\\n }\\n } // Static\\n ;\\n\\n Popover._jQueryInterface = function _jQueryInterface(config) {\\n return this.each(function () {\\n var data = $__default[\\\"default\\\"](this).data(DATA_KEY$3);\\n\\n var _config = typeof config === 'object' ? config : null;\\n\\n if (!data && /dispose|hide/.test(config)) {\\n return;\\n }\\n\\n if (!data) {\\n data = new Popover(this, _config);\\n $__default[\\\"default\\\"](this).data(DATA_KEY$3, data);\\n }\\n\\n if (typeof config === 'string') {\\n if (typeof data[config] === 'undefined') {\\n throw new TypeError(\\\"No method named \\\\\\\"\\\" + config + \\\"\\\\\\\"\\\");\\n }\\n\\n data[config]();\\n }\\n });\\n };\\n\\n _createClass(Popover, null, [{\\n key: \\\"VERSION\\\",\\n get: // Getters\\n function get() {\\n return VERSION$3;\\n }\\n }, {\\n key: \\\"Default\\\",\\n get: function get() {\\n return Default$2;\\n }\\n }, {\\n key: \\\"NAME\\\",\\n get: function get() {\\n return NAME$3;\\n }\\n }, {\\n key: \\\"DATA_KEY\\\",\\n get: function get() {\\n return DATA_KEY$3;\\n }\\n }, {\\n key: \\\"Event\\\",\\n get: function get() {\\n return Event;\\n }\\n }, {\\n key: \\\"EVENT_KEY\\\",\\n get: function get() {\\n return EVENT_KEY$3;\\n }\\n }, {\\n key: \\\"DefaultType\\\",\\n get: function get() {\\n return DefaultType$2;\\n }\\n }]);\\n\\n return Popover;\\n }(Tooltip);\\n /**\\n * jQuery\\n */\\n\\n\\n $__default[\\\"default\\\"].fn[NAME$3] = Popover._jQueryInterface;\\n $__default[\\\"default\\\"].fn[NAME$3].Constructor = Popover;\\n\\n $__default[\\\"default\\\"].fn[NAME$3].noConflict = function () {\\n $__default[\\\"default\\\"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\\n return Popover._jQueryInterface;\\n };\\n\\n /**\\n * Constants\\n */\\n\\n var NAME$2 = 'scrollspy';\\n var VERSION$2 = '4.6.1';\\n var DATA_KEY$2 = 'bs.scrollspy';\\n var EVENT_KEY$2 = \\\".\\\" + DATA_KEY$2;\\n var DATA_API_KEY$1 = '.data-api';\\n var JQUERY_NO_CONFLICT$2 = $__default[\\\"default\\\"].fn[NAME$2];\\n var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\\n var CLASS_NAME_ACTIVE$1 = 'active';\\n var EVENT_ACTIVATE = \\\"activate\\\" + EVENT_KEY$2;\\n var EVENT_SCROLL = \\\"scroll\\\" + EVENT_KEY$2;\\n var EVENT_LOAD_DATA_API = \\\"load\\\" + EVENT_KEY$2 + DATA_API_KEY$1;\\n var METHOD_OFFSET = 'offset';\\n var METHOD_POSITION = 'position';\\n var SELECTOR_DATA_SPY = '[data-spy=\\\"scroll\\\"]';\\n var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\\n var SELECTOR_NAV_LINKS = '.nav-link';\\n var SELECTOR_NAV_ITEMS = '.nav-item';\\n var SELECTOR_LIST_ITEMS = '.list-group-item';\\n var SELECTOR_DROPDOWN$1 = '.dropdown';\\n var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\\n var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\\n var Default$1 = {\\n offset: 10,\\n method: 'auto',\\n target: ''\\n };\\n var DefaultType$1 = {\\n offset: 'number',\\n method: 'string',\\n target: '(string|element)'\\n };\\n /**\\n * Class definition\\n */\\n\\n var ScrollSpy = /*#__PURE__*/function () {\\n function ScrollSpy(element, config) {\\n var _this = this;\\n\\n this._element = element;\\n this._scrollElement = element.tagName === 'BODY' ? window : element;\\n this._config = this._getConfig(config);\\n this._selector = this._config.target + \\\" \\\" + SELECTOR_NAV_LINKS + \\\",\\\" + (this._config.target + \\\" \\\" + SELECTOR_LIST_ITEMS + \\\",\\\") + (this._config.target + \\\" \\\" + SELECTOR_DROPDOWN_ITEMS);\\n this._offsets = [];\\n this._targets = [];\\n this._activeTarget = null;\\n this._scrollHeight = 0;\\n $__default[\\\"default\\\"](this._scrollElement).on(EVENT_SCROLL, function (event) {\\n return _this._process(event);\\n });\\n this.refresh();\\n\\n this._process();\\n } // Getters\\n\\n\\n var _proto = ScrollSpy.prototype;\\n\\n // Public\\n _proto.refresh = function refresh() {\\n var _this2 = this;\\n\\n var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\\n var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\\n this._offsets = [];\\n this._targets = [];\\n this._scrollHeight = this._getScrollHeight();\\n var targets = [].slice.call(document.querySelectorAll(this._selector));\\n targets.map(function (element) {\\n var target;\\n var targetSelector = Util.getSelectorFromElement(element);\\n\\n if (targetSelector) {\\n target = document.querySelector(targetSelector);\\n }\\n\\n if (target) {\\n var targetBCR = target.getBoundingClientRect();\\n\\n if (targetBCR.width || targetBCR.height) {\\n // TODO (fat): remove sketch reliance on jQuery position/offset\\n return [$__default[\\\"default\\\"](target)[offsetMethod]().top + offsetBase, targetSelector];\\n }\\n }\\n\\n return null;\\n }).filter(function (item) {\\n return item;\\n }).sort(function (a, b) {\\n return a[0] - b[0];\\n }).forEach(function (item) {\\n _this2._offsets.push(item[0]);\\n\\n _this2._targets.push(item[1]);\\n });\\n };\\n\\n _proto.dispose = function dispose() {\\n $__default[\\\"default\\\"].removeData(this._element, DATA_KEY$2);\\n $__default[\\\"default\\\"](this._scrollElement).off(EVENT_KEY$2);\\n this._element = null;\\n this._scrollElement = null;\\n this._config = null;\\n this._selector = null;\\n this._offsets = null;\\n this._targets = null;\\n this._activeTarget = null;\\n this._scrollHeight = null;\\n } // Private\\n ;\\n\\n _proto._getConfig = function _getConfig(config) {\\n config = _extends({}, Default$1, typeof config === 'object' && config ? config : {});\\n\\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\\n var id = $__default[\\\"default\\\"](config.target).attr('id');\\n\\n if (!id) {\\n id = Util.getUID(NAME$2);\\n $__default[\\\"default\\\"](config.target).attr('id', id);\\n }\\n\\n config.target = \\\"#\\\" + id;\\n }\\n\\n Util.typeCheckConfig(NAME$2, config, DefaultType$1);\\n return config;\\n };\\n\\n _proto._getScrollTop = function _getScrollTop() {\\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\\n };\\n\\n _proto._getScrollHeight = function _getScrollHeight() {\\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\\n };\\n\\n _proto._getOffsetHeight = function _getOffsetHeight() {\\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\\n };\\n\\n _proto._process = function _process() {\\n var scrollTop = this._getScrollTop() + this._config.offset;\\n\\n var scrollHeight = this._getScrollHeight();\\n\\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\\n\\n if (this._scrollHeight !== scrollHeight) {\\n this.refresh();\\n }\\n\\n if (scrollTop >= maxScroll) {\\n var target = this._targets[this._targets.length - 1];\\n\\n if (this._activeTarget !== target) {\\n this._activate(target);\\n }\\n\\n return;\\n }\\n\\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\\n this._activeTarget = null;\\n\\n this._clear();\\n\\n return;\\n }\\n\\n for (var i = this._offsets.length; i--;) {\\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\\n\\n if (isActiveTarget) {\\n this._activate(this._targets[i]);\\n }\\n }\\n };\\n\\n _proto._activate = function _activate(target) {\\n this._activeTarget = target;\\n\\n this._clear();\\n\\n var queries = this._selector.split(',').map(function (selector) {\\n return selector + \\\"[data-target=\\\\\\\"\\\" + target + \\\"\\\\\\\"],\\\" + selector + \\\"[href=\\\\\\\"\\\" + target + \\\"\\\\\\\"]\\\";\\n });\\n\\n var $link = $__default[\\\"default\\\"]([].slice.call(document.querySelectorAll(queries.join(','))));\\n\\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\\n $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);\\n $link.addClass(CLASS_NAME_ACTIVE$1);\\n } else {\\n // Set triggered link as active\\n $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active\\n // With both
    and