Team Ai
Datasetpublic

codekingpro/portable-devtools

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