1// source --> https://quinto-canal.com/wp-content/themes/newsup/js/navigation.js?ver=7.1.1 2/** 3 * navigation.js 4 * 5 * Handles toggling the navigation menu for small screens and enables tab 6 * support for dropdown menus. 7 */ 8( function() { 9 var container, button, menu, links, subMenus; 10 11 container = document.getElementById( 'site-navigation' ); 12 if ( ! container ) { 13 return; 14 } 15 16 button = container.getElementsByTagName( 'button' )[0]; 17 if ( 'undefined' === typeof button ) { 18 return; 19 } 20 21 menu = container.getElementsByTagName( 'ul' )[0]; 22 23 // Hide menu toggle button if menu is empty and return early. 24 if ( 'undefined' === typeof menu ) { 25 button.style.display = 'none'; 26 return; 27 } 28 29 menu.setAttribute( 'aria-expanded', 'false' ); 30 if ( -1 === menu.className.indexOf( 'nav-menu' ) ) { 31 menu.className += ' nav-menu'; 32 } 33 34 button.onclick = function() { 35 if ( -1 !== container.className.indexOf( 'toggled' ) ) { 36 container.className = container.className.replace( ' toggled', '' ); 37 button.setAttribute( 'aria-expanded', 'false' ); 38 menu.setAttribute( 'aria-expanded', 'false' ); 39 } else { 40 container.className += ' toggled'; 41 button.setAttribute( 'aria-expanded', 'true' ); 42 menu.setAttribute( 'aria-expanded', 'true' ); 43 } 44 }; 45 46 // Get all the link elements within the menu. 47 links = menu.getElementsByTagName( 'a' ); 48 subMenus = menu.getElementsByTagName( 'ul' ); 49 50 // Set menu items with submenus to aria-haspopup="true". 51 for ( var i = 0, len = subMenus.length; i < len; i++ ) { 52 subMenus[i].parentNode.setAttribute( 'aria-haspopup', 'true' ); 53 } 54 55 // Each time a menu link is focused or blurred, toggle focus. 56 for ( i = 0, len = links.length; i < len; i++ ) { 57 links[i].addEventListener( 'focus', toggleFocus, true ); 58 links[i].addEventListener( 'blur', toggleFocus, true ); 59 } 60 61 /** 62 * Sets or removes .focus class on an element. 63 */ 64 function toggleFocus() { 65 var self = this; 66 67 // Move up through the ancestors of the current link until we hit .nav-menu. 68 while ( -1 === self.className.indexOf( 'navbar-nav' ) ) { 69 70 // On li elements toggle the class .focus. 71 if ( 'li' === self.tagName.toLowerCase() ) { 72 if ( -1 !== self.className.indexOf( 'focus' ) ) { 73 self.className = self.className.replace( ' focus', '' ); 74 } else { 75 self.className += ' focus'; 76 } 77 } 78 79 self = self.parentElement; 80 } 81 } 82} )(); 83// source --> https://quinto-canal.com/wp-content/themes/newsup/js/bootstrap.js?ver=7.1.1 84/*! 85 * Bootstrap v4.4.1 (https://getbootstrap.com/) 86 * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 87 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 88 */ 89(function (global, factory) { 90 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : 91 typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : 92 (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper)); 93}(this, (function (exports, $, Popper) { 'use strict'; 94 95 $ = $ && $.hasOwnProperty('default') ? $['default'] : $; 96 Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; 97 98 function _defineProperties(target, props) { 99 for (var i = 0; i < props.length; i++) { 100 var descriptor = props[i]; 101 descriptor.enumerable = descriptor.enumerable || false; 102 descriptor.configurable = true; 103 if ("value" in descriptor) descriptor.writable = true; 104 Object.defineProperty(target, descriptor.key, descriptor); 105 } 106 } 107 108 function _createClass(Constructor, protoProps, staticProps) { 109 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 110 if (staticProps) _defineProperties(Constructor, staticProps); 111 return Constructor; 112 } 113 114 function _defineProperty(obj, key, value) { 115 if (key in obj) { 116 Object.defineProperty(obj, key, { 117 value: value, 118 enumerable: true, 119 configurable: true, 120 writable: true 121 }); 122 } else { 123 obj[key] = value; 124 } 125 126 return obj;
127 } 128 129 function ownKeys(object, enumerableOnly) { 130 var keys = Object.keys(object); 131 132 if (Object.getOwnPropertySymbols) { 133 var symbols = Object.getOwnPropertySymbols(object); 134 if (enumerableOnly) symbols = symbols.filter(function (sym) { 135 return Object.getOwnPropertyDescriptor(object, sym).enumerable; 136 }); 137 keys.push.apply(keys, symbols); 138 } 139 140 return keys; 141 } 142 143 function _objectSpread2(target) { 144 for (var i = 1; i < arguments.length; i++) { 145 var source = arguments[i] != null ? arguments[i] : {}; 146 147 if (i % 2) { 148 ownKeys(Object(source), true).forEach(function (key) { 149 _defineProperty(target, key, source[key]); 150 }); 151 } else if (Object.getOwnPropertyDescriptors) { 152 Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); 153 } else { 154 ownKeys(Object(source)).forEach(function (key) { 155 Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); 156 }); 157 } 158 } 159 160 return target; 161 } 162 163 function _inheritsLoose(subClass, superClass) { 164 subClass.prototype = Object.create(superClass.prototype); 165 subClass.prototype.constructor = subClass; 166 subClass.__proto__ = superClass; 167 } 168 169 /** 170 * -------------------------------------------------------------------------- 171 * Bootstrap (v4.4.1): util.js 172 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 173 * -------------------------------------------------------------------------- 174 */ 175 /** 176 * ------------------------------------------------------------------------ 177 * Private TransitionEnd Helpers 178 * ------------------------------------------------------------------------ 179 */ 180 181 var TRANSITION_END = 'transitionend'; 182 var MAX_UID = 1000000; 183 var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 184 185 function toType(obj) { 186 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 187 } 188 189 function getSpecialTransitionEndEvent() { 190 return { 191 bindType: TRANSITION_END, 192 delegateType: TRANSITION_END, 193 handle: function handle(event) { 194 if ($(event.target).is(this)) { 195 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 196 } 197 198 return undefined; // eslint-disable-line no-undefined 199 } 200 }; 201 } 202 203 function transitionEndEmulator(duration) { 204 var _this = this; 205 206 var called = false; 207 $(this).one(Util.TRANSITION_END, function () { 208 called = true; 209 }); 210 setTimeout(function () { 211 if (!called) { 212 Util.triggerTransitionEnd(_this); 213 } 214 }, duration); 215 return this; 216 } 217 218 function setTransitionEndSupport() { 219 $.fn.emulateTransitionEnd = transitionEndEmulator; 220 $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 221 } 222 /** 223 * -------------------------------------------------------------------------- 224 * Public Util Api 225 * -------------------------------------------------------------------------- 226 */ 227 228 229 var Util = { 230 TRANSITION_END: 'bsTransitionEnd', 231 getUID: function getUID(prefix) { 232 do { 233 // eslint-disable-next-line no-bitwise 234 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 235 } while (document.getElementById(prefix)); 236 237 return prefix; 238 }, 239 getSelectorFromElement: function getSelectorFromElement(element) { 240 var selector = element.getAttribute('data-target'); 241 242 if (!selector || selector === '#') { 243 var hrefAttr = element.getAttribute('href'); 244 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; 245 } 246 247 try { 248 return document.querySelector(selector) ? selector : null; 249 } catch (err) { 250 return null; 251 } 252 }, 253 getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { 254 if (!element) { 255 return 0; 256 } // Get transition-duration of the element 257 258 259 var transitionDuration = $(element).css('transition-duration'); 260 var transitionDelay = $(element).css('transition-delay'); 261 var floatTransitionDuration = parseFloat(transitionDuration); 262 var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 263 264 if (!floatTransitionDuration && !floatTransitionDelay) { 265 return 0; 266 } // If multiple durations are defined, take the first 267 268 269 transitionDuration = transitionDuration.split(',')[0]; 270 transitionDelay = transitionDelay.split(',')[0]; 271 return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 272 }, 273 reflow: function reflow(element) { 274 return element.offsetHeight; 275 }, 276 triggerTransitionEnd: function triggerTransitionEnd(element) { 277 $(element).trigger(TRANSITION_END); 278 }, 279 // TODO: Remove in v5 280 supportsTransitionEnd: function supportsTransitionEnd() { 281 return Boolean(TRANSITION_END); 282 }, 283 isElement: function isElement(obj) { 284 return (obj[0] || obj).nodeType; 285 }, 286 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 287 for (var property in configTypes) { 288 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 289 var expectedTypes = configTypes[property]; 290 var value = config[property]; 291 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 292 293 if (!new RegExp(expectedTypes).test(valueType)) { 294 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 295 } 296 } 297 } 298 }, 299 findShadowRoot: function findShadowRoot(element) { 300 if (!document.documentElement.attachShadow) { 301 return null; 302 } // Can find the shadow root otherwise it'll return the document 303 304 305 if (typeof element.getRootNode === 'function') { 306 var root = element.getRootNode(); 307 return root instanceof ShadowRoot ? root : null; 308 } 309 310 if (element instanceof ShadowRoot) { 311 return element; 312 } // when we don't find a shadow root 313 314 315 if (!element.parentNode) { 316 return null; 317 } 318 319 return Util.findShadowRoot(element.parentNode); 320 }, 321 jQueryDetection: function jQueryDetection() { 322 if (typeof $ === 'undefined') { 323 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 324 } 325 326 var version = $.fn.jquery.split(' ')[0].split('.'); 327 var minMajor = 1; 328 var ltMajor = 2; 329 var minMinor = 9; 330 var minPatch = 1; 331 var maxMajor = 4; 332 333 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >
333= maxMajor) { 334 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 335 } 336 } 337 }; 338 Util.jQueryDetection(); 339 setTransitionEndSupport(); 340 341 /** 342 * ------------------------------------------------------------------------ 343 * Constants 344 * ------------------------------------------------------------------------ 345 */ 346 347 var NAME = 'alert'; 348 var VERSION = '4.4.1'; 349 var DATA_KEY = 'bs.alert'; 350 var EVENT_KEY = "." + DATA_KEY; 351 var DATA_API_KEY = '.data-api'; 352 var JQUERY_NO_CONFLICT = $.fn[NAME]; 353 var Selector = { 354 DISMISS: '[data-dismiss="alert"]' 355 }; 356 var Event = { 357 CLOSE: "close" + EVENT_KEY, 358 CLOSED: "closed" + EVENT_KEY, 359 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 360 }; 361 var ClassName = { 362 ALERT: 'alert', 363 FADE: 'fade', 364 SHOW: 'show' 365 }; 366 /** 367 * ------------------------------------------------------------------------ 368 * Class Definition 369 * ------------------------------------------------------------------------ 370 */ 371 372 var Alert = 373 /*#__PURE__*/ 374 function () { 375 function Alert(element) { 376 this._element = element; 377 } // Getters 378 379 380 var _proto = Alert.prototype; 381 382 // Public 383 _proto.close = function close(element) { 384 var rootElement = this._element; 385 386 if (element) { 387 rootElement = this._getRootElement(element); 388 } 389 390 var customEvent = this._triggerCloseEvent(rootElement); 391 392 if (customEvent.isDefaultPrevented()) { 393 return; 394 } 395 396 this._removeElement(rootElement); 397 }; 398 399 _proto.dispose = function dispose() { 400 $.removeData(this._element, DATA_KEY); 401 this._element = null; 402 } // Private 403 ; 404 405 _proto._getRootElement = function _getRootElement(element) { 406 var selector = Util.getSelectorFromElement(element); 407 var parent = false; 408 409 if (selector) { 410 parent = document.querySelector(selector); 411 } 412 413 if (!parent) { 414 parent = $(element).closest("." + ClassName.ALERT)[0]; 415 } 416 417 return parent; 418 }; 419 420 _proto._triggerCloseEvent = function _triggerCloseEvent(element) { 421 var closeEvent = $.Event(Event.CLOSE); 422 $(element).trigger(closeEvent); 423 return closeEvent; 424 }; 425 426 _proto._removeElement = function _removeElement(element) { 427 var _this = this; 428 429 $(element).removeClass(ClassName.SHOW); 430 431 if (!$(element).hasClass(ClassName.FADE)) { 432 this._destroyElement(element); 433 434 return; 435 } 436 437 var transitionDuration = Util.getTransitionDurationFromElement(element); 438 $(element).one(Util.TRANSITION_END, function (event) { 439 return _this._destroyElement(element, event); 440 }).emulateTransitionEnd(transitionDuration); 441 }; 442 443 _proto._destroyElement = function _destroyElement(element) { 444 $(element).detach().trigger(Event.CLOSED).remove(); 445 } // Static 446 ; 447 448 Alert._jQueryInterface = function _jQueryInterface(config) { 449 return this.each(function () { 450 var $element = $(this); 451 var data = $element.data(DATA_KEY); 452 453 if (!data) { 454 data = new Alert(this); 455 $element.data(DATA_KEY, data); 456 } 457 458 if (config === 'close') { 459 data[config](this); 460 } 461 }); 462 }; 463 464 Alert._handleDismiss = function _handleDismiss(alertInstance) { 465 return function (event) { 466 if (event) { 467 event.preventDefault(); 468 } 469 470 alertInstance.close(this); 471 }; 472 }; 473 474 _createClass(Alert, null, [{ 475 key: "VERSION", 476 get: function get() { 477 return VERSION; 478 } 479 }]); 480 481 return Alert; 482 }(); 483 /** 484 * ------------------------------------------------------------------------ 485 * Data Api implementation 486 * ------------------------------------------------------------------------ 487 */ 488 489 490 $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); 491 /** 492 * ------------------------------------------------------------------------ 493 * jQuery 494 * ------------------------------------------------------------------------ 495 */ 496 497 $.fn[NAME] = Alert._jQueryInterface; 498 $.fn[NAME].Constructor = Alert; 499 500 $.fn[NAME].noConflict = function () { 501 $.fn[NAME] = JQUERY_NO_CONFLICT; 502 return Alert._jQueryInterface; 503 }; 504 505 /** 506 * ------------------------------------------------------------------------ 507 * Constants 508 * ------------------------------------------------------------------------ 509 */ 510 511 var NAME$1 = 'button'; 512 var VERSION$1 = '4.4.1'; 513 var DATA_KEY$1 = 'bs.button'; 514 var EVENT_KEY$1 = "." + DATA_KEY$1; 515 var DATA_API_KEY$1 = '.data-api'; 516 var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1]; 517 var ClassName$1 = { 518 ACTIVE: 'active', 519 BUTTON: 'btn', 520 FOCUS: 'focus' 521 }; 522 var Selector$1 = { 523 DATA_TOGGLE_CARROT: '[data-toggle^="button"]', 524 DATA_TOGGLES: '[data-toggle="buttons"]', 525 DATA_TOGGLE: '[data-toggle="button"]', 526 DATA_TOGGLES_BUTTONS: '[data-toggle="buttons"] .btn', 527 INPUT: 'input:not([type="hidden"])', 528 ACTIVE: '.active', 529 BUTTON: '.btn' 530 }; 531 var Event$1 = { 532 CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1, 533 FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1), 534 LOAD_DATA_API: "load" + EVENT_KEY$1 + DATA_API_KEY$1 535 }; 536 /** 537 * ------------------------------------------------------------------------ 538 * Class Definition 539 * ------------------------------------------------------------------------ 540 */ 541 542 var Button = 543 /*#__PURE__*/ 544 function () { 545 function Button(element) { 546 this._element = element; 547 } // Getters 548 549 550 var _proto = Button.prototype; 551 552 // Public
553 _proto.toggle = function toggle() { 554 var triggerChangeEvent = true; 555 var addAriaPressed = true; 556 var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLES)[0]; 557 558 if (rootElement) { 559 var input = this._element.querySelector(Selector$1.INPUT); 560 561 if (input) { 562 if (input.type === 'radio') { 563 if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) { 564 triggerChangeEvent = false; 565 } else { 566 var activeElement = rootElement.querySelector(Selector$1.ACTIVE); 567 568 if (activeElement) { 569 $(activeElement).removeClass(ClassName$1.ACTIVE); 570 } 571 } 572 } else if (input.type === 'checkbox') { 573 if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) { 574 triggerChangeEvent = false; 575 } 576 } else { 577 // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input 578 triggerChangeEvent = false; 579 } 580 581 if (triggerChangeEvent) { 582 input.checked = !this._element.classList.contains(ClassName$1.ACTIVE); 583 $(input).trigger('change'); 584 } 585 586 input.focus(); 587 addAriaPressed = false; 588 } 589 } 590 591 if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { 592 if (addAriaPressed) { 593 this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE)); 594 } 595 596 if (triggerChangeEvent) { 597 $(this._element).toggleClass(ClassName$1.ACTIVE); 598 } 599 } 600 }; 601 602 _proto.dispose = function dispose() { 603 $.removeData(this._element, DATA_KEY$1); 604 this._element = null; 605 } // Static 606 ; 607 608 Button._jQueryInterface = function _jQueryInterface(config) { 609 return this.each(function () { 610 var data = $(this).data(DATA_KEY$1); 611 612 if (!data) { 613 data = new Button(this); 614 $(this).data(DATA_KEY$1, data); 615 } 616 617 if (config === 'toggle') { 618 data[config](); 619 } 620 }); 621 }; 622 623 _createClass(Button, null, [{ 624 key: "VERSION", 625 get: function get() { 626 return VERSION$1; 627 } 628 }]); 629 630 return Button; 631 }(); 632 /** 633 * ------------------------------------------------------------------------ 634 * Data Api implementation 635 * ------------------------------------------------------------------------ 636 */ 637 638 639 $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { 640 var button = event.target; 641 642 if (!$(button).hasClass(ClassName$1.BUTTON)) { 643 button = $(button).closest(Selector$1.BUTTON)[0]; 644 } 645 646 if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) { 647 event.preventDefault(); // work around Firefox bug #1540995 648 } else { 649 var inputBtn = button.querySelector(Selector$1.INPUT); 650 651 if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) { 652 event.preventDefault(); // work around Firefox bug #1540995 653 654 return; 655 } 656 657 Button._jQueryInterface.call($(button), 'toggle'); 658 } 659 }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { 660 var button = $(event.target).closest(Selector$1.BUTTON)[0]; 661 $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type)); 662 }); 663 $(window).on(Event$1.LOAD_DATA_API, function () { 664 // ensure correct active class is set to match the controls' actual values/states 665 // find all checkboxes/readio buttons inside data-toggle groups 666 var buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLES_BUTTONS)); 667 668 for (var i = 0, len = buttons.length; i < len; i++) { 669 var button = buttons[i]; 670 var input = button.querySelector(Selector$1.INPUT); 671 672 if (input.checked || input.hasAttribute('checked')) { 673 button.classList.add(ClassName$1.ACTIVE); 674 } else { 675 button.classList.remove(ClassName$1.ACTIVE); 676 } 677 } // find all button toggles 678 679 680 buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLE)); 681 682 for (var _i = 0, _len = buttons.length; _i < _len; _i++) { 683 var _button = buttons[_i]; 684 685 if (_button.getAttribute('aria-pressed') === 'true') { 686 _button.classList.add(ClassName$1.ACTIVE); 687 } else { 688 _button.classList.remove(ClassName$1.ACTIVE); 689 } 690 } 691 }); 692 /** 693 * ------------------------------------------------------------------------ 694 * jQuery 695 * ------------------------------------------------------------------------ 696 */ 697 698 $.fn[NAME$1] = Button._jQueryInterface; 699 $.fn[NAME$1].Constructor = Button; 700 701 $.fn[NAME$1].noConflict = function () { 702 $.fn[NAME$1] = JQUERY_NO_CONFLICT$1; 703 return Button._jQueryInterface; 704 }; 705 706 /** 707 * ------------------------------------------------------------------------ 708 * Constants 709 * ------------------------------------------------------------------------ 710 */ 711 712 var NAME$2 = 'carousel'; 713 var VERSION$2 = '4.4.1'; 714 var DATA_KEY$2 = 'bs.carousel'; 715 var EVENT_KEY$2 = "." + DATA_KEY$2; 716 var DATA_API_KEY$2 = '.data-api'; 717 var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2]; 718 var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key 719 720 var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key 721 722 var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 723 724 var SWIPE_THRESHOLD = 40; 725 var Default = { 726 interval: 5000, 727 keyboard: true, 728 slide: false, 729 pause: 'hover', 730 wrap: true, 731 touch: true 732 }; 733 var DefaultType = { 734 interval: '(number|boolean)', 735 keyboard: 'boolean', 736 slide: '(boolean|string)', 737 pause: '(string|boolean)', 738 wrap: 'boolean', 739 touch: 'boolean' 740 }; 741 var Direction = { 742 NEXT: 'next', 743 PREV: 'prev', 744 LEFT: 'left', 745 RIGHT: 'right' 746 }; 747 var Event$2 = { 748 SLIDE: "slide" + EVENT_KEY$2, 749 SLID: "slid" + EVENT_KEY$2, 750 KEYDOWN: "keydown" + EVENT_KEY$2, 751 MOUSEENTER: "mouseenter" + EVENT_KEY$2, 752 MOUSELEAVE: "mouseleave" + EVENT_KEY$2, 753 TOUCHSTART: "touchstart" + EVENT_KEY$2, 754 TOUCHMOVE: "touchmove" + EVENT_KEY$2, 755 TOUCHEND: "touchend" + EVENT_KEY$2, 756 POINTERDOWN: "pointerdown" + EVENT_KEY$2, 757 POINTERUP: "pointerup" + EVENT_KEY$2, 758 DRAG_START: "dragstart" + EVENT_KEY$2, 759 LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2, 760 CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2 761 }; 762 var ClassName$2 = { 763 CAROUSEL: 'carousel', 764 ACTIVE: 'active', 765 SLIDE: 'slide', 766 RIGHT: 'carousel-item-right', 767 LEFT: 'carousel-item-left', 768 NEXT: 'carousel-item-next', 769 PREV: 'carousel-item-prev', 770 ITEM: 'carousel-item', 771 POINTER_EVENT: 'pointer-event' 772 }; 773 var Selector$2 = { 774 ACTIVE: '.active', 775 ACTIVE_ITEM: '.active.carousel-item', 776 ITEM: '.carousel-item', 777 ITEM_IMG: '.carousel-item img', 778 NEXT_PREV: '.carousel-item-next, .carousel-item-prev', 779 INDICATORS: '.carousel-indicators',
780 DATA_SLIDE: '[data-slide], [data-slide-to]', 781 DATA_RIDE: '[data-ride="carousel"]' 782 }; 783 var PointerType = { 784 TOUCH: 'touch', 785 PEN: 'pen' 786 }; 787 /** 788 * ------------------------------------------------------------------------ 789 * Class Definition 790 * ------------------------------------------------------------------------ 791 */ 792 793 var Carousel = 794 /*#__PURE__*/ 795 function () { 796 function Carousel(element, config) { 797 this._items = null; 798 this._interval = null; 799 this._activeElement = null; 800 this._isPaused = false; 801 this._isSliding = false; 802 this.touchTimeout = null; 803 this.touchStartX = 0; 804 this.touchDeltaX = 0; 805 this._config = this._getConfig(config); 806 this._element = element; 807 this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS); 808 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 809 this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); 810 811 this._addEventListeners(); 812 } // Getters 813 814 815 var _proto = Carousel.prototype; 816 817 // Public 818 _proto.next = function next() { 819 if (!this._isSliding) { 820 this._slide(Direction.NEXT); 821 } 822 }; 823 824 _proto.nextWhenVisible = function nextWhenVisible() { 825 // Don't call next when the page isn't visible 826 // or the carousel or its parent isn't visible 827 if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { 828 this.next(); 829 } 830 }; 831 832 _proto.prev = function prev() { 833 if (!this._isSliding) { 834 this._slide(Direction.PREV); 835 } 836 }; 837 838 _proto.pause = function pause(event) { 839 if (!event) { 840 this._isPaused = true; 841 } 842 843 if (this._element.querySelector(Selector$2.NEXT_PREV)) { 844 Util.triggerTransitionEnd(this._element); 845 this.cycle(true); 846 } 847 848 clearInterval(this._interval); 849 this._interval = null; 850 }; 851 852 _proto.cycle = function cycle(event) { 853 if (!event) { 854 this._isPaused = false; 855 } 856 857 if (this._interval) { 858 clearInterval(this._interval); 859 this._interval = null; 860 } 861 862 if (this._config.interval && !this._isPaused) { 863 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 864 } 865 }; 866 867 _proto.to = function to(index) { 868 var _this = this; 869 870 this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); 871 872 var activeIndex = this._getItemIndex(this._activeElement); 873 874 if (index > this._items.length - 1 || index < 0) { 875 return; 876 } 877 878 if (this._isSliding) { 879 $(this._element).one(Event$2.SLID, function () { 880 return _this.to(index); 881 }); 882 return; 883 } 884 885 if (activeIndex === index) { 886 this.pause(); 887 this.cycle(); 888 return; 889 } 890 891 var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; 892 893 this._slide(direction, this._items[index]); 894 }; 895 896 _proto.dispose = function dispose() { 897 $(this._element).off(EVENT_KEY$2); 898 $.removeData(this._element, DATA_KEY$2); 899 this._items = null; 900 this._config = null; 901 this._element = null; 902 this._interval = null; 903 this._isPaused = null; 904 this._isSliding = null; 905 this._activeElement = null; 906 this._indicatorsElement = null; 907 } // Private 908 ; 909 910 _proto._getConfig = function _getConfig(config) { 911 config = _objectSpread2({}, Default, {}, config); 912 Util.typeCheckConfig(NAME$2, config, DefaultType); 913 return config; 914 }; 915 916 _proto._handleSwipe = function _handleSwipe() { 917 var absDeltax = Math.abs(this.touchDeltaX); 918 919 if (absDeltax <= SWIPE_THRESHOLD) { 920 return; 921 } 922 923 var direction = absDeltax / this.touchDeltaX; 924 this.touchDeltaX = 0; // swipe left 925 926 if (direction > 0) { 927 this.prev(); 928 } // swipe right 929 930 931 if (direction < 0) { 932 this.next(); 933 } 934 }; 935 936 _proto._addEventListeners = function _addEventListeners() { 937 var _this2 = this; 938 939 if (this._config.keyboard) { 940 $(this._element).on(Event$2.KEYDOWN, function (event) { 941 return _this2._keydown(event); 942 }); 943 } 944 945 if (this._config.pause === 'hover') { 946 $(this._element).on(Event$2.MOUSEENTER, function (event) { 947 return _this2.pause(event); 948 }).on(Event$2.MOUSELEAVE, function (event) { 949 return _this2.cycle(event); 950 }); 951 } 952 953 if (this._config.touch) { 954 this._addTouchEventListeners(); 955 } 956 }; 957 958 _proto._addTouchEventListeners = function _addTouchEventListeners() { 959 var _this3 = this; 960 961 if (!this._touchSupported) { 962 return; 963 } 964 965 var start = function start(event) { 966 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 967 _this3.touchStartX = event.originalEvent.clientX; 968 } else if (!_this3._pointerEvent) { 969 _this3.touchStartX = event.originalEvent.touches[0].clientX; 970 } 971 }; 972 973 var move = function move(event) { 974 // ensure swiping with one touch and not pinching 975 if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { 976 _this3.touchDeltaX = 0; 977 } else { 978 _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; 979 } 980 }; 981 982 var end = function end(event) { 983 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 984 _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; 985 } 986 987 _this3._handleSwipe(); 988 989 if (_this3._config.pause === 'hover') {
990 // If it's a touch-enabled device, mouseenter/leave are fired as 991 // part of the mouse compatibility events on first tap - the carousel 992 // would stop cycling until user tapped out of it; 993 // here, we listen for touchend, explicitly pause the carousel 994 // (as if it's the second time we tap on it, mouseenter compat event 995 // is NOT fired) and after a timeout (to allow for mouse compatibility 996 // events to fire) we explicitly restart cycling 997 _this3.pause(); 998 999 if (_this3.touchTimeout) { 1000 clearTimeout(_this3.touchTimeout); 1001 } 1002 1003 _this3.touchTimeout = setTimeout(function (event) { 1004 return _this3.cycle(event); 1005 }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); 1006 } 1007 }; 1008 1009 $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { 1010 return e.preventDefault(); 1011 }); 1012 1013 if (this._pointerEvent) { 1014 $(this._element).on(Event$2.POINTERDOWN, function (event) { 1015 return start(event); 1016 }); 1017 $(this._element).on(Event$2.POINTERUP, function (event) { 1018 return end(event); 1019 }); 1020 1021 this._element.classList.add(ClassName$2.POINTER_EVENT); 1022 } else { 1023 $(this._element).on(Event$2.TOUCHSTART, function (event) { 1024 return start(event); 1025 }); 1026 $(this._element).on(Event$2.TOUCHMOVE, function (event) { 1027 return move(event); 1028 }); 1029 $(this._element).on(Event$2.TOUCHEND, function (event) { 1030 return end(event); 1031 }); 1032 } 1033 }; 1034 1035 _proto._keydown = function _keydown(event) { 1036 if (/input|textarea/i.test(event.target.tagName)) { 1037 return; 1038 } 1039 1040 switch (event.which) { 1041 case ARROW_LEFT_KEYCODE: 1042 event.preventDefault(); 1043 this.prev(); 1044 break; 1045 1046 case ARROW_RIGHT_KEYCODE: 1047 event.preventDefault(); 1048 this.next(); 1049 break; 1050 } 1051 }; 1052 1053 _proto._getItemIndex = function _getItemIndex(element) { 1054 this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; 1055 return this._items.indexOf(element); 1056 }; 1057 1058 _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { 1059 var isNextDirection = direction === Direction.NEXT; 1060 var isPrevDirection = direction === Direction.PREV; 1061 1062 var activeIndex = this._getItemIndex(activeElement); 1063 1064 var lastItemIndex = this._items.length - 1; 1065 var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; 1066 1067 if (isGoingToWrap && !this._config.wrap) { 1068 return activeElement; 1069 } 1070 1071 var delta = direction === Direction.PREV ? -1 : 1; 1072 var itemIndex = (activeIndex + delta) % this._items.length; 1073 return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; 1074 }; 1075 1076 _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { 1077 var targetIndex = this._getItemIndex(relatedTarget); 1078 1079 var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); 1080 1081 var slideEvent = $.Event(Event$2.SLIDE, { 1082 relatedTarget: relatedTarget, 1083 direction: eventDirectionName, 1084 from: fromIndex, 1085 to: targetIndex 1086 }); 1087 $(this._element).trigger(slideEvent); 1088 return slideEvent; 1089 }; 1090 1091 _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { 1092 if (this._indicatorsElement) { 1093 var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); 1094 $(indicators).removeClass(ClassName$2.ACTIVE); 1095 1096 var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; 1097 1098 if (nextIndicator) { 1099 $(nextIndicator).addClass(ClassName$2.ACTIVE); 1100 } 1101 } 1102 }; 1103 1104 _proto._slide = function _slide(direction, element) { 1105 var _this4 = this; 1106 1107 var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); 1108 1109 var activeElementIndex = this._getItemIndex(activeElement); 1110 1111 var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); 1112 1113 var nextElementIndex = this._getItemIndex(nextElement); 1114 1115 var isCycling = Boolean(this._interval); 1116 var directionalClassName; 1117 var orderClassName; 1118 var eventDirectionName; 1119 1120 if (direction === Direction.NEXT) { 1121 directionalClassName = ClassName$2.LEFT; 1122 orderClassName = ClassName$2.NEXT; 1123 eventDirectionName = Direction.LEFT; 1124 } else { 1125 directionalClassName = ClassName$2.RIGHT; 1126 orderClassName = ClassName$2.PREV; 1127 eventDirectionName = Direction.RIGHT; 1128 } 1129 1130 if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { 1131 this._isSliding = false; 1132 return; 1133 } 1134 1135 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 1136 1137 if (slideEvent.isDefaultPrevented()) { 1138 return; 1139 } 1140 1141 if (!activeElement || !nextElement) { 1142 // Some weirdness is happening, so we bail 1143 return; 1144 } 1145 1146 this._isSliding = true; 1147 1148 if (isCycling) { 1149 this.pause(); 1150 } 1151 1152 this._setActiveIndicatorElement(nextElement); 1153 1154 var slidEvent = $.Event(Event$2.SLID, { 1155 relatedTarget: nextElement, 1156 direction: eventDirectionName, 1157 from: activeElementIndex, 1158 to: nextElementIndex 1159 }); 1160 1161 if ($(this._element).hasClass(ClassName$2.SLIDE)) { 1162 $(nextElement).addClass(orderClassName); 1163 Util.reflow(nextElement); 1164 $(activeElement).addClass(directionalClassName); 1165 $(nextElement).addClass(directionalClassName); 1166 var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); 1167 1168 if (nextElementInterval) { 1169 this._config.defaultInterval = this._config.defaultInterval || this._config.interval; 1170 this._config.interval = nextElementInterval; 1171 } else { 1172 this._config.interval = this._config.defaultInterval || this._config.interval; 1173 } 1174 1175 var transitionDuration = Util.getTransitionDurationFromElement(activeElement); 1176 $(activeElement).one(Util.TRANSITION_END, function () { 1177 $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); 1178 $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); 1179 _this4._isSliding = false; 1180 setTimeout(function () { 1181 return $(_this4._element).trigger(slidEvent); 1182 }, 0); 1183 }).emulateTransitionEnd(transitionDuration); 1184 } else { 1185 $(activeElement).removeClass(ClassName$2.ACTIVE); 1186 $(nextElement).addClass(ClassName$2.ACTIVE); 1187 this._isSliding = false; 1188 $(this._element).trigger(slidEvent); 1189 } 1190 1191 if (isCycling) { 1192 this.cycle(); 1193 } 1194 } // Static 1195 ; 1196 1197 Carousel._jQueryInterface = function _jQueryInterface(config) { 1198 return this.each(function () { 1199 var data = $(this).data(DATA_KEY$2); 1200
1201 var _config = _objectSpread2({}, Default, {}, $(this).data()); 1202 1203 if (typeof config === 'object') { 1204 _config = _objectSpread2({}, _config, {}, config); 1205 } 1206 1207 var action = typeof config === 'string' ? config : _config.slide; 1208 1209 if (!data) { 1210 data = new Carousel(this, _config); 1211 $(this).data(DATA_KEY$2, data); 1212 } 1213 1214 if (typeof config === 'number') { 1215 data.to(config); 1216 } else if (typeof action === 'string') { 1217 if (typeof data[action] === 'undefined') { 1218 throw new TypeError("No method named \"" + action + "\""); 1219 } 1220 1221 data[action](); 1222 } else if (_config.interval && _config.ride) { 1223 data.pause(); 1224 data.cycle(); 1225 } 1226 }); 1227 }; 1228 1229 Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { 1230 var selector = Util.getSelectorFromElement(this); 1231 1232 if (!selector) { 1233 return; 1234 } 1235 1236 var target = $(selector)[0]; 1237 1238 if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { 1239 return; 1240 } 1241 1242 var config = _objectSpread2({}, $(target).data(), {}, $(this).data()); 1243 1244 var slideIndex = this.getAttribute('data-slide-to'); 1245 1246 if (slideIndex) { 1247 config.interval = false; 1248 } 1249 1250 Carousel._jQueryInterface.call($(target), config); 1251 1252 if (slideIndex) { 1253 $(target).data(DATA_KEY$2).to(slideIndex); 1254 } 1255 1256 event.preventDefault(); 1257 }; 1258 1259 _createClass(Carousel, null, [{ 1260 key: "VERSION", 1261 get: function get() { 1262 return VERSION$2; 1263 } 1264 }, { 1265 key: "Default", 1266 get: function get() { 1267 return Default; 1268 } 1269 }]); 1270 1271 return Carousel; 1272 }(); 1273 /** 1274 * ------------------------------------------------------------------------ 1275 * Data Api implementation 1276 * ------------------------------------------------------------------------ 1277 */ 1278 1279 1280 $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); 1281 $(window).on(Event$2.LOAD_DATA_API, function () { 1282 var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); 1283 1284 for (var i = 0, len = carousels.length; i < len; i++) { 1285 var $carousel = $(carousels[i]); 1286 1287 Carousel._jQueryInterface.call($carousel, $carousel.data()); 1288 } 1289 }); 1290 /** 1291 * ------------------------------------------------------------------------ 1292 * jQuery 1293 * ------------------------------------------------------------------------ 1294 */ 1295 1296 $.fn[NAME$2] = Carousel._jQueryInterface; 1297 $.fn[NAME$2].Constructor = Carousel; 1298 1299 $.fn[NAME$2].noConflict = function () { 1300 $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; 1301 return Carousel._jQueryInterface; 1302 }; 1303 1304 /** 1305 * ------------------------------------------------------------------------ 1306 * Constants 1307 * ------------------------------------------------------------------------ 1308 */ 1309 1310 var NAME$3 = 'collapse'; 1311 var VERSION$3 = '4.4.1'; 1312 var DATA_KEY$3 = 'bs.collapse'; 1313 var EVENT_KEY$3 = "." + DATA_KEY$3; 1314 var DATA_API_KEY$3 = '.data-api'; 1315 var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; 1316 var Default$1 = { 1317 toggle: true, 1318 parent: '' 1319 }; 1320 var DefaultType$1 = { 1321 toggle: 'boolean', 1322 parent: '(string|element)' 1323 }; 1324 var Event$3 = { 1325 SHOW: "show" + EVENT_KEY$3, 1326 SHOWN: "shown" + EVENT_KEY$3, 1327 HIDE: "hide" + EVENT_KEY$3, 1328 HIDDEN: "hidden" + EVENT_KEY$3, 1329 CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 1330 }; 1331 var ClassName$3 = { 1332 SHOW: 'show', 1333 COLLAPSE: 'collapse', 1334 COLLAPSING: 'collapsing', 1335 COLLAPSED: 'collapsed' 1336 }; 1337 var Dimension = { 1338 WIDTH: 'width', 1339 HEIGHT: 'height' 1340 }; 1341 var Selector$3 = { 1342 ACTIVES: '.show, .collapsing', 1343 DATA_TOGGLE: '[data-toggle="collapse"]' 1344 }; 1345 /** 1346 * ------------------------------------------------------------------------ 1347 * Class Definition 1348 * ------------------------------------------------------------------------ 1349 */ 1350 1351 var Collapse = 1352 /*#__PURE__*/ 1353 function () { 1354 function Collapse(element, config) { 1355 this._isTransitioning = false; 1356 this._element = element; 1357 this._config = this._getConfig(config); 1358 this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.i
1358d + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); 1359 var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); 1360 1361 for (var i = 0, len = toggleList.length; i < len; i++) { 1362 var elem = toggleList[i]; 1363 var selector = Util.getSelectorFromElement(elem); 1364 var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { 1365 return foundElem === element; 1366 }); 1367 1368 if (selector !== null && filterElement.length > 0) { 1369 this._selector = selector; 1370 1371 this._triggerArray.push(elem); 1372 } 1373 } 1374 1375 this._parent = this._config.parent ? this._getParent() : null; 1376 1377 if (!this._config.parent) { 1378 this._addAriaAndCollapsedClass(this._element, this._triggerArray); 1379 } 1380 1381 if (this._config.toggle) { 1382 this.toggle(); 1383 } 1384 } // Getters 1385 1386 1387 var _proto = Collapse.prototype; 1388 1389 // Public 1390 _proto.toggle = function toggle() { 1391 if ($(this._element).hasClass(ClassName$3.SHOW)) { 1392 this.hide(); 1393 } else { 1394 this.show(); 1395 } 1396 }; 1397 1398 _proto.show = function show() { 1399 var _this = this; 1400 1401 if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { 1402 return; 1403 } 1404 1405 var actives; 1406 var activesData; 1407 1408 if (this._parent) { 1409 actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { 1410 if (typeof _this._config.parent === 'string') { 1411 return elem.getAttribute('data-parent') === _this._config.parent; 1412 } 1413 1414 return elem.classList.contains(ClassName$3.COLLAPSE); 1415 }); 1416 1417 if (actives.length === 0) { 1418 actives = null; 1419 } 1420 } 1421 1422 if (actives) { 1423 activesData = $(actives).not(this._selector).data(DATA_KEY$3); 1424 1425 if (activesData && activesData._isTransitioning) { 1426 return; 1427 } 1428 } 1429 1430 var startEvent = $.Event(Event$3.SHOW); 1431 $(this._element).trigger(startEvent); 1432 1433 if (startEvent.isDefaultPrevented()) { 1434 return; 1435 } 1436 1437 if (actives) { 1438 Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); 1439 1440 if (!activesData) { 1441 $(actives).data(DATA_KEY$3, null); 1442 } 1443 } 1444 1445 var dimension = this._getDimension(); 1446 1447 $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); 1448 this._element.style[dimension] = 0; 1449 1450 if (this._triggerArray.length) { 1451 $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true); 1452 } 1453 1454 this.setTransitioning(true); 1455 1456 var complete = function complete() { 1457 $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); 1458 _this._element.style[dimension] = ''; 1459 1460 _this.setTransitioning(false); 1461 1462 $(_this._element).trigger(Event$3.SHOWN); 1463 }; 1464 1465 var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 1466 var scrollSize = "scroll" + capitalizedDimension; 1467 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 1468 $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 1469 this._element.style[dimension] = this._element[scrollSize] + "px"; 1470 }; 1471 1472 _proto.hide = function hide() { 1473 var _this2 = this; 1474 1475 if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { 1476 return; 1477 } 1478 1479 var startEvent = $.Event(Event$3.HIDE); 1480 $(this._element).trigger(startEvent); 1481 1482 if (startEvent.isDefaultPrevented()) { 1483 return; 1484 } 1485 1486 var dimension = this._getDimension(); 1487 1488 this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; 1489 Util.reflow(this._element); 1490 $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); 1491 var triggerArrayLength = this._triggerArray.length; 1492 1493 if (triggerArrayLength > 0) { 1494 for (var i = 0; i < triggerArrayLength; i++) { 1495 var trigger = this._triggerArray[i]; 1496 var selector = Util.getSelectorFromElement(trigger); 1497 1498 if (selector !== null) { 1499 var $elem = $([].slice.call(document.querySelectorAll(selector))); 1500 1501 if (!$elem.hasClass(ClassName$3.SHOW)) { 1502 $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); 1503 } 1504 } 1505 } 1506 } 1507 1508 this.setTransitioning(true); 1509 1510 var complete = function complete() { 1511 _this2.setTransitioning(false); 1512 1513 $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); 1514 }; 1515 1516 this._element.style[dimension] = ''; 1517 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 1518 $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 1519 }; 1520 1521 _proto.setTransitioning = function setTransitioning(isTransitioning) { 1522 this._isTransitioning = isTransitioning; 1523 }; 1524 1525 _proto.dispose = function dispose() { 1526 $.removeData(this._element, DATA_KEY$3); 1527 this._config = null; 1528 this._parent = null; 1529 this._element = null; 1530 this._triggerArray = null; 1531 this._isTransitioning = null; 1532 } // Private 1533 ; 1534 1535 _proto._getConfig = function _getConfig(config) {
1536 config = _objectSpread2({}, Default$1, {}, config); 1537 config.toggle = Boolean(config.toggle); // Coerce string values 1538 1539 Util.typeCheckConfig(NAME$3, config, DefaultType$1); 1540 return config; 1541 }; 1542 1543 _proto._getDimension = function _getDimension() { 1544 var hasWidth = $(this._element).hasClass(Dimension.WIDTH); 1545 return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; 1546 }; 1547 1548 _proto._getParent = function _getParent() { 1549 var _this3 = this; 1550 1551 var parent; 1552 1553 if (Util.isElement(this._config.parent)) { 1554 parent = this._config.parent; // It's a jQuery object 1555 1556 if (typeof this._config.parent.jquery !== 'undefined') { 1557 parent = this._config.parent[0]; 1558 } 1559 } else { 1560 parent = document.querySelector(this._config.parent); 1561 } 1562 1563 var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; 1564 var children = [].slice.call(parent.querySelectorAll(selector)); 1565 $(children).each(function (i, element) { 1566 _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); 1567 }); 1568 return parent; 1569 }; 1570 1571 _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { 1572 var isOpen = $(element).hasClass(ClassName$3.SHOW); 1573 1574 if (triggerArray.length) { 1575 $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); 1576 } 1577 } // Static 1578 ; 1579 1580 Collapse._getTargetFromElement = function _getTargetFromElement(element) { 1581 var selector = Util.getSelectorFromElement(element); 1582 return selector ? document.querySelector(selector) : null; 1583 }; 1584 1585 Collapse._jQueryInterface = function _jQueryInterface(config) { 1586 return this.each(function () { 1587 var $this = $(this); 1588 var data = $this.data(DATA_KEY$3); 1589 1590 var _config = _objectSpread2({}, Default$1, {}, $this.data(), {}, typeof config === 'object' && config ? config : {}); 1591 1592 if (!data && _config.toggle && /show|hide/.test(config)) { 1593 _config.toggle = false; 1594 } 1595 1596 if (!data) { 1597 data = new Collapse(this, _config); 1598 $this.data(DATA_KEY$3, data); 1599 } 1600 1601 if (typeof config === 'string') { 1602 if (typeof data[config] === 'undefined') { 1603 throw new TypeError("No method named \"" + config + "\""); 1604 } 1605 1606 data[config](); 1607 } 1608 }); 1609 }; 1610 1611 _createClass(Collapse, null, [{ 1612 key: "VERSION", 1613 get: function get() { 1614 return VERSION$3; 1615 } 1616 }, { 1617 key: "Default", 1618 get: function get() { 1619 return Default$1; 1620 } 1621 }]); 1622 1623 return Collapse; 1624 }(); 1625 /** 1626 * ------------------------------------------------------------------------ 1627 * Data Api implementation 1628 * ------------------------------------------------------------------------ 1629 */ 1630 1631 1632 $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) { 1633 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 1634 if (event.currentTarget.tagName === 'A') { 1635 event.preventDefault(); 1636 } 1637 1638 var $trigger = $(this); 1639 var selector = Util.getSelectorFromElement(this); 1640 var selectors = [].slice.call(document.querySelectorAll(selector)); 1641 $(selectors).each(function () { 1642 var $target = $(this); 1643 var data = $target.data(DATA_KEY$3); 1644 var config = data ? 'toggle' : $trigger.data(); 1645 1646 Collapse._jQueryInterface.call($target, config); 1647 }); 1648 }); 1649 /** 1650 * ------------------------------------------------------------------------ 1651 * jQuery 1652 * ------------------------------------------------------------------------ 1653 */ 1654 1655 $.fn[NAME$3] = Collapse._jQueryInterface; 1656 $.fn[NAME$3].Constructor = Collapse; 1657 1658 $.fn[NAME$3].noConflict = function () { 1659 $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; 1660 return Collapse._jQueryInterface; 1661 }; 1662 1663 /** 1664 * ------------------------------------------------------------------------ 1665 * Constants 1666 * ------------------------------------------------------------------------ 1667 */ 1668 1669 var NAME$4 = 'dropdown'; 1670 var VERSION$4 = '4.4.1'; 1671 var DATA_KEY$4 = 'bs.dropdown'; 1672 var EVENT_KEY$4 = "." + DATA_KEY$4; 1673 var DATA_API_KEY$4 = '.data-api'; 1674 var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; 1675 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 1676 1677 var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key 1678 1679 var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key 1680 1681 var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key 1682 1683 var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key 1684 1685 var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) 1686 1687 var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
1688 var Event$4 = { 1689 HIDE: "hide" + EVENT_KEY$4, 1690 HIDDEN: "hidden" + EVENT_KEY$4, 1691 SHOW: "show" + EVENT_KEY$4, 1692 SHOWN: "shown" + EVENT_KEY$4, 1693 CLICK: "click" + EVENT_KEY$4, 1694 CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, 1695 KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, 1696 KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 1697 }; 1698 var ClassName$4 = { 1699 DISABLED: 'disabled', 1700 SHOW: 'show', 1701 DROPUP: 'dropup', 1702 DROPRIGHT: 'dropright', 1703 DROPLEFT: 'dropleft', 1704 MENURIGHT: 'dropdown-menu-right', 1705 MENULEFT: 'dropdown-menu-left', 1706 POSITION_STATIC: 'position-static' 1707 }; 1708 var Selector$4 = { 1709 DATA_TOGGLE: '[data-toggle="dropdown"]', 1710 FORM_CHILD: '.dropdown form', 1711 MENU: '.dropdown-menu', 1712 NAVBAR_NAV: '.navbar-nav', 1713 VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' 1714 }; 1715 var AttachmentMap = { 1716 TOP: 'top-start', 1717 TOPEND: 'top-end', 1718 BOTTOM: 'bottom-start', 1719 BOTTOMEND: 'bottom-end', 1720 RIGHT: 'right-start', 1721 RIGHTEND: 'right-end', 1722 LEFT: 'left-start', 1723 LEFTEND: 'left-end' 1724 }; 1725 var Default$2 = { 1726 offset: 0, 1727 flip: true, 1728 boundary: 'scrollParent', 1729 reference: 'toggle', 1730 display: 'dynamic', 1731 popperConfig: null 1732 }; 1733 var DefaultType$2 = { 1734 offset: '(number|string|function)', 1735 flip: 'boolean', 1736 boundary: '(string|element)', 1737 reference: '(string|element)', 1738 display: 'string', 1739 popperConfig: '(null|object)' 1740 }; 1741 /** 1742 * ------------------------------------------------------------------------ 1743 * Class Definition 1744 * ------------------------------------------------------------------------ 1745 */ 1746 1747 var Dropdown = 1748 /*#__PURE__*/ 1749 function () { 1750 function Dropdown(element, config) { 1751 this._element = element; 1752 this._popper = null; 1753 this._config = this._getConfig(config); 1754 this._menu = this._getMenuElement(); 1755 this._inNavbar = this._detectNavbar(); 1756 1757 this._addEventListeners(); 1758 } // Getters 1759 1760 1761 var _proto = Dropdown.prototype; 1762 1763 // Public 1764 _proto.toggle = function toggle() { 1765 if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { 1766 return; 1767 } 1768 1769 var isActive = $(this._menu).hasClass(ClassName$4.SHOW); 1770 1771 Dropdown._clearMenus(); 1772 1773 if (isActive) { 1774 return; 1775 } 1776 1777 this.show(true); 1778 }; 1779 1780 _proto.show = function show(usePopper) { 1781 if (usePopper === void 0) { 1782 usePopper = false; 1783 } 1784 1785 if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { 1786 return; 1787 } 1788 1789 var relatedTarget = { 1790 relatedTarget: this._element 1791 }; 1792 var showEvent = $.Event(Event$4.SHOW, relatedTarget); 1793 1794 var parent = Dropdown._getParentFromElement(this._element); 1795 1796 $(parent).trigger(showEvent); 1797 1798 if (showEvent.isDefaultPrevented()) { 1799 return; 1800 } // Disable totally Popper.js for Dropdown in Navbar 1801 1802 1803 if (!this._inNavbar && usePopper) { 1804 /** 1805 * Check for Popper dependency 1806 * Popper - https://popper.js.org 1807 */ 1808 if (typeof Popper === 'undefined') { 1809 throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); 1810 } 1811 1812 var referenceElement = this._element; 1813 1814 if (this._config.reference === 'parent') { 1815 referenceElement = parent; 1816 } else if (Util.isElement(this._config.reference)) { 1817 referenceElement = this._config.reference; // Check if it's jQuery element 1818 1819 if (typeof this._config.reference.jquery !== 'undefined') { 1820 referenceElement = this._config.reference[0]; 1821 } 1822 } // If boundary is not `scrollParent`, then set position to `static` 1823 // to allow the menu to "escape" the scroll parent's boundaries 1824 // https://github.com/twbs/bootstrap/issues/24251 1825 1826
1827 if (this._config.boundary !== 'scrollParent') { 1828 $(parent).addClass(ClassName$4.POSITION_STATIC); 1829 } 1830 1831 this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); 1832 } // If this is a touch-enabled device we add extra 1833 // empty mouseover listeners to the body's immediate children; 1834 // only needed because of broken event delegation on iOS 1835 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 1836 1837 1838 if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { 1839 $(document.body).children().on('mouseover', null, $.noop); 1840 } 1841 1842 this._element.focus(); 1843 1844 this._element.setAttribute('aria-expanded', true); 1845 1846 $(this._menu).toggleClass(ClassName$4.SHOW); 1847 $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); 1848 }; 1849 1850 _proto.hide = function hide() { 1851 if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { 1852 return; 1853 } 1854 1855 var relatedTarget = { 1856 relatedTarget: this._element 1857 }; 1858 var hideEvent = $.Event(Event$4.HIDE, relatedTarget); 1859 1860 var parent = Dropdown._getParentFromElement(this._element); 1861 1862 $(parent).trigger(hideEvent); 1863 1864 if (hideEvent.isDefaultPrevented()) { 1865 return; 1866 } 1867 1868 if (this._popper) { 1869 this._popper.destroy(); 1870 } 1871 1872 $(this._menu).toggleClass(ClassName$4.SHOW); 1873 $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); 1874 }; 1875 1876 _proto.dispose = function dispose() { 1877 $.removeData(this._element, DATA_KEY$4); 1878 $(this._element).off(EVENT_KEY$4); 1879 this._element = null; 1880 this._menu = null; 1881 1882 if (this._popper !== null) { 1883 this._popper.destroy(); 1884 1885 this._popper = null; 1886 } 1887 }; 1888 1889 _proto.update = function update() { 1890 this._inNavbar = this._detectNavbar(); 1891 1892 if (this._popper !== null) { 1893 this._popper.scheduleUpdate(); 1894 } 1895 } // Private 1896 ; 1897 1898 _proto._addEventListeners = function _addEventListeners() { 1899 var _this = this; 1900 1901 $(this._element).on(Event$4.CLICK, function (event) { 1902 event.preventDefault(); 1903 event.stopPropagation(); 1904 1905 _this.toggle(); 1906 }); 1907 }; 1908 1909 _proto._getConfig = function _getConfig(config) { 1910 config = _objectSpread2({}, this.constructor.Default, {}, $(this._element).data(), {}, config); 1911 Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); 1912 return config; 1913 }; 1914 1915 _proto._getMenuElement = function _getMenuElement() { 1916 if (!this._menu) { 1917 var parent = Dropdown._getParentFromElement(this._element); 1918 1919 if (parent) { 1920 this._menu = parent.querySelector(Selector$4.MENU); 1921 } 1922 } 1923 1924 return this._menu; 1925 }; 1926 1927 _proto._getPlacement = function _getPlacement() { 1928 var $parentDropdown = $(this._element.parentNode); 1929 var placement = AttachmentMap.BOTTOM; // Handle dropup 1930 1931 if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { 1932 placement = AttachmentMap.TOP; 1933 1934 if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { 1935 placement = AttachmentMap.TOPEND; 1936 } 1937 } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { 1938 placement = AttachmentMap.RIGHT; 1939 } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { 1940 placement = AttachmentMap.LEFT; 1941 } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { 1942 placement = AttachmentMap.BOTTOMEND; 1943 } 1944 1945 return placement; 1946 }; 1947 1948 _proto._detectNavbar = function _detectNavbar() { 1949 return $(this._element).closest('.navbar').length > 0; 1950 }; 1951 1952 _proto._getOffset = function _getOffset() { 1953 var _this2 = this; 1954 1955 var offset = {}; 1956 1957 if (typeof this._config.offset === 'function') { 1958 offset.fn = function (data) {
1959 data.offsets = _objectSpread2({}, data.offsets, {}, _this2._config.offset(data.offsets, _this2._element) || {}); 1960 return data; 1961 }; 1962 } else { 1963 offset.offset = this._config.offset; 1964 } 1965 1966 return offset; 1967 }; 1968 1969 _proto._getPopperConfig = function _getPopperConfig() { 1970 var popperConfig = { 1971 placement: this._getPlacement(), 1972 modifiers: { 1973 offset: this._getOffset(), 1974 flip: { 1975 enabled: this._config.flip 1976 }, 1977 preventOverflow: { 1978 boundariesElement: this._config.boundary 1979 } 1980 } 1981 }; // Disable Popper.js if we have a static display 1982 1983 if (this._config.display === 'static') { 1984 popperConfig.modifiers.applyStyle = { 1985 enabled: false 1986 }; 1987 } 1988 1989 return _objectSpread2({}, popperConfig, {}, this._config.popperConfig); 1990 } // Static 1991 ; 1992 1993 Dropdown._jQueryInterface = function _jQueryInterface(config) { 1994 return this.each(function () { 1995 var data = $(this).data(DATA_KEY$4); 1996 1997 var _config = typeof config === 'object' ? config : null; 1998 1999 if (!data) { 2000 data = new Dropdown(this, _config); 2001 $(this).data(DATA_KEY$4, data); 2002 } 2003 2004 if (typeof config === 'string') { 2005 if (typeof data[config] === 'undefined') { 2006 throw new TypeError("No method named \"" + config + "\""); 2007 } 2008 2009 data[config](); 2010 } 2011 }); 2012 }; 2013 2014 Dropdown._clearMenus = function _clearMenus(event) { 2015 if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { 2016 return; 2017 } 2018 2019 var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); 2020 2021 for (var i = 0, len = toggles.length; i < len; i++) { 2022 var parent = Dropdown._getParentFromElement(toggles[i]); 2023 2024 var context = $(toggles[i]).data(DATA_KEY$4); 2025 var relatedTarget = { 2026 relatedTarget: toggles[i] 2027 }; 2028 2029 if (event && event.type === 'click') { 2030 relatedTarget.clickEvent = event; 2031 } 2032 2033 if (!context) { 2034 continue; 2035 } 2036 2037 var dropdownMenu = context._menu; 2038 2039 if (!$(parent).hasClass(ClassName$4.SHOW)) { 2040 continue; 2041 } 2042 2043 if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { 2044 continue; 2045 } 2046 2047 var hideEvent = $.Event(Event$4.HIDE, relatedTarget); 2048 $(parent).trigger(hideEvent); 2049 2050 if (hideEvent.isDefaultPrevented()) { 2051 continue; 2052 } // If this is a touch-enabled device we remove the extra 2053 // empty mouseover listeners we added for iOS support 2054 2055 2056 if ('ontouchstart' in document.documentElement) { 2057 $(document.body).children().off('mouseover', null, $.noop); 2058 } 2059 2060 toggles[i].setAttribute('aria-expanded', 'false'); 2061 2062 if (context._popper) { 2063 context._popper.destroy(); 2064 } 2065 2066 $(dropdownMenu).removeClass(ClassName$4.SHOW); 2067 $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); 2068 } 2069 }; 2070 2071 Dropdown._getParentFromElement = function _getParentFromElement(element) { 2072 var parent; 2073 var selector = Util.getSelectorFromElement(element); 2074 2075 if (selector) { 2076 parent = document.querySelector(selector); 2077 } 2078 2079 return parent || element.parentNode; 2080 } // eslint-disable-next-line complexity 2081 ; 2082 2083 Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { 2084 // If not input/textarea: 2085 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 2086 // If input/textarea: 2087 // - If space key => not a dropdown command 2088 // - If key is other than escape 2089 // - If key is not up or down => not a dropdown command 2090 // - If trigger inside the menu =>
2090 not a dropdown command 2091 if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { 2092 return; 2093 } 2094 2095 event.preventDefault(); 2096 event.stopPropagation(); 2097 2098 if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { 2099 return; 2100 } 2101 2102 var parent = Dropdown._getParentFromElement(this); 2103 2104 var isActive = $(parent).hasClass(ClassName$4.SHOW); 2105 2106 if (!isActive && event.which === ESCAPE_KEYCODE) { 2107 return; 2108 } 2109 2110 if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { 2111 if (event.which === ESCAPE_KEYCODE) { 2112 var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); 2113 $(toggle).trigger('focus'); 2114 } 2115 2116 $(this).trigger('click'); 2117 return; 2118 } 2119 2120 var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)).filter(function (item) { 2121 return $(item).is(':visible'); 2122 }); 2123 2124 if (items.length === 0) { 2125 return; 2126 } 2127 2128 var index = items.indexOf(event.target); 2129 2130 if (event.which === ARROW_UP_KEYCODE && index > 0) { 2131 // Up 2132 index--; 2133 } 2134 2135 if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { 2136 // Down 2137 index++; 2138 } 2139 2140 if (index < 0) { 2141 index = 0; 2142 } 2143 2144 items[index].focus(); 2145 }; 2146 2147 _createClass(Dropdown, null, [{ 2148 key: "VERSION", 2149 get: function get() { 2150 return VERSION$4; 2151 } 2152 }, { 2153 key: "Default", 2154 get: function get() { 2155 return Default$2; 2156 } 2157 }, { 2158 key: "DefaultType", 2159 get: function get() { 2160 return DefaultType$2; 2161 } 2162 }]); 2163 2164 return Dropdown; 2165 }(); 2166 /** 2167 * ------------------------------------------------------------------------ 2168 * Data Api implementation 2169 * ------------------------------------------------------------------------ 2170 */ 2171 2172 2173 $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { 2174 event.preventDefault(); 2175 event.stopPropagation(); 2176 2177 Dropdown._jQueryInterface.call($(this), 'toggle'); 2178 }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { 2179 e.stopPropagation(); 2180 }); 2181 /** 2182 * ------------------------------------------------------------------------ 2183 * jQuery 2184 * ------------------------------------------------------------------------ 2185 */ 2186 2187 $.fn[NAME$4] = Dropdown._jQueryInterface; 2188 $.fn[NAME$4].Constructor = Dropdown; 2189 2190 $.fn[NAME$4].noConflict = function () { 2191 $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; 2192 return Dropdown._jQueryInterface; 2193 }; 2194 2195 /** 2196 * ------------------------------------------------------------------------ 2197 * Constants 2198 * ------------------------------------------------------------------------ 2199 */ 2200 2201 var NAME$5 = 'modal'; 2202 var VERSION$5 = '4.4.1'; 2203 var DATA_KEY$5 = 'bs.modal'; 2204 var EVENT_KEY$5 = "." + DATA_KEY$5; 2205 var DATA_API_KEY$5 = '.data-api'; 2206 var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; 2207 var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key 2208 2209 var Default$3 = { 2210 backdrop: true, 2211 keyboard: true, 2212 focus: true, 2213 show: true 2214 }; 2215 var DefaultType$3 = { 2216 backdrop: '(boolean|string)', 2217 keyboard: 'boolean', 2218 focus: 'boolean', 2219 show: 'boolean' 2220 }; 2221 var Event$5 = { 2222 HIDE: "hide" + EVENT_KEY$5, 2223 HIDE_PREVENTED: "hidePrevented" + EVENT_KEY$5, 2224 HIDDEN: "hidden" + EVENT_KEY$5, 2225 SHOW: "show" + EVENT_KEY$5, 2226 SHOWN: "shown" + EVENT_KEY$5, 2227 FOCUSIN: "focusin" + EVENT_KEY$5, 2228 RESIZE: "resize" + EVENT_KEY$5, 2229 CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, 2230 KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, 2231 MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, 2232 MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, 2233 CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 2234 }; 2235 var ClassName$5 = {
2236 SCROLLABLE: 'modal-dialog-scrollable', 2237 SCROLLBAR_MEASURER: 'modal-scrollbar-measure', 2238 BACKDROP: 'modal-backdrop', 2239 OPEN: 'modal-open', 2240 FADE: 'fade', 2241 SHOW: 'show', 2242 STATIC: 'modal-static' 2243 }; 2244 var Selector$5 = { 2245 DIALOG: '.modal-dialog', 2246 MODAL_BODY: '.modal-body', 2247 DATA_TOGGLE: '[data-toggle="modal"]', 2248 DATA_DISMISS: '[data-dismiss="modal"]', 2249 FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', 2250 STICKY_CONTENT: '.sticky-top' 2251 }; 2252 /** 2253 * ------------------------------------------------------------------------ 2254 * Class Definition 2255 * ------------------------------------------------------------------------ 2256 */ 2257 2258 var Modal = 2259 /*#__PURE__*/ 2260 function () { 2261 function Modal(element, config) { 2262 this._config = this._getConfig(config); 2263 this._element = element; 2264 this._dialog = element.querySelector(Selector$5.DIALOG); 2265 this._backdrop = null; 2266 this._isShown = false; 2267 this._isBodyOverflowing = false; 2268 this._ignoreBackdropClick = false; 2269 this._isTransitioning = false; 2270 this._scrollbarWidth = 0; 2271 } // Getters 2272 2273 2274 var _proto = Modal.prototype; 2275 2276 // Public 2277 _proto.toggle = function toggle(relatedTarget) { 2278 return this._isShown ? this.hide() : this.show(relatedTarget); 2279 }; 2280 2281 _proto.show = function show(relatedTarget) { 2282 var _this = this; 2283 2284 if (this._isShown || this._isTransitioning) { 2285 return; 2286 } 2287 2288 if ($(this._element).hasClass(ClassName$5.FADE)) { 2289 this._isTransitioning = true; 2290 } 2291 2292 var showEvent = $.Event(Event$5.SHOW, { 2293 relatedTarget: relatedTarget 2294 }); 2295 $(this._element).trigger(showEvent); 2296 2297 if (this._isShown || showEvent.isDefaultPrevented()) { 2298 return; 2299 } 2300 2301 this._isShown = true; 2302 2303 this._checkScrollbar(); 2304 2305 this._setScrollbar(); 2306 2307 this._adjustDialog(); 2308 2309 this._setEscapeEvent(); 2310 2311 this._setResizeEvent(); 2312 2313 $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) { 2314 return _this.hide(event); 2315 }); 2316 $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { 2317 $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { 2318 if ($(event.target).is(_this._element)) { 2319 _this._ignoreBackdropClick = true; 2320 } 2321 }); 2322 }); 2323 2324 this._showBackdrop(function () { 2325 return _this._showElement(relatedTarget); 2326 }); 2327 }; 2328 2329 _proto.hide = function hide(event) { 2330 var _this2 = this; 2331 2332 if (event) { 2333 event.preventDefault(); 2334 } 2335 2336 if (!this._isShown || this._isTransitioning) { 2337 return; 2338 } 2339 2340 var hideEvent = $.Event(Event$5.HIDE); 2341 $(this._element).trigger(hideEvent); 2342 2343 if (!this._isShown || hideEvent.isDefaultPrevented()) { 2344 return; 2345 } 2346 2347 this._isShown = false; 2348 var transition = $(this._element).hasClass(ClassName$5.FADE); 2349 2350 if (transition) { 2351 this._isTransitioning = true; 2352 } 2353 2354 this._setEscapeEvent(); 2355 2356 this._setResizeEvent(); 2357 2358 $(document).off(Event$5.FOCUSIN); 2359 $(this._element).removeClass(ClassName$5.SHOW); 2360 $(this._element).off(Event$5.CLICK_DISMISS); 2361 $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); 2362 2363 if (transition) { 2364 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 2365 $(this._element).one(Util.TRANSITION_END, function (event) { 2366 return _this2._hideModal(event); 2367 }).emulateTransitionEnd(transitionDuration); 2368 } else { 2369 this._hideModal(); 2370 } 2371 }; 2372 2373 _proto.dispose = function dispose() { 2374 [window, this._element, this._dialog].forEach(function (htmlElement) { 2375 return $(htmlElement).off(EVENT_KEY$5); 2376 }); 2377 /** 2378 * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` 2379 * Do not move `document` in `htmlElements` array 2380 * It will remove `Event.CLICK_DATA_API` event that should remain 2381 */ 2382 2383 $(document).off(Event$5.FOCUSIN); 2384 $.removeData(this._element, DATA_KEY$5); 2385 this._config = null; 2386 this._element = null; 2387 this._dialog = null; 2388 this._backdrop = null; 2389 this._isShown = null; 2390 this._isBodyOverflowing = null; 2391 this._ignoreBackdropClick = null; 2392 this._isTransitioning = null; 2393 this._scrollbarWidth = null; 2394 }; 2395 2396 _proto.handleUpdate = function handleUpdate() { 2397 this._adjustDialog(); 2398 } // Private 2399 ; 2400 2401 _proto._getConfig = function _getConfig(config) {
2402 config = _objectSpread2({}, Default$3, {}, config); 2403 Util.typeCheckConfig(NAME$5, config, DefaultType$3); 2404 return config; 2405 }; 2406 2407 _proto._triggerBackdropTransition = function _triggerBackdropTransition() { 2408 var _this3 = this; 2409 2410 if (this._config.backdrop === 'static') { 2411 var hideEventPrevented = $.Event(Event$5.HIDE_PREVENTED); 2412 $(this._element).trigger(hideEventPrevented); 2413 2414 if (hideEventPrevented.defaultPrevented) { 2415 return; 2416 } 2417 2418 this._element.classList.add(ClassName$5.STATIC); 2419 2420 var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element); 2421 $(this._element).one(Util.TRANSITION_END, function () { 2422 _this3._element.classList.remove(ClassName$5.STATIC); 2423 }).emulateTransitionEnd(modalTransitionDuration); 2424 2425 this._element.focus(); 2426 } else { 2427 this.hide(); 2428 } 2429 }; 2430 2431 _proto._showElement = function _showElement(relatedTarget) { 2432 var _this4 = this; 2433 2434 var transition = $(this._element).hasClass(ClassName$5.FADE); 2435 var modalBody = this._dialog ? this._dialog.querySelector(Selector$5.MODAL_BODY) : null; 2436 2437 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 2438 // Don't move modal's DOM position 2439 document.body.appendChild(this._element); 2440 } 2441 2442 this._element.style.display = 'block'; 2443 2444 this._element.removeAttribute('aria-hidden'); 2445 2446 this._element.setAttribute('aria-modal', true); 2447 2448 if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE) && modalBody) { 2449 modalBody.scrollTop = 0; 2450 } else { 2451 this._element.scrollTop = 0; 2452 } 2453 2454 if (transition) { 2455 Util.reflow(this._element); 2456 } 2457 2458 $(this._element).addClass(ClassName$5.SHOW); 2459 2460 if (this._config.focus) { 2461 this._enforceFocus(); 2462 } 2463 2464 var shownEvent = $.Event(Event$5.SHOWN, { 2465 relatedTarget: relatedTarget 2466 }); 2467 2468 var transitionComplete = function transitionComplete() { 2469 if (_this4._config.focus) { 2470 _this4._element.focus(); 2471 } 2472 2473 _this4._isTransitioning = false; 2474 $(_this4._element).trigger(shownEvent); 2475 }; 2476 2477 if (transition) { 2478 var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); 2479 $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 2480 } else { 2481 transitionComplete(); 2482 } 2483 }; 2484 2485 _proto._enforceFocus = function _enforceFocus() { 2486 var _this5 = this; 2487 2488 $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop 2489 .on(Event$5.FOCUSIN, function (event) { 2490 if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) { 2491 _this5._element.focus(); 2492 } 2493 }); 2494 }; 2495 2496 _proto._setEscapeEvent = function _setEscapeEvent() { 2497 var _this6 = this; 2498 2499 if (this._isShown && this._config.keyboard) { 2500 $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { 2501 if (event.which === ESCAPE_KEYCODE$1) { 2502 _this6._triggerBackdropTransition(); 2503 } 2504 }); 2505 } else if (!this._isShown) { 2506 $(this._element).off(Event$5.KEYDOWN_DISMISS); 2507 } 2508 }; 2509 2510 _proto._setResizeEvent = function _setResizeEvent() { 2511 var _this7 = this; 2512 2513 if (this._isShown) { 2514 $(window).on(Event$5.RESIZE, function (event) { 2515 return _this7.handleUpdate(event); 2516 }); 2517 } else { 2518 $(window).off(Event$5.RESIZE); 2519 } 2520 }; 2521 2522 _proto._hideModal = function _hideModal() { 2523 var _this8 = this; 2524 2525 this._element.style.display = 'none'; 2526 2527 this._element.setAttribute('aria-hidden', true); 2528 2529 this._element.removeAttribute('aria-modal'); 2530 2531 this._isTransitioning = false; 2532 2533 this._showBackdrop(function () { 2534 $(document.body).removeClass(ClassName$5.OPEN); 2535 2536 _this8._resetAdjustments(); 2537 2538 _this8._resetScrollbar(); 2539 2540 $(_this8._element).trigger(Event$5.HIDDEN); 2541 }); 2542 }; 2543 2544 _proto._removeBackdrop = function _removeBackdrop() { 2545 if (this._backdrop) { 2546 $(this._backdrop).remove(); 2547 this._backdrop = null; 2548 } 2549 }; 2550 2551 _proto._showBackdrop = function _showBackdrop(callback) { 2552 var _this9 = this; 2553 2554 var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; 2555 2556 if (this._isShown && this._config.backdrop) { 2557 this._backdrop = document.createElement('div'); 2558 this._backdrop.className = ClassName$5.BACKDROP; 2559 2560 if (animate) { 2561 this._backdrop.classList.add(animate); 2562 } 2563 2564 $(this._backdrop).appendTo(document.body); 2565 $(this._element).on(Event$5.CLICK_DISMISS, function (event) { 2566 if (_this9._ignoreBackdropClick) { 2567 _this9._ignoreBackdropClick = false; 2568 return; 2569 } 2570 2571 if (event.target !== event.currentTarget) { 2572 return; 2573 } 2574 2575 _this9._triggerBackdropTransition(); 2576 }); 2577 2578 if (animate) { 2579 Util.reflow(this._backdrop); 2580 } 2581 2582 $(this._backdrop).addClass(ClassName$5.SHOW); 2583 2584 if (!callback) { 2585 return; 2586 } 2587 2588 if (!animate) { 2589 callback(); 2590 return; 2591 } 2592 2593 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 2594 $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 2595 } else if (!this._isShown && this._backdrop) { 2596 $(this._backdrop).removeClass(ClassName$5.SHOW); 2597 2598 var callbackRemove = function callbackRemove() { 2599 _this9._removeBackdrop(); 2600 2601 if (callback) { 2602 callback(); 2603 } 2604 }; 2605 2606 if ($(this._element).hasClass(ClassName$5.FADE)) { 2607 var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 2608 2609 $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 2610 } else { 2611 callbackRemove(); 2612 } 2613 } else if (callback) { 2614 callback(); 2615 } 2616 } // ---------------------------------------------------------------------- 2617 // the following methods are used to handle overflowing modals 2618 // todo (fat): these should probably be refactored out of modal.js 2619 // ---------------------------------------------------------------------- 2620 ; 2621
2622 _proto._adjustDialog = function _adjustDialog() { 2623 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 2624 2625 if (!this._isBodyOverflowing && isModalOverflowing) { 2626 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 2627 } 2628 2629 if (this._isBodyOverflowing && !isModalOverflowing) { 2630 this._element.style.paddingRight = this._scrollbarWidth + "px"; 2631 } 2632 }; 2633 2634 _proto._resetAdjustments = function _resetAdjustments() { 2635 this._element.style.paddingLeft = ''; 2636 this._element.style.paddingRight = ''; 2637 }; 2638 2639 _proto._checkScrollbar = function _checkScrollbar() { 2640 var rect = document.body.getBoundingClientRect(); 2641 this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; 2642 this._scrollbarWidth = this._getScrollbarWidth(); 2643 }; 2644 2645 _proto._setScrollbar = function _setScrollbar() { 2646 var _this10 = this; 2647 2648 if (this._isBodyOverflowing) { 2649 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 2650 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 2651 var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); 2652 var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding 2653 2654 $(fixedContent).each(function (index, element) { 2655 var actualPadding = element.style.paddingRight; 2656 var calculatedPadding = $(element).css('padding-right'); 2657 $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); 2658 }); // Adjust sticky content margin 2659 2660 $(stickyContent).each(function (index, element) { 2661 var actualMargin = element.style.marginRight; 2662 var calculatedMargin = $(element).css('margin-right'); 2663 $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); 2664 }); // Adjust body padding 2665 2666 var actualPadding = document.body.style.paddingRight; 2667 var calculatedPadding = $(document.body).css('padding-right'); 2668 $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 2669 } 2670 2671 $(document.body).addClass(ClassName$5.OPEN); 2672 }; 2673 2674 _proto._resetScrollbar = function _resetScrollbar() { 2675 // Restore fixed content padding 2676 var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); 2677 $(fixedContent).each(function (index, element) { 2678 var padding = $(element).data('padding-right'); 2679 $(element).removeData('padding-right'); 2680 element.style.paddingRight = padding ? padding : ''; 2681 }); // Restore sticky content 2682 2683 var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); 2684 $(elements).each(function (index, element) { 2685 var margin = $(element).data('margin-right'); 2686 2687 if (typeof margin !== 'undefined') { 2688 $(element).css('margin-right', margin).removeData('margin-right'); 2689 } 2690 }); // Restore body padding 2691 2692 var padding = $(document.body).data('padding-right'); 2693 $(document.body).removeData('padding-right'); 2694 document.body.style.paddingRight = padding ? padding : ''; 2695 }; 2696 2697 _proto._getScrollbarWidth = function _getScrollbarWidth() { 2698 // thx d.walsh 2699 var scrollDiv = document.createElement('div'); 2700 scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; 2701 document.body.appendChild(scrollDiv); 2702 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 2703 document.body.removeChild(scrollDiv); 2704 return scrollbarWidth; 2705 } // Static 2706 ; 2707 2708 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 2709 return this.each(function () { 2710 var data = $(this).data(DATA_KEY$5); 2711
2712 var _config = _objectSpread2({}, Default$3, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {}); 2713 2714 if (!data) { 2715 data = new Modal(this, _config); 2716 $(this).data(DATA_KEY$5, data); 2717 } 2718 2719 if (typeof config === 'string') { 2720 if (typeof data[config] === 'undefined') { 2721 throw new TypeError("No method named \"" + config + "\""); 2722 } 2723 2724 data[config](relatedTarget); 2725 } else if (_config.show) { 2726 data.show(relatedTarget); 2727 } 2728 }); 2729 }; 2730 2731 _createClass(Modal, null, [{ 2732 key: "VERSION", 2733 get: function get() { 2734 return VERSION$5; 2735 } 2736 }, { 2737 key: "Default", 2738 get: function get() { 2739 return Default$3; 2740 } 2741 }]); 2742 2743 return Modal; 2744 }(); 2745 /** 2746 * ------------------------------------------------------------------------ 2747 * Data Api implementation 2748 * ------------------------------------------------------------------------ 2749 */ 2750 2751 2752 $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { 2753 var _this11 = this; 2754 2755 var target; 2756 var selector = Util.getSelectorFromElement(this); 2757 2758 if (selector) { 2759 target = document.querySelector(selector); 2760 } 2761 2762 var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data()); 2763 2764 if (this.tagName === 'A' || this.tagName === 'AREA') { 2765 event.preventDefault(); 2766 } 2767 2768 var $target = $(target).one(Event$5.SHOW, function (showEvent) { 2769 if (showEvent.isDefaultPrevented()) { 2770 // Only register focus restorer if modal will actually get shown 2771 return; 2772 } 2773 2774 $target.one(Event$5.HIDDEN, function () { 2775 if ($(_this11).is(':visible')) { 2776 _this11.focus(); 2777 } 2778 }); 2779 }); 2780 2781 Modal._jQueryInterface.call($(target), config, this); 2782 }); 2783 /** 2784 * ------------------------------------------------------------------------ 2785 * jQuery 2786 * ------------------------------------------------------------------------ 2787 */ 2788 2789 $.fn[NAME$5] = Modal._jQueryInterface; 2790 $.fn[NAME$5].Constructor = Modal; 2791 2792 $.fn[NAME$5].noConflict = function () { 2793 $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; 2794 return Modal._jQueryInterface; 2795 }; 2796 2797 /** 2798 * -------------------------------------------------------------------------- 2799 * Bootstrap (v4.4.1): tools/sanitizer.js 2800 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 2801 * -------------------------------------------------------------------------- 2802 */ 2803 var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; 2804 var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 2805 var DefaultWhitelist = { 2806 // Global attributes allowed on any supplied element below. 2807 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 2808 a: ['target', 'href', 'title', 'rel'], 2809 area: [], 2810 b: [], 2811 br: [], 2812 col: [], 2813 code: [], 2814 div: [], 2815 em: [], 2816 hr: [], 2817 h1: [], 2818 h2: [], 2819 h3: [], 2820 h4: [], 2821 h5: [], 2822 h6: [], 2823 i: [], 2824 img: ['src', 'alt', 'title', 'width', 'height'], 2825 li: [], 2826 ol: [], 2827 p: [], 2828 pre: [], 2829 s: [], 2830 small: [], 2831 span: [], 2832 sub: [], 2833 sup: [], 2834 strong: [], 2835 u: [], 2836 ul: [] 2837 }; 2838 /** 2839 * A pattern that recognizes a commonly useful subset of URLs that are safe. 2840 * 2841 * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts 2842 */ 2843 2844 var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; 2845 /** 2846 * A pattern that matches safe data URLs. Only matches image, video and audio types. 2847 * 2848 * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts 2849 */ 2850 2851 var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; 2852 2853 function allowedAttribute(attr, allowedAttributeList) { 2854 var attrName = attr.nodeName.toLowerCase(); 2855 2856 if (allowedAttributeList.indexOf(attrName) !== -1) { 2857 if (uriAttrs.indexOf(attrName) !== -1) { 2858 return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); 2859 } 2860 2861 return true; 2862 } 2863 2864 var regExp = allowedAttributeList.filter(function (attrRegex) {
2865 return attrRegex instanceof RegExp; 2866 }); // Check if a regular expression validates the attribute. 2867 2868 for (var i = 0, l = regExp.length; i < l; i++) { 2869 if (attrName.match(regExp[i])) { 2870 return true; 2871 } 2872 } 2873 2874 return false; 2875 } 2876 2877 function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { 2878 if (unsafeHtml.length === 0) { 2879 return unsafeHtml; 2880 } 2881 2882 if (sanitizeFn && typeof sanitizeFn === 'function') { 2883 return sanitizeFn(unsafeHtml); 2884 } 2885 2886 var domParser = new window.DOMParser(); 2887 var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 2888 var whitelistKeys = Object.keys(whiteList); 2889 var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); 2890 2891 var _loop = function _loop(i, len) { 2892 var el = elements[i]; 2893 var elName = el.nodeName.toLowerCase(); 2894 2895 if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { 2896 el.parentNode.removeChild(el); 2897 return "continue"; 2898 } 2899 2900 var attributeList = [].slice.call(el.attributes); 2901 var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); 2902 attributeList.forEach(function (attr) { 2903 if (!allowedAttribute(attr, whitelistedAttributes)) { 2904 el.removeAttribute(attr.nodeName); 2905 } 2906 }); 2907 }; 2908 2909 for (var i = 0, len = elements.length; i < len; i++) { 2910 var _ret = _loop(i); 2911 2912 if (_ret === "continue") continue; 2913 } 2914 2915 return createdDocument.body.innerHTML; 2916 } 2917 2918 /** 2919 * ------------------------------------------------------------------------ 2920 * Constants 2921 * ------------------------------------------------------------------------ 2922 */ 2923 2924 var NAME$6 = 'tooltip'; 2925 var VERSION$6 = '4.4.1'; 2926 var DATA_KEY$6 = 'bs.tooltip'; 2927 var EVENT_KEY$6 = "." + DATA_KEY$6; 2928 var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; 2929 var CLASS_PREFIX = 'bs-tooltip'; 2930 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 2931 var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; 2932 var DefaultType$4 = { 2933 animation: 'boolean', 2934 template: 'string', 2935 title: '(string|element|function)', 2936 trigger: 'string', 2937 delay: '(number|object)', 2938 html: 'boolean', 2939 selector: '(string|boolean)', 2940 placement: '(string|function)', 2941 offset: '(number|string|function)', 2942 container: '(string|element|boolean)', 2943 fallbackPlacement: '(string|array)', 2944 boundary: '(string|element)', 2945 sanitize: 'boolean', 2946 sanitizeFn: '(null|function)', 2947 whiteList: 'object', 2948 popperConfig: '(null|object)' 2949 }; 2950 var AttachmentMap$1 = { 2951 AUTO: 'auto', 2952 TOP: 'top', 2953 RIGHT: 'right', 2954 BOTTOM: 'bottom', 2955 LEFT: 'left' 2956 }; 2957 var Default$4 = { 2958 animation: true, 2959 template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', 2960 trigger: 'hover focus', 2961 title: '', 2962 delay: 0, 2963 html: false, 2964 selector: false, 2965 placement: 'top', 2966 offset: 0, 2967 container: false, 2968 fallbackPlacement: 'flip', 2969 boundary: 'scrollParent', 2970 sanitize: true, 2971 sanitizeFn: null, 2972 whiteList: DefaultWhitelist, 2973 popperConfig: null 2974 }; 2975 var HoverState = { 2976 SHOW: 'show', 2977 OUT: 'out' 2978 }; 2979 var Event$6 = { 2980 HIDE: "hide" + EVENT_KEY$6, 2981 HIDDEN: "hidden" + EVENT_KEY$6, 2982 SHOW: "show" + EVENT_KEY$6, 2983 SHOWN: "shown" + EVENT_KEY$6, 2984 INSERTED: "inserted" + EVENT_KEY$6, 2985 CLICK: "click" + EVENT_KEY$6, 2986 FOCUSIN: "focusin" + EVENT_KEY$6, 2987 FOCUSOUT: "focusout" + EVENT_KEY$6, 2988 MOUSEENTER: "mouseenter" + EVENT_KEY$6, 2989 MOUSELEAVE: "mouseleave" + EVENT_KEY$6 2990 }; 2991 var ClassName$6 = { 2992 FADE: 'fade', 2993 SHOW: 'show' 2994 }; 2995 var Selector$6 = { 2996 TOOLTIP: '.tooltip', 2997 TOOLTIP_INNER: '.tooltip-inner', 2998 ARROW: '.arrow' 2999 }; 3000 var Trigger = { 3001 HOVER: 'hover', 3002 FOCUS: 'focus', 3003 CLICK: 'click', 3004 MANUAL: 'manual' 3005 }; 3006 /** 3007 * ------------------------------------------------------------------------ 3008 * Class Definition 3009 * ------------------------------------------------------------------------ 3010 */ 3011 3012 var Tooltip = 3013 /*#__PURE__*/ 3014 function () { 3015 function Tooltip(element, config) { 3016 if (typeof Popper === 'undefined') { 3017 throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); 3018 } // private 3019 3020 3021 this._isEnabled = true; 3022 this._timeout = 0; 3023 this._hoverState = ''; 3024 this._activeTrigger = {}; 3025 this._popper = null; // Protected 3026 3027 this.element = element; 3028 this.config = this._getConfig(config); 3029 this.tip = null; 3030 3031 this._setListeners(); 3032 } // Getters 3033 3034 3035 var _proto = Tooltip.prototype; 3036 3037 // Public 3038 _proto.enable = function enable() { 3039 this._isEnabled = true; 3040 }; 3041 3042 _proto.disable = function disable() { 3043 this._isEnabled = false; 3044 }; 3045 3046 _proto.toggleEnabled = function toggleEnabled() { 3047 this._isEnabled = !this._isEnabled; 3048 }; 3049 3050 _proto.toggle = function toggle(event) { 3051 if (!this._isEnabled) { 3052 return; 3053 } 3054 3055 if (event) { 3056 var dataKey = this.constructor.DATA_KEY; 3057 var context = $(event.currentTarget).data(dataKey); 3058 3059 if (!context) { 3060 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 3061 $(event.currentTarget).data(dataKey, context); 3062 } 3063 3064 context._activeTrigger.click = !context._activeTrigger.click; 3065 3066 if (context._isWithActiveTrigger()) { 3067 context._enter(null, context); 3068 } else { 3069 context._leave(null, context); 3070 } 3071 } else { 3072 if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { 3073 this._leave(null, this); 3074 3075 return; 3076 } 3077 3078 this._enter(null, this); 3079 } 3080 }; 3081 3082 _proto.dispose = function dispose() { 3083 clearTimeout(this._timeout); 3084 $.removeData(this.element, this.constructor.DATA_KEY); 3085 $(this.element).off(this.constructor.EVENT_KEY); 3086 $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler); 3087 3088 if (this.tip) { 3089 $(this.tip).remove(); 3090 } 3091 3092 this._isEnabled = null; 3093 this._timeout = null; 3094 this._hoverState = null; 3095 this._activeTrigger = null; 3096 3097 if (this._popper) { 3098 this._popper.destroy(); 3099 } 3100 3101 this._popper = null; 3102 this.element = null; 3103 this.config = null; 3104 this.tip = null; 3105 }; 3106 3107 _proto.show = function show() { 3108 var _this = this; 3109 3110 if ($(this.element).css('display') === 'none') { 3111 throw new Error('Please use show on visible elements'); 3112 } 3113 3114 var showEvent = $.Event(this.constructor.Event.SHOW); 3115 3116 if (this.isWithContent() && this._isEnabled) { 3117 $(this.element).trigger(showEvent); 3118 var shadowRoot = Util.findShadowRoot(this.element); 3119 var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); 3120 3121 if (showEvent.isDefaultPrevented() || !isInTheDom) { 3122 return; 3123 } 3124 3125 var tip = this.getTipElement(); 3126 var tipId = Util.getUID(this.constructor.NAME);
3127 tip.setAttribute('id', tipId); 3128 this.element.setAttribute('aria-describedby', tipId); 3129 this.setContent(); 3130 3131 if (this.config.animation) { 3132 $(tip).addClass(ClassName$6.FADE); 3133 } 3134 3135 var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; 3136 3137 var attachment = this._getAttachment(placement); 3138 3139 this.addAttachmentClass(attachment); 3140 3141 var container = this._getContainer(); 3142 3143 $(tip).data(this.constructor.DATA_KEY, this); 3144 3145 if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { 3146 $(tip).appendTo(container); 3147 } 3148 3149 $(this.element).trigger(this.constructor.Event.INSERTED); 3150 this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment)); 3151 $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra 3152 // empty mouseover listeners to the body's immediate children; 3153 // only needed because of broken event delegation on iOS 3154 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 3155 3156 if ('ontouchstart' in document.documentElement) { 3157 $(document.body).children().on('mouseover', null, $.noop); 3158 } 3159 3160 var complete = function complete() { 3161 if (_this.config.animation) { 3162 _this._fixTransition(); 3163 } 3164 3165 var prevHoverState = _this._hoverState; 3166 _this._hoverState = null; 3167 $(_this.element).trigger(_this.constructor.Event.SHOWN); 3168 3169 if (prevHoverState === HoverState.OUT) { 3170 _this._leave(null, _this); 3171 } 3172 }; 3173 3174 if ($(this.tip).hasClass(ClassName$6.FADE)) { 3175 var transitionDuration = Util.getTransitionDurationFromElement(this.tip); 3176 $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 3177 } else { 3178 complete(); 3179 } 3180 } 3181 }; 3182 3183 _proto.hide = function hide(callback) { 3184 var _this2 = this; 3185 3186 var tip = this.getTipElement(); 3187 var hideEvent = $.Event(this.constructor.Event.HIDE); 3188 3189 var complete = function complete() { 3190 if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { 3191 tip.parentNode.removeChild(tip); 3192 } 3193 3194 _this2._cleanTipClass(); 3195 3196 _this2.element.removeAttribute('aria-describedby'); 3197 3198 $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); 3199 3200 if (_this2._popper !== null) { 3201 _this2._popper.destroy(); 3202 } 3203 3204 if (callback) { 3205 callback(); 3206 } 3207 }; 3208 3209 $(this.element).trigger(hideEvent); 3210 3211 if (hideEvent.isDefaultPrevented()) { 3212 return; 3213 } 3214 3215 $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra 3216 // empty mouseover listeners we added for iOS support 3217 3218 if ('ontouchstart' in document.documentElement) { 3219 $(document.body).children().off('mouseover', null, $.noop); 3220 } 3221 3222 this._activeTrigger[Trigger.CLICK] = false; 3223 this._activeTrigger[Trigger.FOCUS] = false; 3224 this._activeTrigger[Trigger.HOVER] = false; 3225 3226 if ($(this.tip).hasClass(ClassName$6.FADE)) { 3227 var transitionDuration = Util.getTransitionDurationFromElement(tip); 3228 $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 3229 } else { 3230 complete(); 3231 } 3232 3233 this._hoverState = ''; 3234 }; 3235 3236 _proto.update = function update() { 3237 if (this._popper !== null) { 3238 this._popper.scheduleUpdate(); 3239 } 3240 } // Protected 3241 ; 3242 3243 _proto.isWithContent = function isWithContent() { 3244 return Boolean(this.getTitle()); 3245 }; 3246 3247 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 3248 $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 3249 }; 3250 3251 _proto.getTipElement = function getTipElement() { 3252 this.tip = this.tip || $(this.config.template)[0]; 3253 return this.tip; 3254 }; 3255 3256 _proto.setContent = function setContent() { 3257 var tip = this.getTipElement(); 3258 this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle()); 3259 $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW); 3260 }; 3261 3262 _proto.setElementContent = function setElementContent($element, content) { 3263 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 3264 // Content is a DOM node or a jQuery 3265 if (this.config.html) { 3266 if (!$(content).parent().is($element)) { 3267 $element.empty().append(content); 3268 } 3269 } else { 3270 $element.text($(content).text()); 3271 } 3272 3273 return; 3274 } 3275 3276 if (this.config.html) { 3277 if (this.config.sanitize) { 3278 content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); 3279 } 3280 3281 $element.html(content); 3282 } else { 3283 $element.text(content); 3284 } 3285 }; 3286 3287 _proto.getTitle = function getTitle() { 3288 var title = this.element.getAttribute('data-original-title'); 3289 3290 if (!title) { 3291 title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; 3292 } 3293 3294 return title; 3295 } // Private 3296 ; 3297 3298 _proto._getPopperConfig = function _getPopperConfig(attachment) { 3299 var _this3 = this; 3300 3301 var defaultBsConfig = { 3302 placement: attachment, 3303 modifiers: { 3304 offset: this._getOffset(), 3305 flip: { 3306 behavior: this.config.fallbackPlacement 3307 }, 3308 arrow: { 3309 element: Selector$6.ARROW 3310 }, 3311 preventOverflow: {
3312 boundariesElement: this.config.boundary 3313 } 3314 }, 3315 onCreate: function onCreate(data) { 3316 if (data.originalPlacement !== data.placement) { 3317 _this3._handlePopperPlacementChange(data); 3318 } 3319 }, 3320 onUpdate: function onUpdate(data) { 3321 return _this3._handlePopperPlacementChange(data); 3322 } 3323 }; 3324 return _objectSpread2({}, defaultBsConfig, {}, this.config.popperConfig); 3325 }; 3326 3327 _proto._getOffset = function _getOffset() { 3328 var _this4 = this; 3329 3330 var offset = {}; 3331 3332 if (typeof this.config.offset === 'function') { 3333 offset.fn = function (data) { 3334 data.offsets = _objectSpread2({}, data.offsets, {}, _this4.config.offset(data.offsets, _this4.element) || {}); 3335 return data; 3336 }; 3337 } else { 3338 offset.offset = this.config.offset; 3339 } 3340 3341 return offset; 3342 }; 3343 3344 _proto._getContainer = function _getContainer() { 3345 if (this.config.container === false) { 3346 return document.body; 3347 } 3348 3349 if (Util.isElement(this.config.container)) { 3350 return $(this.config.container); 3351 } 3352 3353 return $(document).find(this.config.container); 3354 }; 3355 3356 _proto._getAttachment = function _getAttachment(placement) { 3357 return AttachmentMap$1[placement.toUpperCase()]; 3358 }; 3359 3360 _proto._setListeners = function _setListeners() { 3361 var _this5 = this; 3362 3363 var triggers = this.config.trigger.split(' '); 3364 triggers.forEach(function (trigger) { 3365 if (trigger === 'click') { 3366 $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) { 3367 return _this5.toggle(event); 3368 }); 3369 } else if (trigger !== Trigger.MANUAL) { 3370 var eventIn = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN; 3371 var eventOut = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT; 3372 $(_this5.element).on(eventIn, _this5.config.selector, function (event) { 3373 return _this5._enter(event); 3374 }).on(eventOut, _this5.config.selector, function (event) { 3375 return _this5._leave(event); 3376 }); 3377 } 3378 }); 3379 3380 this._hideModalHandler = function () { 3381 if (_this5.element) { 3382 _this5.hide(); 3383 } 3384 }; 3385 3386 $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler); 3387 3388 if (this.config.selector) { 3389 this.config = _objectSpread2({}, this.config, { 3390 trigger: 'manual', 3391 selector: '' 3392 }); 3393 } else { 3394 this._fixTitle(); 3395 } 3396 }; 3397 3398 _proto._fixTitle = function _fixTitle() { 3399 var titleType = typeof this.element.getAttribute('data-original-title'); 3400 3401 if (this.element.getAttribute('title') || titleType !== 'string') { 3402 this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); 3403 this.element.setAttribute('title', ''); 3404 } 3405 }; 3406 3407 _proto._enter = function _enter(event, context) { 3408 var dataKey = this.constructor.DATA_KEY; 3409 context = context || $(event.currentTarget).data(dataKey); 3410 3411 if (!context) { 3412 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 3413 $(event.currentTarget).data(dataKey, context); 3414 } 3415 3416 if (event) { 3417 context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; 3418 } 3419 3420 if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) { 3421 context._hoverState = HoverState.SHOW; 3422 return; 3423 } 3424 3425 clearTimeout(context._timeout); 3426 context._hoverState = HoverState.SHOW; 3427 3428 if (!context.config.delay || !context.config.delay.show) { 3429 context.show(); 3430 return; 3431 } 3432 3433 context._timeout = setTimeout(function () { 3434 if (context._hoverState === HoverState.SHOW) { 3435 context.show(); 3436 } 3437 }, context.config.delay.show); 3438 }; 3439 3440 _proto._leave = function _leave(event, context) { 3441 var dataKey = this.constructor.DATA_KEY; 3442 context = context || $(event.currentTarget).data(dataKey); 3443 3444 if (!context) { 3445 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 3446 $(event.currentTarget).data(dataKey, context); 3447 } 3448 3449 if (event) { 3450 context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; 3451 } 3452 3453 if (context._isWithActiveTrigger()) { 3454 return; 3455 } 3456 3457 clearTimeout(context._timeout); 3458 context._hoverState = HoverState.OUT; 3459 3460 if (!context.config.delay || !context.config.delay.hide) { 3461 context.hide(); 3462 return; 3463 } 3464 3465 context._timeout = setTimeout(function () { 3466 if (context._hoverState === HoverState.OUT) { 3467 context.hide(); 3468 } 3469 }, context.config.delay.hide); 3470 }; 3471 3472 _proto._isWithActiveTrigger = function _isWithActiveTrigger() { 3473 for (var trigger in this._activeTrigger) { 3474 if (this._activeTrigger[trigger]) { 3475 return true; 3476 } 3477 } 3478 3479 return false; 3480 }; 3481 3482 _proto._getConfig = function _getConfig(config) { 3483 var dataAttributes = $(this.element).data();
3484 Object.keys(dataAttributes).forEach(function (dataAttr) { 3485 if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { 3486 delete dataAttributes[dataAttr]; 3487 } 3488 }); 3489 config = _objectSpread2({}, this.constructor.Default, {}, dataAttributes, {}, typeof config === 'object' && config ? config : {}); 3490 3491 if (typeof config.delay === 'number') { 3492 config.delay = { 3493 show: config.delay, 3494 hide: config.delay 3495 }; 3496 } 3497 3498 if (typeof config.title === 'number') { 3499 config.title = config.title.toString(); 3500 } 3501 3502 if (typeof config.content === 'number') { 3503 config.content = config.content.toString(); 3504 } 3505 3506 Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); 3507 3508 if (config.sanitize) { 3509 config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); 3510 } 3511 3512 return config; 3513 }; 3514 3515 _proto._getDelegateConfig = function _getDelegateConfig() { 3516 var config = {}; 3517 3518 if (this.config) { 3519 for (var key in this.config) { 3520 if (this.constructor.Default[key] !== this.config[key]) { 3521 config[key] = this.config[key]; 3522 } 3523 } 3524 } 3525 3526 return config; 3527 }; 3528 3529 _proto._cleanTipClass = function _cleanTipClass() { 3530 var $tip = $(this.getTipElement()); 3531 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 3532 3533 if (tabClass !== null && tabClass.length) { 3534 $tip.removeClass(tabClass.join('')); 3535 } 3536 }; 3537 3538 _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { 3539 var popperInstance = popperData.instance; 3540 this.tip = popperInstance.popper; 3541 3542 this._cleanTipClass(); 3543 3544 this.addAttachmentClass(this._getAttachment(popperData.placement)); 3545 }; 3546 3547 _proto._fixTransition = function _fixTransition() { 3548 var tip = this.getTipElement(); 3549 var initConfigAnimation = this.config.animation; 3550 3551 if (tip.getAttribute('x-placement') !== null) { 3552 return; 3553 } 3554 3555 $(tip).removeClass(ClassName$6.FADE); 3556 this.config.animation = false; 3557 this.hide(); 3558 this.show(); 3559 this.config.animation = initConfigAnimation; 3560 } // Static 3561 ; 3562 3563 Tooltip._jQueryInterface = function _jQueryInterface(config) { 3564 return this.each(function () { 3565 var data = $(this).data(DATA_KEY$6); 3566 3567 var _config = typeof config === 'object' && config; 3568 3569 if (!data && /dispose|hide/.test(config)) { 3570 return; 3571 } 3572 3573 if (!data) { 3574 data = new Tooltip(this, _config); 3575 $(this).data(DATA_KEY$6, data); 3576 } 3577 3578 if (typeof config === 'string') { 3579 if (typeof data[config] === 'undefined') { 3580 throw new TypeError("No method named \"" + config + "\""); 3581 } 3582 3583 data[config](); 3584 } 3585 }); 3586 }; 3587 3588 _createClass(Tooltip, null, [{ 3589 key: "VERSION", 3590 get: function get() { 3591 return VERSION$6; 3592 } 3593 }, { 3594 key: "Default", 3595 get: function get() { 3596 return Default$4; 3597 } 3598 }, { 3599 key: "NAME", 3600 get: function get() { 3601 return NAME$6; 3602 } 3603 }, { 3604 key: "DATA_KEY", 3605 get: function get() { 3606 return DATA_KEY$6; 3607 } 3608 }, { 3609 key: "Event", 3610 get: function get() { 3611 return Event$6; 3612 } 3613 }, { 3614 key: "EVENT_KEY", 3615 get: function get() { 3616 return EVENT_KEY$6; 3617 } 3618 }, { 3619 key: "DefaultType", 3620 get: function get() { 3621 return DefaultType$4; 3622 } 3623 }]); 3624 3625 return Tooltip; 3626 }(); 3627 /** 3628 * ------------------------------------------------------------------------ 3629 * jQuery 3630 * ------------------------------------------------------------------------ 3631 */ 3632 3633 3634 $.fn[NAME$6] = Tooltip._jQueryInterface; 3635 $.fn[NAME$6].Constructor = Tooltip; 3636 3637 $.fn[NAME$6].noConflict = function () { 3638 $.fn[NAME$6] = JQUERY_NO_CONFLICT$6; 3639 return Tooltip._jQueryInterface; 3640 }; 3641 3642 /** 3643 * ------------------------------------------------------------------------ 3644 * Constants 3645 * ------------------------------------------------------------------------ 3646 */ 3647 3648 var NAME$7 = 'popover'; 3649 var VERSION$7 = '4.4.1'; 3650 var DATA_KEY$7 = 'bs.popover'; 3651 var EVENT_KEY$7 = "." + DATA_KEY$7; 3652 var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
3653 var CLASS_PREFIX$1 = 'bs-popover'; 3654 var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); 3655 3656 var Default$5 = _objectSpread2({}, Tooltip.Default, { 3657 placement: 'right', 3658 trigger: 'click', 3659 content: '', 3660 template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' 3661 }); 3662 3663 var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, { 3664 content: '(string|element|function)' 3665 }); 3666 3667 var ClassName$7 = { 3668 FADE: 'fade', 3669 SHOW: 'show' 3670 }; 3671 var Selector$7 = { 3672 TITLE: '.popover-header', 3673 CONTENT: '.popover-body' 3674 }; 3675 var Event$7 = { 3676 HIDE: "hide" + EVENT_KEY$7, 3677 HIDDEN: "hidden" + EVENT_KEY$7, 3678 SHOW: "show" + EVENT_KEY$7, 3679 SHOWN: "shown" + EVENT_KEY$7, 3680 INSERTED: "inserted" + EVENT_KEY$7, 3681 CLICK: "click" + EVENT_KEY$7, 3682 FOCUSIN: "focusin" + EVENT_KEY$7, 3683 FOCUSOUT: "focusout" + EVENT_KEY$7, 3684 MOUSEENTER: "mouseenter" + EVENT_KEY$7, 3685 MOUSELEAVE: "mouseleave" + EVENT_KEY$7 3686 }; 3687 /** 3688 * ------------------------------------------------------------------------ 3689 * Class Definition 3690 * ------------------------------------------------------------------------ 3691 */ 3692 3693 var Popover = 3694 /*#__PURE__*/ 3695 function (_Tooltip) { 3696 _inheritsLoose(Popover, _Tooltip); 3697 3698 function Popover() { 3699 return _Tooltip.apply(this, arguments) || this; 3700 } 3701 3702 var _proto = Popover.prototype; 3703 3704 // Overrides 3705 _proto.isWithContent = function isWithContent() { 3706 return this.getTitle() || this._getContent(); 3707 }; 3708 3709 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 3710 $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); 3711 }; 3712 3713 _proto.getTipElement = function getTipElement() { 3714 this.tip = this.tip || $(this.config.template)[0]; 3715 return this.tip; 3716 }; 3717 3718 _proto.setContent = function setContent() { 3719 var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events 3720 3721 this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle()); 3722 3723 var content = this._getContent(); 3724 3725 if (typeof content === 'function') { 3726 content = content.call(this.element); 3727 } 3728 3729 this.setElementContent($tip.find(Selector$7.CONTENT), content); 3730 $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); 3731 } // Private 3732 ; 3733 3734 _proto._getContent = function _getContent() { 3735 return this.element.getAttribute('data-content') || this.config.content; 3736 }; 3737 3738 _proto._cleanTipClass = function _cleanTipClass() { 3739 var $tip = $(this.getTipElement()); 3740 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); 3741 3742 if (tabClass !== null && tabClass.length > 0) { 3743 $tip.removeClass(tabClass.join('')); 3744 } 3745 } // Static 3746 ; 3747 3748 Popover._jQueryInterface = function _jQueryInterface(config) { 3749 return this.each(function () { 3750 var data = $(this).data(DATA_KEY$7); 3751 3752 var _config = typeof config === 'object' ? config : null; 3753 3754 if (!data && /dispose|hide/.test(config)) { 3755 return; 3756 } 3757 3758 if (!data) { 3759 data = new Popover(this, _config); 3760 $(this).data(DATA_KEY$7, data); 3761 } 3762 3763 if (typeof config === 'string') { 3764 if (typeof data[config] === 'undefined') { 3765 throw new TypeError("No method named \"" + config + "\""); 3766 } 3767 3768 data[config](); 3769 } 3770 }); 3771 }; 3772 3773 _createClass(Popover, null, [{ 3774 key: "VERSION", 3775 // Getters 3776 get: function get() { 3777 return VERSION$7; 3778 } 3779 }, { 3780 key: "Default", 3781 get: function get() { 3782 return Default$5; 3783 } 3784 }, { 3785 key: "NAME", 3786 get: function get() { 3787 return NAME$7; 3788 } 3789 }, { 3790 key: "DATA_KEY", 3791 get: function get() { 3792 return DATA_KEY$7; 3793 } 3794 }, { 3795 key: "Event", 3796 get: function get() { 3797 return Event$7; 3798 } 3799 }, { 3800 key: "EVENT_KEY", 3801 get: function get() { 3802 return EVENT_KEY$7; 3803 } 3804 }, { 3805 key: "DefaultType", 3806 get: function get() { 3807 return DefaultType$5; 3808 } 3809 }]); 3810 3811 return Popover; 3812 }(Tooltip); 3813 /** 3814 * ------------------------------------------------------------------------ 3815 * jQuery 3816 * ------------------------------------------------------------------------ 3817 */ 3818 3819 3820 $.fn[NAME$7] = Popover._jQueryInterface; 3821 $.fn[NAME$7].Constructor = Popover; 3822 3823 $.fn[NAME$7].noConflict = function () { 3824 $.fn[NAME$7] = JQUERY_NO_CONFLICT$7; 3825 return Popover._jQueryInterface; 3826 }; 3827 3828 /** 3829 * ------------------------------------------------------------------------ 3830 * Constants 3831 * ------------------------------------------------------------------------ 3832 */ 3833 3834 var NAME$8 = 'scrollspy'; 3835 var VERSION$8 = '4.4.1'; 3836 var DATA_KEY$8 = 'bs.scrollspy'; 3837 var EVENT_KEY$8 = "." + DATA_KEY$8; 3838 var DATA_API_KEY$6 = '.data-api'; 3839 var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8]; 3840 var Default$6 = { 3841 offset: 10, 3842 method: 'auto', 3843 target: '' 3844 }; 3845 var DefaultType$6 = { 3846 offset: 'number', 3847 method: 'string', 3848 target: '(string|element)' 3849 }; 3850 var Event$8 = { 3851 ACTIVATE: "activate" + EVENT_KEY$8, 3852 SCROLL: "scroll" + EVENT_KEY$8, 3853 LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6 3854 }; 3855 var ClassName$8 = {
3856 DROPDOWN_ITEM: 'dropdown-item', 3857 DROPDOWN_MENU: 'dropdown-menu', 3858 ACTIVE: 'active' 3859 }; 3860 var Selector$8 = { 3861 DATA_SPY: '[data-spy="scroll"]', 3862 ACTIVE: '.active', 3863 NAV_LIST_GROUP: '.nav, .list-group', 3864 NAV_LINKS: '.nav-link', 3865 NAV_ITEMS: '.nav-item', 3866 LIST_ITEMS: '.list-group-item', 3867 DROPDOWN: '.dropdown', 3868 DROPDOWN_ITEMS: '.dropdown-item', 3869 DROPDOWN_TOGGLE: '.dropdown-toggle' 3870 }; 3871 var OffsetMethod = { 3872 OFFSET: 'offset', 3873 POSITION: 'position' 3874 }; 3875 /** 3876 * ------------------------------------------------------------------------ 3877 * Class Definition 3878 * ------------------------------------------------------------------------ 3879 */ 3880 3881 var ScrollSpy = 3882 /*#__PURE__*/ 3883 function () { 3884 function ScrollSpy(element, config) { 3885 var _this = this; 3886 3887 this._element = element; 3888 this._scrollElement = element.tagName === 'BODY' ? window : element; 3889 this._config = this._getConfig(config); 3890 this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS); 3891 this._offsets = []; 3892 this._targets = []; 3893 this._activeTarget = null; 3894 this._scrollHeight = 0; 3895 $(this._scrollElement).on(Event$8.SCROLL, function (event) { 3896 return _this._process(event); 3897 }); 3898 this.refresh(); 3899 3900 this._process(); 3901 } // Getters 3902 3903 3904 var _proto = ScrollSpy.prototype; 3905 3906 // Public 3907 _proto.refresh = function refresh() { 3908 var _this2 = this; 3909 3910 var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; 3911 var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 3912 var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; 3913 this._offsets = []; 3914 this._targets = []; 3915 this._scrollHeight = this._getScrollHeight(); 3916 var targets = [].slice.call(document.querySelectorAll(this._selector)); 3917 targets.map(function (element) { 3918 var target; 3919 var targetSelector = Util.getSelectorFromElement(element); 3920 3921 if (targetSelector) { 3922 target = document.querySelector(targetSelector); 3923 } 3924 3925 if (target) { 3926 var targetBCR = target.getBoundingClientRect(); 3927 3928 if (targetBCR.width || targetBCR.height) { 3929 // TODO (fat): remove sketch reliance on jQuery position/offset 3930 return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; 3931 } 3932 } 3933 3934 return null; 3935 }).filter(function (item) { 3936 return item; 3937 }).sort(function (a, b) { 3938 return a[0] - b[0]; 3939 }
3939).forEach(function (item) { 3940 _this2._offsets.push(item[0]); 3941 3942 _this2._targets.push(item[1]); 3943 }); 3944 }; 3945 3946 _proto.dispose = function dispose() { 3947 $.removeData(this._element, DATA_KEY$8); 3948 $(this._scrollElement).off(EVENT_KEY$8); 3949 this._element = null; 3950 this._scrollElement = null; 3951 this._config = null; 3952 this._selector = null; 3953 this._offsets = null; 3954 this._targets = null; 3955 this._activeTarget = null; 3956 this._scrollHeight = null; 3957 } // Private 3958 ; 3959 3960 _proto._getConfig = function _getConfig(config) { 3961 config = _objectSpread2({}, Default$6, {}, typeof config === 'object' && config ? config : {}); 3962 3963 if (typeof config.target !== 'string') { 3964 var id = $(config.target).attr('id'); 3965 3966 if (!id) { 3967 id = Util.getUID(NAME$8); 3968 $(config.target).attr('id', id); 3969 } 3970 3971 config.target = "#" + id; 3972 } 3973 3974 Util.typeCheckConfig(NAME$8, config, DefaultType$6); 3975 return config; 3976 }; 3977 3978 _proto._getScrollTop = function _getScrollTop() { 3979 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 3980 }; 3981 3982 _proto._getScrollHeight = function _getScrollHeight() { 3983 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 3984 }; 3985 3986 _proto._getOffsetHeight = function _getOffsetHeight() { 3987 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 3988 }; 3989 3990 _proto._process = function _process() { 3991 var scrollTop = this._getScrollTop() + this._config.offset; 3992 3993 var scrollHeight = this._getScrollHeight(); 3994 3995 var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 3996 3997 if (this._scrollHeight !== scrollHeight) { 3998 this.refresh(); 3999 } 4000 4001 if (scrollTop >= maxScroll) { 4002 var target = this._targets[this._targets.length - 1]; 4003 4004 if (this._activeTarget !== target) { 4005 this._activate(target); 4006 } 4007 4008 return; 4009 } 4010 4011 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 4012 this._activeTarget = null; 4013 4014 this._clear(); 4015 4016 return; 4017 } 4018 4019 var offsetLength = this._offsets.length; 4020 4021 for (var i = offsetLength; i--;) { 4022 var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 4023 4024 if (isActiveTarget) { 4025 this._activate(this._targets[i]); 4026 } 4027 } 4028 }; 4029 4030 _proto._activate = function _activate(target) { 4031 this._activeTarget = target; 4032 4033 this._clear(); 4034 4035 var queries = this._selector.split(',').map(function (selector) { 4036 return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; 4037 }); 4038 4039 var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); 4040 4041 if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) { 4042 $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE); 4043 $link.addClass(ClassName$8.ACTIVE); 4044 } else { 4045 // Set triggered link as active 4046 $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active 4047 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 4048 4049 $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + ", " + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item 4050 4051 $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE); 4052 } 4053 4054 $(this._scrollElement).trigger(Event$8.ACTIVATE, { 4055 relatedTarget: target 4056 }); 4057 }; 4058 4059 _proto._clear = function _clear() { 4060 [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) { 4061 return node.classList.contains(ClassName$8.ACTIVE); 4062 }
4062).forEach(function (node) { 4063 return node.classList.remove(ClassName$8.ACTIVE); 4064 }); 4065 } // Static 4066 ; 4067 4068 ScrollSpy._jQueryInterface = function _jQueryInterface(config) { 4069 return this.each(function () { 4070 var data = $(this).data(DATA_KEY$8); 4071 4072 var _config = typeof config === 'object' && config; 4073 4074 if (!data) { 4075 data = new ScrollSpy(this, _config); 4076 $(this).data(DATA_KEY$8, data); 4077 } 4078 4079 if (typeof config === 'string') { 4080 if (typeof data[config] === 'undefined') { 4081 throw new TypeError("No method named \"" + config + "\""); 4082 } 4083 4084 data[config](); 4085 } 4086 }); 4087 }; 4088 4089 _createClass(ScrollSpy, null, [{ 4090 key: "VERSION", 4091 get: function get() { 4092 return VERSION$8; 4093 } 4094 }, { 4095 key: "Default", 4096 get: function get() { 4097 return Default$6; 4098 } 4099 }]); 4100 4101 return ScrollSpy; 4102 }(); 4103 /** 4104 * ------------------------------------------------------------------------ 4105 * Data Api implementation 4106 * ------------------------------------------------------------------------ 4107 */ 4108 4109 4110 $(window).on(Event$8.LOAD_DATA_API, function () { 4111 var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY)); 4112 var scrollSpysLength = scrollSpys.length; 4113 4114 for (var i = scrollSpysLength; i--;) { 4115 var $spy = $(scrollSpys[i]); 4116 4117 ScrollSpy._jQueryInterface.call($spy, $spy.data()); 4118 } 4119 }); 4120 /** 4121 * ------------------------------------------------------------------------ 4122 * jQuery 4123 * ------------------------------------------------------------------------ 4124 */ 4125 4126 $.fn[NAME$8] = ScrollSpy._jQueryInterface; 4127 $.fn[NAME$8].Constructor = ScrollSpy; 4128 4129 $.fn[NAME$8].noConflict = function () { 4130 $.fn[NAME$8] = JQUERY_NO_CONFLICT$8; 4131 return ScrollSpy._jQueryInterface; 4132 }; 4133 4134 /** 4135 * ------------------------------------------------------------------------ 4136 * Constants 4137 * ------------------------------------------------------------------------ 4138 */ 4139 4140 var NAME$9 = 'tab'; 4141 var VERSION$9 = '4.4.1'; 4142 var DATA_KEY$9 = 'bs.tab'; 4143 var EVENT_KEY$9 = "." + DATA_KEY$9; 4144 var DATA_API_KEY$7 = '.data-api'; 4145 var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9]; 4146 var Event$9 = { 4147 HIDE: "hide" + EVENT_KEY$9, 4148 HIDDEN: "hidden" + EVENT_KEY$9, 4149 SHOW: "show" + EVENT_KEY$9, 4150 SHOWN: "shown" + EVENT_KEY$9, 4151 CLICK_DATA_API: "click" + EVENT_KEY$9 + DATA_API_KEY$7 4152 }; 4153 var ClassName$9 = { 4154 DROPDOWN_MENU: 'dropdown-menu', 4155 ACTIVE: 'active', 4156 DISABLED: 'disabled', 4157 FADE: 'fade', 4158 SHOW: 'show' 4159 }; 4160 var Selector$9 = { 4161 DROPDOWN: '.dropdown', 4162 NAV_LIST_GROUP: '.nav, .list-group', 4163 ACTIVE: '.active', 4164 ACTIVE_UL: '> li > .active', 4165 DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', 4166 DROPDOWN_TOGGLE: '.dropdown-toggle', 4167 DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' 4168 }; 4169 /** 4170 * ------------------------------------------------------------------------ 4171 * Class Definition 4172 * ------------------------------------------------------------------------ 4173 */ 4174 4175 var Tab = 4176 /*#__PURE__*/ 4177 function () { 4178 function Tab(element) { 4179 this._element = element; 4180 } // Getters 4181 4182 4183 var _proto = Tab.prototype; 4184 4185 // Public 4186 _proto.show = function show() { 4187 var _this = this; 4188 4189 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) { 4190 return; 4191 } 4192 4193 var target; 4194 var previous; 4195 var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0]; 4196 var selector = Util.getSelectorFromElement(this._element); 4197 4198 if (listElement) { 4199 var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE; 4200 previous = $.makeArray($(listElement).find(itemSelector)); 4201 previous = previous[previous.length - 1]; 4202 } 4203 4204 var hideEvent = $.Event(Event$9.HIDE, { 4205 relatedTarget: this._element 4206 }); 4207 var showEvent = $.Event(Event$9.SHOW, { 4208 relatedTarget: previous 4209 }); 4210 4211 if (previous) { 4212 $(previous).trigger(hideEvent); 4213 } 4214 4215 $(this._element).trigger(showEvent); 4216 4217 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { 4218 return; 4219 } 4220 4221 if (selector) { 4222 target = document.querySelector(selector); 4223 } 4224 4225 this._activate(this._element, listElement); 4226 4227 var complete = function complete() { 4228 var hiddenEvent = $.Event(Event$9.HIDDEN, { 4229 relatedTarget: _this._element 4230 }); 4231 var shownEvent = $.Event(Event$9.SHOWN, { 4232 relatedTarget: previous 4233 }); 4234 $(previous).trigger(hiddenEvent); 4235 $(_this._element).trigger(shownEvent); 4236 }; 4237 4238 if (target) { 4239 this._activate(target, target.parentNode, complete); 4240 } else { 4241 complete(); 4242 } 4243 }; 4244 4245 _proto.dispose = function dispose() { 4246 $.removeData(this._element, DATA_KEY$9); 4247 this._element = null; 4248 } // Private 4249 ; 4250 4251 _proto._activate = function _activate(element, container, callback) { 4252 var _this2 = this; 4253 4254 var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE); 4255 var active = activeElements[0]; 4256 var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE); 4257 4258 var complete = function complete() { 4259 return _this2._transitionComplete(element, active, callback); 4260 }; 4261 4262 if (active && isTransitioning) { 4263 var transitionDuration = Util.getTransitionDurationFromElement(active); 4264 $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 4265 } else { 4266 complete(); 4267 } 4268 }; 4269 4270 _proto._transitionComplete = function _transitionComplete(element, active, callback) { 4271 if (active) { 4272 $(active).removeClass(ClassName$9.ACTIVE);
4273 var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0]; 4274 4275 if (dropdownChild) { 4276 $(dropdownChild).removeClass(ClassName$9.ACTIVE); 4277 } 4278 4279 if (active.getAttribute('role') === 'tab') { 4280 active.setAttribute('aria-selected', false); 4281 } 4282 } 4283 4284 $(element).addClass(ClassName$9.ACTIVE); 4285 4286 if (element.getAttribute('role') === 'tab') { 4287 element.setAttribute('aria-selected', true); 4288 } 4289 4290 Util.reflow(element); 4291 4292 if (element.classList.contains(ClassName$9.FADE)) { 4293 element.classList.add(ClassName$9.SHOW); 4294 } 4295 4296 if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) { 4297 var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0]; 4298 4299 if (dropdownElement) { 4300 var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE)); 4301 $(dropdownToggleList).addClass(ClassName$9.ACTIVE); 4302 } 4303 4304 element.setAttribute('aria-expanded', true); 4305 } 4306 4307 if (callback) { 4308 callback(); 4309 } 4310 } // Static 4311 ; 4312 4313 Tab._jQueryInterface = function _jQueryInterface(config) { 4314 return this.each(function () { 4315 var $this = $(this); 4316 var data = $this.data(DATA_KEY$9); 4317 4318 if (!data) { 4319 data = new Tab(this); 4320 $this.data(DATA_KEY$9, data); 4321 } 4322 4323 if (typeof config === 'string') { 4324 if (typeof data[config] === 'undefined') { 4325 throw new TypeError("No method named \"" + config + "\""); 4326 } 4327 4328 data[config](); 4329 } 4330 }); 4331 }; 4332 4333 _createClass(Tab, null, [{ 4334 key: "VERSION", 4335 get: function get() { 4336 return VERSION$9; 4337 } 4338 }]); 4339 4340 return Tab; 4341 }(); 4342 /** 4343 * ------------------------------------------------------------------------ 4344 * Data Api implementation 4345 * ------------------------------------------------------------------------ 4346 */ 4347 4348 4349 $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) { 4350 event.preventDefault(); 4351 4352 Tab._jQueryInterface.call($(this), 'show'); 4353 }); 4354 /** 4355 * ------------------------------------------------------------------------ 4356 * jQuery 4357 * ------------------------------------------------------------------------ 4358 */ 4359 4360 $.fn[NAME$9] = Tab._jQueryInterface; 4361 $.fn[NAME$9].Constructor = Tab; 4362 4363 $.fn[NAME$9].noConflict = function () { 4364 $.fn[NAME$9] = JQUERY_NO_CONFLICT$9; 4365 return Tab._jQueryInterface; 4366 }; 4367 4368 /** 4369 * ------------------------------------------------------------------------ 4370 * Constants 4371 * ------------------------------------------------------------------------ 4372 */ 4373 4374 var NAME$a = 'toast'; 4375 var VERSION$a = '4.4.1'; 4376 var DATA_KEY$a = 'bs.toast'; 4377 var EVENT_KEY$a = "." + DATA_KEY$a; 4378 var JQUERY_NO_CONFLICT$a = $.fn[NAME$a]; 4379 var Event$a = { 4380 CLICK_DISMISS: "click.dismiss" + EVENT_KEY$a, 4381 HIDE: "hide" + EVENT_KEY$a, 4382 HIDDEN: "hidden" + EVENT_KEY$a, 4383 SHOW: "show" + EVENT_KEY$a, 4384 SHOWN: "shown" + EVENT_KEY$a 4385 }; 4386 var ClassName$a = { 4387 FADE: 'fade', 4388 HIDE: 'hide', 4389 SHOW: 'show', 4390 SHOWING: 'showing' 4391 }; 4392 var DefaultType$7 = { 4393 animation: 'boolean', 4394 autohide: 'boolean', 4395 delay: 'number' 4396 }; 4397 var Default$7 = { 4398 animation: true, 4399 autohide: true, 4400 delay: 500 4401 }; 4402 var Selector$a = { 4403 DATA_DISMISS: '[data-dismiss="toast"]' 4404 }; 4405 /** 4406 * ------------------------------------------------------------------------ 4407 * Class Definition 4408 * ------------------------------------------------------------------------ 4409 */ 4410 4411 var Toast = 4412 /*#__PURE__*/ 4413 function () { 4414 function Toast(element, config) { 4415 this._element = element; 4416 this._config = this._getConfig(config); 4417 this._timeout = null; 4418 4419 this._setListeners(); 4420 } // Getters 4421 4422 4423 var _proto = Toast.prototype; 4424 4425 // Public 4426 _proto.show = function show() { 4427 var _this = this; 4428 4429 var showEvent = $.Event(Event$a.SHOW); 4430 $(this._element).trigger(showEvent); 4431 4432 if (showEvent.isDefaultPrevented()) { 4433 return; 4434 } 4435 4436 if (this._config.animation) { 4437 this._element.classList.add(ClassName$a.FADE); 4438 } 4439 4440 var complete = function complete() { 4441 _this._element.classList.remove(ClassName$a.SHOWING); 4442 4443 _this._element.classList.add(ClassName$a.SHOW); 4444 4445 $(_this._element).trigger(Event$a.SHOWN); 4446 4447 if (_this._config.autohide) { 4448 _this._timeout = setTimeout(function () { 4449 _this.hide(); 4450 }, _this._config.delay); 4451 } 4452 }; 4453 4454 this._element.classList.remove(ClassName$a.HIDE); 4455 4456 Util.reflow(this._element); 4457 4458 this._element.classList.add(ClassName$a.SHOWING); 4459 4460 if (this._config.animation) { 4461 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 4462 $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 4463 } else { 4464 complete(); 4465 } 4466 }; 4467 4468 _proto.hide = function hide() { 4469 if (!this._element.classList.contains(ClassName$a.SHOW)) { 4470 return; 4471 } 4472 4473 var hideEvent = $.Event(Event$a.HIDE); 4474 $(this._element).trigger(hideEvent); 4475 4476 if (hideEvent.isDefaultPrevented()) { 4477 return; 4478 } 4479 4480 this._close(); 4481 }; 4482 4483 _proto.dispose = function dispose() { 4484 clearTimeout(this._timeout); 4485 this._timeout = null; 4486 4487 if (this._element.classList.contains(ClassName$a.SHOW)) { 4488 this._element.classList.remove(ClassName$a.SHOW); 4489 } 4490 4491 $(this._element).off(Event$a.CLICK_DISMISS); 4492 $.removeData(this._element, DATA_KEY$a); 4493 this._element = null; 4494 this._config = null; 4495 } // Private 4496 ; 4497 4498 _proto._getConfig = function _getConfig(config) {
4499 config = _objectSpread2({}, Default$7, {}, $(this._element).data(), {}, typeof config === 'object' && config ? config : {}); 4500 Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType); 4501 return config; 4502 }; 4503 4504 _proto._setListeners = function _setListeners() { 4505 var _this2 = this; 4506 4507 $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () { 4508 return _this2.hide(); 4509 }); 4510 }; 4511 4512 _proto._close = function _close() { 4513 var _this3 = this; 4514 4515 var complete = function complete() { 4516 _this3._element.classList.add(ClassName$a.HIDE); 4517 4518 $(_this3._element).trigger(Event$a.HIDDEN); 4519 }; 4520 4521 this._element.classList.remove(ClassName$a.SHOW); 4522 4523 if (this._config.animation) { 4524 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 4525 $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 4526 } else { 4527 complete(); 4528 } 4529 } // Static 4530 ; 4531 4532 Toast._jQueryInterface = function _jQueryInterface(config) { 4533 return this.each(function () { 4534 var $element = $(this); 4535 var data = $element.data(DATA_KEY$a); 4536 4537 var _config = typeof config === 'object' && config; 4538 4539 if (!data) { 4540 data = new Toast(this, _config); 4541 $element.data(DATA_KEY$a, data); 4542 } 4543 4544 if (typeof config === 'string') { 4545 if (typeof data[config] === 'undefined') { 4546 throw new TypeError("No method named \"" + config + "\""); 4547 } 4548 4549 data[config](this); 4550 } 4551 }); 4552 }; 4553 4554 _createClass(Toast, null, [{ 4555 key: "VERSION", 4556 get: function get() { 4557 return VERSION$a; 4558 } 4559 }, { 4560 key: "DefaultType", 4561 get: function get() { 4562 return DefaultType$7; 4563 } 4564 }, { 4565 key: "Default", 4566 get: function get() { 4567 return Default$7; 4568 } 4569 }]); 4570 4571 return Toast; 4572 }(); 4573 /** 4574 * ------------------------------------------------------------------------ 4575 * jQuery 4576 * ------------------------------------------------------------------------ 4577 */ 4578 4579 4580 $.fn[NAME$a] = Toast._jQueryInterface; 4581 $.fn[NAME$a].Constructor = Toast; 4582 4583 $.fn[NAME$a].noConflict = function () { 4584 $.fn[NAME$a] = JQUERY_NO_CONFLICT$a; 4585 return Toast._jQueryInterface; 4586 }; 4587 4588 exports.Alert = Alert; 4589 exports.Button = Button; 4590 exports.Carousel = Carousel; 4591 exports.Collapse = Collapse; 4592 exports.Dropdown = Dropdown; 4593 exports.Modal = Modal; 4594 exports.Popover = Popover; 4595 exports.Scrollspy = ScrollSpy; 4596 exports.Tab = Tab; 4597 exports.Toast = Toast; 4598 exports.Tooltip = Tooltip; 4599 exports.Util = Util; 4600 4601 Object.defineProperty(exports, '__esModule', { value: true }); 4602 4603}))); 4604// source --> https://quinto-canal.com/wp-content/themes/newsup/js/owl.carousel.min.js?ver=7.1.1 4605"function"!==typeof Object.create&&(Object.create=function(f){function g(){}g.prototype=f;return new g}); 4606(function(f,g,k){var l={init:function(a,b){this.$elem=f(b);this.options=f.extend({},f.fn.owlCarousel.options,this.$elem.data(),a);this.userOptions=a;this.loadContent()},loadContent:function(){function a(a){var d,e="";if("function"===typeof b.options.jsonSuccess)b.options.jsonSuccess.apply(this,[a]);else{for(d in a.owl)a.owl.hasOwnProperty(d)&&(e+=a.owl[d].item);b.$elem.html(e)}b.logIn()}var b=this,e;"function"===typeof b.options.beforeInit&&b.options.beforeInit.apply(this,[b.$elem]);"string"===typeof b.options.jsonPath? 4607(e=b.options.jsonPath,f.getJSON(e,a)):b.logIn()},logIn:function(){this.$elem.data("owl-originalStyles",this.$elem.attr("style"));this.$elem.data("owl-originalClasses",this.$elem.attr("class"));this.$elem.css({opacity:0});this.orignalItems=this.options.items;this.checkBrowser();this.wrapperWidth=0;this.checkVisible=null;this.setVars()},setVars:function(){if(0===this.$elem.children().length)return!1;this.baseClass();this.eventTypes();this.$userItems=this.$elem.children();this.itemsAmount=this.$userItems.length; 4608this.wrapItems();this.$owlItems=this.$elem.find(".owl-item");this.$owlWrapper=this.$elem.find(".owl-wrapper");this.playDirection="next";this.prevItem=0;this.prevArr=[0];this.currentItem=0;this.customEvents();this.onStartup()},onStartup:function(){this.updateItems();this.calculateAll();this.buildControls();this.updateControls();this.response();this.moveEvents();this.stopOnHover();this.owlStatus();!1!==this.options.transitionStyle&&this.transitionTypes(this.options.transitionStyle);!0===this.options.autoPlay&& 4609(this.options.autoPlay=5E3);this.play();this.$elem.find(".owl-wrapper").css("display","block");this.$elem.is(":visible")?this.$elem.css("opacity",1):this.watchVisibility();this.onstartup=!1;this.eachMoveUpdate();"function"===typeof this.options.afterInit&&this.options.afterInit.apply(this,[this.$elem])},eachMoveUpdate:function(){!0===this.options.lazyLoad&&this.lazyLoad();!0===this.options.autoHeight&&this.autoHeight();this.onVisibleItems();"function"===typeof this.options.afterAction&&this.options.afterAction.apply(this, 4610[this.$elem])}
4610,updateVars:function(){"function"===typeof this.options.beforeUpdate&&this.options.beforeUpdate.apply(this,[this.$elem]);this.watchVisibility();this.updateItems();this.calculateAll();this.updatePosition();this.updateControls();this.eachMoveUpdate();"function"===typeof this.options.afterUpdate&&this.options.afterUpdate.apply(this,[this.$elem])},reload:function(){var a=this;g.setTimeout(function(){a.updateVars()},0)},watchVisibility:function(){var a=this;if(!1===a.$elem.is(":visible"))a.$elem.css({opacity:0}), 4611g.clearInterval(a.autoPlayInterval),g.clearInterval(a.checkVisible);else return!1;a.checkVisible=g.setInterval(function(){a.$elem.is(":visible")&&(a.reload(),a.$elem.animate({opacity:1},200),g.clearInterval(a.checkVisible))},500)},wrapItems:function(){this.$userItems.wrapAll('<div class="owl-wrapper">').wrap('<div class="owl-item"></div>');this.$elem.find(".owl-wrapper").wrap('<div class="owl-wrapper-outer">');this.wrapperOuter=this.$elem.find(".owl-wrapper-outer");this.$elem.css("display","block")}, 4612baseClass:function(){var a=this.$elem.hasClass(this.options.baseClass),b=this.$elem.hasClass(this.options.theme);a||this.$elem.addClass(this.options.baseClass);b||this.$elem.addClass(this.options.theme)},updateItems:function(){var a,b;if(!1===this.options.responsive)return!1;if(!0===this.options.singleItem)return this.options.items=this.orignalItems=1,this.options.itemsCustom=!1,this.options.itemsDesktop=!1,this.options.itemsDesktopSmall=!1,this.options.itemsTablet=!1,this.options.itemsTabletSmall= 4613!1,this.options.itemsMobile=!1;a=f(this.options.responsiveBaseWidth).width();a>(this.options.itemsDesktop[0]||this.orignalItems)&&(this.options.items=this.orignalItems);if(!1!==this.options.itemsCustom)for(this.options.itemsCustom.sort(function(a,b){return a[0]-b[0]}),b=0;b<this.options.itemsCustom.length;b+=1)this.options.itemsCustom[b][0]<=a&&(this.options.items=this.options.itemsCustom[b][1]);else a<=this.options.itemsDesktop[0]&&!1!==this.options.itemsDesktop&&(this.options.items=this.options.itemsDesktop[1]), 4614a<=this.options.itemsDesktopSmall[0]&&!1!==this.options.itemsDesktopSmall&&(this.options.items=this.options.itemsDesktopSmall[1]),a<=this.options.itemsTablet[0]&&!1!==this.options.itemsTablet&&(this.options.items=this.options.itemsTablet[1]),a<=this.options.itemsTabletSmall[0]&&!1!==this.options.itemsTabletSmall&&(this.options.items=this.options.itemsTabletSmall[1]),a<=this.options.itemsMobile[0]&&!1!==this.options.itemsMobile&&(this.options.items=this.options.itemsMobile[1]);this.options.items>this.itemsAmount&& 4615!0===this.options.itemsScaleUp&&(this.options.items=this.itemsAmount)},response:function(){var a=this,b,e;if(!0!==a.options.responsive)return!1;e=f(g).width();a.resizer=function(){f(g).width()!==e&&(!1!==a.options.autoPlay&&g.clearInterval(a.autoPlayInterval),g.clearTimeout(b),b=g.setTimeout(function(){e=f(g).width();a.updateVars()},a.options.responsiveRefreshRate))};f(g).resize(a.resizer)},updatePosition:function(){this.jumpTo(this.currentItem);!1!==this.options.autoPlay&&this.checkAp()},appendItemsSizes:function(){var a= 4616this,b=0,e=a.itemsAmount-a.options.items;a.$owlItems.each(function(c){var d=f(this);d.css({width:a.itemWidth}).data("owl-item",Number(c));if(0===c%a.options.items||c===e)c>e||(b+=1);d.data("owl-roundPages",b)})},appendWrapperSizes:function(){this.$owlWrapper.css({width:this.$owlItems.length*this.itemWidth*2,left:0});this.appendItemsSizes()},calculateAll:function(){this.calculateWidth();this.appendWrapperSizes();this.loops();this.max()},calculateWidth:function(){this.itemWidth=Math.round(this.$elem.width()/ 4617this.options.items)},max:function(){var a=-1*(this.itemsAmount*this.itemWidth-this.options.items*this.itemWidth);this.options.items>this.itemsAmount?this.maximumPixels=a=this.maximumItem=0:(this.maximumItem=this.itemsAmount-this.options.items,this.maximumPixels=a);return a},min:function(){return 0},loops:function(){var a=0,b=0,e,c;this.positionsInArray=[0];this.pagesInArray=[];for(e=0;e<this.itemsAmount;e+=1)b+=this.itemWidth,this.positionsInArray.push(-b),!0===this.options.scrollPerPage&&(c=f(this.$owlItems[e]), 4618c=c.data("owl-roundPages"),c!==a&&(this.pagesInArray[a]=this.positionsInArray[e],a=c))},buildControls:function(){if(!0===this.options.navigation||!0===this.options.pagination)this.owlControls=f('<div class="owl-control
4618s"/>').toggleClass("clickable",!this.browser.isTouch).appendTo(this.$elem);!0===this.options.pagination&&this.buildPagination();!0===this.options.navigation&&this.buildButtons()},buildButtons:function(){var a=this,b=f('<div class="owl-buttons"/>');a.owlControls.append(b);a.buttonPrev= 4619f("<div/>",{"class":"owl-prev",html:a.options.navigationText[0]||""});a.buttonNext=f("<div/>",{"class":"owl-next",html:a.options.navigationText[1]||""});b.append(a.buttonPrev).append(a.buttonNext);b.on("touchstart.owlControls mousedown.owlControls",'div[class^="owl"]',function(a){a.preventDefault()});b.on("touchend.owlControls mouseup.owlControls",'div[class^="owl"]',function(b){b.preventDefault();f(this).hasClass("owl-next")?a.next():a.prev()})},buildPagination:function(){var a=this;a.paginationWrapper= 4620f('<div class="owl-pagination"/>');a.owlControls.append(a.paginationWrapper);a.paginationWrapper.on("touchend.owlControls mouseup.owlControls",".owl-page",function(b){b.preventDefault();Number(f(this).data("owl-page"))!==a.currentItem&&a.goTo(Number(f(this).data("owl-page")),!0)})},updatePagination:function(){var a,b,e,c,d,g;if(!1===this.options.pagination)return!1;this.paginationWrapper.html("");a=0;b=this.itemsAmount-this.itemsAmount%this.options.items;for(c=0;c<this.itemsAmount;c+=1)0===c%this.options.items&& 4621(a+=1,b===c&&(e=this.itemsAmount-this.options.items),d=f("<div/>",{"class":"owl-page"}),g=f("<span></span>",{text:!0===this.options.paginationNumbers?a:"","class":!0===this.options.paginationNumbers?"owl-numbers":""}),d.append(g),d.data("owl-page",b===c?e:c),d.data("owl-roundPages",a),this.paginationWrapper.append(d));this.checkPagination()},checkPagination:function(){var a=this;if(!1===a.options.pagination)return!1;a.paginationWrapper.find(".owl-page").each(function(){f(this).data("owl-roundPages")=== 4622f(a.$owlItems[a.currentItem]).data("owl-roundPages")&&(a.paginationWrapper.find(".owl-page").removeClass("active"),f(this).addClass("active"))})},checkNavigation:function(){if(!1===this.options.navigation)return!1;!1===this.options.rewindNav&&(0===this.currentItem&&0===this.maximumItem?(this.buttonPrev.addClass("disabled"),this.buttonNext.addClass("disabled")):0===this.currentItem&&0!==this.maximumItem?(this.buttonPrev.addClass("disabled"),this.buttonNext.removeClass("disabled")):this.currentItem=== 4623this.maximumItem?(this.buttonPrev.removeClass("disabled"),this.buttonNext.addClass("disabled")):0!==this.currentItem&&this.currentItem!==this.maximumItem&&(this.buttonPrev.removeClass("disabled"),this.buttonNext.removeClass("disabled")))},updateControls:function(){this.updatePagination();this.checkNavigation();this.owlControls&&(this.options.items>=this.itemsAmount?this.owlControls.hide():this.owlControls.show())},destroyControls:function(){this.owlControls&&this.owlControls.remove()},next:function(a){if(this.isTransition)return!1; 4624this.currentItem+=!0===this.options.scrollPerPage?this.options.items:1;if(this.currentItem>this.maximumItem+(!0===this.options.scrollPerPage?this.options.items-1:0))if(!0===this.options.rewindNav)this.currentItem=0,a="rewind";else return this.currentItem=this.maximumItem,!1;this.goTo(this.currentItem,a)},prev:function(a){if(this.isTransition)return!1;this.currentItem=!0===this.options.scrollPerPage&&0<this.currentItem&&this.currentItem<this.options.items?0:this.currentItem-(!0===this.options.scrollPerPage? 4625this.options.items:1);if(0>this.currentItem)if(!0===this.options.rewindNav)this.currentItem=this.maximumItem,a="rewind";else return this.currentItem=0,!1;this.goTo(this.currentItem,a)},goTo:function(a,b,e){var c=this;if(c.isTransition)return!1;"function"===typeof c.options.beforeMove&&c.options.beforeMove.apply(this,[c.$elem]);a>=c.maximumItem?a=c.maximumItem:0>=a&&(a=0);c.currentItem=c.owl.currentItem=a;if(!1!==c.options.transitionStyle&&"drag"!==e&&1===c.options.items&&!0===c.browser.support3d)return c.swapSpeed(0), 4626!0===c.browser.support3d?c.transition3d(c.positionsInArray[a]):c.css2slide(c.positionsInArray[a],1),c.afterGo(),c.singleItemTransition(),!1;a=c.positionsInArray[a];!0===c.browser.support3d?(c.isCss3Finish=!1,!0===b?(c.swapSpeed("paginationSpeed"),g.setTimeout(function(){c.isCss3Finish=!0},c.options.paginationSpeed)):"rewind"===b?(c.swapSpeed(c.options.rewindSpeed),g.setTimeout(function(){c.isCss3Finish=!0},c.options.rewindSpeed)):(c.swapSpeed("slideSpeed"),g.setTimeout(function(){c.isCss3Finish=!0}, 4627c.options.slideSpeed)),c.transition3d(a)):!0===b?c.css2slide(a,c.options.paginationSpeed):"rewind"===b?c.css2slide(a,c.options.rewindSpeed):c.css2slide(a,c.options.slideSpeed);c.afterGo()},jumpTo:function(a){"function"===typeof this.options.beforeMove&&this.options.beforeMove.apply(this,[this.$elem]);a>=this.maximumItem||-1===a?a=this.maximumItem:0>=a&&(a=0);this.swapSpeed(0);!0===this.browser.support3d?this.transition3d(this.positionsInArray[a]):this.css2slide(this.positionsInArray[a],1);this.currentItem= 4628this.owl.currentItem=a;this.afterGo()},afterGo:function(){this.prevArr.push(this.currentItem);this.prevItem=this.owl.prevItem=this.prevArr[this.prevArr.length-2];this.prevArr.shift(0);this.prevItem!==this.currentItem&&(this.checkPagination(),this.checkNavigation(),this.eachMoveUpdate(),!1!==this.options.autoPlay&&this.checkAp());"function"===typeof this.options.afterMove&&this.prevItem!==this.currentItem&&this.options.afterMove.apply(this,[this.$elem])},stop:function(){this.apStatus="stop";g.clearInterval(this.autoPlayInterval)}, 4629checkAp:function(){"stop"!==this.apStatus&&this.play()},play:function(){var a=this;a.apStatus="play";if(!1===a.options.autoPlay)return!1;g.clearInterval(a.autoPlayInterval);a.autoPlayInterval=g.setInterval(function(){a.next(!0)},a.options.autoPlay)},swapSpeed:function(a){"slideSpeed"===a?this.$owlWrapper.css(this.addCssSpeed(this.options.slideSpeed)):"paginationSpeed"===a?this.$owlWrapper.css(this.addCssSpeed(this.options.paginationSpeed)):"string"!==typeof a&&this.$owlWrapper.css(this.addCssSpeed(a))}, 4630addCssSpeed:function(a){return{"-webkit-transition":"all "+a+"ms ease","-moz-transition":"all "+a+"ms ease","-o-transition":"all "+a+"ms ease",transition:"all "+a+"ms ease"}},removeTransition:function(){return{"-webkit-transition":"","-moz-transition":"","-o-transition":"",transition:""}},doTranslate:function(a){return{"-webkit-transform":"translate3d("+a+"px, 0px, 0px)","-moz-transform":"translate3d("+a+"px, 0px, 0px)","-o-transform":"translate3d("+a+"px, 0px, 0px)","-ms-transform":"translate3d("+ 4631a+"px, 0px, 0px)",transform:"translate3d("+a+"px, 0px,0px)"}},transition3d:function(a){this.$owlWrapper.css(this.doTranslate(a))},css2move:function(a){this.$owlWrapper.css({left:a})},css2slide:function(a,b){var e=this;e.isCssFinish=!1;e.$owlWrapper.stop(!0,!0).animate({left:a},{duration:b||e.options.slideSpeed,complete:function(){e.isCssFinish=!0}})},checkBrowser:function(){var a=k.createElement("div");a.style.cssText=" -moz-transform:translate3d(0px, 0px, 0px); -ms-transform:translate3d(0px, 0px, 0px); -o-transform:translate3d(0px, 0px, 0px); -webkit-transform:translate3d(0px, 0px, 0px); transform:translate3d(0px, 0px, 0px)";
4632a=a.style.cssText.match(/translate3d\(0px, 0px, 0px\)/g);this.browser={support3d:null!==a&&1===a.length,isTouch:"ontouchstart"in g||g.navigator.msMaxTouchPoints}},moveEvents:function(){if(!1!==this.options.mouseDrag||!1!==this.options.touchDrag)this.gestures(),this.disabledEvents()},eventTypes:function(){var a=["s","e","x"];this.ev_types={};!0===this.options.mouseDrag&&!0===this.options.touchDrag?a=["touchstart.owl mousedown.owl","touchmove.owl mousemove.owl","touchend.owl touchcancel.owl mouseup.owl"]: 4633!1===this.options.mouseDrag&&!0===this.options.touchDrag?a=["touchstart.owl","touchmove.owl","touchend.owl touchcancel.owl"]:!0===this.options.mouseDrag&&!1===this.options.touchDrag&&(a=["mousedown.owl","mousemove.owl","mouseup.owl"]);this.ev_types.start=a[0];this.ev_types.move=a[1];this.ev_types.end=a[2]},disabledEvents:function(){this.$elem.on("dragstart.owl",function(a){a.preventDefault()});this.$elem.on("mousedown.disableTextSelect",function(a){return f(a.target).is("input, textarea, select, option")})}, 4634gestures:function(){function a(a){if(void 0!==a.touches)return{x:a.touches[0].pageX,y:a.touches[0].pageY};if(void 0===a.touches){if(void 0!==a.pageX)return{x:a.pageX,y:a.pageY};if(void 0===a.pageX)return{x:a.clientX,y:a.clientY}}}function b(a){"on"===a?(f(k).on(d.ev_types.move,e),f(k).on(d.ev_types.end,c)):"off"===a&&(f(k).off(d.ev_types.move),f(k).off(d.ev_types.end))}function e(b){b=b.originalEvent||b||g.event;d.newPosX=a(b).x-h.offsetX;d.newPosY=a(b).y-h.offsetY;d.newRelativeX=d.newPosX-h.relativePos; 4635"function"===typeof d.options.startDragging&&!0!==h.dragging&&0!==d.newRelativeX&&(h.dragging=!0,d.options.startDragging.apply(d,[d.$elem]));(8<d.newRelativeX||-8>d.newRelativeX)&&!0===d.browser.isTouch&&(void 0!==b.preventDefault?b.preventDefault():b.returnValue=!1,h.sliding=!0);(10<d.newPosY||-10>d.newPosY)&&!1===h.sliding&&f(k).off("touchmove.owl");d.newPosX=Math.max(Math.min(d.newPosX,d.newRelativeX/5),d.maximumPixels+d.newRelativeX/5);!0===d.browser.support3d?d.transition3d(d.newPosX):d.css2move(d.newPosX)} 4636function c(a){a=a.originalEvent||a||g.event;var c;a.target=a.target||a.srcElement;h.dragging=!1;!0!==d.browser.isTouch&&d.$owlWrapper.removeClass("grabbing");d.dragDirection=0>d.newRelativeX?d.owl.dragDirection="left":d.owl.dragDirection="right";0!==d.newRelativeX&&(c=d.getNewPosition(),d.goTo(c,!1,"drag"),h.targetElement===a.target&&!0!==d.browser.isTouch&&(f(a.target).on("click.disable",function(a){a.stopImmediatePropagation();a.stopPropagation();a.preventDefault();f(a.target).off("click.disable")}), 4637a=f._data(a.target,"events").click,c=a.pop(),a.splice(0,0,c)));b("off")}var d=this,h={offsetX:0,offsetY:0,baseElWidth:0,relativePos:0,position:null,minSwipe:null,maxSwipe:null,sliding:null,dargging:null,targetElement:null};d.isCssFinish=!0;d.$elem.on(d.ev_types.start,".owl-wrapper",function(c){c=c.originalEvent||c||g.event;var e;if(3===c.which)return!1;if(!(d.itemsAmount<=d.options.items)){if(!1===d.isCssFinish&&!d.options.dragBeforeAnimFinish||!1===d.isCss3Finish&&!d.options.dragBeforeAnimFinish)return!1; 4638!1!==d.options.autoPlay&&g.clearInterval(d.autoPlayInterval);!0===d.browser.isTouch||d.$owlWrapper.hasClass("grabbing")||d.$owlWrapper.addClass("grabbing");d.newPosX=0;d.newRelativeX=0;f(this).css(d.removeTransition());e=f(this).position();h.relativePos=e.left;h.offsetX=a(c).x-e.left;h.offsetY=a(c).y-e.top;b("on");h.sliding=!1;h.targetElement=c.target||c.srcElement}})},getNewPosition:function(){var a=this.closestItem();a>this.maximumItem?a=this.currentItem=this.maximumItem:0<=this.newPosX&&(this.currentItem= 4639a=0);return a},closestItem:function(){var a=this,b=!0===a.options.scrollPerPage?a.pagesInArray:a.positionsInArray,e=a.newPosX,c=null;f.each(b,function(d,g){e-a.itemWidth/20>b[d+1]&&e-a.itemWidth/20<g&&"left"===a.moveDirection()?(c=g,a.currentItem=!0===a.options.scrollPerPage?f.inArray(c,a.positionsInArray):d):e+a.itemWidth/20<g&&e+a.itemWidth/20>(b[d+1]||b[d]-a.itemWidth)&&"right"===a.moveDirection()&&(!0===a.options.scrollPerPage?(c=b[d+1]||b[b.length-1],a.currentItem=f.inArray(c,a.positionsInArray)): 4640(c=b[d+1],a.currentItem=d+1))});return a.currentItem},moveDirection:function(){var a;0>this.newRelativeX?(a="right",this.playDirection="next"):(a="left",this.playDirection="prev");return a},customEvents:function(){var a=this;a.$elem.on("owl.next",function(){a.next()});a.$elem.on("owl.prev",function(){a.prev()});a.$elem.on("owl.play",function(b,e){a.options.autoPlay=e;a.play();a.hoverStatus="play"});a.$elem.on("owl.stop",function(){a.stop();a.hoverStatus="stop"});a.$elem.on("owl.goTo",function(b,e){a.goTo(e)}); 4641a.$elem.on("owl.jumpTo",function(b,e){a.jumpTo(e)})},stopOnHover:function(){var a=this;!0===a.options.stopOnHover&&!0!==a.browser.isTouch&&!1!==a.options.autoPlay&&(a.$elem.on("mouseover",function(){a.stop()}),a.$elem.on("mouseout",function(){"stop"!==a.hoverStatus&&a.play()}))},lazyLoad:function(){var a,b,e,c,d;if(!1===this.options.lazyLoad)return!1;for(a=0;a<this.itemsAmount;a+=1)b=f(this.$owlItems[a]),"loaded"!==b.data("owl-loaded")&&(e=b.data("owl-item"),c=b.find(".lazyOwl"),"string"!==typeof c.data("src")? 4642b.data("owl-loaded","loaded"):(void 0===b.data("owl-loaded")&&(c.hide(),b.addClass("loading").data("owl-loaded","checked")),(d=!0===this.options.lazyFollow?e>=this.currentItem:!0)&&e<this.currentItem+this.options.items&&c.length&&this.lazyPreload(b,c)))},lazyPreload:function(a,b){function e(){a.data("owl-loaded","loaded").removeClass("loading");b.removeAttr("data-src");"fade"===d.options.lazyEffect?b.fadeIn(400):b.show();"function"===typeof d.options.afterLazyLoad&&d.options.afterLazyLoad.apply(this, 4643[d.$elem])}function c(){f+=1;d.completeImg(b.get(0))||!0===k?e():100>=f?g.setTimeout(c,100):e()}var d=this,f=0,k;"DIV"===b.prop("tagName")?(b.css("background-image","url("+b.data("src")+")"),k=!0):b[0].src=b.data("src");c()},autoHeight:function(){function a(){var a=f(e.$owlItems[e.currentItem]).height();e.wrapperOuter.css("height",a+"px");e.wrapperOuter.hasClass("autoHeight")||g.setTimeout(function(){e.wrapperOuter.addClass("autoHeight")},0)}function b(){d+=1;e.completeImg(c.get(0))?a():100>=d?g.setTimeout(b, 4644100):e.wrapperOuter.css("height","")}var e=this,c=f(e.$owlItems[e.currentItem]).find("img"),d;void 0!==c.get(0)?(d=0,b()):a()},completeImg:function(a){return!a.complete||"undefined"!==typeof a.naturalWi
4644dth&&0===a.naturalWidth?!1:!0},onVisibleItems:function(){var a;!0===this.options.addClassActive&&this.$owlItems.removeClass("active");this.visibleItems=[];for(a=this.currentItem;a<this.currentItem+this.options.items;a+=1)this.visibleItems.push(a),!0===this.options.addClassActive&&f(this.$owlItems[a]).addClass("active"); 4645this.owl.visibleItems=this.visibleItems},transitionTypes:function(a){this.outClass="owl-"+a+"-out";this.inClass="owl-"+a+"-in"},singleItemTransition:function(){var a=this,b=a.outClass,e=a.inClass,c=a.$owlItems.eq(a.currentItem),d=a.$owlItems.eq(a.prevItem),f=Math.abs(a.positionsInArray[a.currentItem])+a.positionsInArray[a.prevItem],g=Math.abs(a.positionsInArray[a.currentItem])+a.itemWidth/2;a.isTransition=!0;a.$owlWrapper.addClass("owl-origin").css({"-webkit-transform-origin":g+"px","-moz-perspective-origin":g+ 4646"px","perspective-origin":g+"px"});d.css({position:"relative",left:f+"px"}).addClass(b).on("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend",function(){a.endPrev=!0;d.off("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend");a.clearTransStyle(d,b)});c.addClass(e).on("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend",function(){a.endCurrent=!0;c.off("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend");a.clearTransStyle(c,e)})},clearTransStyle:function(a, 4647b){a.css({position:"",left:""}).removeClass(b);this.endPrev&&this.endCurrent&&(this.$owlWrapper.removeClass("owl-origin"),this.isTransition=this.endCurrent=this.endPrev=!1)},owlStatus:function(){this.owl={userOptions:this.userOptions,baseElement:this.$elem,userItems:this.$userItems,owlItems:this.$owlItems,currentItem:this.currentItem,prevItem:this.prevItem,visibleItems:this.visibleItems,isTouch:this.browser.isTouch,browser:this.browser,dragDirection:this.dragDirection}},clearEvents:function(){this.$elem.off(".owl owl mousedown.disableTextSelect"); 4648f(k).off(".owl owl");f(g).off("resize",this.resizer)},unWrap:function(){0!==this.$elem.children().length&&(this.$owlWrapper.unwrap(),this.$userItems.unwrap().unwrap(),this.owlControls&&this.owlControls.remove());this.clearEvents();this.$elem.attr("style",this.$elem.data("owl-originalStyles")||"").attr("class",this.$elem.data("owl-originalClasses"))},destroy:function(){this.stop();g.clearInterval(this.checkVisible);this.unWrap();this.$elem.removeData()},reinit:function(a){a=f.extend({},this.userOptions, 4649a);this.unWrap();this.init(a,this.$elem)},addItem:function(a,b){var e;if(!a)return!1;if(0===this.$elem.children().length)return this.$elem.append(a),this.setVars(),!1;this.unWrap();e=void 0===b||-1===b?-1:b;e>=this.$userItems.length||-1===e?this.$userItems.eq(-1).after(a):this.$userItems.eq(e).before(a);this.setVars()},removeItem:function(a){if(0===this.$elem.children().length)return!1;a=void 0===a||-1===a?-1:a;this.unWrap();this.$userItems.eq(a).remove();this.setVars()}};f.fn.owlCarousel=function(a){return this.each(function(){if(!0=== 4650f(this).data("owl-init"))return!1;f(this).data("owl-init",!0);var b=Object.create(l);b.init(a,this);f.data(this,"owlCarousel",b)})};f.fn.owlCarousel.options={items:5,itemsCustom:!1,itemsDesktop:[1199,4],itemsDesktopSmall:[979,3],itemsTablet:[768,2],itemsTabletSmall:!1,itemsMobile:[479,1],singleItem:!1,itemsScaleUp:!1,slideSpeed:200,paginationSpeed:800,rewindSpeed:1E3,autoPlay:!1,stopOnHover:!1,navigation:!1,navigationText:["prev","next"],rewindNav:!0,scrollPerPage:!1,pagination:!0,paginationNumbers:!1, 4651responsive:!0,responsiveRefreshRate:200,responsiveBaseWidth:g,baseClass:"owl-carousel",theme:"owl-theme",lazyLoad:!1,lazyFollow:!0,lazyEffect:"fade",autoHeight:!1,jsonPath:!1,jsonSuccess:!1,dragBeforeAnimFinish:!0,mouseDrag:!0,touchDrag:!0,addClassActive:!1,transitionStyle:!1,beforeUpdate:!1,afterUpdate:!1,beforeInit:!1,afterInit:!1,beforeMove:!1,afterMove:!1,afterAction:!1,startDragging:!1,afterLazyLoad:!1}})(jQuery,window,document); 4652// source --> https://quinto-canal.com/wp-content/themes/newsup/js/jquery.smartmenus.js?ver=7.1.1 4653/*! 4654 * SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 4655 * http://www.smartmenus.org/ 4656 * 4657 * Copyright Vasil Dinkov, Vadikom Web Ltd. 4658 * http://vadikom.com 4659 * 4660 * Licensed MIT 4661 */ 4662 4663(function(factory) { 4664 if (typeof define === 'function' && define.amd) { 4665 // AMD 4666 define(['jquery'], factory); 4667 } else if (typeof module === 'object' && typeof module.exports === 'object') { 4668 // CommonJS 4669 module.exports = factory(require('jquery')); 4670 } else { 4671 // Global jQuery 4672 factory(jQuery); 4673 } 4674} (function($) { 4675 4676 var menuTrees = [], 4677 mouse = false, // optimize for touch by default - we will detect for mouse input 4678 touchEvents = 'ontouchstart' in window, // we use this just to choose between toucn and pointer events, not for touch screen detection 4679 mouseDetectionEnabled = false, 4680 requestAnimationFrame = window.requestAnimationFrame || function(callback) { return setTimeout(callback, 1000 / 60); }, 4681 cancelAnimationFrame = window.cancelAnimationFrame || function(id) { clearTimeout(id); }, 4682 canAnimate = !!$.fn.animate; 4683 4684 // Handle detection for mouse input (i.e. desktop browsers, tablets with a mouse, etc.) 4685 function initMouseDetection(disable) { 4686 var eNS = '.smartmenus_mouse'; 4687 if (!mouseDetectionEnabled && !disable) { 4688 // if we get two consecutive mousemoves within 2 pixels from each other and within 300ms, we assume a real mouse/cursor is present 4689 // in practice, this seems like impossible to trick unintentianally with a real mouse and a pretty safe detection on touch devices (even with older browsers that do not support touch events) 4690 var firstTime = true, 4691 lastMove = null, 4692 events = { 4693 'mousemove': function(e) { 4694 var thisMove = { x: e.pageX, y: e.pageY, timeStamp: new Date().getTime() }; 4695 if (lastMove) { 4696 var deltaX = Math.abs(lastMove.x - thisMove.x), 4697 deltaY = Math.abs(lastMove.y - thisMove.y); 4698 if ((deltaX > 0 || deltaY > 0) && deltaX <= 2 && deltaY <= 2 && thisMove.timeStamp - lastMove.timeStamp <= 300) { 4699 mouse = true; 4700 // if this is the first check after page load, check if we are not over some item by chance and call the mouseenter handler if yes 4701 if (firstTime) { 4702 var $a = $(e.target).closest('a'); 4703 if ($a.is('a')) { 4704 $.each(menuTrees, function() { 4705 if ($.contains(this.$root[0], $a[0])) { 4706 this.itemEnter({ currentTarget: $a[0] }); 4707 return false; 4708 } 4709 });
4710 } 4711 firstTime = false; 4712 } 4713 } 4714 } 4715 lastMove = thisMove; 4716 } 4717 }; 4718 events[touchEvents ? 'touchstart' : 'pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut'] = function(e) { 4719 if (isTouchEvent(e.originalEvent)) { 4720 mouse = false; 4721 } 4722 }; 4723 $(document).on(getEventsNS(events, eNS)); 4724 mouseDetectionEnabled = true; 4725 } else if (mouseDetectionEnabled && disable) { 4726 $(document).off(eNS); 4727 mouseDetectionEnabled = false; 4728 } 4729 } 4730 4731 function isTouchEvent(e) { 4732 return !/^(4|mouse)$/.test(e.pointerType); 4733 } 4734 4735 // returns a jQuery on() ready object 4736 function getEventsNS(events, eNS) { 4737 if (!eNS) { 4738 eNS = ''; 4739 } 4740 var eventsNS = {}; 4741 for (var i in events) { 4742 eventsNS[i.split(' ').join(eNS + ' ') + eNS] = events[i]; 4743 } 4744 return eventsNS; 4745 } 4746 4747 $.SmartMenus = function(elm, options) { 4748 this.$root = $(elm); 4749 this.opts = options; 4750 this.rootId = ''; // internal 4751 this.accessIdPrefix = ''; 4752 this.$subArrow = null; 4753 this.activatedItems = []; // stores last activated A's for each level 4754 this.visibleSubMenus = []; // stores visible sub menus UL's (might be in no particular order) 4755 this.showTimeout = 0; 4756 this.hideTimeout = 0; 4757 this.scrollTimeout = 0; 4758 this.clickActivated = true; 4759 this.focusActivated = true; 4760 this.zIndexInc = 0; 4761 this.idInc = 0; 4762 this.$firstLink = null; // we'll use these for some tests 4763 this.$firstSub = null; // at runtime so we'll cache them 4764 this.disabled = false; 4765 this.$disableOverlay = null; 4766 this.$touchScrollingSub = null; 4767 this.cssTransforms3d = 'perspective' in elm.style || 'webkitPerspective' in elm.style; 4768 this.wasCollapsible = false; 4769 this.init(); 4770 }; 4771 4772 $.extend($.SmartMenus, { 4773 hideAll: function() { 4774 $.each(menuTrees, function() { 4775 this.menuHideAll(); 4776 }); 4777 }, 4778 destroy: function() { 4779 while (menuTrees.length) { 4780 menuTrees[0].destroy(); 4781 } 4782 initMouseDetection(true); 4783 }, 4784 prototype: { 4785 init: function(refresh) { 4786 var self = this; 4787 4788 if (!refresh) { 4789 menuTrees.push(this); 4790 4791 this.rootId = (new Date().getTime() + Math.random() + '').replace(/\D/g, ''); 4792 this.accessIdPrefix = 'sm-' + this.rootId + '-'; 4793 4794 if (this.$root.hasClass('sm-rtl')) { 4795 this.opts.rightToLeftSubMenus = true; 4796 } 4797 4798 // init root (main menu) 4799 var eNS = '.smartmenus'; 4800 this.$root 4801 .data('smartmenus', this) 4802 .attr('data-smartmenus-id', this.rootId) 4803 .dataSM('level', 1) 4804 .on(getEventsNS({ 4805 'mouseover focusin': $.proxy(this.rootOver, this), 4806 'mouseout focusout': $.proxy(this.rootOut, this), 4807 'keydown': $.proxy(this.rootKeyDown, this) 4808 }, eNS)) 4809 .on(getEventsNS({ 4810 'mouseenter': $.proxy(this.itemEnter, this), 4811 'mouseleave': $.proxy(this.itemLeave, this), 4812 'mousedown': $.proxy(this.itemDown, this), 4813 'focus': $.proxy(this.itemFocus, this), 4814 'blur': $.proxy(this.itemBlur, this), 4815 'click': $.proxy(this.itemClick, this) 4816 }, eNS), 'a'); 4817 4818 // hide menus on tap or click outside the root UL 4819 eNS += this.rootId; 4820 if (this.opts.hideOnClick) { 4821 $(document).on(getEventsNS({ 4822 'touchstart': $.proxy(this.docTouchStart, this), 4823 'touchmove': $.proxy(this.docTouchMove, this), 4824 'touchend': $.proxy(this.docTouchEnd, this), 4825 // for Opera Mobile < 11.5, webOS browser, etc. we'll check click too 4826 'click': $.proxy(this.docClick, this) 4827 }, eNS)); 4828 } 4829 // hide sub menus on resize 4830 $(window).on(getEventsNS({ 'resize orientationchange': $.proxy(this.winResize, this) }, eNS)); 4831 4832 if (this.opts.subIndicators) { 4833 this.$subArrow = $('<span/>').addClass('sub-arrow'); 4834 if (this.opts.subIndicatorsText) { 4835 this.$subArrow.html(this.opts.subIndicatorsText); 4836 } 4837 } 4838 4839 // make sure mouse detection is enabled 4840 initMouseDetection(); 4841 } 4842 4843 // init sub menus 4844 this.$firstSub = this.$root.find('ul').each(function() { self.menuInit($(this)); }).eq(0); 4845 4846 this.$firstLink = this.$root.find('a').eq(0); 4847 4848 // find current item 4849 if (this.opts.markCurrentItem) { 4850 var reDefaultDoc = /(index|default)\.[^#\?\/]*/i, 4851 reHash = /#.*/, 4852 locHref = window.location.href.replace(reDefaultDoc, ''), 4853 locHrefNoHash = locHref.replace(reHash, ''); 4854 this.$root.find('a').each(function() { 4855 var href = this.href.replace(reDefaultDoc, ''), 4856 $this = $(this); 4857 if (href == locHref || href == locHrefNoHash) { 4858 $this.addClass('current'); 4859 if (self.opts.markCurrentTree) { 4860 $this.parentsUntil('[data-smartmenus-id]', 'ul').each(function() { 4861 $(this).dataSM('parent-a').addClass('current'); 4862 });
4863 } 4864 } 4865 }); 4866 } 4867 4868 // save initial state 4869 this.wasCollapsible = this.isCollapsible(); 4870 }, 4871 destroy: function(refresh) { 4872 if (!refresh) { 4873 var eNS = '.smartmenus'; 4874 this.$root 4875 .removeData('smartmenus') 4876 .removeAttr('data-smartmenus-id') 4877 .removeDataSM('level') 4878 .off(eNS); 4879 eNS += this.rootId; 4880 $(document).off(eNS); 4881 $(window).off(eNS); 4882 if (this.opts.subIndicators) { 4883 this.$subArrow = null; 4884 } 4885 } 4886 this.menuHideAll(); 4887 var self = this; 4888 this.$root.find('ul').each(function() { 4889 var $this = $(this); 4890 if ($this.dataSM('scroll-arrows')) { 4891 $this.dataSM('scroll-arrows').remove(); 4892 } 4893 if ($this.dataSM('shown-before')) { 4894 if (self.opts.subMenusMinWidth || self.opts.subMenusMaxWidth) { 4895 $this.css({ width: '', minWidth: '', maxWidth: '' }).removeClass('sm-nowrap'); 4896 } 4897 if ($this.dataSM('scroll-arrows')) { 4898 $this.dataSM('scroll-arrows').remove(); 4899 } 4900 $this.css({ zIndex: '', top: '', left: '', marginLeft: '', marginTop: '', display: '' }); 4901 } 4902 if (($this.attr('id') || '').indexOf(self.accessIdPrefix) == 0) { 4903 $this.removeAttr('id'); 4904 } 4905 }) 4906 .removeDataSM('in-mega') 4907 .removeDataSM('shown-before') 4908 .removeDataSM('scroll-arrows') 4909 .removeDataSM('parent-a') 4910 .removeDataSM('level') 4911 .removeDataSM('beforefirstshowfired') 4912 .removeAttr('role') 4913 .removeAttr('aria-hidden') 4914 .removeAttr('aria-labelledby') 4915 .removeAttr('aria-expanded'); 4916 this.$root.find('a.has-submenu').each(function() { 4917 var $this = $(this); 4918 if ($this.attr('id').indexOf(self.accessIdPrefix) == 0) { 4919 $this.removeAttr('id'); 4920 } 4921 }) 4922 .removeClass('has-submenu') 4923 .removeDataSM('sub') 4924 .removeAttr('aria-haspopup') 4925 .removeAttr('aria-controls') 4926 .removeAttr('aria-expanded') 4927 .closest('li').removeDataSM('sub'); 4928 if (this.opts.subIndicators) { 4929 this.$root.find('span.sub-arrow').remove(); 4930 } 4931 if (this.opts.markCurrentItem) { 4932 this.$root.find('a.current').removeClass('current'); 4933 } 4934 if (!refresh) { 4935 this.$root = null; 4936 this.$firstLink = null; 4937 this.$firstSub = null; 4938 if (this.$disableOverlay) { 4939 this.$disableOverlay.remove(); 4940 this.$disableOverlay = null; 4941 } 4942 menuTrees.splice($.inArray(this, menuTrees), 1); 4943 } 4944 }, 4945 disable: function(noOverlay) { 4946 if (!this.disabled) { 4947 this.menuHideAll(); 4948 // display overlay over the menu to prevent interaction 4949 if (!noOverlay && !this.opts.isPopup && this.$root.is(':visible')) { 4950 var pos = this.$root.offset(); 4951 this.$disableOverlay = $('<div class="sm-jquery-disable-overlay"/>').css({ 4952 position: 'absolute', 4953 top: pos.top, 4954 left: pos.left, 4955 width: this.$root.outerWidth(), 4956 height: this.$root.outerHeight(), 4957 zIndex: this.getStartZIndex(true), 4958 opacity: 0 4959 }).appendTo(document.body); 4960 } 4961 this.disabled = true; 4962 } 4963 }, 4964 docClick: function(e) { 4965 if (this.$touchScrollingSub) { 4966 this.$touchScrollingSub = null; 4967 return; 4968 } 4969 // hide on any click outside the menu or on a menu link 4970 if (this.visibleSubMenus.length && !$.contains(this.$root[0], e.target) || $(e.target).closest('a').length) { 4971 this.menuHideAll(); 4972 } 4973 }, 4974 docTouchEnd: function(e) { 4975 if (!this.lastTouch) { 4976 return; 4977 } 4978 if (this.visibleSubMenus.length && (this.lastTouch.x2 === undefined || this.lastTouch.x1 == this.lastTouch.x2) && (this.lastTouch.y2 === undefined || this.lastTouch.y1 == this.lastTouch.y2) && (!this.lastTouch.target || !$.contains(this.$root[0], this.lastTouch.target))) { 4979 if (this.hideTimeout) { 4980 clearTimeout(this.hideTimeout); 4981 this.hideTimeout = 0; 4982 } 4983 // hide with a delay to prevent triggering accidental unwanted click on some page element 4984 var self = this; 4985 this.hideTimeout = setTimeout(function() { self.menuHideAll(); }, 350); 4986 } 4987 this.lastTouch = null; 4988 }, 4989 docTouchMove: function(e) { 4990 if (!this.lastTouch) { 4991 return; 4992 } 4993 var touchPoint = e.originalEvent.touches[0]; 4994 this.lastTouch.x2 = touchPoint.pageX; 4995 this.lastTouch.y2 = touchPoint.pageY; 4996 }, 4997 docTouchStart: function(e) { 4998 var touchPoint = e.originalEvent.touches[0]; 4999 this.lastTouch = { x1: touchPoint.pageX, y1: touchPoint.pageY, target: touchPoint.target }; 5000 }, 5001 enable: function() { 5002 if (this.disabled) { 5003 if (this.$disableOverlay) { 5004 this.$disableOverlay.remove(); 5005 this.$disableOverlay = null; 5006 } 5007 this.disabled = false; 5008 } 5009 }, 5010 getClosestMenu: function(elm) { 5011 var $closestMenu = $(elm).closest('ul'); 5012 while ($closestMenu.dataSM('in-mega')) { 5013 $closestMenu = $closestMenu.parent().closest('ul'); 5014 } 5015 return $closestMenu[0] || null; 5016 }, 5017 getHeight: function($elm) { 5018 return this.getOffset($elm, true); 5019 }, 5020 // returns precise width/height float values 5021 getOffset: function($elm, height) { 5022 var old; 5023 if ($elm.css('display') == 'none') { 5024 old = { position: $elm[0].style.position, visibility: $elm[0].style.visibility }; 5025 $elm.css({ position: 'absolute', visibility: 'hidden' }).show(); 5026 } 5027 var box = $elm[0].getBoundingClientRect && $elm[0].getBoundingClientRect(), 5028 val = box && (height ? box.height || box.bottom - box.top : box.width || box.right - box.left); 5029 if (!val && val !== 0) { 5030 val = height ? $elm[0].offsetHeight : $elm[0].offsetWidth; 5031 } 5032 if (old) { 5033 $elm.hide().css(old); 5034 } 5035 return val; 5036 }, 5037 getStartZIndex: function(root) { 5038 var zIndex = parseInt(this[root ? '$root' : '$firstSub'].css('z-index')); 5039 if (!root && isNaN(zIndex)) { 5040 zIndex = parseInt(this.$root.css('z-index')); 5041 } 5042 return !isNaN(zIndex) ? zIndex : 1; 5043 }, 5044 getTouchPoint: function(e) { 5045 return e.touches && e.touches[0] || e.changedTouches && e.changedTouches[0] || e; 5046 }, 5047 getViewport: function(height) { 5048 var name = height ? 'Height' : 'Width', 5049 val = document.documentElement['client' + name], 5050 val2 = window['inner' + name]; 5051 if (val2) { 5052 val = Math.min(val, val2); 5053 } 5054 return val; 5055 },
5056 getViewportHeight: function() { 5057 return this.getViewport(true); 5058 }, 5059 getViewportWidth: function() { 5060 return this.getViewport(); 5061 }, 5062 getWidth: function($elm) { 5063 return this.getOffset($elm); 5064 }, 5065 handleEvents: function() { 5066 return !this.disabled && this.isCSSOn(); 5067 }, 5068 handleItemEvents: function($a) { 5069 return this.handleEvents() && !this.isLinkInMegaMenu($a); 5070 }, 5071 isCollapsible: function() { 5072 return this.$firstSub.css('position') == 'static'; 5073 }, 5074 isCSSOn: function() { 5075 return this.$firstLink.css('display') != 'inline'; 5076 }, 5077 isFixed: function() { 5078 var isFixed = this.$root.css('position') == 'fixed'; 5079 if (!isFixed) { 5080 this.$root.parentsUntil('body').each(function() { 5081 if ($(this).css('position') == 'fixed') { 5082 isFixed = true; 5083 return false; 5084 } 5085 }); 5086 } 5087 return isFixed; 5088 }, 5089 isLinkInMegaMenu: function($a) { 5090 return $(this.getClosestMenu($a[0])).hasClass('mega-menu'); 5091 }, 5092 isTouchMode: function() { 5093 return !mouse || this.opts.noMouseOver || this.isCollapsible(); 5094 }, 5095 itemActivate: function($a, hideDeeperSubs) { 5096 var $ul = $a.closest('ul'), 5097 level = $ul.dataSM('level'); 5098 // if for some reason the parent item is not activated (e.g. this is an API call to activate the item), activate all parent items first 5099 if (level > 1 && (!this.activatedItems[level - 2] || this.activatedItems[level - 2][0] != $ul.dataSM('parent-a')[0])) { 5100 var self = this; 5101 $($ul.parentsUntil('[data-smartmenus-id]', 'ul').get().reverse()).add($ul).each(function() { 5102 self.itemActivate($(this).dataSM('parent-a')); 5103 }); 5104 } 5105 // hide any visible deeper level sub menus 5106 if (!this.isCollapsible() || hideDeeperSubs) { 5107 this.menuHideSubMenus(!this.activatedItems[level - 1] || this.activatedItems[level - 1][0] != $a[0] ? level - 1 : level); 5108 } 5109 // save new active item for this level 5110 this.activatedItems[level - 1] = $a; 5111 if (this.$root.triggerHandler('activate.smapi', $a[0]) === false) { 5112 return; 5113 } 5114 // show the sub menu if this item has one 5115 var $sub = $a.dataSM('sub'); 5116 if ($sub && (this.isTouchMode() || (!this.opts.showOnClick || this.clickActivated))) { 5117 this.menuShow($sub); 5118 } 5119 }, 5120 itemBlur: function(e) { 5121 var $a = $(e.currentTarget); 5122 if (!this.handleItemEvents($a)) { 5123 return; 5124 } 5125 this.$root.triggerHandler('blur.smapi', $a[0]); 5126 }, 5127 itemClick: function(e) { 5128 var $a = $(e.currentTarget); 5129 if (!this.handleItemEvents($a)) { 5130 return; 5131 } 5132 if (this.$touchScrollingSub && this.$touchScrollingSub[0] == $a.closest('ul')[0]) { 5133 this.$touchScrollingSub = null; 5134 e.stopPropagation(); 5135 return false; 5136 } 5137 if (this.$root.triggerHandler('click.smapi', $a[0]) === false) { 5138 return false; 5139 } 5140 var subArrowClicked = $(e.target).is('.sub-arrow'), 5141 $sub = $a.dataSM('sub'), 5142 firstLevelSub = $sub ? $sub.dataSM('level') == 2 : false, 5143 collapsible = this.isCollapsible(), 5144 behaviorToggle = /toggle$/.test(this.opts.collapsibleBehavior), 5145 behaviorLink = /link$/.test(this.opts.collapsibleBehavior), 5146 behaviorAccordion = /^accordion/.test(this.opts.collapsibleBehavior); 5147 // if the sub is hidden, try to show it 5148 if ($sub && !$sub.is(':visible')) { 5149 if (!behaviorLink || !collapsible || subArrowClicked) { 5150 if (this.opts.showOnClick && firstLevelSub) { 5151 this.clickActivated = true; 5152 } 5153 // try to activate the item and show the sub 5154 this.itemActivate($a, behaviorAccordion); 5155 // if "itemActivate" showed the sub, prevent the click so that the link is not loaded 5156 // if it couldn't show it, then the sub menus are disabled with an !important declaration (e.g. via mobile styles) so let the link get loaded 5157 if ($sub.is(':visible')) { 5158 this.focusActivated = true; 5159 return false; 5160 } 5161 } 5162 // if the sub is visible and we are in collapsible mode 5163 } else if (collapsible && (behaviorToggle || subArrowClicked)) { 5164 this.itemActivate($a, behaviorAccordion); 5165 this.menuHide($sub); 5166 if (behaviorToggle) { 5167 this.focusActivated = true; 5168 } 5169 return false; 5170 } 5171 if (this.opts.showOnClick && firstLevelSub || $a.hasClass('disabled') || this.$root.triggerHandler('select.smapi', $a[0]) === false) { 5172 return false; 5173 } 5174 }, 5175 itemDown: function(e) { 5176 var $a = $(e.currentTarget); 5177 if (!this.handleItemEvents($a)) { 5178 return; 5179 } 5180 $a.dataSM('mousedown', true); 5181 }, 5182 itemEnter: function(e) { 5183 var $a = $(e.currentTarget); 5184 if (!this.handleItemEvents($a)) { 5185 return; 5186 } 5187 if (!this.isTouchMode()) { 5188 if (this.showTimeout) { 5189 clearTimeout(this.showTimeout); 5190 this.showTimeout = 0; 5191 } 5192 var self = this; 5193 this.showTimeout = setTimeout(function() { self.itemActivate($a); }, this.opts.showOnClick && $a.closest('ul').dataSM('level') == 1 ? 1 : this.opts.showTimeout); 5194 } 5195 this.$root.triggerHandler('mouseenter.smapi', $a[0]); 5196 }, 5197 itemFocus: function(e) { 5198 var $a = $(e.currentTarget); 5199 if (!this.handleItemEvents($a)) { 5200 return; 5201 } 5202 // fix (the mousedown check): in some browsers a tap/click produces consecutive focus + click events so we don't need to activate the item on focus 5203 if (this.focusActivated && (!this.isTouchMode() || !$a.dataSM('mousedown')) && (!this.activatedItems.length || this.activatedItems[this.activatedItems.length - 1][0] != $a[0])) { 5204 this.itemActivate($a, true); 5205 } 5206 this.$root.triggerHandler('focus.smapi', $a[0]); 5207 }, 5208 itemLeave: function(e) { 5209 var $a = $(e.currentTarget); 5210 if (!this.handleItemEvents($a)) { 5211 return; 5212 } 5213 if (!this.isTouchMode()) { 5214 $a[0].blur(); 5215 if (this.showTimeout) { 5216 clearTimeout(this.showTimeout); 5217 this.showTimeout = 0; 5218 } 5219 } 5220 $a.removeDataSM('mousedown');
5221 this.$root.triggerHandler('mouseleave.smapi', $a[0]); 5222 }, 5223 menuHide: function($sub) { 5224 if (this.$root.triggerHandler('beforehide.smapi', $sub[0]) === false) { 5225 return; 5226 } 5227 if (canAnimate) { 5228 $sub.stop(true, true); 5229 } 5230 if ($sub.css('display') != 'none') { 5231 var complete = function() { 5232 // unset z-index 5233 $sub.css('z-index', ''); 5234 }; 5235 // if sub is collapsible (mobile view) 5236 if (this.isCollapsible()) { 5237 if (canAnimate && this.opts.collapsibleHideFunction) { 5238 this.opts.collapsibleHideFunction.call(this, $sub, complete); 5239 } else { 5240 $sub.hide(this.opts.collapsibleHideDuration, complete); 5241 } 5242 } else { 5243 if (canAnimate && this.opts.hideFunction) { 5244 this.opts.hideFunction.call(this, $sub, complete); 5245 } else { 5246 $sub.hide(this.opts.hideDuration, complete); 5247 } 5248 } 5249 // deactivate scrolling if it is activated for this sub 5250 if ($sub.dataSM('scroll')) { 5251 this.menuScrollStop($sub); 5252 $sub.css({ 'touch-action': '', '-ms-touch-action': '', '-webkit-transform': '', transform: '' }) 5253 .off('.smartmenus_scroll').removeDataSM('scroll').dataSM('scroll-arrows').hide(); 5254 } 5255 // unhighlight parent item + accessibility 5256 $sub.dataSM('parent-a').removeClass('highlighted').attr('aria-expanded', 'false'); 5257 $sub.attr({ 5258 'aria-expanded': 'false', 5259 'aria-hidden': 'true' 5260 }); 5261 var level = $sub.dataSM('level'); 5262 this.activatedItems.splice(level - 1, 1); 5263 this.visibleSubMenus.splice($.inArray($sub, this.visibleSubMenus), 1); 5264 this.$root.triggerHandler('hide.smapi', $sub[0]); 5265 } 5266 }, 5267 menuHideAll: function() { 5268 if (this.showTimeout) { 5269 clearTimeout(this.showTimeout); 5270 this.showTimeout = 0; 5271 } 5272 // hide all subs 5273 // if it's a popup, this.visibleSubMenus[0] is the root UL 5274 var level = this.opts.isPopup ? 1 : 0; 5275 for (var i = this.visibleSubMenus.length - 1; i >= level; i--) { 5276 this.menuHide(this.visibleSubMenus[i]); 5277 } 5278 // hide root if it's popup 5279 if (this.opts.isPopup) { 5280 if (canAnimate) { 5281 this.$root.stop(true, true); 5282 } 5283 if (this.$root.is(':visible')) { 5284 if (canAnimate && this.opts.hideFunction) { 5285 this.opts.hideFunction.call(this, this.$root); 5286 } else { 5287 this.$root.hide(this.opts.hideDuration); 5288 } 5289 } 5290 } 5291 this.activatedItems = []; 5292 this.visibleSubMenus = []; 5293 this.clickActivated = true; 5294 this.focusActivated = true; 5295 // reset z-index increment 5296 this.zIndexInc = 0; 5297 this.$root.triggerHandler('hideAll.smapi'); 5298 }, 5299 menuHideSubMenus: function(level) { 5300 for (var i = this.activatedItems.length - 1; i >= level; i--) { 5301 var $sub = this.activatedItems[i].dataSM('sub'); 5302 if ($sub) { 5303 this.menuHide($sub); 5304 } 5305 } 5306 }, 5307 menuInit: function($ul) { 5308 if (!$ul.dataSM('in-mega')) { 5309 // mark UL's in mega drop downs (if any) so we can neglect them 5310 if ($ul.hasClass('mega-menu')) { 5311 $ul.find('ul').dataSM('in-mega', true); 5312 } 5313 // get level (much faster than, for example, using parentsUntil) 5314 var level = 2, 5315 par = $ul[0]; 5316 while ((par = par.parentNode.parentNode) != this.$root[0]) { 5317 level++; 5318 } 5319 // cache stuff for quick access 5320 var $a = $ul.prevAll('a').eq(-1); 5321 // if the link is nested (e.g. in a heading) 5322 if (!$a.length) { 5323 $a = $ul.prevAll().find('a').eq(-1); 5324 } 5325 $a.addClass('has-submenu').dataSM('sub', $ul); 5326 $ul.dataSM('parent-a', $a) 5327 .dataSM('level', level) 5328 .parent().dataSM('sub', $ul); 5329 // accessibility 5330 var aId = $a.attr('id') || this.accessIdPrefix + (++this.idInc), 5331 ulId = $ul.attr('id') || this.accessIdPrefix + (++this.idInc); 5332 $a.attr({ 5333 id: aId, 5334 'aria-haspopup': 'true', 5335 'aria-controls': ulId, 5336 'aria-expanded': 'false' 5337 }); 5338 $ul.attr({ 5339 id: ulId, 5340 'role': 'group', 5341 'aria-hidden': 'true', 5342 'aria-labelledby': aId, 5343 'aria-expanded': 'false' 5344 });
5345 // add sub indicator to parent item 5346 if (this.opts.subIndicators) { 5347 $a[this.opts.subIndicatorsPos](this.$subArrow.clone()); 5348 } 5349 } 5350 }, 5351 menuPosition: function($sub) { 5352 var $a = $sub.dataSM('parent-a'), 5353 $li = $a.closest('li'), 5354 $ul = $li.parent(), 5355 level = $sub.dataSM('level'), 5356 subW = this.getWidth($sub), 5357 subH = this.getHeight($sub), 5358 itemOffset = $a.offset(), 5359 itemX = itemOffset.left, 5360 itemY = itemOffset.top, 5361 itemW = this.getWidth($a), 5362 itemH = this.getHeight($a), 5363 $win = $(window), 5364 winX = $win.scrollLeft(), 5365 winY = $win.scrollTop(), 5366 winW = this.getViewportWidth(), 5367 winH = this.getViewportHeight(), 5368 horizontalParent = $ul.parent().is('[data-sm-horizontal-sub]') || level == 2 && !$ul.hasClass('sm-vertical'), 5369 rightToLeft = this.opts.rightToLeftSubMenus && !$li.is('[data-sm-reverse]') || !this.opts.rightToLeftSubMenus && $li.is('[data-sm-reverse]'), 5370 subOffsetX = level == 2 ? this.opts.mainMenuSubOffsetX : this.opts.subMenusSubOffsetX, 5371 subOffsetY = level == 2 ? this.opts.mainMenuSubOffsetY : this.opts.subMenusSubOffsetY, 5372 x, y; 5373 if (horizontalParent) { 5374 x = rightToLeft ? itemW - subW - subOffsetX : subOffsetX; 5375 y = this.opts.bottomToTopSubMenus ? -subH - subOffsetY : itemH + subOffsetY; 5376 } else { 5377 x = rightToLeft ? subOffsetX - subW : itemW - subOffsetX; 5378 y = this.opts.bottomToTopSubMenus ? itemH - subOffsetY - subH : subOffsetY; 5379 } 5380 if (this.opts.keepInViewport) { 5381 var absX = itemX + x, 5382 absY = itemY + y; 5383 if (rightToLeft && absX < winX) { 5384 x = horizontalParent ? winX - absX + x : itemW - subOffsetX; 5385 } else if (!rightToLeft && absX + subW > winX + winW) { 5386 x = horizontalParent ? winX + winW - subW - absX + x : subOffsetX - subW; 5387 } 5388 if (!horizontalParent) { 5389 if (subH < winH && absY + subH > winY + winH) { 5390 y += winY + winH - subH - absY; 5391 } else if (subH >= winH || absY < winY) { 5392 y += winY - absY; 5393 } 5394 } 5395 // do we need scrolling? 5396 // 0.49 used for better precision when dealing with float values 5397 if (horizontalParent && (absY + subH > winY + winH + 0.49 || absY < winY) || !horizontalParent && subH > winH + 0.49) { 5398 var self = this; 5399 if (!$sub.dataSM('scroll-arrows')) { 5400 $sub.dataSM('scroll-arrows', $([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0], $('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]) 5401 .on({ 5402 mouseenter: function() { 5403 $sub.dataSM('scroll').up = $(this).hasClass('scroll-up'); 5404 self.menuScroll($sub); 5405 }, 5406 mouseleave: function(e) { 5407 self.menuScrollStop($sub); 5408 self.menuScrollOut($sub, e); 5409 }, 5410 'mousewheel DOMMouseScroll': function(e) { e.preventDefault(); } 5411 }) 5412 .insertAfter($sub) 5413 ); 5414 } 5415 // bind scroll events and save scroll data for this sub 5416 var eNS = '.smartmenus_scroll'; 5417 $sub.dataSM('scroll', { 5418 y: this.cssTransforms3d ? 0 : y - itemH, 5419 step: 1, 5420 // cache stuff for faster recalcs later 5421 itemH: itemH, 5422 subH: subH, 5423 arrowDownH: this.getHeight($sub.dataSM('scroll-arrows').eq(1)) 5424 }) 5425 .on(getEventsNS({ 5426 'mouseover': function(e) { self.menuScrollOver($sub, e); }, 5427 'mouseout': function(e) { self.menuScrollOut($sub, e); }, 5428 'mousewheel DOMMouseScroll': function(e) { self.menuScrollMousewheel($sub, e); } 5429 }, eNS)) 5430 .dataSM('scroll-arrows').css({ top: 'auto', left: '0', marginLeft: x + (parseInt($sub.css('border-left-width')) || 0), width: subW - (parseInt($sub.css('border-left-width')) || 0) - (parseInt($sub.css('border-right-width')) || 0), zIndex: $sub.css('z-index') }) 5431 .eq(horizontalParent && this.opts.bottomToTopSubMenus ? 0 : 1).show(); 5432 // when a menu tree is fixed positioned we allow scrolling via touch too 5433 // since there is no other way to access such long sub menus if no mouse is present 5434 if (this.isFixed()) { 5435 var events = {}; 5436 events[touchEvents ? 'touchstart touchmove touchend' : 'pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp'] = function(e) { 5437 self.menuScrollTouch($sub, e); 5438 }; 5439 $sub.css({ 'touch-action': 'none', '-ms-touch-action': 'none' }).on(getEventsNS(events, eNS)); 5440 } 5441 } 5442 } 5443 $sub.css({ top: 'auto', left: '0', marginLeft: x, marginTop: y - itemH }); 5444 }, 5445 menuScroll: function($sub, once, step) { 5446 var data = $sub.dataSM('scroll'), 5447 $arrows = $sub.dataSM('scroll-arrows'), 5448 end = data.up ? data.upEnd : data.downEnd, 5449 diff; 5450 if (!once && data.momentum) { 5451 data.momentum *= 0.92; 5452 diff = data.momentum; 5453 if (diff < 0.5) { 5454 this.menuScrollStop($sub); 5455 return; 5456 } 5457 } else { 5458 diff = step || (once || !this.opts.scrollAccelerate ? this.opts.scrollStep : Math.floor(data.step)); 5459 } 5460 // hide any visible deeper level sub menus 5461 var level = $sub.dataSM('level'); 5462 if (this.activatedItems[level - 1] && this.activatedItems[level - 1].dataSM('sub') && this.activatedItems[level - 1].dataSM('sub').is(':visible')) {
5463 this.menuHideSubMenus(level - 1); 5464 } 5465 data.y = data.up && end <= data.y || !data.up && end >= data.y ? data.y : (Math.abs(end - data.y) > diff ? data.y + (data.up ? diff : -diff) : end); 5466 $sub.css(this.cssTransforms3d ? { '-webkit-transform': 'translate3d(0, ' + data.y + 'px, 0)', transform: 'translate3d(0, ' + data.y + 'px, 0)' } : { marginTop: data.y }); 5467 // show opposite arrow if appropriate 5468 if (mouse && (data.up && data.y > data.downEnd || !data.up && data.y < data.upEnd)) { 5469 $arrows.eq(data.up ? 1 : 0).show(); 5470 } 5471 // if we've reached the end 5472 if (data.y == end) { 5473 if (mouse) { 5474 $arrows.eq(data.up ? 0 : 1).hide(); 5475 } 5476 this.menuScrollStop($sub); 5477 } else if (!once) { 5478 if (this.opts.scrollAccelerate && data.step < this.opts.scrollStep) { 5479 data.step += 0.2; 5480 } 5481 var self = this; 5482 this.scrollTimeout = requestAnimationFrame(function() { self.menuScroll($sub); }); 5483 } 5484 }, 5485 menuScrollMousewheel: function($sub, e) { 5486 if (this.getClosestMenu(e.target) == $sub[0]) { 5487 e = e.originalEvent; 5488 var up = (e.wheelDelta || -e.detail) > 0; 5489 if ($sub.dataSM('scroll-arrows').eq(up ? 0 : 1).is(':visible')) { 5490 $sub.dataSM('scroll').up = up; 5491 this.menuScroll($sub, true); 5492 } 5493 } 5494 e.preventDefault(); 5495 }, 5496 menuScrollOut: function($sub, e) { 5497 if (mouse) { 5498 if (!/^scroll-(up|down)/.test((e.relatedTarget || '').className) && ($sub[0] != e.relatedTarget && !$.contains($sub[0], e.relatedTarget) || this.getClosestMenu(e.relatedTarget) != $sub[0])) { 5499 $sub.dataSM('scroll-arrows').css('visibility', 'hidden'); 5500 } 5501 } 5502 }, 5503 menuScrollOver: function($sub, e) { 5504 if (mouse) { 5505 if (!/^scroll-(up|down)/.test(e.target.className) && this.getClosestMenu(e.target) == $sub[0]) { 5506 this.menuScrollRefreshData($sub); 5507 var data = $sub.dataSM('scroll'), 5508 upEnd = $(window).scrollTop() - $sub.dataSM('parent-a').offset().top - data.itemH; 5509 $sub.dataSM('scroll-arrows').eq(0).css('margin-top', upEnd).end() 5510 .eq(1).css('margin-top', upEnd + this.getViewportHeight() - data.arrowDownH).end() 5511 .css('visibility', 'visible'); 5512 } 5513 } 5514 }, 5515 menuScrollRefreshData: function($sub) { 5516 var data = $sub.dataSM('scroll'), 5517 upEnd = $(window).scrollTop() - $sub.dataSM('parent-a').offset().top - data.itemH; 5518 if (this.cssTransforms3d) { 5519 upEnd = -(parseFloat($sub.css('margin-top')) - upEnd); 5520 } 5521 $.extend(data, { 5522 upEnd: upEnd, 5523 downEnd: upEnd + this.getViewportHeight() - data.subH 5524 }); 5525 }, 5526 menuScrollStop: function($sub) { 5527 if (this.scrollTimeout) { 5528 cancelAnimationFrame(this.scrollTimeout); 5529 this.scrollTimeout = 0; 5530 $sub.dataSM('scroll').step = 1; 5531 return true; 5532 } 5533 }, 5534 menuScrollTouch: function($sub, e) { 5535 e = e.originalEvent; 5536 if (isTouchEvent(e)) { 5537 var touchPoint = this.getTouchPoint(e); 5538 // neglect event if we touched a visible deeper level sub menu 5539 if (this.getClosestMenu(touchPoint.target) == $sub[0]) { 5540 var data = $sub.dataSM('scroll'); 5541 if (/(start|down)$/i.test(e.type)) { 5542 if (this.menuScrollStop($sub)) { 5543 // if we were scrolling, just stop and don't activate any link on the first touch 5544 e.preventDefault(); 5545 this.$touchScrollingSub = $sub; 5546 } else { 5547 this.$touchScrollingSub = null; 5548 } 5549 // update scroll data since the user might have zoomed, etc. 5550 this.menuScrollRefreshData($sub); 5551 // extend it with the touch properties 5552 $.extend(data, { 5553 touchStartY: touchPoint.pageY, 5554 touchStartTime: e.timeStamp 5555 }); 5556 } else if (/move$/i.test(e.type)) { 5557 var prevY = data.touchY !== undefined ? data.touchY : data.touchStartY; 5558 if (prevY !== undefined && prevY != touchPoint.pageY) { 5559 this.$touchScrollingSub = $sub; 5560 var up = prevY < touchPoint.pageY; 5561 // changed direction? reset... 5562 if (data.up !== undefined && data.up != up) { 5563 $.extend(data, { 5564 touchStartY: touchPoint.pageY, 5565 touchStartTime: e.timeStamp 5566 });
5567 } 5568 $.extend(data, { 5569 up: up, 5570 touchY: touchPoint.pageY 5571 }); 5572 this.menuScroll($sub, true, Math.abs(touchPoint.pageY - prevY)); 5573 } 5574 e.preventDefault(); 5575 } else { // touchend/pointerup 5576 if (data.touchY !== undefined) { 5577 if (data.momentum = Math.pow(Math.abs(touchPoint.pageY - data.touchStartY) / (e.timeStamp - data.touchStartTime), 2) * 15) { 5578 this.menuScrollStop($sub); 5579 this.menuScroll($sub); 5580 e.preventDefault(); 5581 } 5582 delete data.touchY; 5583 } 5584 } 5585 } 5586 } 5587 }, 5588 menuShow: function($sub) { 5589 if (!$sub.dataSM('beforefirstshowfired')) { 5590 $sub.dataSM('beforefirstshowfired', true); 5591 if (this.$root.triggerHandler('beforefirstshow.smapi', $sub[0]) === false) { 5592 return; 5593 } 5594 } 5595 if (this.$root.triggerHandler('beforeshow.smapi', $sub[0]) === false) { 5596 return; 5597 } 5598 $sub.dataSM('shown-before', true); 5599 if (canAnimate) { 5600 $sub.stop(true, true); 5601 } 5602 if (!$sub.is(':visible')) { 5603 // highlight parent item 5604 var $a = $sub.dataSM('parent-a'), 5605 collapsible = this.isCollapsible(); 5606 if (this.opts.keepHighlighted || collapsible) { 5607 $a.addClass('highlighted'); 5608 } 5609 if (collapsible) { 5610 $sub.removeClass('sm-nowrap').css({ zIndex: '', width: 'auto', minWidth: '', maxWidth: '', top: '', left: '', marginLeft: '', marginTop: '' }); 5611 } else { 5612 // set z-index 5613 $sub.css('z-index', this.zIndexInc = (this.zIndexInc || this.get
5613StartZIndex()) + 1); 5614 // min/max-width fix - no way to rely purely on CSS as all UL's are nested 5615 if (this.opts.subMenusMinWidth || this.opts.subMenusMaxWidth) { 5616 $sub.css({ width: 'auto', minWidth: '', maxWidth: '' }).addClass('sm-nowrap'); 5617 if (this.opts.subMenusMinWidth) { 5618 $sub.css('min-width', this.opts.subMenusMinWidth); 5619 } 5620 if (this.opts.subMenusMaxWidth) { 5621 var noMaxWidth = this.getWidth($sub); 5622 $sub.css('max-width', this.opts.subMenusMaxWidth); 5623 if (noMaxWidth > this.getWidth($sub)) { 5624 $sub.removeClass('sm-nowrap').css('width', this.opts.subMenusMaxWidth); 5625 } 5626 } 5627 } 5628 this.menuPosition($sub); 5629 } 5630 var complete = function() { 5631 // fix: "overflow: hidden;" is not reset on animation complete in jQuery < 1.9.0 in Chrome when global "box-sizing: border-box;" is used 5632 $sub.css('overflow', ''); 5633 }; 5634 // if sub is collapsible (mobile view) 5635 if (collapsible) { 5636 if (canAnimate && this.opts.collapsibleShowFunction) { 5637 this.opts.collapsibleShowFunction.call(this, $sub, complete); 5638 } else { 5639 $sub.show(this.opts.collapsibleShowDuration, complete); 5640 } 5641 } else { 5642 if (canAnimate && this.opts.showFunction) { 5643 this.opts.showFunction.call(this, $sub, complete); 5644 } else { 5645 $sub.show(this.opts.showDuration, complete); 5646 } 5647 } 5648 // accessibility 5649 $a.attr('aria-expanded', 'true'); 5650 $sub.attr({ 5651 'aria-expanded': 'true', 5652 'aria-hidden': 'false' 5653 }); 5654 // store sub menu in visible array 5655 this.visibleSubMenus.push($sub); 5656 this.$root.triggerHandler('show.smapi', $sub[0]); 5657 } 5658 }, 5659 popupHide: function(noHideTimeout) { 5660 if (this.hideTimeout) { 5661 clearTimeout(this.hideTimeout); 5662 this.hideTimeout = 0; 5663 } 5664 var self = this; 5665 this.hideTimeout = setTimeout(function() { 5666 self.menuHideAll(); 5667 }, noHideTimeout ? 1 : this.opts.hideTimeout); 5668 }, 5669 popupShow: function(left, top) { 5670 if (!this.opts.isPopup) { 5671 alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'); 5672 return; 5673 } 5674 if (this.hideTimeout) { 5675 clearTimeout(this.hideTimeout); 5676 this.hideTimeout = 0; 5677 } 5678 this.$root.dataSM('shown-before', true); 5679 if (canAnimate) { 5680 this.$root.stop(true, true); 5681 } 5682 if (!this.$root.is(':visible')) { 5683 this.$root.css({ left: left, top: top }); 5684 // show menu 5685 var self = this, 5686 complete = function() { 5687 self.$root.css('overflow', ''); 5688 }; 5689 if (canAnimate && this.opts.showFunction) { 5690 this.opts.showFunction.call(this, this.$root, complete); 5691 } else { 5692 this.$root.show(this.opts.showDuration, complete); 5693 } 5694 this.visibleSubMenus[0] = this.$root; 5695 } 5696 }, 5697 refresh: function() { 5698 this.destroy(true); 5699 this.init(true); 5700 }, 5701 rootKeyDown: function(e) { 5702 if (!this.handleEvents()) { 5703 return; 5704 } 5705 switch (e.keyCode) { 5706 case 27: // reset on Esc 5707 var $activeTopItem = this.activatedItems[0]; 5708 if ($activeTopItem) { 5709 this.menuHideAll(); 5710 $activeTopItem[0].focus(); 5711 var $sub = $activeTopItem.dataSM('sub'); 5712 if ($sub) { 5713 this.menuHide($sub); 5714 } 5715 } 5716 break; 5717 case 32: // activate item's sub on Space 5718 var $target = $(e.target); 5719 if ($target.is('a') && this.handleItemEvents($target)) { 5720 var $sub = $target.dataSM('sub'); 5721 if ($sub && !$sub.is(':visible')) { 5722 this.itemClick({ currentTarget: e.target }); 5723 e.preventDefault(); 5724 } 5725 } 5726 break; 5727 } 5728 }, 5729 rootOut: function(e) { 5730 if (!this.handleEvents() || this.isTouchMode() || e.target == this.$root[0]) { 5731 return; 5732 } 5733 if (this.hideTimeout) { 5734 clearTimeout(this.hideTimeout); 5735 this.hideTimeout = 0; 5736 } 5737 if (!this.opts.showOnClick || !this.opts.hideOnClick) { 5738 var self = this; 5739 this.hideTimeout = setTimeout(function() { self.menuHideAll(); }, this.opts.hideTimeout); 5740 } 5741 }, 5742 rootOver: function(e) { 5743 if (!this.handleEvents() || this.isTouchMode() || e.target == this.$root[0]) { 5744 return; 5745 } 5746 if (this.hideTimeout) { 5747 clearTimeout(this.hideTimeout); 5748 this.hideTimeout = 0; 5749 } 5750 }, 5751 winResize: function(e) { 5752 if (!this.handleEvents()) { 5753 // we still need to resize the disable overlay if it's visible 5754 if (this.$disableOverlay) { 5755 var pos = this.$root.offset(); 5756 this.$disableOverlay.css({ 5757 top: pos.top, 5758 left: pos.left, 5759 width: this.$root.outerWidth(), 5760 height: this.$root.outerHeight() 5761 });
5762 } 5763 return; 5764 } 5765 // hide sub menus on resize - on mobile do it only on orientation change 5766 if (!('onorientationchange' in window) || e.type == 'orientationchange') { 5767 var collapsible = this.isCollapsible(); 5768 // if it was collapsible before resize and still is, don't do it 5769 if (!(this.wasCollapsible && collapsible)) { 5770 if (this.activatedItems.length) { 5771 this.activatedItems[this.activatedItems.length - 1][0].blur(); 5772 } 5773 this.menuHideAll(); 5774 } 5775 this.wasCollapsible = collapsible; 5776 } 5777 } 5778 } 5779 }); 5780 5781 $.fn.dataSM = function(key, val) { 5782 if (val) { 5783 return this.data(key + '_smartmenus', val); 5784 } 5785 return this.data(key + '_smartmenus'); 5786 }; 5787 5788 $.fn.removeDataSM = function(key) { 5789 return this.removeData(key + '_smartmenus'); 5790 }; 5791 5792 $.fn.smartmenus = function(options) { 5793 if (typeof options == 'string') { 5794 var args = arguments, 5795 method = options; 5796 Array.prototype.shift.call(args); 5797 return this.each(function() { 5798 var smartmenus = $(this).data('smartmenus'); 5799 if (smartmenus && smartmenus[method]) { 5800 smartmenus[method].apply(smartmenus, args); 5801 } 5802 }); 5803 } 5804 return this.each(function() { 5805 // [data-sm-options] attribute on the root UL 5806 var dataOpts = $(this).data('sm-options') || null; 5807 if (dataOpts) { 5808 try { 5809 dataOpts = eval('(' + dataOpts + ')'); 5810 } catch(e) { 5811 dataOpts = null; 5812 alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.'); 5813 }; 5814 } 5815 new $.SmartMenus(this, $.extend({}, $.fn.smartmenus.defaults, options, dataOpts)); 5816 }); 5817 }; 5818 5819 // default settings 5820 $.fn.smartmenus.defaults = { 5821 isPopup: false, // is this a popup menu (can be shown via the popupShow/popupHide methods) or a permanent menu bar 5822 mainMenuSubOffsetX: 0, // pixels offset from default position 5823 mainMenuSubOffsetY: 0, // pixels offset from default position 5824 subMenusSubOffsetX: 0, // pixels offset from default position 5825 subMenusSubOffsetY: 0, // pixels offset from default position 5826 subMenusMinWidth: '10em', // min-width for the sub menus (any CSS unit) - if set, the fixed width set in CSS will be ignored 5827 subMenusMaxWidth: '20em', // max-width for the sub menus (any CSS unit) - if set, the fixed width set in CSS will be ignored 5828 subIndicators: true, // create sub menu indicators - creates a SPAN and inserts it in the A 5829 subIndicatorsPos: 'append', // position of the SPAN relative to the menu item content ('append', 'prepend') 5830 subIndicatorsText: '', // [optionally] add text in the SPAN (e.g. '+') (you may want to check the CSS for the sub indicators too) 5831 scrollStep: 30, // pixels step when scrolling long sub menus that do not fit in the viewport height 5832 scrollAccelerate: true, // accelerate scrolling or use a fixed step 5833 showTimeout: 250, // timeout before showing the sub menus 5834 hideTimeout: 500, // timeout before hiding the sub menus 5835 showDuration: 0, // duration for show animation - set to 0 for no animation - matters only if showFunction:null 5836 showFunction: null, // custom function to use when showing a sub menu (the default is the jQuery 'show') 5837 // don't forget to call complete() at the end of whatever you do 5838 // e.g.: function($ul, complete) { $ul.fadeIn(250, complete); } 5839 hideDuration: 0, // duration for hide animation - set to 0 for no animation - matters only if hideFunction:null 5840 hideFunction: function($ul, complete) { $ul.fadeOut(200, complete); }, // custom function to use when hiding a sub menu (the default is the jQuery 'hide') 5841 // don't forget to call complete() at the end of whatever you do 5842 // e.g.: function($ul, complete) { $ul.fadeOut(250, complete); } 5843 collapsibleShowDuration:0, // duration for show animation for collapsible sub menus - matters only if collapsibleShowFunction:null 5844 collapsibleShowFunction:function($ul, complete) { $ul.slideDown(200, complete); }, // custom function to use when showing a collapsible sub menu 5845 // (i.e. when mobile styles are used to make the sub menus collapsible) 5846 collapsibleHideDuration:0, // duration for hide animation for collapsible sub menus - matters only if c
5846ollapsibleHideFunction:null 5847 collapsibleHideFunction:function($ul, complete) { $ul.slideUp(200, complete); }, // custom function to use when hiding a collapsible sub menu 5848 // (i.e. when mobile styles are used to make the sub menus collapsible) 5849 showOnClick: false, // show the first-level sub menus onclick instead of onmouseover (i.e. mimic desktop app menus) (matters only for mouse input) 5850 hideOnClick: true, // hide the sub menus on click/tap anywhere on the page 5851 noMouseOver: false, // disable sub menus activation onmouseover (i.e. behave like in touch mode - use just mouse clicks) (matters only for mouse input) 5852 keepInViewport: true, // reposition the sub menus if needed to make sure they always appear inside the viewport 5853 keepHighlighted: true, // keep all ancestor items of the current sub menu highlighted (adds the 'highlighted' class to the A's) 5854 markCurrentItem: false, // automatically add the 'current' class to the A element of the item linking to the current URL 5855 markCurrentTree: true, // add the 'current' class also to the A elements of all ancestor items of the current item 5856 rightToLeftSubMenus: false, // right to left display of the sub menus (check the CSS for the sub indicators' position) 5857 bottomToTopSubMenus: false, // bottom to top display of the sub menus 5858 collapsibleBehavior: 'default' // parent items behavior in collapsible (mobile) view ('default', 'toggle', 'link', 'accordion', 'accordion-toggle', 'accordion-link') 5859 // 'default' - first tap on parent item expands sub, second tap loads its link 5860 // 'toggle' - the whole parent item acts just as a toggle button for its sub menu (expands/collapses on each tap) 5861 // 'link' - the parent item acts as a regular item (first tap loads its link), the sub menu can be expanded only via the +/- button 5862 // 'accordion' - like 'default' but on expand also resets any visible sub menus from deeper levels or other branches 5863 // 'accordion-toggle' - like 'toggle' but on expand also resets any visible sub menus from deeper levels or other branches 5864 // 'accordion-link' - like 'link' but on expand also resets any visible sub menus from deeper levels or other branches 5865 }; 5866 5867 return $; 5868})); 5869// source --> https://quinto-canal.com/wp-content/themes/newsup/js/jquery.smartmenus.bootstrap.js?ver=7.1.1 5870/*! 5871 * SmartMenus jQuery Plugin Bootstrap 4 Addon - v0.1.0 - September 17, 2017 5872 * http://www.smartmenus.org/ 5873 * 5874 * Copyright Vasil Dinkov, Vadikom Web Ltd. 5875 * http://vadikom.com 5876 * 5877 * Licensed MIT 5878 */ 5879 5880(function(factory) { 5881 if (typeof define === 'function' && define.amd) { 5882 // AMD 5883 define(['jquery', 'smartmenus'], factory); 5884 } else if (typeof module === 'object' && typeof module.exports === 'object') { 5885 // CommonJS 5886 module.exports = factory(require('jquery')); 5887 } else { 5888 // Global jQuery 5889 factory(jQuery); 5890 } 5891} (function($) { 5892 5893 $.extend($.SmartMenus.Bootstrap = {}, { 5894 keydownFix: false, 5895 init: function() { 5896 // init all navbars that don't have the "data-sm-skip" attribute set 5897 var $navbars = $('ul.navbar-nav:not([data-sm-skip])'); 5898 $navbars.each(function() { 5899 var $this = $(this), 5900 obj = $this.data('smartmenus'); 5901 // if this navbar is not initialized 5902 if (!obj) { 5903 var skipBehavior = $this.is('[data-sm-skip-collapsible-behavior]'), 5904 rightAligned = $this.hasClass('ml-auto') || $this.prevAll('.mr-auto').length > 0; 5905 5906 $this.smartmenus({ 5907 // these are some good default options that should work for all 5908 subMenusSubOffsetX: 2, 5909 subMenusSubOffsetY: -9, 5910 subIndicators: !skipBehavior, 5911 collapsibleShowFunction: null, 5912 collapsibleHideFunction: null, 5913 rightToLeftSubMenus: rightAligned, 5914 bottomToTopSubMenus: $this.closest('.fixed-bottom').length > 0, 5915 // custom option(s) for the Bootstrap 4 addon 5916 bootstrapHighlightClasses: 'text-dark bg-light' 5917 }) 5918 .on({ 5919 // set/unset proper Bootstrap classes for some menu elements 5920 'show.smapi': function(e, menu) { 5921 var $menu = $(menu), 5922 $scrollArrows = $menu.dataSM('scroll-arrows'); 5923 if ($scrollArrows) { 5924 $scrollArrows.css('background-color', $menu.css('background-color')); 5925 } 5926 $menu.parent().addClass('show'); 5927 if (obj.opts.keepHighlighted && $menu.dataSM('level') > 2) { 5928 $menu.prevAll('a').addClass(obj.opts.bootstrapHighlightClasses); 5929 } 5930 }, 5931 'hide.smapi': function(e, menu) { 5932 var $menu = $(menu); 5933 $menu.parent().removeClass('show'); 5934 if (obj.opts.keepHighlighted && $menu.dataSM('level') > 2) { 5935 $menu.prevAll('a').removeClass(obj.opts.bootstrapHighlightClasses); 5936 } 5937 } 5938 });
5939 5940 obj = $this.data('smartmenus'); 5941 5942 function onInit() { 5943 // set Bootstrap's "active" class to SmartMenus "current" items (should someone decide to enable markCurrentItem: true) 5944 $this.find('a.current').each(function() { 5945 var $this = $(this); 5946 // dropdown items require the class to be set to the A's while for nav items it should be set to the parent LI's 5947 ($this.hasClass('dropdown-item') ? $this : $this.parent()).addClass('active'); 5948 }); 5949 // parent items fixes 5950 $this.find('a.has-submenu').each(function() { 5951 var $this = $(this); 5952 // remove Bootstrap required attributes that might cause conflicting issues with the SmartMenus script 5953 if ($this.is('[data-toggle="dropdown"]')) { 5954 $this.dataSM('bs-data-toggle-dropdown', true).removeAttr('data-toggle'); 5955 } 5956 // remove Bootstrap's carets generating class 5957 if (!skipBehavior && $this.hasClass('dropdown-toggle')) { 5958 $this.dataSM('bs-dropdown-toggle', true).removeClass('dropdown-toggle'); 5959 } 5960 }); 5961 } 5962 5963 onInit(); 5964 5965 function onBeforeDestroy() { 5966 $this.find('a.current').each(function() { 5967 var $this = $(this); 5968 ($this.hasClass('active') ? $this : $this.parent()).removeClass('active'); 5969 }); 5970 $this.find('a.has-submenu').each(function() { 5971 var $this = $(this); 5972 if ($this.dataSM('bs-dropdown-toggle')) { 5973 $this.addClass('dropdown-toggle').removeDataSM('bs-dropdown-toggle'); 5974 } 5975 if ($this.dataSM('bs-data-toggle-dropdown')) { 5976 $this.attr('data-toggle', 'dropdown').removeDataSM('bs-data-toggle-dropdown'); 5977 } 5978 }); 5979 } 5980 5981 // custom "refresh" method for Bootstrap 5982 obj.refresh = function() { 5983 $.SmartMenus.prototype.refresh.call(this); 5984 onInit(); 5985 // update collapsible detection 5986 detectCollapsible(true); 5987 }; 5988 5989 // custom "destroy" method for Bootstrap 5990 obj.destroy = function(refresh) { 5991 onBeforeDestroy(); 5992 $.SmartMenus.prototype.destroy.call(this, refresh); 5993 }; 5994 5995 // keep Bootstrap's default behavior (i.e. use the whole item area just as a sub menu toggle) 5996 if (skipBehavior) { 5997 obj.opts.collapsibleBehavior = 'toggle'; 5998 } 5999 6000 // onresize detect when the navbar becomes collapsible and add it the "sm-collapsible" class 6001 var winW; 6002 function detectCollapsible(force) { 6003 var newW = obj.getViewportWidth(); 6004 if (newW != winW || force) { 6005 if (obj.isCollapsible()) { 6006 $this.addClass('sm-collapsible'); 6007 } else { 6008 $this.removeClass('sm-collapsible'); 6009 } 6010 winW = newW; 6011 } 6012 } 6013 detectCollapsible(); 6014 $(window).on('resize.smartmenus' + obj.rootId, detectCollapsible); 6015 } 6016 }); 6017 // keydown fix for Bootstrap 4 conflict 6018 if ($navbars.length && !$.SmartMenus.Bootstrap.keydownFix) { 6019 // unhook BS keydown handler for all dropdowns 6020 $(document).off('keydown.bs.dropdown.data-api', '.dropdown-menu'); 6021 // restore BS keydown handler for dropdowns that are not inside SmartMenus navbars 6022 // SmartMenus won't add the "show" class so it's handy here 6023 if ($.fn.dropdown && $.fn.dropdown.Constructor) { 6024 $(document).on('keydown.bs.dropdown.data-api', '.dropdown-menu.show', $.fn.dropdown.Constructor._dataApiKeydownHandler); 6025 } 6026 $.SmartMenus.Bootstrap.keydownFix = true; 6027 } 6028 } 6029 }); 6030 6031 // init ondomready 6032 $($.SmartMenus.Bootstrap.init); 6033 6034 return $; 6035})); 6036// source --> https://quinto-canal.com/wp-content/themes/newsup/js/jquery.marquee.js?ver=7.1.1 6037/** 6038 * jQuery.marquee - scrolling text like old marquee element 6039 * @author Aamir Afridi - aamirafridi(at)gmail(dot)com / http://aamirafridi.com/jquery/jquery-marquee-plugin 6040 */; 6041(function($) { 6042 $.fn.marquee = function(options) { 6043 return this.each(function() { 6044 // Extend the options if any provided 6045 var o = $.extend({}, $.fn.marquee.defaults, options), 6046 $this = $(this), 6047 $marqueeWrapper, containerWidth, animationCss, verticalDir, elWidth, 6048 loopCount = 3, 6049 playState = 'animation-play-state', 6050 css3AnimationIsSupported = false, 6051 6052 // Private methods 6053 _prefixedEvent = function(element, type, callback) { 6054 var pfx = ["webkit", "moz", "MS", "o", ""]; 6055 for (var p = 0; p < pfx.length; p++) { 6056 if (!pfx[p]) type = type.toLowerCase(); 6057 element.addEventListener(pfx[p] + type, callback, false); 6058 } 6059 }, 6060 6061 _objToString = function(obj) { 6062 var tabjson = []; 6063 for (var p in obj) { 6064 if (obj.hasOwnProperty(p)) { 6065 tabjson.push(p + ':' + obj[p]); 6066 } 6067 } 6068 tabjson.push(); 6069 return '{' + tabjson.join(',') + '}'; 6070 }, 6071 6072 _startAnimationWithDelay = function() { 6073 $this.timer = setTimeout(animate, o.delayBeforeStart); 6074 }, 6075 6076 // Public methods 6077 methods = { 6078 pause: function() { 6079 if (css3AnimationIsSupported && o.allowCss3Support) { 6080 $marqueeWrapper.css(playState, 'paused'); 6081 } else { 6082 // pause using pause plugin 6083 if ($.fn.pause) { 6084 $marqueeWrapper.pause(); 6085 } 6086 } 6087 // save the status 6088 $this.data('runningStatus', 'paused'); 6089 // fire event 6090 $this.trigger('paused'); 6091 }, 6092 6093 resume: function() { 6094 // resume using css3 6095 if (css3AnimationIsSupported && o.allowCss3Support) { 6096 $marqueeWrapper.css(playState, 'running'); 6097 } else { 6098 // resume using pause plugin 6099 if ($.fn.resume) { 6100 $marqueeWrapper.resume(); 6101 } 6102 } 6103 // save the status 6104 $this.data('runningStatus', 'resumed'); 6105 // fire event 6106 $this.trigger('resumed'); 6107 }, 6108 6109 toggle: function() { 6110 methods[$this.data('runningStatus') === 'resumed' ? 'pause' : 'resume'](); 6111 }, 6112 6113 destroy: function() { 6114 // Clear timer 6115 clearTimeout($this.timer); 6116 // Unbind all events 6117 $this.find("*").addBack().off(); 6118 // Just unwrap the elements that has been added using this plugin 6119 $this.html($this.find('.js-marquee:first').html()); 6120 } 6121 }; 6122 6123 // Check for methods 6124 if (typeof options === 'string') { 6125 if ($.isFunction(methods[options])) { 6126 // Following two IF statements to support public methods 6127 if (!$marqueeWrapper) { 6128 $marqueeWrapper = $this.find('.js-marquee-wrapper'); 6129 } 6130 if ($this.data('css3AnimationIsSupported') === true) { 6131 css3AnimationIsSupported = true; 6132 } 6133 methods[options](); 6134 } 6135 return; 6136 } 6137 6138 /* Check if element has data attributes. They have top priority 6139 For details https://twitter.com/aamirafridi/status/403848
vendor: 14,983 bytes, lines 6139-6424
6139044069679104 - Can't find a better solution :/ 6140 jQuery 1.3.2 doesn't support $.data().KEY hence writting the following */ 6141 var dataAttributes = {}, 6142 attr; 6143 $.each(o, function(key) { 6144 // Check if element has this data attribute 6145 attr = $this.attr('data-' + key); 6146 if (typeof attr !== 'undefined') { 6147 // Now check if value is boolean or not 6148 switch (attr) { 6149 case 'true': 6150 attr = true; 6151 break; 6152 case 'false': 6153 attr = false; 6154 break; 6155 } 6156 o[key] = attr; 6157 } 6158 }); 6159 6160 // Reintroduce speed as an option. It calculates duration as a factor of the container width 6161 // measured in pixels per second. 6162 if (o.speed) { 6163 o.duration = parseInt($this.width(), 10) / o.speed * 1000; 6164 } 6165 6166 // Shortcut to see if direction is upward or downward 6167 verticalDir = o.direction === 'up' || o.direction === 'down'; 6168 6169 // no gap if not duplicated 6170 o.gap = o.duplicated ? parseInt(o.gap) : 0; 6171 6172 // wrap inner content into a div 6173 $this.wrapInner('<div class="js-marquee"></div>'); 6174 6175 // Make copy of the element 6176 var $el = $this.find('.js-marquee').css({ 6177 'margin-right': o.gap, 6178 'float': 'left' 6179 }); 6180 6181 if (o.duplicated) { 6182 $el.clone(true).appendTo($this); 6183 } 6184 6185 // wrap both inner elements into one div 6186 $this.wrapInner('<div style="width:100000px" class="js-marquee-wrapper"></div>'); 6187 6188 // Save the reference of the wrapper 6189 $marqueeWrapper = $this.find('.js-marquee-wrapper'); 6190 6191 // If direction is up or down, get the height of main element 6192 if (verticalDir) { 6193 var containerHeight = $this.height(); 6194 $marqueeWrapper.removeAttr('style'); 6195 $this.height(containerHeight); 6196 6197 // Change the CSS for js-marquee element 6198 $this.find('.js-marquee').css({ 6199 'float': 'none', 6200 'margin-bottom': o.gap, 6201 'margin-right': 0 6202 }); 6203 6204 // Remove bottom margin from 2nd element if duplicated 6205 if (o.duplicated) { 6206 $this.find('.js-marquee:last').css({ 6207 'margin-bottom': 0 6208 }); 6209 } 6210 6211 var elHeight = $this.find('.js-marquee:first').height() + o.gap; 6212 6213 // adjust the animation duration according to the text length 6214 if (o.startVisible && !o.duplicated) { 6215 // Compute the complete animation duration and save it for later reference 6216 // formula is to: (Height of the text node + height of the main container / Height of the main container) * duration; 6217 o._completeDuration = ((parseInt(elHeight, 10) + parseInt(containerHeight, 10)) / parseInt(containerHeight, 10)) * o.duration; 6218 6219 // formula is to: (Height of the text node / height of the main container) * duration 6220 o.duration = (parseInt(elHeight, 10) / parseInt(containerHeight, 10)) * o.duration; 6221 } else { 6222 // formula is to: (Height of the text node + height of the main container / Height of the main container) * duration; 6223 o.duration = ((parseInt(elHeight, 10) + parseInt(containerHeight, 10)) / parseInt(containerHeight, 10)) * o.duration; 6224 } 6225 6226 } else { 6227 // Save the width of the each element so we can use it in animation 6228 elWidth = $this.find('.js-marquee:first').width() + o.gap; 6229 6230 // container width 6231 containerWidth = $this.width(); 6232 6233 // adjust the animation duration according to the text length 6234 if (o.startVisible && !o.duplicated) { 6235 // Compute the complete animation duration and save it for later reference 6236 // formula is to: (Width of the text node + width of the main container / Width of the main container) * duration; 6237 o._completeDuration = ((parseInt(elWidth, 10) + parseInt(containerWidth, 10)) / parseInt(containerWidth, 10)) * o.duration; 6238 6239 // (Width of the text node / width of the main container) * duration 6240 o.duration = (parseInt(elWidth, 10) / parseInt(containerWidth, 10)) * o.duration; 6241 } else { 6242 // formula is to: (Width of the text node + width of the main container / Width of the main container) * duration; 6243 o.duration = ((parseInt(elWidth, 10) + parseInt(containerWidth, 10)) / parseInt(containerWidth, 10)) * o.duration; 6244 } 6245 } 6246 6247 // if duplicated then reduce the duration 6248 if (o.duplicated) { 6249 o.duration = o.duration / 2; 6250 } 6251 6252 if (o.allowCss3Support) { 6253 var elm = document.body || document.createElement('div'), 6254 animationName = 'marqueeAnimation-' + Math.floor(Math.random() * 10000000), 6255 domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), 6256 animationString = 'animation', 6257 animationCss3Str = '', 6258 keyframeString = ''; 6259 6260 // Check css3 support 6261 if (elm.style.animation !== undefined) { 6262 keyframeString = '@keyframes ' + animationName + ' '; 6263 css3AnimationIsSupported = true; 6264 } 6265 6266 if (css3AnimationIsSupported === false) { 6267 for (var i = 0; i < domPrefixes.length; i++) { 6268 if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) { 6269 var prefix = '-' + domPrefixes[i].toLowerCase() + '-'; 6270 animationString = prefix + animationString; 6271 playState = prefix + playState; 6272 keyframeString = '@' + prefix + 'keyframes ' + animationName + ' '; 6273 css3AnimationIsSupported = true; 6274 break; 6275 } 6276 } 6277 } 6278 6279 if (css3AnimationIsSupported) { 6280 animationCss3Str = animationName + ' ' + o.duration / 1000 + 's ' + o.delayBeforeStart / 1000 + 's infinite ' + o.css3easing; 6281 $this.data('css3AnimationIsSupported', true); 6282 } 6283 } 6284 6285 var _rePositionVertically = function() { 6286 $marqueeWrapper.css('transform', 'translateY(' + (o.direction === 'up' ? containerHeight + 'px' : '-' + elHeight + 'px') + ')'); 6287 }, 6288 _rePositionHorizontally = function() { 6289 $marqueeWrapper.css('transform', 'translateX(' + (o.direction === 'left' ? containerWidth + 'px' : '-' + elWidth + 'px') + ')'); 6290 }; 6291 6292 // if duplicated option is set to true than position the wrapper 6293 if (o.duplicated) { 6294 if (verticalDir) { 6295 if (o.startVisible) { 6296 $marqueeWrapper.css('transform', 'translateY(0)'); 6297 } else { 6298 $marqueeWrapper.css('transform', 'translateY(' + (o.direction === 'up' ? containerHeight + 'px' : '-' + ((elHeight * 2) - o.gap) + 'px') + ')'); 6299 } 6300 } else { 6301 if (o.startVisible) { 6302 $marqueeWrapper.css('transform', 'translateX(0)'); 6303 } else { 6304 $marqueeWrapper.css('transform', 'translateX(' + (o.direction === 'left' ? containerWidth + 'px' : '-' + ((elWidth * 2) - o.gap) + 'px') + ')'); 6305 } 6306 } 6307 6308 // If the text starts out visible we can skip the two initial loops 6309 if (!o.startVisible) { 6310 loopCount = 1; 6311 } 6312 } else if (o.startVisible) { 6313 // We only have two different loops if marquee is duplicated and starts visible 6314 loopCount = 2; 6315 } else { 6316 if (verticalDir) { 6317 _rePositionVertically(); 6318 } else { 6319 _rePositionHorizontally(); 6320 } 6321 } 6322 6323 // Animate recursive method 6324 var animate = function() { 6325 if (o.duplicated) { 6326 // When duplicated, the first loop will be scroll longer so double the duration 6327 if (loopCount === 1) { 6328 o._originalDuration = o.duration; 6329 if (verticalDir) { 6330 o.duration = o.direction === 'up' ? o.duration + (containerHeight / ((elHeight) / o.duration)) : o.duration * 2; 6331 } else { 6332 o.duration = o.direction === 'left' ? o.duration + (containerWidth / ((elWidth) / o.duration)) : o.duration * 2; 6333 } 6334 // Adjust the css3 animation as well 6335 if (animationCss3Str) { 6336 animationCss3Str = animationName + ' ' + o.duration / 1000 + 's ' + o.delayBeforeStart / 1000 + 's ' + o.css3easing; 6337 } 6338 loopCount++; 6339 } 6340 // On 2nd loop things back to normal, normal duration for the rest of animations 6341 else if (loopCount === 2) { 6342 o.duration = o._originalDuration; 6343 // Adjust the css3 animation as well 6344 if (animationCss3Str) { 6345 animationName = animationName + '0'; 6346 keyframeString = $.trim(keyframeString) + '0 '; 6347 animationCss3Str = animationName + ' ' + o.duration / 1000 + 's 0s infinite ' + o.css3easing; 6348 } 6349 loopCount++; 6350 } 6351 } 6352 6353 if (verticalDir) { 6354 if (o.duplicated) { 6355 6356 // Adjust the starting point of animation only when first loops finishes 6357 if (loopCount > 2) { 6358 $marqueeWrapper.css('transform', 'translateY(' + (o.direction === 'up' ? 0 : '-' + elHeight + 'px') + ')'); 6359 } 6360 6361 animationCss = { 6362 'transform': 'translateY(' + (o.direction === 'up' ? '-' + elHeight + 'px' : 0) + ')' 6363 }; 6364 } else if (o.startVisible) { 6365 // This loop moves the marquee out of the container 6366 if (loopCount === 2) { 6367 // Adjust the css3 animation as well 6368 if (animationCss3Str) { 6369 animationCss3Str = animationName + ' ' + o.duration / 1000 + 's ' + o.delayBeforeStart / 1000 + 's ' + o.css3easing; 6370 } 6371 animationCss = { 6372 'transform': 'translateY(' + (o.direction === 'up' ? '-' + elHeight + 'px' : containerHeight + 'px') + ')' 6373 }; 6374 loopCount++; 6375 } else if (loopCount === 3) { 6376 // Set the duration for the animation that will run forever 6377 o.duration = o._completeDuration; 6378 // Adjust the css3 animation as well 6379 if (animationCss3Str) { 6380 animationName = animationName + '0'; 6381 keyframeString = $.trim(keyframeString) + '0 '; 6382 animationCss3Str = animationName + ' ' + o.duration / 1000 + 's 0s infinite ' + o.css3easing; 6383 } 6384 _rePositionVertically(); 6385 } 6386 } else { 6387 _rePositionVertically(); 6388 animationCss = { 6389 'transform': 'translateY(' + (o.direction === 'up' ? '-' + ($marqueeWrapper.height()) + 'px' : containerHeight + 'px') + ')' 6390 }; 6391 } 6392 } else { 6393 if (o.duplicated) { 6394 6395 // Adjust the starting point of animation only when first loops finishes 6396 if (loopCount > 2) { 6397 $marqueeWrapper.css('transform', 'translateX(' + (o.direction === 'left' ? 0 : '-' + elWidth + 'px') + ')'); 6398 } 6399 6400 animationCss = { 6401 'transform': 'translateX(' + (o.direction === 'left' ? '-' + elWidth + 'px' : 0) + ')' 6402 }; 6403 6404 } else if (o.startVisible) { 6405 // This loop moves the marquee out of the container 6406 if (loopCount === 2) { 6407 // Adjust the css3 animation as well 6408 if (animationCss3Str) { 6409 animationCss3Str = animationName + ' ' + o.duration / 1000 + 's ' + o.delayBeforeStart / 1000 + 's ' + o.css3easing; 6410 } 6411 animationCss = { 6412 'transform': 'translateX(' + (o.direction === 'left' ? '-' + elWidth + 'px' : containerWidth + 'px') + ')' 6413 }; 6414 loopCount++; 6415 } else if (loopCount === 3) { 6416 // Set the duration for the animation that will run forever 6417 o.duration = o._completeDuration; 6418 // Adjust the css3 animation as well 6419 if (animationCss3Str) { 6420 animationName = animationName + '0'; 6421 keyframeString = $.trim(keyframeString) + '0 '; 6422 animationCss3Str = animationName + ' ' + o.duration / 1000 + 's 0s infinite ' + o.css3easing; 6423 } 6424 _rePositionHorizontally();
6425 } 6426 } else { 6427 _rePositionHorizontally(); 6428 animationCss = { 6429 'transform': 'translateX(' + (o.direction === 'left' ? '-' + elWidth + 'px' : containerWidth + 'px') + ')' 6430 }; 6431 } 6432 } 6433 6434 // fire event 6435 $this.trigger('beforeStarting'); 6436 6437 // If css3 support is available than do it with css3, otherwise use jQuery as fallback 6438 if (css3AnimationIsSupported) { 6439 // Add css3 animation to the element 6440 $marqueeWrapper.css(animationString, animationCss3Str); 6441 var keyframeCss = keyframeString + ' { 100% ' + _objToString(animationCss) + '}', 6442 $styles = $marqueeWrapper.find('style'); 6443 6444 // Now add the keyframe animation to the marquee element 6445 if ($styles.length !== 0) { 6446 // Bug fixed for jQuery 1.3.x - Instead of using .last(), use following 6447 $styles.filter(":last").html(keyframeCss); 6448 } else { 6449 $('head').append('<style>' + keyframeCss + '</style>'); 6450 } 6451 6452 // Animation iteration event 6453 _prefixedEvent($marqueeWrapper[0], "AnimationIteration", function() { 6454 $this.trigger('finished'); 6455 }); 6456 // Animation stopped 6457 _prefixedEvent($marqueeWrapper[0], "AnimationEnd", function() { 6458 animate(); 6459 $this.trigger('finished'); 6460 }); 6461 6462 } else { 6463 // Start animating 6464 $marqueeWrapper.animate(animationCss, o.duration, o.easing, function() { 6465 // fire event 6466 $this.trigger('finished'); 6467 // animate again 6468 if (o.pauseOnCycle) { 6469 _startAnimationWithDelay(); 6470 } else { 6471 animate(); 6472 } 6473 }); 6474 } 6475 // save the status 6476 $this.data('runningStatus', 'resumed'); 6477 }; 6478 6479 // bind pause and resume events 6480 $this.on('pause', methods.pause); 6481 $this.on('resume', methods.resume); 6482 6483 if (o.pauseOnHover) { 6484 $this.on('mouseenter', methods.pause); 6485 $this.on('mouseleave', methods.resume); 6486 } 6487 6488 // If css3 animation is supported than call animate method at once 6489 if (css3AnimationIsSupported && o.allowCss3Support) { 6490 animate(); 6491 } else { 6492 // Starts the recursive method 6493 _startAnimationWithDelay(); 6494 } 6495 6496 }); 6497 }; // End of Plugin 6498 // Public: plugin defaults options 6499 $.fn.marquee.defaults = { 6500 // If you wish to always animate using jQuery 6501 allowCss3Support: true, 6502 // works when allowCss3Support is set to true - for full list see http://www.w3.org/TR/2013/WD-css3-transitions-20131119/#transition-timing-function 6503 css3easing: 'linear', 6504 // requires jQuery easing plugin. Default is 'linear' 6505 easing: 'linear', 6506 // pause time before the next animation turn in milliseconds 6507 delayBeforeStart: 1000, 6508 // 'left', 'right', 'up' or 'down' 6509 direction: 'left', 6510 // true or false - should the marquee be duplicated to show an effect of continues flow 6511 duplicated: false, 6512 // duration in milliseconds of the marquee in milliseconds 6513 duration: 5000, 6514 // Speed allows you to set a relatively constant marquee speed regardless of the width of the containing element. Speed is measured in pixels per second. 6515 speed: 0, 6516 // gap in pixels between the tickers 6517 gap: 20, 6518 // on cycle pause the marquee 6519 pauseOnCycle: false, 6520 // on hover pause the marquee - using jQuery plugin https://github.com/tobia/Pause 6521 pauseOnHover: false, 6522 // the marquee is visible initially positioned next to the border towards it will be moving 6523 startVisible: false 6524 }; 6525})(jQuery); 6526// source --> https://quinto-canal.com/wp-content/themes/newsup/js/main.js?ver=7.1.1 6527(function(){ 6528 6529 jQuery(document).ready(function() { 6530 6531 /* ---------------------------------------------- /* 6532 * Scroll top 6533 /* ---------------------------------------------- */ 6534 6535 jQuery(window).scroll(function() { 6536 if (jQuery(this).scrollTop() > 100) { 6537 jQuery('.page-scroll-up').fadeIn(); 6538 } else { 6539 jQuery('.page-scroll-up').fadeOut(); 6540 } 6541 }); 6542 6543 jQuery('.page-scroll-up').click(function () { 6544 jQuery("html, body").animate({ 6545 scrollTop: 0 6546 }, 700); 6547 return false; 6548 }); 6549 });
6550})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.