1/*! 2 * Bootstrap modal.js v4.3.1 (https://getbootstrap.com/) 3 * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 4 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 */ 6(function (global, factory) { 7 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : 8 typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : 9 (global = global || self, global.Modal = factory(global.jQuery, global.Util)); 10}(this, function ($, Util) { 'use strict'; 11 12 $ = $ && $.hasOwnProperty('default') ? $['default'] : $; 13 Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util; 14 15 function _defineProperties(target, props) { 16 for (var i = 0; i < props.length; i++) { 17 var descriptor = props[i]; 18 descriptor.enumerable = descriptor.enumerable || false; 19 descriptor.configurable = true; 20 if ("value" in descriptor) descriptor.writable = true; 21 Object.defineProperty(target, descriptor.key, descriptor); 22 } 23 } 24 25 function _createClass(Constructor, protoProps, staticProps) { 26 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 27 if (staticProps) _defineProperties(Constructor, staticProps); 28 return Constructor; 29 } 30 31 function _defineProperty(obj, key, value) { 32 if (key in obj) { 33 Object.defineProperty(obj, key, { 34 value: value, 35 enumerable: true, 36 configurable: true, 37 writable: true 38 }); 39 } else { 40 obj[key] = value; 41 } 42 43 return obj; 44 } 45 46 function _objectSpread(target) { 47 for (var i = 1; i < arguments.length; i++) { 48 var source = arguments[i] != null ? arguments[i] : {}; 49 var ownKeys = Object.keys(source); 50 51 if (typeof Object.getOwnPropertySymbols === 'function') { 52 ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { 53 return Object.getOwnPropertyDescriptor(source, sym).enumerable; 54 })); 55 } 56 57 ownKeys.forEach(function (key) { 58 _defineProperty(target, key, source[key]); 59 }); 60 } 61 62 return target; 63 } 64 65 /** 66 * ------------------------------------------------------------------------ 67 * Constants 68 * ------------------------------------------------------------------------ 69 */ 70 71 var NAME = 'modal'; 72 var VERSION = '4.3.1'; 73 var DATA_KEY = 'bs.modal'; 74 var EVENT_KEY = "." + DATA_KEY; 75 var DATA_API_KEY = '.data-api'; 76 var JQUERY_NO_CONFLICT = $.fn[NAME]; 77 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 78 79 var Default = { 80 backdrop: true, 81 keyboard: true, 82 focus: true, 83 show: true 84 }; 85 var DefaultType = { 86 backdrop: '(boolean|string)', 87 keyboard: 'boolean', 88 focus: 'boolean', 89 show: 'boolean' 90 }; 91 var Event = { 92 HIDE: "hide" + EVENT_KEY, 93 HIDDEN: "hidden" + EVENT_KEY, 94 SHOW: "show" + EVENT_KEY, 95 SHOWN: "shown" + EVENT_KEY, 96 FOCUSIN: "focusin" + EVENT_KEY, 97 RESIZE: "resize" + EVENT_KEY, 98 CLICK_DISMISS: "click.dismiss" + EVENT_KEY, 99 KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, 100 MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, 101 MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, 102 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 103 }; 104 var ClassName = { 105 SCROLLABLE: 'modal-dialog-scrollable', 106 SCROLLBAR_MEASURER: 'modal-scrollbar-measure', 107 BACKDROP: 'modal-backdrop', 108 OPEN: 'modal-open', 109 FADE: 'fade', 110 SHOW: 'show' 111 }; 112 var Selector = { 113 DIALOG: '.modal-dialog', 114 MODAL_BODY: '.modal-body', 115 DATA_TOGGLE: '[data-toggle="modal"]', 116 DATA_DISMISS: '[data-dismiss="modal"]', 117 FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', 118 STICKY_CONTENT: '.sticky-top' 119 /** 120 * ------------------------------------------------------------------------ 121 * Class Definition 122 * ------------------------------------------------------------------------ 123 */ 124 125 }; 126 127 var Modal = 128 /*#__PURE__*/ 129 function () { 130 function Modal(element, config) { 131 this._config = this._getConfig(config); 132 this._element = element; 133 this._dialog = element.querySelector(Selector.DIALOG); 134 this._backdrop = null; 135 this._isShown = false;
136 this._isBodyOverflowing = false; 137 this._ignoreBackdropClick = false; 138 this._isTransitioning = false; 139 this._scrollbarWidth = 0; 140 } // Getters 141 142 143 var _proto = Modal.prototype; 144 145 // Public 146 _proto.toggle = function toggle(relatedTarget) { 147 return this._isShown ? this.hide() : this.show(relatedTarget); 148 }; 149 150 _proto.show = function show(relatedTarget) { 151 var _this = this; 152 153 if (this._isShown || this._isTransitioning) { 154 return; 155 } 156 157 if ($(this._element).hasClass(ClassName.FADE)) { 158 this._isTransitioning = true; 159 } 160 161 var showEvent = $.Event(Event.SHOW, { 162 relatedTarget: relatedTarget 163 }); 164 $(this._element).trigger(showEvent); 165 166 if (this._isShown || showEvent.isDefaultPrevented()) { 167 return; 168 } 169 170 this._isShown = true; 171 172 this._checkScrollbar(); 173 174 this._setScrollbar(); 175 176 this._adjustDialog(); 177 178 this._setEscapeEvent(); 179 180 this._setResizeEvent(); 181 182 $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { 183 return _this.hide(event); 184 }); 185 $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { 186 $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { 187 if ($(event.target).is(_this._element)) { 188 _this._ignoreBackdropClick = true; 189 } 190 }); 191 }); 192 193 this._showBackdrop(function () { 194 return _this._showElement(relatedTarget); 195 }); 196 }; 197 198 _proto.hide = function hide(event) { 199 var _this2 = this; 200 201 if (event) { 202 event.preventDefault(); 203 } 204 205 if (!this._isShown || this._isTransitioning) { 206 return; 207 } 208 209 var hideEvent = $.Event(Event.HIDE); 210 $(this._element).trigger(hideEvent); 211 212 if (!this._isShown || hideEvent.isDefaultPrevented()) { 213 return; 214 } 215 216 this._isShown = false; 217 var transition = $(this._element).hasClass(ClassName.FADE); 218 219 if (transition) { 220 this._isTransitioning = true; 221 } 222 223 this._setEscapeEvent(); 224 225 this._setResizeEvent(); 226 227 $(document).off(Event.FOCUSIN); 228 $(this._element).removeClass(ClassName.SHOW); 229 $(this._element).off(Event.CLICK_DISMISS); 230 $(this._dialog).off(Event.MOUSEDOWN_DISMISS); 231 232 if (transition) { 233 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 234 $(this._element).one(Util.TRANSITION_END, function (event) { 235 return _this2._hideModal(event); 236 }).emulateTransitionEnd(transitionDuration); 237 } else { 238 this._hideModal(); 239 } 240 }; 241 242 _proto.dispose = function dispose() { 243 [window, this._element, this._dialog].forEach(function (htmlElement) { 244 return $(htmlElement).off(EVENT_KEY); 245 }); 246 /** 247 * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` 248 * Do not move `document` in `htmlElements` array 249 * It will remove `Event.CLICK_DATA_API` event that should remain 250 */ 251 252 $(document).off(Event.FOCUSIN); 253 $.removeData(this._element, DATA_KEY); 254 this._config = null; 255 this._element = null; 256 this._dialog = null; 257 this._backdrop = null; 258 this._isShown = null; 259 this._isBodyOverflowing = null; 260 this._ignoreBackdropClick = null; 261 this._isTransitioning = null; 262 this._scrollbarWidth = null; 263 }; 264 265 _proto.handleUpdate = function handleUpdate() { 266 this._adjustDialog(); 267 } // Private 268 ; 269 270 _proto._getConfig = function _getConfig(config) { 271 config = _objectSpread({}, Default, config); 272 Util.typeCheckConfig(NAME, config, DefaultType); 273 return config; 274 }; 275 276 _proto._showElement = function _showElement(relatedTarget) { 277 var _this3 = this; 278 279 var transition = $(this._element).hasClass(ClassName.FADE); 280 281 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 282 // Don't move modal's DOM position 283 document.body.appendChild(this._element); 284 } 285 286 this._element.style.display = 'block'; 287 288 this._element.removeAttribute('aria-hidden'); 289 290 this._element.setAttribute('aria-modal', true); 291 292 if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) { 293 this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0; 294 } else { 295 this._element.scrollTop = 0; 296 } 297 298 if (transition) { 299 Util.reflow(this._element); 300 } 301 302 $(this._element).addClass(ClassName.SHOW); 303 304 if (this._config.focus) { 305 this._enforceFocus(); 306 } 307 308 var shownEvent = $.Event(Event.SHOWN, { 309 relatedTarget: relatedTarget 310 }); 311 312 var transitionComplete = function transitionComplete() { 313 if (_this3._config.focus) { 314 _this3._element.focus(); 315 } 316 317 _this3._isTransitioning = false;
318 $(_this3._element).trigger(shownEvent); 319 }; 320 321 if (transition) { 322 var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); 323 $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 324 } else { 325 transitionComplete(); 326 } 327 }; 328 329 _proto._enforceFocus = function _enforceFocus() { 330 var _this4 = this; 331 332 $(document).off(Event.FOCUSIN) // Guard against infinite focus loop 333 .on(Event.FOCUSIN, function (event) { 334 if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { 335 _this4._element.focus(); 336 } 337 }); 338 }; 339 340 _proto._setEscapeEvent = function _setEscapeEvent() { 341 var _this5 = this; 342 343 if (this._isShown && this._config.keyboard) { 344 $(this._element).on(Event.KEYDOWN_DISMISS, function (event) { 345 if (event.which === ESCAPE_KEYCODE) { 346 event.preventDefault(); 347 348 _this5.hide(); 349 } 350 }); 351 } else if (!this._isShown) { 352 $(this._element).off(Event.KEYDOWN_DISMISS); 353 } 354 }; 355 356 _proto._setResizeEvent = function _setResizeEvent() { 357 var _this6 = this; 358 359 if (this._isShown) { 360 $(window).on(Event.RESIZE, function (event) { 361 return _this6.handleUpdate(event); 362 }); 363 } else { 364 $(window).off(Event.RESIZE); 365 } 366 }; 367 368 _proto._hideModal = function _hideModal() { 369 var _this7 = this; 370 371 this._element.style.display = 'none'; 372 373 this._element.setAttribute('aria-hidden', true); 374 375 this._element.removeAttribute('aria-modal'); 376 377 this._isTransitioning = false; 378 379 this._showBackdrop(function () { 380 $(document.body).removeClass(ClassName.OPEN); 381 382 _this7._resetAdjustments(); 383 384 _this7._resetScrollbar(); 385 386 $(_this7._element).trigger(Event.HIDDEN); 387 }); 388 }; 389 390 _proto._removeBackdrop = function _removeBackdrop() { 391 if (this._backdrop) { 392 $(this._backdrop).remove(); 393 this._backdrop = null; 394 } 395 }; 396 397 _proto._showBackdrop = function _showBackdrop(callback) { 398 var _this8 = this; 399 400 var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; 401 402 if (this._isShown && this._config.backdrop) { 403 this._backdrop = document.createElement('div'); 404 this._backdrop.className = ClassName.BACKDROP; 405 406 if (animate) { 407 this._backdrop.classList.add(animate); 408 } 409 410 $(this._backdrop).appendTo(document.body); 411 $(this._element).on(Event.CLICK_DISMISS, function (event) { 412 if (_this8._ignoreBackdropClick) { 413 _this8._ignoreBackdropClick = false; 414 return; 415 } 416 417 if (event.target !== event.currentTarget) { 418 return; 419 } 420 421 if (_this8._config.backdrop === 'static') { 422 _this8._element.focus(); 423 } else { 424 _this8.hide(); 425 } 426 }); 427 428 if (animate) { 429 Util.reflow(this._backdrop); 430 } 431 432 $(this._backdrop).addClass(ClassName.SHOW); 433 434 if (!callback) { 435 return; 436 } 437 438 if (!animate) { 439 callback(); 440 return; 441 } 442 443 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 444 $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 445 } else if (!this._isShown && this._backdrop) { 446 $(this._backdrop).removeClass(ClassName.SHOW); 447 448 var callbackRemove = function callbackRemove() { 449 _this8._removeBackdrop(); 450 451 if (callback) { 452 callback(); 453 } 454 }; 455 456 if ($(this._element).hasClass(ClassName.FADE)) { 457 var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 458 459 $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 460 } else { 461 callbackRemove(); 462 } 463 } else if (callback) { 464 callback(); 465 } 466 } // ---------------------------------------------------------------------- 467 // the following methods are used to handle overflowing modals 468 // todo (fat): these should probably be refactored out of modal.js 469 // ---------------------------------------------------------------------- 470 ; 471
472 _proto._adjustDialog = function _adjustDialog() { 473 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 474 475 if (!this._isBodyOverflowing && isModalOverflowing) { 476 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 477 } 478 479 if (this._isBodyOverflowing && !isModalOverflowing) { 480 this._element.style.paddingRight = this._scrollbarWidth + "px"; 481 } 482 }; 483 484 _proto._resetAdjustments = function _resetAdjustments() { 485 this._element.style.paddingLeft = ''; 486 this._element.style.paddingRight = ''; 487 }; 488 489 _proto._checkScrollbar = function _checkScrollbar() { 490 var rect = document.body.getBoundingClientRect(); 491 this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; 492 this._scrollbarWidth = this._getScrollbarWidth(); 493 }; 494 495 _proto._setScrollbar = function _setScrollbar() { 496 var _this9 = this; 497 498 if (this._isBodyOverflowing) { 499 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 500 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 501 var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); 502 var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding 503 504 $(fixedContent).each(function (index, element) { 505 var actualPadding = element.style.paddingRight; 506 var calculatedPadding = $(element).css('padding-right'); 507 $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); 508 }); // Adjust sticky content margin 509 510 $(stickyContent).each(function (index, element) { 511 var actualMargin = element.style.marginRight; 512 var calculatedMargin = $(element).css('margin-right'); 513 $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); 514 }); // Adjust body padding 515 516 var actualPadding = document.body.style.paddingRight; 517 var calculatedPadding = $(document.body).css('padding-right'); 518 $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 519 } 520 521 $(document.body).addClass(ClassName.OPEN); 522 }; 523 524 _proto._resetScrollbar = function _resetScrollbar() { 525 // Restore fixed content padding 526 var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); 527 $(fixedContent).each(function (index, element) { 528 var padding = $(element).data('padding-right'); 529 $(element).removeData('padding-right'); 530 element.style.paddingRight = padding ? padding : ''; 531 }); // Restore sticky content 532 533 var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT)); 534 $(elements).each(function (index, element) { 535 var margin = $(element).data('margin-right'); 536 537 if (typeof margin !== 'undefined') { 538 $(element).css('margin-right', margin).removeData('margin-right'); 539 } 540 }); // Restore body padding 541 542 var padding = $(document.body).data('padding-right'); 543 $(document.body).removeData('padding-right'); 544 document.body.style.paddingRight = padding ? padding : ''; 545 }; 546 547 _proto._getScrollbarWidth = function _getScrollbarWidth() { 548 // thx d.walsh 549 var scrollDiv = document.createElement('div'); 550 scrollDiv.className = ClassName.SCROLLBAR_MEASURER; 551 document.body.appendChild(scrollDiv); 552 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 553 document.body.removeChild(scrollDiv); 554 return scrollbarWidth; 555 } // Static 556 ; 557 558 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 559 return this.each(function () { 560 var data = $(this).data(DATA_KEY); 561 562 var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {}); 563 564 if (!data) { 565 data = new Modal(this, _config); 566 $(this).data(DATA_KEY, data); 567 } 568 569 if (typeof config === 'string') { 570 if (typeof data[config] === 'undefined') {
571 throw new TypeError("No method named \"" + config + "\""); 572 } 573 574 data[config](relatedTarget); 575 } else if (_config.show) { 576 data.show(relatedTarget); 577 } 578 }); 579 }; 580 581 _createClass(Modal, null, [{ 582 key: "VERSION", 583 get: function get() { 584 return VERSION; 585 } 586 }, { 587 key: "Default", 588 get: function get() { 589 return Default; 590 } 591 }]); 592 593 return Modal; 594 }(); 595 /** 596 * ------------------------------------------------------------------------ 597 * Data Api implementation 598 * ------------------------------------------------------------------------ 599 */ 600 601 602 $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 603 var _this10 = this; 604 605 var target; 606 var selector = Util.getSelectorFromElement(this); 607 608 if (selector) { 609 target = document.querySelector(selector); 610 } 611 612 var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); 613 614 if (this.tagName === 'A' || this.tagName === 'AREA') { 615 event.preventDefault(); 616 } 617 618 var $target = $(target).one(Event.SHOW, function (showEvent) { 619 if (showEvent.isDefaultPrevented()) { 620 // Only register focus restorer if modal will actually get shown 621 return; 622 } 623 624 $target.one(Event.HIDDEN, function () { 625 if ($(_this10).is(':visible')) { 626 _this10.focus(); 627 } 628 }); 629 }); 630 631 Modal._jQueryInterface.call($(target), config, this); 632 }); 633 /** 634 * ------------------------------------------------------------------------ 635 * jQuery 636 * ------------------------------------------------------------------------ 637 */ 638 639 $.fn[NAME] = Modal._jQueryInterface; 640 $.fn[NAME].Constructor = Modal; 641 642 $.fn[NAME].noConflict = function () { 643 $.fn[NAME] = JQUERY_NO_CONFLICT; 644 return Modal._jQueryInterface; 645 }; 646 647 return Modal; 648 649}));
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.