shell bypass 403
UnknownSec Shell
:
/
home
/
hockeyalleppey
/
www
/
js
/ [
drwxr-xr-x
]
upload
mass deface
mass delete
console
info server
name :
vendors.tar
dropzone/dropzone.css 0000644 00000030754 14704452271 0010775 0 ustar 00 /* * The MIT License * Copyright (c) 2012 Matias Meno <m@tias.me> */ @-webkit-keyframes passing-through { 0% { opacity: 0; -webkit-transform: translateY(40px); -moz-transform: translateY(40px); -ms-transform: translateY(40px); -o-transform: translateY(40px); transform: translateY(40px); } 30%, 70% { opacity: 1; -webkit-transform: translateY(0px); -moz-transform: translateY(0px); -ms-transform: translateY(0px); -o-transform: translateY(0px); transform: translateY(0px); } 100% { opacity: 0; -webkit-transform: translateY(-40px); -moz-transform: translateY(-40px); -ms-transform: translateY(-40px); -o-transform: translateY(-40px); transform: translateY(-40px); } } @-moz-keyframes passing-through { 0% { opacity: 0; -webkit-transform: translateY(40px); -moz-transform: translateY(40px); -ms-transform: translateY(40px); -o-transform: translateY(40px); transform: translateY(40px); } 30%, 70% { opacity: 1; -webkit-transform: translateY(0px); -moz-transform: translateY(0px); -ms-transform: translateY(0px); -o-transform: translateY(0px); transform: translateY(0px); } 100% { opacity: 0; -webkit-transform: translateY(-40px); -moz-transform: translateY(-40px); -ms-transform: translateY(-40px); -o-transform: translateY(-40px); transform: translateY(-40px); } } @keyframes passing-through { 0% { opacity: 0; -webkit-transform: translateY(40px); -moz-transform: translateY(40px); -ms-transform: translateY(40px); -o-transform: translateY(40px); transform: translateY(40px); } 30%, 70% { opacity: 1; -webkit-transform: translateY(0px); -moz-transform: translateY(0px); -ms-transform: translateY(0px); -o-transform: translateY(0px); transform: translateY(0px); } 100% { opacity: 0; -webkit-transform: translateY(-40px); -moz-transform: translateY(-40px); -ms-transform: translateY(-40px); -o-transform: translateY(-40px); transform: translateY(-40px); } } @-webkit-keyframes slide-in { 0% { opacity: 0; -webkit-transform: translateY(40px); -moz-transform: translateY(40px); -ms-transform: translateY(40px); -o-transform: translateY(40px); transform: translateY(40px); } 30% { opacity: 1; -webkit-transform: translateY(0px); -moz-transform: translateY(0px); -ms-transform: translateY(0px); -o-transform: translateY(0px); transform: translateY(0px); } } @-moz-keyframes slide-in { 0% { opacity: 0; -webkit-transform: translateY(40px); -moz-transform: translateY(40px); -ms-transform: translateY(40px); -o-transform: translateY(40px); transform: translateY(40px); } 30% { opacity: 1; -webkit-transform: translateY(0px); -moz-transform: translateY(0px); -ms-transform: translateY(0px); -o-transform: translateY(0px); transform: translateY(0px); } } @keyframes slide-in { 0% { opacity: 0; -webkit-transform: translateY(40px); -moz-transform: translateY(40px); -ms-transform: translateY(40px); -o-transform: translateY(40px); transform: translateY(40px); } 30% { opacity: 1; -webkit-transform: translateY(0px); -moz-transform: translateY(0px); -ms-transform: translateY(0px); -o-transform: translateY(0px); transform: translateY(0px); } } @-webkit-keyframes pulse { 0% { -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); } 10% { -webkit-transform: scale(1.1); -moz-transform: scale(1.1); -ms-transform: scale(1.1); -o-transform: scale(1.1); transform: scale(1.1); } 20% { -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); } } @-moz-keyframes pulse { 0% { -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); } 10% { -webkit-transform: scale(1.1); -moz-transform: scale(1.1); -ms-transform: scale(1.1); -o-transform: scale(1.1); transform: scale(1.1); } 20% { -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); } } @keyframes pulse { 0% { -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); } 10% { -webkit-transform: scale(1.1); -moz-transform: scale(1.1); -ms-transform: scale(1.1); -o-transform: scale(1.1); transform: scale(1.1); } 20% { -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); } } .dropzone, .dropzone * { box-sizing: border-box; } .dropzone { min-height: 150px; border: 2px solid rgba(0, 0, 0, 0.3); background: white; padding: 20px 20px; } .dropzone.dz-clickable { cursor: pointer; } .dropzone.dz-clickable * { cursor: default; } .dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * { cursor: pointer; } .dropzone.dz-started .dz-message { display: none; } .dropzone.dz-drag-hover { border-style: solid; } .dropzone.dz-drag-hover .dz-message { opacity: 0.5; } .dropzone .dz-message { text-align: center; margin: 2em 0; } .dropzone .dz-message .dz-button { background: none; color: inherit; border: none; padding: 0; font: inherit; cursor: pointer; outline: inherit; } .dropzone .dz-preview { position: relative; display: inline-block; vertical-align: top; margin: 16px; min-height: 100px; } .dropzone .dz-preview:hover { z-index: 1000; } .dropzone .dz-preview:hover .dz-details { opacity: 1; } .dropzone .dz-preview.dz-file-preview .dz-image { border-radius: 20px; background: #999; background: linear-gradient(to bottom, #eee, #ddd); } .dropzone .dz-preview.dz-file-preview .dz-details { opacity: 1; } .dropzone .dz-preview.dz-image-preview { background: white; } .dropzone .dz-preview.dz-image-preview .dz-details { -webkit-transition: opacity 0.2s linear; -moz-transition: opacity 0.2s linear; -ms-transition: opacity 0.2s linear; -o-transition: opacity 0.2s linear; transition: opacity 0.2s linear; } .dropzone .dz-preview .dz-remove { font-size: 14px; text-align: center; display: block; cursor: pointer; border: none; } .dropzone .dz-preview .dz-remove:hover { text-decoration: underline; } .dropzone .dz-preview:hover .dz-details { opacity: 1; } .dropzone .dz-preview .dz-details { z-index: 20; position: absolute; top: 0; left: 0; opacity: 0; font-size: 13px; min-width: 100%; max-width: 100%; padding: 2em 1em; text-align: center; color: rgba(0, 0, 0, 0.9); line-height: 150%; } .dropzone .dz-preview .dz-details .dz-size { margin-bottom: 1em; font-size: 16px; } .dropzone .dz-preview .dz-details .dz-filename { white-space: nowrap; } .dropzone .dz-preview .dz-details .dz-filename:hover span { border: 1px solid rgba(200, 200, 200, 0.8); background-color: rgba(255, 255, 255, 0.8); } .dropzone .dz-preview .dz-details .dz-filename:not(:hover) { overflow: hidden; text-overflow: ellipsis; } .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span { border: 1px solid transparent; } .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span { background-color: rgba(255, 255, 255, 0.4); padding: 0 0.4em; border-radius: 3px; } .dropzone .dz-preview:hover .dz-image img { -webkit-transform: scale(1.05, 1.05); -moz-transform: scale(1.05, 1.05); -ms-transform: scale(1.05, 1.05); -o-transform: scale(1.05, 1.05); transform: scale(1.05, 1.05); -webkit-filter: blur(8px); filter: blur(8px); } .dropzone .dz-preview .dz-image { border-radius: 20px; overflow: hidden; width: 120px; height: 120px; position: relative; display: block; z-index: 10; } .dropzone .dz-preview .dz-image img { display: block; } .dropzone .dz-preview.dz-success .dz-success-mark { -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); } .dropzone .dz-preview.dz-error .dz-error-mark { opacity: 1; -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); } .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark { pointer-events: none; opacity: 0; z-index: 500; position: absolute; display: block; top: 50%; left: 50%; margin-left: -27px; margin-top: -27px; } .dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg { display: block; width: 54px; height: 54px; } .dropzone .dz-preview.dz-processing .dz-progress { opacity: 1; -webkit-transition: all 0.2s linear; -moz-transition: all 0.2s linear; -ms-transition: all 0.2s linear; -o-transition: all 0.2s linear; transition: all 0.2s linear; } .dropzone .dz-preview.dz-complete .dz-progress { opacity: 0; -webkit-transition: opacity 0.4s ease-in; -moz-transition: opacity 0.4s ease-in; -ms-transition: opacity 0.4s ease-in; -o-transition: opacity 0.4s ease-in; transition: opacity 0.4s ease-in; } .dropzone .dz-preview:not(.dz-processing) .dz-progress { -webkit-animation: pulse 6s ease infinite; -moz-animation: pulse 6s ease infinite; -ms-animation: pulse 6s ease infinite; -o-animation: pulse 6s ease infinite; animation: pulse 6s ease infinite; } .dropzone .dz-preview .dz-progress { opacity: 1; z-index: 1000; pointer-events: none; position: absolute; height: 16px; left: 50%; top: 50%; margin-top: -8px; width: 80px; margin-left: -40px; background: rgba(255, 255, 255, 0.9); -webkit-transform: scale(1); border-radius: 8px; overflow: hidden; } .dropzone .dz-preview .dz-progress .dz-upload { background: #333; background: linear-gradient(to bottom, #666, #444); position: absolute; top: 0; left: 0; bottom: 0; width: 0; -webkit-transition: width 300ms ease-in-out; -moz-transition: width 300ms ease-in-out; -ms-transition: width 300ms ease-in-out; -o-transition: width 300ms ease-in-out; transition: width 300ms ease-in-out; } .dropzone .dz-preview.dz-error .dz-error-message { display: block; } .dropzone .dz-preview.dz-error:hover .dz-error-message { opacity: 1; pointer-events: auto; } .dropzone .dz-preview .dz-error-message { pointer-events: none; z-index: 1000; position: absolute; display: block; display: none; opacity: 0; -webkit-transition: opacity 0.3s ease; -moz-transition: opacity 0.3s ease; -ms-transition: opacity 0.3s ease; -o-transition: opacity 0.3s ease; transition: opacity 0.3s ease; border-radius: 8px; font-size: 13px; top: 130px; left: -10px; width: 140px; background: #be2626; background: linear-gradient(to bottom, #be2626, #a92222); padding: 0.5em 1.2em; color: white; } .dropzone .dz-preview .dz-error-message:after { content: ''; position: absolute; top: -6px; left: 64px; width: 0; height: 0; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #be2626; } dropzone/dropzone.js 0000644 00000355743 14704452271 0010631 0 ustar 00 "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /* * * More info at [www.dropzonejs.com](http://www.dropzonejs.com) * * Copyright (c) 2012, Matias Meno * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ // The Emitter class provides the ability to call `.on()` on Dropzone to listen // to events. // It is strongly based on component's emitter class, and I removed the // functionality because of the dependency hell with different frameworks. var Emitter = /*#__PURE__*/function () { function Emitter() { _classCallCheck(this, Emitter); } _createClass(Emitter, [{ key: "on", // Add an event listener for given event value: function on(event, fn) { this._callbacks = this._callbacks || {}; // Create namespace for this event if (!this._callbacks[event]) { this._callbacks[event] = []; } this._callbacks[event].push(fn); return this; } }, { key: "emit", value: function emit(event) { this._callbacks = this._callbacks || {}; var callbacks = this._callbacks[event]; if (callbacks) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var _iterator = _createForOfIteratorHelper(callbacks), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var callback = _step.value; callback.apply(this, args); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } return this; } // Remove event listener for given event. If fn is not provided, all event // listeners for that event will be removed. If neither is provided, all // event listeners will be removed. }, { key: "off", value: function off(event, fn) { if (!this._callbacks || arguments.length === 0) { this._callbacks = {}; return this; } // specific event var callbacks = this._callbacks[event]; if (!callbacks) { return this; } // remove all handlers if (arguments.length === 1) { delete this._callbacks[event]; return this; } // remove specific handler for (var i = 0; i < callbacks.length; i++) { var callback = callbacks[i]; if (callback === fn) { callbacks.splice(i, 1); break; } } return this; } }]); return Emitter; }(); var Dropzone = /*#__PURE__*/function (_Emitter) { _inherits(Dropzone, _Emitter); var _super = _createSuper(Dropzone); _createClass(Dropzone, null, [{ key: "initClass", value: function initClass() { // Exposing the emitter class, mainly for tests this.prototype.Emitter = Emitter; /* This is a list of all available events you can register on a dropzone object. You can register an event handler like this: dropzone.on("dragEnter", function() { }); */ this.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"]; this.prototype.defaultOptions = { /** * Has to be specified on elements other than form (or when the form * doesn't have an `action` attribute). You can also * provide a function that will be called with `files` and * must return the url (since `v3.12.0`) */ url: null, /** * Can be changed to `"put"` if necessary. You can also provide a function * that will be called with `files` and must return the method (since `v3.12.0`). */ method: "post", /** * Will be set on the XHRequest. */ withCredentials: false, /** * The timeout for the XHR requests in milliseconds (since `v4.4.0`). */ timeout: 30000, /** * How many file uploads to process in parallel (See the * Enqueuing file uploads documentation section for more info) */ parallelUploads: 2, /** * Whether to send multiple files in one request. If * this it set to true, then the fallback file input element will * have the `multiple` attribute as well. This option will * also trigger additional events (like `processingmultiple`). See the events * documentation section for more information. */ uploadMultiple: false, /** * Whether you want files to be uploaded in chunks to your server. This can't be * used in combination with `uploadMultiple`. * * See [chunksUploaded](#config-chunksUploaded) for the callback to finalise an upload. */ chunking: false, /** * If `chunking` is enabled, this defines whether **every** file should be chunked, * even if the file size is below chunkSize. This means, that the additional chunk * form data will be submitted and the `chunksUploaded` callback will be invoked. */ forceChunking: false, /** * If `chunking` is `true`, then this defines the chunk size in bytes. */ chunkSize: 2000000, /** * If `true`, the individual chunks of a file are being uploaded simultaneously. */ parallelChunkUploads: false, /** * Whether a chunk should be retried if it fails. */ retryChunks: false, /** * If `retryChunks` is true, how many times should it be retried. */ retryChunksLimit: 3, /** * If not `null` defines how many files this Dropzone handles. If it exceeds, * the event `maxfilesexceeded` will be called. The dropzone element gets the * class `dz-max-files-reached` accordingly so you can provide visual feedback. */ maxFilesize: 256, /** * The name of the file param that gets transferred. * **NOTE**: If you have the option `uploadMultiple` set to `true`, then * Dropzone will append `[]` to the name. */ paramName: "file", /** * Whether thumbnails for images should be generated */ createImageThumbnails: true, /** * In MB. When the filename exceeds this limit, the thumbnail will not be generated. */ maxThumbnailFilesize: 10, /** * If `null`, the ratio of the image will be used to calculate it. */ thumbnailWidth: 120, /** * The same as `thumbnailWidth`. If both are null, images will not be resized. */ thumbnailHeight: 120, /** * How the images should be scaled down in case both, `thumbnailWidth` and `thumbnailHeight` are provided. * Can be either `contain` or `crop`. */ thumbnailMethod: 'crop', /** * If set, images will be resized to these dimensions before being **uploaded**. * If only one, `resizeWidth` **or** `resizeHeight` is provided, the original aspect * ratio of the file will be preserved. * * The `options.transformFile` function uses these options, so if the `transformFile` function * is overridden, these options don't do anything. */ resizeWidth: null, /** * See `resizeWidth`. */ resizeHeight: null, /** * The mime type of the resized image (before it gets uploaded to the server). * If `null` the original mime type will be used. To force jpeg, for example, use `image/jpeg`. * See `resizeWidth` for more information. */ resizeMimeType: null, /** * The quality of the resized images. See `resizeWidth`. */ resizeQuality: 0.8, /** * How the images should be scaled down in case both, `resizeWidth` and `resizeHeight` are provided. * Can be either `contain` or `crop`. */ resizeMethod: 'contain', /** * The base that is used to calculate the filesize. You can change this to * 1024 if you would rather display kibibytes, mebibytes, etc... * 1024 is technically incorrect, because `1024 bytes` are `1 kibibyte` not `1 kilobyte`. * You can change this to `1024` if you don't care about validity. */ filesizeBase: 1000, /** * Can be used to limit the maximum number of files that will be handled by this Dropzone */ maxFiles: null, /** * An optional object to send additional headers to the server. Eg: * `{ "My-Awesome-Header": "header value" }` */ headers: null, /** * If `true`, the dropzone element itself will be clickable, if `false` * nothing will be clickable. * * You can also pass an HTML element, a CSS selector (for multiple elements) * or an array of those. In that case, all of those elements will trigger an * upload when clicked. */ clickable: true, /** * Whether hidden files in directories should be ignored. */ ignoreHiddenFiles: true, /** * The default implementation of `accept` checks the file's mime type or * extension against this list. This is a comma separated list of mime * types or file extensions. * * Eg.: `image/*,application/pdf,.psd` * * If the Dropzone is `clickable` this option will also be used as * [`accept`](https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept) * parameter on the hidden file input as well. */ acceptedFiles: null, /** * **Deprecated!** * Use acceptedFiles instead. */ acceptedMimeTypes: null, /** * If false, files will be added to the queue but the queue will not be * processed automatically. * This can be useful if you need some additional user input before sending * files (or if you want want all files sent at once). * If you're ready to send the file simply call `myDropzone.processQueue()`. * * See the [enqueuing file uploads](#enqueuing-file-uploads) documentation * section for more information. */ autoProcessQueue: true, /** * If false, files added to the dropzone will not be queued by default. * You'll have to call `enqueueFile(file)` manually. */ autoQueue: true, /** * If `true`, this will add a link to every file preview to remove or cancel (if * already uploading) the file. The `dictCancelUpload`, `dictCancelUploadConfirmation` * and `dictRemoveFile` options are used for the wording. */ addRemoveLinks: false, /** * Defines where to display the file previews – if `null` the * Dropzone element itself is used. Can be a plain `HTMLElement` or a CSS * selector. The element should have the `dropzone-previews` class so * the previews are displayed properly. */ previewsContainer: null, /** * This is the element the hidden input field (which is used when clicking on the * dropzone to trigger file selection) will be appended to. This might * be important in case you use frameworks to switch the content of your page. * * Can be a selector string, or an element directly. */ hiddenInputContainer: "body", /** * If null, no capture type will be specified * If camera, mobile devices will skip the file selection and choose camera * If microphone, mobile devices will skip the file selection and choose the microphone * If camcorder, mobile devices will skip the file selection and choose the camera in video mode * On apple devices multiple must be set to false. AcceptedFiles may need to * be set to an appropriate mime type (e.g. "image/*", "audio/*", or "video/*"). */ capture: null, /** * **Deprecated**. Use `renameFile` instead. */ renameFilename: null, /** * A function that is invoked before the file is uploaded to the server and renames the file. * This function gets the `File` as argument and can use the `file.name`. The actual name of the * file that gets used during the upload can be accessed through `file.upload.filename`. */ renameFile: null, /** * If `true` the fallback will be forced. This is very useful to test your server * implementations first and make sure that everything works as * expected without dropzone if you experience problems, and to test * how your fallbacks will look. */ forceFallback: false, /** * The text used before any files are dropped. */ dictDefaultMessage: "Drop files here to upload", /** * The text that replaces the default message text it the browser is not supported. */ dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.", /** * The text that will be added before the fallback form. * If you provide a fallback element yourself, or if this option is `null` this will * be ignored. */ dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.", /** * If the filesize is too big. * `{{filesize}}` and `{{maxFilesize}}` will be replaced with the respective configuration values. */ dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.", /** * If the file doesn't match the file type. */ dictInvalidFileType: "You can't upload files of this type.", /** * If the server response was invalid. * `{{statusCode}}` will be replaced with the servers status code. */ dictResponseError: "Server responded with {{statusCode}} code.", /** * If `addRemoveLinks` is true, the text to be used for the cancel upload link. */ dictCancelUpload: "Cancel upload", /** * The text that is displayed if an upload was manually canceled */ dictUploadCanceled: "Upload canceled.", /** * If `addRemoveLinks` is true, the text to be used for confirmation when cancelling upload. */ dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?", /** * If `addRemoveLinks` is true, the text to be used to remove a file. */ dictRemoveFile: "Remove file", /** * If this is not null, then the user will be prompted before removing a file. */ dictRemoveFileConfirmation: null, /** * Displayed if `maxFiles` is st and exceeded. * The string `{{maxFiles}}` will be replaced by the configuration value. */ dictMaxFilesExceeded: "You can not upload any more files.", /** * Allows you to translate the different units. Starting with `tb` for terabytes and going down to * `b` for bytes. */ dictFileSizeUnits: { tb: "TB", gb: "GB", mb: "MB", kb: "KB", b: "b" }, /** * Called when dropzone initialized * You can add event listeners here */ init: function init() {}, /** * Can be an **object** of additional parameters to transfer to the server, **or** a `Function` * that gets invoked with the `files`, `xhr` and, if it's a chunked upload, `chunk` arguments. In case * of a function, this needs to return a map. * * The default implementation does nothing for normal uploads, but adds relevant information for * chunked uploads. * * This is the same as adding hidden input fields in the form element. */ params: function params(files, xhr, chunk) { if (chunk) { return { dzuuid: chunk.file.upload.uuid, dzchunkindex: chunk.index, dztotalfilesize: chunk.file.size, dzchunksize: this.options.chunkSize, dztotalchunkcount: chunk.file.upload.totalChunkCount, dzchunkbyteoffset: chunk.index * this.options.chunkSize }; } }, /** * A function that gets a [file](https://developer.mozilla.org/en-US/docs/DOM/File) * and a `done` function as parameters. * * If the done function is invoked without arguments, the file is "accepted" and will * be processed. If you pass an error message, the file is rejected, and the error * message will be displayed. * This function will not be called if the file is too big or doesn't match the mime types. */ accept: function accept(file, done) { return done(); }, /** * The callback that will be invoked when all chunks have been uploaded for a file. * It gets the file for which the chunks have been uploaded as the first parameter, * and the `done` function as second. `done()` needs to be invoked when everything * needed to finish the upload process is done. */ chunksUploaded: function chunksUploaded(file, done) { done(); }, /** * Gets called when the browser is not supported. * The default implementation shows the fallback input field and adds * a text. */ fallback: function fallback() { // This code should pass in IE7... :( var messageElement; this.element.className = "".concat(this.element.className, " dz-browser-not-supported"); var _iterator2 = _createForOfIteratorHelper(this.element.getElementsByTagName("div")), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var child = _step2.value; if (/(^| )dz-message($| )/.test(child.className)) { messageElement = child; child.className = "dz-message"; // Removes the 'dz-default' class break; } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } if (!messageElement) { messageElement = Dropzone.createElement("<div class=\"dz-message\"><span></span></div>"); this.element.appendChild(messageElement); } var span = messageElement.getElementsByTagName("span")[0]; if (span) { if (span.textContent != null) { span.textContent = this.options.dictFallbackMessage; } else if (span.innerText != null) { span.innerText = this.options.dictFallbackMessage; } } return this.element.appendChild(this.getFallbackForm()); }, /** * Gets called to calculate the thumbnail dimensions. * * It gets `file`, `width` and `height` (both may be `null`) as parameters and must return an object containing: * * - `srcWidth` & `srcHeight` (required) * - `trgWidth` & `trgHeight` (required) * - `srcX` & `srcY` (optional, default `0`) * - `trgX` & `trgY` (optional, default `0`) * * Those values are going to be used by `ctx.drawImage()`. */ resize: function resize(file, width, height, resizeMethod) { var info = { srcX: 0, srcY: 0, srcWidth: file.width, srcHeight: file.height }; var srcRatio = file.width / file.height; // Automatically calculate dimensions if not specified if (width == null && height == null) { width = info.srcWidth; height = info.srcHeight; } else if (width == null) { width = height * srcRatio; } else if (height == null) { height = width / srcRatio; } // Make sure images aren't upscaled width = Math.min(width, info.srcWidth); height = Math.min(height, info.srcHeight); var trgRatio = width / height; if (info.srcWidth > width || info.srcHeight > height) { // Image is bigger and needs rescaling if (resizeMethod === 'crop') { if (srcRatio > trgRatio) { info.srcHeight = file.height; info.srcWidth = info.srcHeight * trgRatio; } else { info.srcWidth = file.width; info.srcHeight = info.srcWidth / trgRatio; } } else if (resizeMethod === 'contain') { // Method 'contain' if (srcRatio > trgRatio) { height = width / srcRatio; } else { width = height * srcRatio; } } else { throw new Error("Unknown resizeMethod '".concat(resizeMethod, "'")); } } info.srcX = (file.width - info.srcWidth) / 2; info.srcY = (file.height - info.srcHeight) / 2; info.trgWidth = width; info.trgHeight = height; return info; }, /** * Can be used to transform the file (for example, resize an image if necessary). * * The default implementation uses `resizeWidth` and `resizeHeight` (if provided) and resizes * images according to those dimensions. * * Gets the `file` as the first parameter, and a `done()` function as the second, that needs * to be invoked with the file when the transformation is done. */ transformFile: function transformFile(file, done) { if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) { return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done); } else { return done(file); } }, /** * A string that contains the template used for each dropped * file. Change it to fulfill your needs but make sure to properly * provide all elements. * * If you want to use an actual HTML element instead of providing a String * as a config option, you could create a div with the id `tpl`, * put the template inside it and provide the element like this: * * document * .querySelector('#tpl') * .innerHTML * */ previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n <div class=\"dz-image\"><img data-dz-thumbnail /></div>\n <div class=\"dz-details\">\n <div class=\"dz-size\"><span data-dz-size></span></div>\n <div class=\"dz-filename\"><span data-dz-name></span></div>\n </div>\n <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n <div class=\"dz-success-mark\">\n <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Check</title>\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\"></path>\n </g>\n </svg>\n </div>\n <div class=\"dz-error-mark\">\n <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Error</title>\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\">\n <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>", // END OPTIONS // (Required by the dropzone documentation parser) /* Those functions register themselves to the events on init and handle all the user interface specific stuff. Overwriting them won't break the upload but can break the way it's displayed. You can overwrite them if you don't like the default behavior. If you just want to add an additional event handler, register it on the dropzone object and don't overwrite those options. */ // Those are self explanatory and simply concern the DragnDrop. drop: function drop(e) { return this.element.classList.remove("dz-drag-hover"); }, dragstart: function dragstart(e) {}, dragend: function dragend(e) { return this.element.classList.remove("dz-drag-hover"); }, dragenter: function dragenter(e) { return this.element.classList.add("dz-drag-hover"); }, dragover: function dragover(e) { return this.element.classList.add("dz-drag-hover"); }, dragleave: function dragleave(e) { return this.element.classList.remove("dz-drag-hover"); }, paste: function paste(e) {}, // Called whenever there are no files left in the dropzone anymore, and the // dropzone should be displayed as if in the initial state. reset: function reset() { return this.element.classList.remove("dz-started"); }, // Called when a file is added to the queue // Receives `file` addedfile: function addedfile(file) { var _this2 = this; if (this.element === this.previewsContainer) { this.element.classList.add("dz-started"); } if (this.previewsContainer) { file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim()); file.previewTemplate = file.previewElement; // Backwards compatibility this.previewsContainer.appendChild(file.previewElement); var _iterator3 = _createForOfIteratorHelper(file.previewElement.querySelectorAll("[data-dz-name]")), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var node = _step3.value; node.textContent = file.name; } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } var _iterator4 = _createForOfIteratorHelper(file.previewElement.querySelectorAll("[data-dz-size]")), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { node = _step4.value; node.innerHTML = this.filesize(file.size); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } if (this.options.addRemoveLinks) { file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>".concat(this.options.dictRemoveFile, "</a>")); file.previewElement.appendChild(file._removeLink); } var removeFileEvent = function removeFileEvent(e) { e.preventDefault(); e.stopPropagation(); if (file.status === Dropzone.UPLOADING) { return Dropzone.confirm(_this2.options.dictCancelUploadConfirmation, function () { return _this2.removeFile(file); }); } else { if (_this2.options.dictRemoveFileConfirmation) { return Dropzone.confirm(_this2.options.dictRemoveFileConfirmation, function () { return _this2.removeFile(file); }); } else { return _this2.removeFile(file); } } }; var _iterator5 = _createForOfIteratorHelper(file.previewElement.querySelectorAll("[data-dz-remove]")), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var removeLink = _step5.value; removeLink.addEventListener("click", removeFileEvent); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } } }, // Called whenever a file is removed. removedfile: function removedfile(file) { if (file.previewElement != null && file.previewElement.parentNode != null) { file.previewElement.parentNode.removeChild(file.previewElement); } return this._updateMaxFilesReachedClass(); }, // Called when a thumbnail has been generated // Receives `file` and `dataUrl` thumbnail: function thumbnail(file, dataUrl) { if (file.previewElement) { file.previewElement.classList.remove("dz-file-preview"); var _iterator6 = _createForOfIteratorHelper(file.previewElement.querySelectorAll("[data-dz-thumbnail]")), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var thumbnailElement = _step6.value; thumbnailElement.alt = file.name; thumbnailElement.src = dataUrl; } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } return setTimeout(function () { return file.previewElement.classList.add("dz-image-preview"); }, 1); } }, // Called whenever an error occurs // Receives `file` and `message` error: function error(file, message) { if (file.previewElement) { file.previewElement.classList.add("dz-error"); if (typeof message !== "string" && message.error) { message = message.error; } var _iterator7 = _createForOfIteratorHelper(file.previewElement.querySelectorAll("[data-dz-errormessage]")), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var node = _step7.value; node.textContent = message; } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } } }, errormultiple: function errormultiple() {}, // Called when a file gets processed. Since there is a cue, not all added // files are processed immediately. // Receives `file` processing: function processing(file) { if (file.previewElement) { file.previewElement.classList.add("dz-processing"); if (file._removeLink) { return file._removeLink.innerHTML = this.options.dictCancelUpload; } } }, processingmultiple: function processingmultiple() {}, // Called whenever the upload progress gets updated. // Receives `file`, `progress` (percentage 0-100) and `bytesSent`. // To get the total number of bytes of the file, use `file.size` uploadprogress: function uploadprogress(file, progress, bytesSent) { if (file.previewElement) { var _iterator8 = _createForOfIteratorHelper(file.previewElement.querySelectorAll("[data-dz-uploadprogress]")), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var node = _step8.value; node.nodeName === 'PROGRESS' ? node.value = progress : node.style.width = "".concat(progress, "%"); } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } } }, // Called whenever the total upload progress gets updated. // Called with totalUploadProgress (0-100), totalBytes and totalBytesSent totaluploadprogress: function totaluploadprogress() {}, // Called just before the file is sent. Gets the `xhr` object as second // parameter, so you can modify it (for example to add a CSRF token) and a // `formData` object to add additional information. sending: function sending() {}, sendingmultiple: function sendingmultiple() {}, // When the complete upload is finished and successful // Receives `file` success: function success(file) { if (file.previewElement) { return file.previewElement.classList.add("dz-success"); } }, successmultiple: function successmultiple() {}, // When the upload is canceled. canceled: function canceled(file) { return this.emit("error", file, this.options.dictUploadCanceled); }, canceledmultiple: function canceledmultiple() {}, // When the upload is finished, either with success or an error. // Receives `file` complete: function complete(file) { if (file._removeLink) { file._removeLink.innerHTML = this.options.dictRemoveFile; } if (file.previewElement) { return file.previewElement.classList.add("dz-complete"); } }, completemultiple: function completemultiple() {}, maxfilesexceeded: function maxfilesexceeded() {}, maxfilesreached: function maxfilesreached() {}, queuecomplete: function queuecomplete() {}, addedfiles: function addedfiles() {} }; this.prototype._thumbnailQueue = []; this.prototype._processingThumbnail = false; } // global utility }, { key: "extend", value: function extend(target) { for (var _len2 = arguments.length, objects = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { objects[_key2 - 1] = arguments[_key2]; } for (var _i = 0, _objects = objects; _i < _objects.length; _i++) { var object = _objects[_i]; for (var key in object) { var val = object[key]; target[key] = val; } } return target; } }]); function Dropzone(el, options) { var _this; _classCallCheck(this, Dropzone); _this = _super.call(this); var fallback, left; _this.element = el; // For backwards compatibility since the version was in the prototype previously _this.version = Dropzone.version; _this.defaultOptions.previewTemplate = _this.defaultOptions.previewTemplate.replace(/\n*/g, ""); _this.clickableElements = []; _this.listeners = []; _this.files = []; // All files if (typeof _this.element === "string") { _this.element = document.querySelector(_this.element); } // Not checking if instance of HTMLElement or Element since IE9 is extremely weird. if (!_this.element || _this.element.nodeType == null) { throw new Error("Invalid dropzone element."); } if (_this.element.dropzone) { throw new Error("Dropzone already attached."); } // Now add this dropzone to the instances. Dropzone.instances.push(_assertThisInitialized(_this)); // Put the dropzone inside the element itself. _this.element.dropzone = _assertThisInitialized(_this); var elementOptions = (left = Dropzone.optionsForElement(_this.element)) != null ? left : {}; _this.options = Dropzone.extend({}, _this.defaultOptions, elementOptions, options != null ? options : {}); // If the browser failed, just call the fallback and leave if (_this.options.forceFallback || !Dropzone.isBrowserSupported()) { return _possibleConstructorReturn(_this, _this.options.fallback.call(_assertThisInitialized(_this))); } // @options.url = @element.getAttribute "action" unless @options.url? if (_this.options.url == null) { _this.options.url = _this.element.getAttribute("action"); } if (!_this.options.url) { throw new Error("No URL provided."); } if (_this.options.acceptedFiles && _this.options.acceptedMimeTypes) { throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated."); } if (_this.options.uploadMultiple && _this.options.chunking) { throw new Error('You cannot set both: uploadMultiple and chunking.'); } // Backwards compatibility if (_this.options.acceptedMimeTypes) { _this.options.acceptedFiles = _this.options.acceptedMimeTypes; delete _this.options.acceptedMimeTypes; } // Backwards compatibility if (_this.options.renameFilename != null) { _this.options.renameFile = function (file) { return _this.options.renameFilename.call(_assertThisInitialized(_this), file.name, file); }; } if (typeof _this.options.method === 'string') { _this.options.method = _this.options.method.toUpperCase(); } if ((fallback = _this.getExistingFallback()) && fallback.parentNode) { // Remove the fallback fallback.parentNode.removeChild(fallback); } // Display previews in the previewsContainer element or the Dropzone element unless explicitly set to false if (_this.options.previewsContainer !== false) { if (_this.options.previewsContainer) { _this.previewsContainer = Dropzone.getElement(_this.options.previewsContainer, "previewsContainer"); } else { _this.previewsContainer = _this.element; } } if (_this.options.clickable) { if (_this.options.clickable === true) { _this.clickableElements = [_this.element]; } else { _this.clickableElements = Dropzone.getElements(_this.options.clickable, "clickable"); } } _this.init(); return _this; } // Returns all files that have been accepted _createClass(Dropzone, [{ key: "getAcceptedFiles", value: function getAcceptedFiles() { return this.files.filter(function (file) { return file.accepted; }).map(function (file) { return file; }); } // Returns all files that have been rejected // Not sure when that's going to be useful, but added for completeness. }, { key: "getRejectedFiles", value: function getRejectedFiles() { return this.files.filter(function (file) { return !file.accepted; }).map(function (file) { return file; }); } }, { key: "getFilesWithStatus", value: function getFilesWithStatus(status) { return this.files.filter(function (file) { return file.status === status; }).map(function (file) { return file; }); } // Returns all files that are in the queue }, { key: "getQueuedFiles", value: function getQueuedFiles() { return this.getFilesWithStatus(Dropzone.QUEUED); } }, { key: "getUploadingFiles", value: function getUploadingFiles() { return this.getFilesWithStatus(Dropzone.UPLOADING); } }, { key: "getAddedFiles", value: function getAddedFiles() { return this.getFilesWithStatus(Dropzone.ADDED); } // Files that are either queued or uploading }, { key: "getActiveFiles", value: function getActiveFiles() { return this.files.filter(function (file) { return file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED; }).map(function (file) { return file; }); } // The function that gets called when Dropzone is initialized. You // can (and should) setup event listeners inside this function. }, { key: "init", value: function init() { var _this3 = this; // In case it isn't set already if (this.element.tagName === "form") { this.element.setAttribute("enctype", "multipart/form-data"); } if (this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message")) { this.element.appendChild(Dropzone.createElement("<div class=\"dz-default dz-message\"><button class=\"dz-button\" type=\"button\">".concat(this.options.dictDefaultMessage, "</button></div>"))); } if (this.clickableElements.length) { var setupHiddenFileInput = function setupHiddenFileInput() { if (_this3.hiddenFileInput) { _this3.hiddenFileInput.parentNode.removeChild(_this3.hiddenFileInput); } _this3.hiddenFileInput = document.createElement("input"); _this3.hiddenFileInput.setAttribute("type", "file"); if (_this3.options.maxFiles === null || _this3.options.maxFiles > 1) { _this3.hiddenFileInput.setAttribute("multiple", "multiple"); } _this3.hiddenFileInput.className = "dz-hidden-input"; if (_this3.options.acceptedFiles !== null) { _this3.hiddenFileInput.setAttribute("accept", _this3.options.acceptedFiles); } if (_this3.options.capture !== null) { _this3.hiddenFileInput.setAttribute("capture", _this3.options.capture); } // Not setting `display="none"` because some browsers don't accept clicks // on elements that aren't displayed. _this3.hiddenFileInput.style.visibility = "hidden"; _this3.hiddenFileInput.style.position = "absolute"; _this3.hiddenFileInput.style.top = "0"; _this3.hiddenFileInput.style.left = "0"; _this3.hiddenFileInput.style.height = "0"; _this3.hiddenFileInput.style.width = "0"; Dropzone.getElement(_this3.options.hiddenInputContainer, 'hiddenInputContainer').appendChild(_this3.hiddenFileInput); return _this3.hiddenFileInput.addEventListener("change", function () { var files = _this3.hiddenFileInput.files; if (files.length) { var _iterator9 = _createForOfIteratorHelper(files), _step9; try { for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { var file = _step9.value; _this3.addFile(file); } } catch (err) { _iterator9.e(err); } finally { _iterator9.f(); } } _this3.emit("addedfiles", files); return setupHiddenFileInput(); }); }; setupHiddenFileInput(); } this.URL = window.URL !== null ? window.URL : window.webkitURL; // Setup all event listeners on the Dropzone object itself. // They're not in @setupEventListeners() because they shouldn't be removed // again when the dropzone gets disabled. var _iterator10 = _createForOfIteratorHelper(this.events), _step10; try { for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) { var eventName = _step10.value; this.on(eventName, this.options[eventName]); } } catch (err) { _iterator10.e(err); } finally { _iterator10.f(); } this.on("uploadprogress", function () { return _this3.updateTotalUploadProgress(); }); this.on("removedfile", function () { return _this3.updateTotalUploadProgress(); }); this.on("canceled", function (file) { return _this3.emit("complete", file); }); // Emit a `queuecomplete` event if all files finished uploading. this.on("complete", function (file) { if (_this3.getAddedFiles().length === 0 && _this3.getUploadingFiles().length === 0 && _this3.getQueuedFiles().length === 0) { // This needs to be deferred so that `queuecomplete` really triggers after `complete` return setTimeout(function () { return _this3.emit("queuecomplete"); }, 0); } }); var containsFiles = function containsFiles(e) { if (e.dataTransfer.types) { // Because e.dataTransfer.types is an Object in // IE, we need to iterate like this instead of // using e.dataTransfer.types.some() for (var i = 0; i < e.dataTransfer.types.length; i++) { if (e.dataTransfer.types[i] === "Files") return true; } } return false; }; var noPropagation = function noPropagation(e) { // If there are no files, we don't want to stop // propagation so we don't interfere with other // drag and drop behaviour. if (!containsFiles(e)) return; e.stopPropagation(); if (e.preventDefault) { return e.preventDefault(); } else { return e.returnValue = false; } }; // Create the listeners this.listeners = [{ element: this.element, events: { "dragstart": function dragstart(e) { return _this3.emit("dragstart", e); }, "dragenter": function dragenter(e) { noPropagation(e); return _this3.emit("dragenter", e); }, "dragover": function dragover(e) { // Makes it possible to drag files from chrome's download bar // http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar // Try is required to prevent bug in Internet Explorer 11 (SCRIPT65535 exception) var efct; try { efct = e.dataTransfer.effectAllowed; } catch (error) {} e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy'; noPropagation(e); return _this3.emit("dragover", e); }, "dragleave": function dragleave(e) { return _this3.emit("dragleave", e); }, "drop": function drop(e) { noPropagation(e); return _this3.drop(e); }, "dragend": function dragend(e) { return _this3.emit("dragend", e); } } // This is disabled right now, because the browsers don't implement it properly. // "paste": (e) => // noPropagation e // @paste e }]; this.clickableElements.forEach(function (clickableElement) { return _this3.listeners.push({ element: clickableElement, events: { "click": function click(evt) { // Only the actual dropzone or the message element should trigger file selection if (clickableElement !== _this3.element || evt.target === _this3.element || Dropzone.elementInside(evt.target, _this3.element.querySelector(".dz-message"))) { _this3.hiddenFileInput.click(); // Forward the click } return true; } } }); }); this.enable(); return this.options.init.call(this); } // Not fully tested yet }, { key: "destroy", value: function destroy() { this.disable(); this.removeAllFiles(true); if (this.hiddenFileInput != null ? this.hiddenFileInput.parentNode : undefined) { this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput); this.hiddenFileInput = null; } delete this.element.dropzone; return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1); } }, { key: "updateTotalUploadProgress", value: function updateTotalUploadProgress() { var totalUploadProgress; var totalBytesSent = 0; var totalBytes = 0; var activeFiles = this.getActiveFiles(); if (activeFiles.length) { var _iterator11 = _createForOfIteratorHelper(this.getActiveFiles()), _step11; try { for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) { var file = _step11.value; totalBytesSent += file.upload.bytesSent; totalBytes += file.upload.total; } } catch (err) { _iterator11.e(err); } finally { _iterator11.f(); } totalUploadProgress = 100 * totalBytesSent / totalBytes; } else { totalUploadProgress = 100; } return this.emit("totaluploadprogress", totalUploadProgress, totalBytes, totalBytesSent); } // @options.paramName can be a function taking one parameter rather than a string. // A parameter name for a file is obtained simply by calling this with an index number. }, { key: "_getParamName", value: function _getParamName(n) { if (typeof this.options.paramName === "function") { return this.options.paramName(n); } else { return "".concat(this.options.paramName).concat(this.options.uploadMultiple ? "[".concat(n, "]") : ""); } } // If @options.renameFile is a function, // the function will be used to rename the file.name before appending it to the formData }, { key: "_renameFile", value: function _renameFile(file) { if (typeof this.options.renameFile !== "function") { return file.name; } return this.options.renameFile(file); } // Returns a form that can be used as fallback if the browser does not support DragnDrop // // If the dropzone is already a form, only the input field and button are returned. Otherwise a complete form element is provided. // This code has to pass in IE7 :( }, { key: "getFallbackForm", value: function getFallbackForm() { var existingFallback, form; if (existingFallback = this.getExistingFallback()) { return existingFallback; } var fieldsString = "<div class=\"dz-fallback\">"; if (this.options.dictFallbackText) { fieldsString += "<p>".concat(this.options.dictFallbackText, "</p>"); } fieldsString += "<input type=\"file\" name=\"".concat(this._getParamName(0), "\" ").concat(this.options.uploadMultiple ? 'multiple="multiple"' : undefined, " /><input type=\"submit\" value=\"Upload!\"></div>"); var fields = Dropzone.createElement(fieldsString); if (this.element.tagName !== "FORM") { form = Dropzone.createElement("<form action=\"".concat(this.options.url, "\" enctype=\"multipart/form-data\" method=\"").concat(this.options.method, "\"></form>")); form.appendChild(fields); } else { // Make sure that the enctype and method attributes are set properly this.element.setAttribute("enctype", "multipart/form-data"); this.element.setAttribute("method", this.options.method); } return form != null ? form : fields; } // Returns the fallback elements if they exist already // // This code has to pass in IE7 :( }, { key: "getExistingFallback", value: function getExistingFallback() { var getFallback = function getFallback(elements) { var _iterator12 = _createForOfIteratorHelper(elements), _step12; try { for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) { var el = _step12.value; if (/(^| )fallback($| )/.test(el.className)) { return el; } } } catch (err) { _iterator12.e(err); } finally { _iterator12.f(); } }; for (var _i2 = 0, _arr = ["div", "form"]; _i2 < _arr.length; _i2++) { var tagName = _arr[_i2]; var fallback; if (fallback = getFallback(this.element.getElementsByTagName(tagName))) { return fallback; } } } // Activates all listeners stored in @listeners }, { key: "setupEventListeners", value: function setupEventListeners() { return this.listeners.map(function (elementListeners) { return function () { var result = []; for (var event in elementListeners.events) { var listener = elementListeners.events[event]; result.push(elementListeners.element.addEventListener(event, listener, false)); } return result; }(); }); } // Deactivates all listeners stored in @listeners }, { key: "removeEventListeners", value: function removeEventListeners() { return this.listeners.map(function (elementListeners) { return function () { var result = []; for (var event in elementListeners.events) { var listener = elementListeners.events[event]; result.push(elementListeners.element.removeEventListener(event, listener, false)); } return result; }(); }); } // Removes all event listeners and cancels all files in the queue or being processed. }, { key: "disable", value: function disable() { var _this4 = this; this.clickableElements.forEach(function (element) { return element.classList.remove("dz-clickable"); }); this.removeEventListeners(); this.disabled = true; return this.files.map(function (file) { return _this4.cancelUpload(file); }); } }, { key: "enable", value: function enable() { delete this.disabled; this.clickableElements.forEach(function (element) { return element.classList.add("dz-clickable"); }); return this.setupEventListeners(); } // Returns a nicely formatted filesize }, { key: "filesize", value: function filesize(size) { var selectedSize = 0; var selectedUnit = "b"; if (size > 0) { var units = ['tb', 'gb', 'mb', 'kb', 'b']; for (var i = 0; i < units.length; i++) { var unit = units[i]; var cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10; if (size >= cutoff) { selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i); selectedUnit = unit; break; } } selectedSize = Math.round(10 * selectedSize) / 10; // Cutting of digits } return "<strong>".concat(selectedSize, "</strong> ").concat(this.options.dictFileSizeUnits[selectedUnit]); } // Adds or removes the `dz-max-files-reached` class from the form. }, { key: "_updateMaxFilesReachedClass", value: function _updateMaxFilesReachedClass() { if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) { if (this.getAcceptedFiles().length === this.options.maxFiles) { this.emit('maxfilesreached', this.files); } return this.element.classList.add("dz-max-files-reached"); } else { return this.element.classList.remove("dz-max-files-reached"); } } }, { key: "drop", value: function drop(e) { if (!e.dataTransfer) { return; } this.emit("drop", e); // Convert the FileList to an Array // This is necessary for IE11 var files = []; for (var i = 0; i < e.dataTransfer.files.length; i++) { files[i] = e.dataTransfer.files[i]; } // Even if it's a folder, files.length will contain the folders. if (files.length) { var items = e.dataTransfer.items; if (items && items.length && items[0].webkitGetAsEntry != null) { // The browser supports dropping of folders, so handle items instead of files this._addFilesFromItems(items); } else { this.handleFiles(files); } } this.emit("addedfiles", files); } }, { key: "paste", value: function paste(e) { if (__guard__(e != null ? e.clipboardData : undefined, function (x) { return x.items; }) == null) { return; } this.emit("paste", e); var items = e.clipboardData.items; if (items.length) { return this._addFilesFromItems(items); } } }, { key: "handleFiles", value: function handleFiles(files) { var _iterator13 = _createForOfIteratorHelper(files), _step13; try { for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) { var file = _step13.value; this.addFile(file); } } catch (err) { _iterator13.e(err); } finally { _iterator13.f(); } } // When a folder is dropped (or files are pasted), items must be handled // instead of files. }, { key: "_addFilesFromItems", value: function _addFilesFromItems(items) { var _this5 = this; return function () { var result = []; var _iterator14 = _createForOfIteratorHelper(items), _step14; try { for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) { var item = _step14.value; var entry; if (item.webkitGetAsEntry != null && (entry = item.webkitGetAsEntry())) { if (entry.isFile) { result.push(_this5.addFile(item.getAsFile())); } else if (entry.isDirectory) { // Append all files from that directory to files result.push(_this5._addFilesFromDirectory(entry, entry.name)); } else { result.push(undefined); } } else if (item.getAsFile != null) { if (item.kind == null || item.kind === "file") { result.push(_this5.addFile(item.getAsFile())); } else { result.push(undefined); } } else { result.push(undefined); } } } catch (err) { _iterator14.e(err); } finally { _iterator14.f(); } return result; }(); } // Goes through the directory, and adds each file it finds recursively }, { key: "_addFilesFromDirectory", value: function _addFilesFromDirectory(directory, path) { var _this6 = this; var dirReader = directory.createReader(); var errorHandler = function errorHandler(error) { return __guardMethod__(console, 'log', function (o) { return o.log(error); }); }; var readEntries = function readEntries() { return dirReader.readEntries(function (entries) { if (entries.length > 0) { var _iterator15 = _createForOfIteratorHelper(entries), _step15; try { for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) { var entry = _step15.value; if (entry.isFile) { entry.file(function (file) { if (_this6.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') { return; } file.fullPath = "".concat(path, "/").concat(file.name); return _this6.addFile(file); }); } else if (entry.isDirectory) { _this6._addFilesFromDirectory(entry, "".concat(path, "/").concat(entry.name)); } } // Recursively call readEntries() again, since browser only handle // the first 100 entries. // See: https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#readEntries } catch (err) { _iterator15.e(err); } finally { _iterator15.f(); } readEntries(); } return null; }, errorHandler); }; return readEntries(); } // If `done()` is called without argument the file is accepted // If you call it with an error message, the file is rejected // (This allows for asynchronous validation) // // This function checks the filesize, and if the file.type passes the // `acceptedFiles` check. }, { key: "accept", value: function accept(file, done) { if (this.options.maxFilesize && file.size > this.options.maxFilesize * 1024 * 1024) { done(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(file.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize)); } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) { done(this.options.dictInvalidFileType); } else if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) { done(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles)); this.emit("maxfilesexceeded", file); } else { this.options.accept.call(this, file, done); } } }, { key: "addFile", value: function addFile(file) { var _this7 = this; file.upload = { uuid: Dropzone.uuidv4(), progress: 0, // Setting the total upload size to file.size for the beginning // It's actual different than the size to be transmitted. total: file.size, bytesSent: 0, filename: this._renameFile(file) // Not setting chunking information here, because the acutal data — and // thus the chunks — might change if `options.transformFile` is set // and does something to the data. }; this.files.push(file); file.status = Dropzone.ADDED; this.emit("addedfile", file); this._enqueueThumbnail(file); this.accept(file, function (error) { if (error) { file.accepted = false; _this7._errorProcessing([file], error); // Will set the file.status } else { file.accepted = true; if (_this7.options.autoQueue) { _this7.enqueueFile(file); } // Will set .accepted = true } _this7._updateMaxFilesReachedClass(); }); } // Wrapper for enqueueFile }, { key: "enqueueFiles", value: function enqueueFiles(files) { var _iterator16 = _createForOfIteratorHelper(files), _step16; try { for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) { var file = _step16.value; this.enqueueFile(file); } } catch (err) { _iterator16.e(err); } finally { _iterator16.f(); } return null; } }, { key: "enqueueFile", value: function enqueueFile(file) { var _this8 = this; if (file.status === Dropzone.ADDED && file.accepted === true) { file.status = Dropzone.QUEUED; if (this.options.autoProcessQueue) { return setTimeout(function () { return _this8.processQueue(); }, 0); // Deferring the call } } else { throw new Error("This file can't be queued because it has already been processed or was rejected."); } } }, { key: "_enqueueThumbnail", value: function _enqueueThumbnail(file) { var _this9 = this; if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) { this._thumbnailQueue.push(file); return setTimeout(function () { return _this9._processThumbnailQueue(); }, 0); // Deferring the call } } }, { key: "_processThumbnailQueue", value: function _processThumbnailQueue() { var _this10 = this; if (this._processingThumbnail || this._thumbnailQueue.length === 0) { return; } this._processingThumbnail = true; var file = this._thumbnailQueue.shift(); return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, function (dataUrl) { _this10.emit("thumbnail", file, dataUrl); _this10._processingThumbnail = false; return _this10._processThumbnailQueue(); }); } // Can be called by the user to remove a file }, { key: "removeFile", value: function removeFile(file) { if (file.status === Dropzone.UPLOADING) { this.cancelUpload(file); } this.files = without(this.files, file); this.emit("removedfile", file); if (this.files.length === 0) { return this.emit("reset"); } } // Removes all files that aren't currently processed from the list }, { key: "removeAllFiles", value: function removeAllFiles(cancelIfNecessary) { // Create a copy of files since removeFile() changes the @files array. if (cancelIfNecessary == null) { cancelIfNecessary = false; } var _iterator17 = _createForOfIteratorHelper(this.files.slice()), _step17; try { for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) { var file = _step17.value; if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) { this.removeFile(file); } } } catch (err) { _iterator17.e(err); } finally { _iterator17.f(); } return null; } // Resizes an image before it gets sent to the server. This function is the default behavior of // `options.transformFile` if `resizeWidth` or `resizeHeight` are set. The callback is invoked with // the resized blob. }, { key: "resizeImage", value: function resizeImage(file, width, height, resizeMethod, callback) { var _this11 = this; return this.createThumbnail(file, width, height, resizeMethod, true, function (dataUrl, canvas) { if (canvas == null) { // The image has not been resized return callback(file); } else { var resizeMimeType = _this11.options.resizeMimeType; if (resizeMimeType == null) { resizeMimeType = file.type; } var resizedDataURL = canvas.toDataURL(resizeMimeType, _this11.options.resizeQuality); if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') { // Now add the original EXIF information resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL); } return callback(Dropzone.dataURItoBlob(resizedDataURL)); } }); } }, { key: "createThumbnail", value: function createThumbnail(file, width, height, resizeMethod, fixOrientation, callback) { var _this12 = this; var fileReader = new FileReader(); fileReader.onload = function () { file.dataURL = fileReader.result; // Don't bother creating a thumbnail for SVG images since they're vector if (file.type === "image/svg+xml") { if (callback != null) { callback(fileReader.result); } return; } _this12.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback); }; fileReader.readAsDataURL(file); } // `mockFile` needs to have these attributes: // // { name: 'name', size: 12345, imageUrl: '' } // // `callback` will be invoked when the image has been downloaded and displayed. // `crossOrigin` will be added to the `img` tag when accessing the file. }, { key: "displayExistingFile", value: function displayExistingFile(mockFile, imageUrl, callback, crossOrigin) { var _this13 = this; var resizeThumbnail = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; this.emit("addedfile", mockFile); this.emit("complete", mockFile); if (!resizeThumbnail) { this.emit("thumbnail", mockFile, imageUrl); if (callback) callback(); } else { var onDone = function onDone(thumbnail) { _this13.emit('thumbnail', mockFile, thumbnail); if (callback) callback(); }; mockFile.dataURL = imageUrl; this.createThumbnailFromUrl(mockFile, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.resizeMethod, this.options.fixOrientation, onDone, crossOrigin); } } }, { key: "createThumbnailFromUrl", value: function createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) { var _this14 = this; // Not using `new Image` here because of a bug in latest Chrome versions. // See https://github.com/enyo/dropzone/pull/226 var img = document.createElement("img"); if (crossOrigin) { img.crossOrigin = crossOrigin; } // fixOrientation is not needed anymore with browsers handling imageOrientation fixOrientation = getComputedStyle(document.body)['imageOrientation'] == 'from-image' ? false : fixOrientation; img.onload = function () { var loadExif = function loadExif(callback) { return callback(1); }; if (typeof EXIF !== 'undefined' && EXIF !== null && fixOrientation) { loadExif = function loadExif(callback) { return EXIF.getData(img, function () { return callback(EXIF.getTag(this, 'Orientation')); }); }; } return loadExif(function (orientation) { file.width = img.width; file.height = img.height; var resizeInfo = _this14.options.resize.call(_this14, file, width, height, resizeMethod); var canvas = document.createElement("canvas"); var ctx = canvas.getContext("2d"); canvas.width = resizeInfo.trgWidth; canvas.height = resizeInfo.trgHeight; if (orientation > 4) { canvas.width = resizeInfo.trgHeight; canvas.height = resizeInfo.trgWidth; } switch (orientation) { case 2: // horizontal flip ctx.translate(canvas.width, 0); ctx.scale(-1, 1); break; case 3: // 180° rotate left ctx.translate(canvas.width, canvas.height); ctx.rotate(Math.PI); break; case 4: // vertical flip ctx.translate(0, canvas.height); ctx.scale(1, -1); break; case 5: // vertical flip + 90 rotate right ctx.rotate(0.5 * Math.PI); ctx.scale(1, -1); break; case 6: // 90° rotate right ctx.rotate(0.5 * Math.PI); ctx.translate(0, -canvas.width); break; case 7: // horizontal flip + 90 rotate right ctx.rotate(0.5 * Math.PI); ctx.translate(canvas.height, -canvas.width); ctx.scale(-1, 1); break; case 8: // 90° rotate left ctx.rotate(-0.5 * Math.PI); ctx.translate(-canvas.height, 0); break; } // This is a bugfix for iOS' scaling bug. drawImageIOSFix(ctx, img, resizeInfo.srcX != null ? resizeInfo.srcX : 0, resizeInfo.srcY != null ? resizeInfo.srcY : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, resizeInfo.trgX != null ? resizeInfo.trgX : 0, resizeInfo.trgY != null ? resizeInfo.trgY : 0, resizeInfo.trgWidth, resizeInfo.trgHeight); var thumbnail = canvas.toDataURL("image/png"); if (callback != null) { return callback(thumbnail, canvas); } }); }; if (callback != null) { img.onerror = callback; } return img.src = file.dataURL; } // Goes through the queue and processes files if there aren't too many already. }, { key: "processQueue", value: function processQueue() { var parallelUploads = this.options.parallelUploads; var processingLength = this.getUploadingFiles().length; var i = processingLength; // There are already at least as many files uploading than should be if (processingLength >= parallelUploads) { return; } var queuedFiles = this.getQueuedFiles(); if (!(queuedFiles.length > 0)) { return; } if (this.options.uploadMultiple) { // The files should be uploaded in one request return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength)); } else { while (i < parallelUploads) { if (!queuedFiles.length) { return; } // Nothing left to process this.processFile(queuedFiles.shift()); i++; } } } // Wrapper for `processFiles` }, { key: "processFile", value: function processFile(file) { return this.processFiles([file]); } // Loads the file, then calls finishedLoading() }, { key: "processFiles", value: function processFiles(files) { var _iterator18 = _createForOfIteratorHelper(files), _step18; try { for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) { var file = _step18.value; file.processing = true; // Backwards compatibility file.status = Dropzone.UPLOADING; this.emit("processing", file); } } catch (err) { _iterator18.e(err); } finally { _iterator18.f(); } if (this.options.uploadMultiple) { this.emit("processingmultiple", files); } return this.uploadFiles(files); } }, { key: "_getFilesWithXhr", value: function _getFilesWithXhr(xhr) { var files; return files = this.files.filter(function (file) { return file.xhr === xhr; }).map(function (file) { return file; }); } // Cancels the file upload and sets the status to CANCELED // **if** the file is actually being uploaded. // If it's still in the queue, the file is being removed from it and the status // set to CANCELED. }, { key: "cancelUpload", value: function cancelUpload(file) { if (file.status === Dropzone.UPLOADING) { var groupedFiles = this._getFilesWithXhr(file.xhr); var _iterator19 = _createForOfIteratorHelper(groupedFiles), _step19; try { for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) { var groupedFile = _step19.value; groupedFile.status = Dropzone.CANCELED; } } catch (err) { _iterator19.e(err); } finally { _iterator19.f(); } if (typeof file.xhr !== 'undefined') { file.xhr.abort(); } var _iterator20 = _createForOfIteratorHelper(groupedFiles), _step20; try { for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) { var _groupedFile = _step20.value; this.emit("canceled", _groupedFile); } } catch (err) { _iterator20.e(err); } finally { _iterator20.f(); } if (this.options.uploadMultiple) { this.emit("canceledmultiple", groupedFiles); } } else if (file.status === Dropzone.ADDED || file.status === Dropzone.QUEUED) { file.status = Dropzone.CANCELED; this.emit("canceled", file); if (this.options.uploadMultiple) { this.emit("canceledmultiple", [file]); } } if (this.options.autoProcessQueue) { return this.processQueue(); } } }, { key: "resolveOption", value: function resolveOption(option) { if (typeof option === 'function') { for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { args[_key3 - 1] = arguments[_key3]; } return option.apply(this, args); } return option; } }, { key: "uploadFile", value: function uploadFile(file) { return this.uploadFiles([file]); } }, { key: "uploadFiles", value: function uploadFiles(files) { var _this15 = this; this._transformFiles(files, function (transformedFiles) { if (_this15.options.chunking) { // Chunking is not allowed to be used with `uploadMultiple` so we know // that there is only __one__file. var transformedFile = transformedFiles[0]; files[0].upload.chunked = _this15.options.chunking && (_this15.options.forceChunking || transformedFile.size > _this15.options.chunkSize); files[0].upload.totalChunkCount = Math.ceil(transformedFile.size / _this15.options.chunkSize); } if (files[0].upload.chunked) { // This file should be sent in chunks! // If the chunking option is set, we **know** that there can only be **one** file, since // uploadMultiple is not allowed with this option. var file = files[0]; var _transformedFile = transformedFiles[0]; var startedChunkCount = 0; file.upload.chunks = []; var handleNextChunk = function handleNextChunk() { var chunkIndex = 0; // Find the next item in file.upload.chunks that is not defined yet. while (file.upload.chunks[chunkIndex] !== undefined) { chunkIndex++; } // This means, that all chunks have already been started. if (chunkIndex >= file.upload.totalChunkCount) return; startedChunkCount++; var start = chunkIndex * _this15.options.chunkSize; var end = Math.min(start + _this15.options.chunkSize, _transformedFile.size); var dataBlock = { name: _this15._getParamName(0), data: _transformedFile.webkitSlice ? _transformedFile.webkitSlice(start, end) : _transformedFile.slice(start, end), filename: file.upload.filename, chunkIndex: chunkIndex }; file.upload.chunks[chunkIndex] = { file: file, index: chunkIndex, dataBlock: dataBlock, // In case we want to retry. status: Dropzone.UPLOADING, progress: 0, retries: 0 // The number of times this block has been retried. }; _this15._uploadData(files, [dataBlock]); }; file.upload.finishedChunkUpload = function (chunk) { var allFinished = true; chunk.status = Dropzone.SUCCESS; // Clear the data from the chunk chunk.dataBlock = null; // Leaving this reference to xhr intact here will cause memory leaks in some browsers chunk.xhr = null; for (var i = 0; i < file.upload.totalChunkCount; i++) { if (file.upload.chunks[i] === undefined) { return handleNextChunk(); } if (file.upload.chunks[i].status !== Dropzone.SUCCESS) { allFinished = false; } } if (allFinished) { _this15.options.chunksUploaded(file, function () { _this15._finished(files, '', null); }); } }; if (_this15.options.parallelChunkUploads) { for (var i = 0; i < file.upload.totalChunkCount; i++) { handleNextChunk(); } } else { handleNextChunk(); } } else { var dataBlocks = []; for (var _i3 = 0; _i3 < files.length; _i3++) { dataBlocks[_i3] = { name: _this15._getParamName(_i3), data: transformedFiles[_i3], filename: files[_i3].upload.filename }; } _this15._uploadData(files, dataBlocks); } }); } /// Returns the right chunk for given file and xhr }, { key: "_getChunk", value: function _getChunk(file, xhr) { for (var i = 0; i < file.upload.totalChunkCount; i++) { if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].xhr === xhr) { return file.upload.chunks[i]; } } } // This function actually uploads the file(s) to the server. // If dataBlocks contains the actual data to upload (meaning, that this could either be transformed // files, or individual chunks for chunked upload). }, { key: "_uploadData", value: function _uploadData(files, dataBlocks) { var _this16 = this; var xhr = new XMLHttpRequest(); // Put the xhr object in the file objects to be able to reference it later. var _iterator21 = _createForOfIteratorHelper(files), _step21; try { for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) { var file = _step21.value; file.xhr = xhr; } } catch (err) { _iterator21.e(err); } finally { _iterator21.f(); } if (files[0].upload.chunked) { // Put the xhr object in the right chunk object, so it can be associated later, and found with _getChunk files[0].upload.chunks[dataBlocks[0].chunkIndex].xhr = xhr; } var method = this.resolveOption(this.options.method, files); var url = this.resolveOption(this.options.url, files); xhr.open(method, url, true); // Setting the timeout after open because of IE11 issue: https://gitlab.com/meno/dropzone/issues/8 xhr.timeout = this.resolveOption(this.options.timeout, files); // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179 xhr.withCredentials = !!this.options.withCredentials; xhr.onload = function (e) { _this16._finishedUploading(files, xhr, e); }; xhr.ontimeout = function () { _this16._handleUploadError(files, xhr, "Request timedout after ".concat(_this16.options.timeout / 1000, " seconds")); }; xhr.onerror = function () { _this16._handleUploadError(files, xhr); }; // Some browsers do not have the .upload property var progressObj = xhr.upload != null ? xhr.upload : xhr; progressObj.onprogress = function (e) { return _this16._updateFilesUploadProgress(files, xhr, e); }; var headers = { "Accept": "application/json", "Cache-Control": "no-cache", "X-Requested-With": "XMLHttpRequest" }; if (this.options.headers) { Dropzone.extend(headers, this.options.headers); } for (var headerName in headers) { var headerValue = headers[headerName]; if (headerValue) { xhr.setRequestHeader(headerName, headerValue); } } var formData = new FormData(); // Adding all @options parameters if (this.options.params) { var additionalParams = this.options.params; if (typeof additionalParams === 'function') { additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null); } for (var key in additionalParams) { var value = additionalParams[key]; if (Array.isArray(value)) { // The additional parameter contains an array, // so lets iterate over it to attach each value // individually. for (var i = 0; i < value.length; i++) { formData.append(key, value[i]); } } else { formData.append(key, value); } } } // Let the user add additional data if necessary var _iterator22 = _createForOfIteratorHelper(files), _step22; try { for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) { var _file = _step22.value; this.emit("sending", _file, xhr, formData); } } catch (err) { _iterator22.e(err); } finally { _iterator22.f(); } if (this.options.uploadMultiple) { this.emit("sendingmultiple", files, xhr, formData); } this._addFormElementData(formData); // Finally add the files // Has to be last because some servers (eg: S3) expect the file to be the last parameter for (var _i4 = 0; _i4 < dataBlocks.length; _i4++) { var dataBlock = dataBlocks[_i4]; formData.append(dataBlock.name, dataBlock.data, dataBlock.filename); } this.submitRequest(xhr, formData, files); } // Transforms all files with this.options.transformFile and invokes done with the transformed files when done. }, { key: "_transformFiles", value: function _transformFiles(files, done) { var _this17 = this; var transformedFiles = []; // Clumsy way of handling asynchronous calls, until I get to add a proper Future library. var doneCounter = 0; var _loop = function _loop(i) { _this17.options.transformFile.call(_this17, files[i], function (transformedFile) { transformedFiles[i] = transformedFile; if (++doneCounter === files.length) { done(transformedFiles); } }); }; for (var i = 0; i < files.length; i++) { _loop(i); } } // Takes care of adding other input elements of the form to the AJAX request }, { key: "_addFormElementData", value: function _addFormElementData(formData) { // Take care of other input elements if (this.element.tagName === "FORM") { var _iterator23 = _createForOfIteratorHelper(this.element.querySelectorAll("input, textarea, select, button")), _step23; try { for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) { var input = _step23.value; var inputName = input.getAttribute("name"); var inputType = input.getAttribute("type"); if (inputType) inputType = inputType.toLowerCase(); // If the input doesn't have a name, we can't use it. if (typeof inputName === 'undefined' || inputName === null) continue; if (input.tagName === "SELECT" && input.hasAttribute("multiple")) { // Possibly multiple values var _iterator24 = _createForOfIteratorHelper(input.options), _step24; try { for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) { var option = _step24.value; if (option.selected) { formData.append(inputName, option.value); } } } catch (err) { _iterator24.e(err); } finally { _iterator24.f(); } } else if (!inputType || inputType !== "checkbox" && inputType !== "radio" || input.checked) { formData.append(inputName, input.value); } } } catch (err) { _iterator23.e(err); } finally { _iterator23.f(); } } } // Invoked when there is new progress information about given files. // If e is not provided, it is assumed that the upload is finished. }, { key: "_updateFilesUploadProgress", value: function _updateFilesUploadProgress(files, xhr, e) { var progress; if (typeof e !== 'undefined') { progress = 100 * e.loaded / e.total; if (files[0].upload.chunked) { var file = files[0]; // Since this is a chunked upload, we need to update the appropriate chunk progress. var chunk = this._getChunk(file, xhr); chunk.progress = progress; chunk.total = e.total; chunk.bytesSent = e.loaded; var fileProgress = 0, fileTotal, fileBytesSent; file.upload.progress = 0; file.upload.total = 0; file.upload.bytesSent = 0; for (var i = 0; i < file.upload.totalChunkCount; i++) { if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].progress !== undefined) { file.upload.progress += file.upload.chunks[i].progress; file.upload.total += file.upload.chunks[i].total; file.upload.bytesSent += file.upload.chunks[i].bytesSent; } } file.upload.progress = file.upload.progress / file.upload.totalChunkCount; } else { var _iterator25 = _createForOfIteratorHelper(files), _step25; try { for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) { var _file2 = _step25.value; _file2.upload.progress = progress; _file2.upload.total = e.total; _file2.upload.bytesSent = e.loaded; } } catch (err) { _iterator25.e(err); } finally { _iterator25.f(); } } var _iterator26 = _createForOfIteratorHelper(files), _step26; try { for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) { var _file3 = _step26.value; this.emit("uploadprogress", _file3, _file3.upload.progress, _file3.upload.bytesSent); } } catch (err) { _iterator26.e(err); } finally { _iterator26.f(); } } else { // Called when the file finished uploading var allFilesFinished = true; progress = 100; var _iterator27 = _createForOfIteratorHelper(files), _step27; try { for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) { var _file4 = _step27.value; if (_file4.upload.progress !== 100 || _file4.upload.bytesSent !== _file4.upload.total) { allFilesFinished = false; } _file4.upload.progress = progress; _file4.upload.bytesSent = _file4.upload.total; } // Nothing to do, all files already at 100% } catch (err) { _iterator27.e(err); } finally { _iterator27.f(); } if (allFilesFinished) { return; } var _iterator28 = _createForOfIteratorHelper(files), _step28; try { for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) { var _file5 = _step28.value; this.emit("uploadprogress", _file5, progress, _file5.upload.bytesSent); } } catch (err) { _iterator28.e(err); } finally { _iterator28.f(); } } } }, { key: "_finishedUploading", value: function _finishedUploading(files, xhr, e) { var response; if (files[0].status === Dropzone.CANCELED) { return; } if (xhr.readyState !== 4) { return; } if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') { response = xhr.responseText; if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) { try { response = JSON.parse(response); } catch (error) { e = error; response = "Invalid JSON response from server."; } } } this._updateFilesUploadProgress(files); if (!(200 <= xhr.status && xhr.status < 300)) { this._handleUploadError(files, xhr, response); } else { if (files[0].upload.chunked) { files[0].upload.finishedChunkUpload(this._getChunk(files[0], xhr)); } else { this._finished(files, response, e); } } } }, { key: "_handleUploadError", value: function _handleUploadError(files, xhr, response) { if (files[0].status === Dropzone.CANCELED) { return; } if (files[0].upload.chunked && this.options.retryChunks) { var chunk = this._getChunk(files[0], xhr); if (chunk.retries++ < this.options.retryChunksLimit) { this._uploadData(files, [chunk.dataBlock]); return; } else { console.warn('Retried this chunk too often. Giving up.'); } } this._errorProcessing(files, response || this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr); } }, { key: "submitRequest", value: function submitRequest(xhr, formData, files) { xhr.send(formData); } // Called internally when processing is finished. // Individual callbacks have to be called in the appropriate sections. }, { key: "_finished", value: function _finished(files, responseText, e) { var _iterator29 = _createForOfIteratorHelper(files), _step29; try { for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) { var file = _step29.value; file.status = Dropzone.SUCCESS; this.emit("success", file, responseText, e); this.emit("complete", file); } } catch (err) { _iterator29.e(err); } finally { _iterator29.f(); } if (this.options.uploadMultiple) { this.emit("successmultiple", files, responseText, e); this.emit("completemultiple", files); } if (this.options.autoProcessQueue) { return this.processQueue(); } } // Called internally when processing is finished. // Individual callbacks have to be called in the appropriate sections. }, { key: "_errorProcessing", value: function _errorProcessing(files, message, xhr) { var _iterator30 = _createForOfIteratorHelper(files), _step30; try { for (_iterator30.s(); !(_step30 = _iterator30.n()).done;) { var file = _step30.value; file.status = Dropzone.ERROR; this.emit("error", file, message, xhr); this.emit("complete", file); } } catch (err) { _iterator30.e(err); } finally { _iterator30.f(); } if (this.options.uploadMultiple) { this.emit("errormultiple", files, message, xhr); this.emit("completemultiple", files); } if (this.options.autoProcessQueue) { return this.processQueue(); } } }], [{ key: "uuidv4", value: function uuidv4() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c === 'x' ? r : r & 0x3 | 0x8; return v.toString(16); }); } }]); return Dropzone; }(Emitter); Dropzone.initClass(); Dropzone.version = "5.7.2"; // This is a map of options for your different dropzones. Add configurations // to this object for your different dropzone elemens. // // Example: // // Dropzone.options.myDropzoneElementId = { maxFilesize: 1 }; // // To disable autoDiscover for a specific element, you can set `false` as an option: // // Dropzone.options.myDisabledElementId = false; // // And in html: // // <form action="/upload" id="my-dropzone-element-id" class="dropzone"></form> Dropzone.options = {}; // Returns the options for an element or undefined if none available. Dropzone.optionsForElement = function (element) { // Get the `Dropzone.options.elementId` for this element if it exists if (element.getAttribute("id")) { return Dropzone.options[camelize(element.getAttribute("id"))]; } else { return undefined; } }; // Holds a list of all dropzone instances Dropzone.instances = []; // Returns the dropzone for given element if any Dropzone.forElement = function (element) { if (typeof element === "string") { element = document.querySelector(element); } if ((element != null ? element.dropzone : undefined) == null) { throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone."); } return element.dropzone; }; // Set to false if you don't want Dropzone to automatically find and attach to .dropzone elements. Dropzone.autoDiscover = true; // Looks for all .dropzone elements and creates a dropzone for them Dropzone.discover = function () { var dropzones; if (document.querySelectorAll) { dropzones = document.querySelectorAll(".dropzone"); } else { dropzones = []; // IE :( var checkElements = function checkElements(elements) { return function () { var result = []; var _iterator31 = _createForOfIteratorHelper(elements), _step31; try { for (_iterator31.s(); !(_step31 = _iterator31.n()).done;) { var el = _step31.value; if (/(^| )dropzone($| )/.test(el.className)) { result.push(dropzones.push(el)); } else { result.push(undefined); } } } catch (err) { _iterator31.e(err); } finally { _iterator31.f(); } return result; }(); }; checkElements(document.getElementsByTagName("div")); checkElements(document.getElementsByTagName("form")); } return function () { var result = []; var _iterator32 = _createForOfIteratorHelper(dropzones), _step32; try { for (_iterator32.s(); !(_step32 = _iterator32.n()).done;) { var dropzone = _step32.value; // Create a dropzone unless auto discover has been disabled for specific element if (Dropzone.optionsForElement(dropzone) !== false) { result.push(new Dropzone(dropzone)); } else { result.push(undefined); } } } catch (err) { _iterator32.e(err); } finally { _iterator32.f(); } return result; }(); }; // Since the whole Drag'n'Drop API is pretty new, some browsers implement it, // but not correctly. // So I created a blacklist of userAgents. Yes, yes. Browser sniffing, I know. // But what to do when browsers *theoretically* support an API, but crash // when using it. // // This is a list of regular expressions tested against navigator.userAgent // // ** It should only be used on browser that *do* support the API, but // incorrectly ** // Dropzone.blacklistedBrowsers = [// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API. /opera.*(Macintosh|Windows Phone).*version\/12/i]; // Checks if the browser is supported Dropzone.isBrowserSupported = function () { var capableBrowser = true; if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) { if (!("classList" in document.createElement("a"))) { capableBrowser = false; } else { // The browser supports the API, but may be blacklisted. var _iterator33 = _createForOfIteratorHelper(Dropzone.blacklistedBrowsers), _step33; try { for (_iterator33.s(); !(_step33 = _iterator33.n()).done;) { var regex = _step33.value; if (regex.test(navigator.userAgent)) { capableBrowser = false; continue; } } } catch (err) { _iterator33.e(err); } finally { _iterator33.f(); } } } else { capableBrowser = false; } return capableBrowser; }; Dropzone.dataURItoBlob = function (dataURI) { // convert base64 to raw binary data held in a string // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this var byteString = atob(dataURI.split(',')[1]); // separate out the mime component var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; // write the bytes of the string to an ArrayBuffer var ab = new ArrayBuffer(byteString.length); var ia = new Uint8Array(ab); for (var i = 0, end = byteString.length, asc = 0 <= end; asc ? i <= end : i >= end; asc ? i++ : i--) { ia[i] = byteString.charCodeAt(i); } // write the ArrayBuffer to a blob return new Blob([ab], { type: mimeString }); }; // Returns an array without the rejected item var without = function without(list, rejectedItem) { return list.filter(function (item) { return item !== rejectedItem; }).map(function (item) { return item; }); }; // abc-def_ghi -> abcDefGhi var camelize = function camelize(str) { return str.replace(/[\-_](\w)/g, function (match) { return match.charAt(1).toUpperCase(); }); }; // Creates an element from string Dropzone.createElement = function (string) { var div = document.createElement("div"); div.innerHTML = string; return div.childNodes[0]; }; // Tests if given element is inside (or simply is) the container Dropzone.elementInside = function (element, container) { if (element === container) { return true; } // Coffeescript doesn't support do/while loops while (element = element.parentNode) { if (element === container) { return true; } } return false; }; Dropzone.getElement = function (el, name) { var element; if (typeof el === "string") { element = document.querySelector(el); } else if (el.nodeType != null) { element = el; } if (element == null) { throw new Error("Invalid `".concat(name, "` option provided. Please provide a CSS selector or a plain HTML element.")); } return element; }; Dropzone.getElements = function (els, name) { var el, elements; if (els instanceof Array) { elements = []; try { var _iterator34 = _createForOfIteratorHelper(els), _step34; try { for (_iterator34.s(); !(_step34 = _iterator34.n()).done;) { el = _step34.value; elements.push(this.getElement(el, name)); } } catch (err) { _iterator34.e(err); } finally { _iterator34.f(); } } catch (e) { elements = null; } } else if (typeof els === "string") { elements = []; var _iterator35 = _createForOfIteratorHelper(document.querySelectorAll(els)), _step35; try { for (_iterator35.s(); !(_step35 = _iterator35.n()).done;) { el = _step35.value; elements.push(el); } } catch (err) { _iterator35.e(err); } finally { _iterator35.f(); } } else if (els.nodeType != null) { elements = [els]; } if (elements == null || !elements.length) { throw new Error("Invalid `".concat(name, "` option provided. Please provide a CSS selector, a plain HTML element or a list of those.")); } return elements; }; // Asks the user the question and calls accepted or rejected accordingly // // The default implementation just uses `window.confirm` and then calls the // appropriate callback. Dropzone.confirm = function (question, accepted, rejected) { if (window.confirm(question)) { return accepted(); } else if (rejected != null) { return rejected(); } }; // Validates the mime type like this: // // https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept Dropzone.isValidFile = function (file, acceptedFiles) { if (!acceptedFiles) { return true; } // If there are no accepted mime types, it's OK acceptedFiles = acceptedFiles.split(","); var mimeType = file.type; var baseMimeType = mimeType.replace(/\/.*$/, ""); var _iterator36 = _createForOfIteratorHelper(acceptedFiles), _step36; try { for (_iterator36.s(); !(_step36 = _iterator36.n()).done;) { var validType = _step36.value; validType = validType.trim(); if (validType.charAt(0) === ".") { if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) { return true; } } else if (/\/\*$/.test(validType)) { // This is something like a image/* mime type if (baseMimeType === validType.replace(/\/.*$/, "")) { return true; } } else { if (mimeType === validType) { return true; } } } } catch (err) { _iterator36.e(err); } finally { _iterator36.f(); } return false; }; // Augment jQuery if (typeof jQuery !== 'undefined' && jQuery !== null) { jQuery.fn.dropzone = function (options) { return this.each(function () { return new Dropzone(this, options); }); }; } if (typeof module !== 'undefined' && module !== null) { module.exports = Dropzone; } else { window.Dropzone = Dropzone; } // Dropzone file status codes Dropzone.ADDED = "added"; Dropzone.QUEUED = "queued"; // For backwards compatibility. Now, if a file is accepted, it's either queued // or uploading. Dropzone.ACCEPTED = Dropzone.QUEUED; Dropzone.UPLOADING = "uploading"; Dropzone.PROCESSING = Dropzone.UPLOADING; // alias Dropzone.CANCELED = "canceled"; Dropzone.ERROR = "error"; Dropzone.SUCCESS = "success"; /* Bugfix for iOS 6 and 7 Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios based on the work of https://github.com/stomita/ios-imagefile-megapixel */ // Detecting vertical squash in loaded image. // Fixes a bug which squash image vertically while drawing into canvas for some images. // This is a bug in iOS6 devices. This function from https://github.com/stomita/ios-imagefile-megapixel var detectVerticalSquash = function detectVerticalSquash(img) { var iw = img.naturalWidth; var ih = img.naturalHeight; var canvas = document.createElement("canvas"); canvas.width = 1; canvas.height = ih; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0); var _ctx$getImageData = ctx.getImageData(1, 0, 1, ih), data = _ctx$getImageData.data; // search image edge pixel position in case it is squashed vertically. var sy = 0; var ey = ih; var py = ih; while (py > sy) { var alpha = data[(py - 1) * 4 + 3]; if (alpha === 0) { ey = py; } else { sy = py; } py = ey + sy >> 1; } var ratio = py / ih; if (ratio === 0) { return 1; } else { return ratio; } }; // A replacement for context.drawImage // (args are for source and destination). var drawImageIOSFix = function drawImageIOSFix(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) { var vertSquashRatio = detectVerticalSquash(img); return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio); }; // Based on MinifyJpeg // Source: http://www.perry.cz/files/ExifRestorer.js // http://elicon.blog57.fc2.com/blog-entry-206.html var ExifRestore = /*#__PURE__*/function () { function ExifRestore() { _classCallCheck(this, ExifRestore); } _createClass(ExifRestore, null, [{ key: "initClass", value: function initClass() { this.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; } }, { key: "encode64", value: function encode64(input) { var output = ''; var chr1 = undefined; var chr2 = undefined; var chr3 = ''; var enc1 = undefined; var enc2 = undefined; var enc3 = undefined; var enc4 = ''; var i = 0; while (true) { chr1 = input[i++]; chr2 = input[i++]; chr3 = input[i++]; enc1 = chr1 >> 2; enc2 = (chr1 & 3) << 4 | chr2 >> 4; enc3 = (chr2 & 15) << 2 | chr3 >> 6; enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4); chr1 = chr2 = chr3 = ''; enc1 = enc2 = enc3 = enc4 = ''; if (!(i < input.length)) { break; } } return output; } }, { key: "restore", value: function restore(origFileBase64, resizedFileBase64) { if (!origFileBase64.match('data:image/jpeg;base64,')) { return resizedFileBase64; } var rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', '')); var segments = this.slice2Segments(rawImage); var image = this.exifManipulation(resizedFileBase64, segments); return "data:image/jpeg;base64,".concat(this.encode64(image)); } }, { key: "exifManipulation", value: function exifManipulation(resizedFileBase64, segments) { var exifArray = this.getExifArray(segments); var newImageArray = this.insertExif(resizedFileBase64, exifArray); var aBuffer = new Uint8Array(newImageArray); return aBuffer; } }, { key: "getExifArray", value: function getExifArray(segments) { var seg = undefined; var x = 0; while (x < segments.length) { seg = segments[x]; if (seg[0] === 255 & seg[1] === 225) { return seg; } x++; } return []; } }, { key: "insertExif", value: function insertExif(resizedFileBase64, exifArray) { var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''); var buf = this.decode64(imageData); var separatePoint = buf.indexOf(255, 3); var mae = buf.slice(0, separatePoint); var ato = buf.slice(separatePoint); var array = mae; array = array.concat(exifArray); array = array.concat(ato); return array; } }, { key: "slice2Segments", value: function slice2Segments(rawImageArray) { var head = 0; var segments = []; while (true) { var length; if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) { break; } if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) { head += 2; } else { length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]; var endPoint = head + length + 2; var seg = rawImageArray.slice(head, endPoint); segments.push(seg); head = endPoint; } if (head > rawImageArray.length) { break; } } return segments; } }, { key: "decode64", value: function decode64(input) { var output = ''; var chr1 = undefined; var chr2 = undefined; var chr3 = ''; var enc1 = undefined; var enc2 = undefined; var enc3 = undefined; var enc4 = ''; var i = 0; var buf = []; // remove all characters that are not A-Z, a-z, 0-9, +, /, or = var base64test = /[^A-Za-z0-9\+\/\=]/g; if (base64test.exec(input)) { console.warn('There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, \'+\', \'/\',and \'=\'\nExpect errors in decoding.'); } input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ''); while (true) { enc1 = this.KEY_STR.indexOf(input.charAt(i++)); enc2 = this.KEY_STR.indexOf(input.charAt(i++)); enc3 = this.KEY_STR.indexOf(input.charAt(i++)); enc4 = this.KEY_STR.indexOf(input.charAt(i++)); chr1 = enc1 << 2 | enc2 >> 4; chr2 = (enc2 & 15) << 4 | enc3 >> 2; chr3 = (enc3 & 3) << 6 | enc4; buf.push(chr1); if (enc3 !== 64) { buf.push(chr2); } if (enc4 !== 64) { buf.push(chr3); } chr1 = chr2 = chr3 = ''; enc1 = enc2 = enc3 = enc4 = ''; if (!(i < input.length)) { break; } } return buf; } }]); return ExifRestore; }(); ExifRestore.initClass(); /* * contentloaded.js * * Author: Diego Perini (diego.perini at gmail.com) * Summary: cross-browser wrapper for DOMContentLoaded * Updated: 20101020 * License: MIT * Version: 1.2 * * URL: * http://javascript.nwbox.com/ContentLoaded/ * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE */ // @win window reference // @fn function reference var contentLoaded = function contentLoaded(win, fn) { var done = false; var top = true; var doc = win.document; var root = doc.documentElement; var add = doc.addEventListener ? "addEventListener" : "attachEvent"; var rem = doc.addEventListener ? "removeEventListener" : "detachEvent"; var pre = doc.addEventListener ? "" : "on"; var init = function init(e) { if (e.type === "readystatechange" && doc.readyState !== "complete") { return; } (e.type === "load" ? win : doc)[rem](pre + e.type, init, false); if (!done && (done = true)) { return fn.call(win, e.type || e); } }; var poll = function poll() { try { root.doScroll("left"); } catch (e) { setTimeout(poll, 50); return; } return init("poll"); }; if (doc.readyState !== "complete") { if (doc.createEventObject && root.doScroll) { try { top = !win.frameElement; } catch (error) {} if (top) { poll(); } } doc[add](pre + "DOMContentLoaded", init, false); doc[add](pre + "readystatechange", init, false); return win[add](pre + "load", init, false); } }; // As a single function to be able to write tests. Dropzone._autoDiscoverFunction = function () { if (Dropzone.autoDiscover) { return Dropzone.discover(); } }; contentLoaded(window, Dropzone._autoDiscoverFunction); function __guard__(value, transform) { return typeof value !== 'undefined' && value !== null ? transform(value) : undefined; } function __guardMethod__(obj, methodName, transform) { if (typeof obj !== 'undefined' && obj !== null && typeof obj[methodName] === 'function') { return transform(obj, methodName); } else { return undefined; } } jquery-contextmenu/jquery.contextMenu.min.js.map 0000644 00000401112 14704452271 0016162 0 ustar 00 {"version":3,"file":"jquery.contextMenu.min.js","sources":["jquery.contextMenu.min.js"],"sourcesContent":["/**\r\n * jQuery contextMenu v2.9.2 - Plugin for simple contextMenu handling\r\n *\r\n * Version: v2.9.2\r\n *\r\n * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)\r\n * Web: http://swisnl.github.io/jQuery-contextMenu/\r\n *\r\n * Copyright (c) 2011-2020 SWIS BV and contributors\r\n *\r\n * Licensed under\r\n * MIT License http://www.opensource.org/licenses/mit-license\r\n *\r\n * Date: 2020-05-13T13:55:36.983Z\r\n */\r\n\r\n// jscs:disable\r\n/* jshint ignore:start */\r\n(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as anonymous module.\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node / CommonJS\r\n factory(require('jquery'));\r\n } else {\r\n // Browser globals.\r\n factory(jQuery);\r\n }\r\n})(function ($) {\r\n\r\n 'use strict';\r\n\r\n // TODO: -\r\n // ARIA stuff: menuitem, menuitemcheckbox und menuitemradio\r\n // create <menu> structure if $.support[htmlCommand || htmlMenuitem] and !opt.disableNative\r\n\r\n // determine html5 compatibility\r\n $.support.htmlMenuitem = ('HTMLMenuItemElement' in window);\r\n $.support.htmlCommand = ('HTMLCommandElement' in window);\r\n $.support.eventSelectstart = ('onselectstart' in document.documentElement);\r\n /* // should the need arise, test for css user-select\r\n $.support.cssUserSelect = (function(){\r\n var t = false,\r\n e = document.createElement('div');\r\n\r\n $.each('Moz|Webkit|Khtml|O|ms|Icab|'.split('|'), function(i, prefix) {\r\n var propCC = prefix + (prefix ? 'U' : 'u') + 'serSelect',\r\n prop = (prefix ? ('-' + prefix.toLowerCase() + '-') : '') + 'user-select';\r\n\r\n e.style.cssText = prop + ': text;';\r\n if (e.style[propCC] == 'text') {\r\n t = true;\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n return t;\r\n })();\r\n */\r\n\r\n\r\n if (!$.ui || !$.widget) {\r\n // duck punch $.cleanData like jQueryUI does to get that remove event\r\n $.cleanData = (function (orig) {\r\n return function (elems) {\r\n var events, elem, i;\r\n for (i = 0; elems[i] != null; i++) {\r\n elem = elems[i];\r\n try {\r\n // Only trigger remove when necessary to save time\r\n events = $._data(elem, 'events');\r\n if (events && events.remove) {\r\n $(elem).triggerHandler('remove');\r\n }\r\n\r\n // Http://bugs.jquery.com/ticket/8235\r\n } catch (e) {\r\n }\r\n }\r\n orig(elems);\r\n };\r\n })($.cleanData);\r\n }\r\n /* jshint ignore:end */\r\n // jscs:enable\r\n\r\n var // currently active contextMenu trigger\r\n $currentTrigger = null,\r\n // is contextMenu initialized with at least one menu?\r\n initialized = false,\r\n // window handle\r\n $win = $(window),\r\n // number of registered menus\r\n counter = 0,\r\n // mapping selector to namespace\r\n namespaces = {},\r\n // mapping namespace to options\r\n menus = {},\r\n // custom command type handlers\r\n types = {},\r\n // default values\r\n defaults = {\r\n // selector of contextMenu trigger\r\n selector: null,\r\n // where to append the menu to\r\n appendTo: null,\r\n // method to trigger context menu [\"right\", \"left\", \"hover\"]\r\n trigger: 'right',\r\n // hide menu when mouse leaves trigger / menu elements\r\n autoHide: false,\r\n // ms to wait before showing a hover-triggered context menu\r\n delay: 200,\r\n // flag denoting if a second trigger should simply move (true) or rebuild (false) an open menu\r\n // as long as the trigger happened on one of the trigger-element's child nodes\r\n reposition: true,\r\n // Flag denoting if a second trigger should close the menu, as long as\r\n // the trigger happened on one of the trigger-element's child nodes.\r\n // This overrides the reposition option.\r\n hideOnSecondTrigger: false,\r\n\r\n //ability to select submenu\r\n selectableSubMenu: false,\r\n\r\n // Default classname configuration to be able avoid conflicts in frameworks\r\n classNames: {\r\n hover: 'context-menu-hover', // Item hover\r\n disabled: 'context-menu-disabled', // Item disabled\r\n visible: 'context-menu-visible', // Item visible\r\n notSelectable: 'context-menu-not-selectable', // Item not selectable\r\n\r\n icon: 'context-menu-icon',\r\n iconEdit: 'context-menu-icon-edit',\r\n iconCut: 'context-menu-icon-cut',\r\n iconCopy: 'context-menu-icon-copy',\r\n iconPaste: 'context-menu-icon-paste',\r\n iconDelete: 'context-menu-icon-delete',\r\n iconAdd: 'context-menu-icon-add',\r\n iconQuit: 'context-menu-icon-quit',\r\n iconLoadingClass: 'context-menu-icon-loading'\r\n },\r\n\r\n // determine position to show menu at\r\n determinePosition: function ($menu) {\r\n // position to the lower middle of the trigger element\r\n if ($.ui && $.ui.position) {\r\n // .position() is provided as a jQuery UI utility\r\n // (...and it won't work on hidden elements)\r\n $menu.css('display', 'block').position({\r\n my: 'center top',\r\n at: 'center bottom',\r\n of: this,\r\n offset: '0 5',\r\n collision: 'fit'\r\n }).css('display', 'none');\r\n } else {\r\n // determine contextMenu position\r\n var offset = this.offset();\r\n offset.top += this.outerHeight();\r\n offset.left += this.outerWidth() / 2 - $menu.outerWidth() / 2;\r\n $menu.css(offset);\r\n }\r\n },\r\n // position menu\r\n position: function (opt, x, y) {\r\n var offset;\r\n // determine contextMenu position\r\n if (!x && !y) {\r\n opt.determinePosition.call(this, opt.$menu);\r\n return;\r\n } else if (x === 'maintain' && y === 'maintain') {\r\n // x and y must not be changed (after re-show on command click)\r\n offset = opt.$menu.position();\r\n } else {\r\n // x and y are given (by mouse event)\r\n var offsetParentOffset = opt.$menu.offsetParent().offset();\r\n offset = {top: y - offsetParentOffset.top, left: x -offsetParentOffset.left};\r\n }\r\n\r\n // correct offset if viewport demands it\r\n var bottom = $win.scrollTop() + $win.height(),\r\n right = $win.scrollLeft() + $win.width(),\r\n height = opt.$menu.outerHeight(),\r\n width = opt.$menu.outerWidth();\r\n\r\n if (offset.top + height > bottom) {\r\n offset.top -= height;\r\n }\r\n\r\n if (offset.top < 0) {\r\n offset.top = 0;\r\n }\r\n\r\n if (offset.left + width > right) {\r\n offset.left -= width;\r\n }\r\n\r\n if (offset.left < 0) {\r\n offset.left = 0;\r\n }\r\n\r\n opt.$menu.css(offset);\r\n },\r\n // position the sub-menu\r\n positionSubmenu: function ($menu) {\r\n if (typeof $menu === 'undefined') {\r\n // When user hovers over item (which has sub items) handle.focusItem will call this.\r\n // but the submenu does not exist yet if opt.items is a promise. just return, will\r\n // call positionSubmenu after promise is completed.\r\n return;\r\n }\r\n if ($.ui && $.ui.position) {\r\n // .position() is provided as a jQuery UI utility\r\n // (...and it won't work on hidden elements)\r\n $menu.css('display', 'block').position({\r\n my: 'left top-5',\r\n at: 'right top',\r\n of: this,\r\n collision: 'flipfit fit'\r\n }).css('display', '');\r\n } else {\r\n // determine contextMenu position\r\n var offset = {\r\n top: -9,\r\n left: this.outerWidth() - 5\r\n };\r\n $menu.css(offset);\r\n }\r\n },\r\n // offset to add to zIndex\r\n zIndex: 1,\r\n // show hide animation settings\r\n animation: {\r\n duration: 50,\r\n show: 'slideDown',\r\n hide: 'slideUp'\r\n },\r\n // events\r\n events: {\r\n preShow: $.noop,\r\n show: $.noop,\r\n hide: $.noop,\r\n activated: $.noop\r\n },\r\n // default callback\r\n callback: null,\r\n // list of contextMenu items\r\n items: {}\r\n },\r\n // mouse position for hover activation\r\n hoveract = {\r\n timer: null,\r\n pageX: null,\r\n pageY: null\r\n },\r\n // determine zIndex\r\n zindex = function ($t) {\r\n var zin = 0,\r\n $tt = $t;\r\n\r\n while (true) {\r\n zin = Math.max(zin, parseInt($tt.css('z-index'), 10) || 0);\r\n $tt = $tt.parent();\r\n if (!$tt || !$tt.length || 'html body'.indexOf($tt.prop('nodeName').toLowerCase()) > -1) {\r\n break;\r\n }\r\n }\r\n return zin;\r\n },\r\n // event handlers\r\n handle = {\r\n // abort anything\r\n abortevent: function (e) {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n },\r\n // contextmenu show dispatcher\r\n contextmenu: function (e) {\r\n var $this = $(this);\r\n\r\n //Show browser context-menu when preShow returns false\r\n if (e.data.events.preShow($this,e) === false) {\r\n return;\r\n }\r\n\r\n // disable actual context-menu if we are using the right mouse button as the trigger\r\n if (e.data.trigger === 'right') {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n // abort native-triggered events unless we're triggering on right click\r\n if ((e.data.trigger !== 'right' && e.data.trigger !== 'demand') && e.originalEvent) {\r\n return;\r\n }\r\n\r\n // Let the current contextmenu decide if it should show or not based on its own trigger settings\r\n if (typeof e.mouseButton !== 'undefined' && e.data) {\r\n if (!(e.data.trigger === 'left' && e.mouseButton === 0) && !(e.data.trigger === 'right' && e.mouseButton === 2)) {\r\n // Mouse click is not valid.\r\n return;\r\n }\r\n }\r\n\r\n // abort event if menu is visible for this trigger\r\n if ($this.hasClass('context-menu-active')) {\r\n return;\r\n }\r\n\r\n if (!$this.hasClass('context-menu-disabled')) {\r\n // theoretically need to fire a show event at <menu>\r\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus\r\n // var evt = jQuery.Event(\"show\", { data: data, pageX: e.pageX, pageY: e.pageY, relatedTarget: this });\r\n // e.data.$menu.trigger(evt);\r\n\r\n $currentTrigger = $this;\r\n if (e.data.build) {\r\n var built = e.data.build($currentTrigger, e);\r\n // abort if build() returned false\r\n if (built === false) {\r\n return;\r\n }\r\n\r\n // dynamically build menu on invocation\r\n e.data = $.extend(true, {}, defaults, e.data, built || {});\r\n\r\n // abort if there are no items to display\r\n if (!e.data.items || $.isEmptyObject(e.data.items)) {\r\n // Note: jQuery captures and ignores errors from event handlers\r\n if (window.console) {\r\n (console.error || console.log).call(console, 'No items specified to show in contextMenu');\r\n }\r\n\r\n throw new Error('No Items specified');\r\n }\r\n\r\n // backreference for custom command type creation\r\n e.data.$trigger = $currentTrigger;\r\n\r\n op.create(e.data);\r\n }\r\n op.show.call($this, e.data, e.pageX, e.pageY);\r\n }\r\n },\r\n // contextMenu left-click trigger\r\n click: function (e) {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n $(this).trigger($.Event('contextmenu', {data: e.data, pageX: e.pageX, pageY: e.pageY}));\r\n },\r\n // contextMenu right-click trigger\r\n mousedown: function (e) {\r\n // register mouse down\r\n var $this = $(this);\r\n\r\n // hide any previous menus\r\n if ($currentTrigger && $currentTrigger.length && !$currentTrigger.is($this)) {\r\n $currentTrigger.data('contextMenu').$menu.trigger('contextmenu:hide');\r\n }\r\n\r\n // activate on right click\r\n if (e.button === 2) {\r\n $currentTrigger = $this.data('contextMenuActive', true);\r\n }\r\n },\r\n // contextMenu right-click trigger\r\n mouseup: function (e) {\r\n // show menu\r\n var $this = $(this);\r\n if ($this.data('contextMenuActive') && $currentTrigger && $currentTrigger.length && $currentTrigger.is($this) && !$this.hasClass('context-menu-disabled')) {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n $currentTrigger = $this;\r\n $this.trigger($.Event('contextmenu', {data: e.data, pageX: e.pageX, pageY: e.pageY}));\r\n }\r\n\r\n $this.removeData('contextMenuActive');\r\n },\r\n // contextMenu hover trigger\r\n mouseenter: function (e) {\r\n var $this = $(this),\r\n $related = $(e.relatedTarget),\r\n $document = $(document);\r\n\r\n // abort if we're coming from a menu\r\n if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) {\r\n return;\r\n }\r\n\r\n // abort if a menu is shown\r\n if ($currentTrigger && $currentTrigger.length) {\r\n return;\r\n }\r\n\r\n hoveract.pageX = e.pageX;\r\n hoveract.pageY = e.pageY;\r\n hoveract.data = e.data;\r\n $document.on('mousemove.contextMenuShow', handle.mousemove);\r\n hoveract.timer = setTimeout(function () {\r\n hoveract.timer = null;\r\n $document.off('mousemove.contextMenuShow');\r\n $currentTrigger = $this;\r\n $this.trigger($.Event('contextmenu', {\r\n data: hoveract.data,\r\n pageX: hoveract.pageX,\r\n pageY: hoveract.pageY\r\n }));\r\n }, e.data.delay);\r\n },\r\n // contextMenu hover trigger\r\n mousemove: function (e) {\r\n hoveract.pageX = e.pageX;\r\n hoveract.pageY = e.pageY;\r\n },\r\n // contextMenu hover trigger\r\n mouseleave: function (e) {\r\n // abort if we're leaving for a menu\r\n var $related = $(e.relatedTarget);\r\n if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) {\r\n return;\r\n }\r\n\r\n try {\r\n clearTimeout(hoveract.timer);\r\n } catch (e) {\r\n }\r\n\r\n hoveract.timer = null;\r\n },\r\n // click on layer to hide contextMenu\r\n layerClick: function (e) {\r\n var $this = $(this),\r\n root = $this.data('contextMenuRoot'),\r\n button = e.button,\r\n x = e.pageX,\r\n y = e.pageY,\r\n fakeClick = x === undefined,\r\n target,\r\n offset;\r\n\r\n e.preventDefault();\r\n\r\n setTimeout(function () {\r\n // If the click is not real, things break: https://github.com/swisnl/jQuery-contextMenu/issues/132\r\n if(fakeClick){\r\n if (root !== null && typeof root !== 'undefined' && root.$menu !== null && typeof root.$menu !== 'undefined') {\r\n root.$menu.trigger('contextmenu:hide');\r\n }\r\n return;\r\n }\r\n\r\n var $window;\r\n var triggerAction = ((root.trigger === 'left' && button === 0) || (root.trigger === 'right' && button === 2));\r\n\r\n // find the element that would've been clicked, wasn't the layer in the way\r\n if (document.elementFromPoint && root.$layer) {\r\n root.$layer.hide();\r\n target = document.elementFromPoint(x - $win.scrollLeft(), y - $win.scrollTop());\r\n\r\n // also need to try and focus this element if we're in a contenteditable area,\r\n // as the layer will prevent the browser mouse action we want\r\n if (target !== null && target.isContentEditable) {\r\n var range = document.createRange(),\r\n sel = window.getSelection();\r\n range.selectNode(target);\r\n range.collapse(true);\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n }\r\n $(target).trigger(e);\r\n root.$layer.show();\r\n }\r\n\r\n if (root.hideOnSecondTrigger && triggerAction && root.$menu !== null && typeof root.$menu !== 'undefined') {\r\n root.$menu.trigger('contextmenu:hide');\r\n return;\r\n }\r\n\r\n if (root.reposition && triggerAction) {\r\n if (document.elementFromPoint) {\r\n if (root.$trigger.is(target)) {\r\n root.position.call(root.$trigger, root, x, y);\r\n return;\r\n }\r\n } else {\r\n offset = root.$trigger.offset();\r\n $window = $(window);\r\n // while this looks kinda awful, it's the best way to avoid\r\n // unnecessarily calculating any positions\r\n offset.top += $window.scrollTop();\r\n if (offset.top <= e.pageY) {\r\n offset.left += $window.scrollLeft();\r\n if (offset.left <= e.pageX) {\r\n offset.bottom = offset.top + root.$trigger.outerHeight();\r\n if (offset.bottom >= e.pageY) {\r\n offset.right = offset.left + root.$trigger.outerWidth();\r\n if (offset.right >= e.pageX) {\r\n // reposition\r\n root.position.call(root.$trigger, root, x, y);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (target && triggerAction) {\r\n root.$trigger.one('contextmenu:hidden', function () {\r\n $(target).contextMenu({x: x, y: y, button: button});\r\n });\r\n }\r\n\r\n if (root !== null && typeof root !== 'undefined' && root.$menu !== null && typeof root.$menu !== 'undefined') {\r\n root.$menu.trigger('contextmenu:hide');\r\n }\r\n }, 50);\r\n },\r\n // key handled :hover\r\n keyStop: function (e, opt) {\r\n if (!opt.isInput) {\r\n e.preventDefault();\r\n }\r\n\r\n e.stopPropagation();\r\n },\r\n key: function (e) {\r\n\r\n var opt = {};\r\n\r\n // Only get the data from $currentTrigger if it exists\r\n if ($currentTrigger) {\r\n opt = $currentTrigger.data('contextMenu') || {};\r\n }\r\n // If the trigger happen on a element that are above the contextmenu do this\r\n if (typeof opt.zIndex === 'undefined') {\r\n opt.zIndex = 0;\r\n }\r\n var targetZIndex = 0;\r\n var getZIndexOfTriggerTarget = function (target) {\r\n if (target.style.zIndex !== '') {\r\n targetZIndex = target.style.zIndex;\r\n } else {\r\n if (target.offsetParent !== null && typeof target.offsetParent !== 'undefined') {\r\n getZIndexOfTriggerTarget(target.offsetParent);\r\n }\r\n else if (target.parentElement !== null && typeof target.parentElement !== 'undefined') {\r\n getZIndexOfTriggerTarget(target.parentElement);\r\n }\r\n }\r\n };\r\n getZIndexOfTriggerTarget(e.target);\r\n // If targetZIndex is heigher then opt.zIndex dont progress any futher.\r\n // This is used to make sure that if you are using a dialog with a input / textarea / contenteditable div\r\n // and its above the contextmenu it wont steal keys events\r\n if (opt.$menu && parseInt(targetZIndex,10) > parseInt(opt.$menu.css(\"zIndex\"),10)) {\r\n return;\r\n }\r\n switch (e.keyCode) {\r\n case 9:\r\n case 38: // up\r\n handle.keyStop(e, opt);\r\n // if keyCode is [38 (up)] or [9 (tab) with shift]\r\n if (opt.isInput) {\r\n if (e.keyCode === 9 && e.shiftKey) {\r\n e.preventDefault();\r\n if (opt.$selected) {\r\n opt.$selected.find('input, textarea, select').blur();\r\n }\r\n if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n opt.$menu.trigger('prevcommand');\r\n }\r\n return;\r\n } else if (e.keyCode === 38 && opt.$selected.find('input, textarea, select').prop('type') === 'checkbox') {\r\n // checkboxes don't capture this key\r\n e.preventDefault();\r\n return;\r\n }\r\n } else if (e.keyCode !== 9 || e.shiftKey) {\r\n if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n opt.$menu.trigger('prevcommand');\r\n }\r\n return;\r\n }\r\n break;\r\n // omitting break;\r\n // case 9: // tab - reached through omitted break;\r\n case 40: // down\r\n handle.keyStop(e, opt);\r\n if (opt.isInput) {\r\n if (e.keyCode === 9) {\r\n e.preventDefault();\r\n if (opt.$selected) {\r\n opt.$selected.find('input, textarea, select').blur();\r\n }\r\n if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n opt.$menu.trigger('nextcommand');\r\n }\r\n return;\r\n } else if (e.keyCode === 40 && opt.$selected.find('input, textarea, select').prop('type') === 'checkbox') {\r\n // checkboxes don't capture this key\r\n e.preventDefault();\r\n return;\r\n }\r\n } else {\r\n if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n opt.$menu.trigger('nextcommand');\r\n }\r\n return;\r\n }\r\n break;\r\n\r\n case 37: // left\r\n handle.keyStop(e, opt);\r\n if (opt.isInput || !opt.$selected || !opt.$selected.length) {\r\n break;\r\n }\r\n\r\n if (!opt.$selected.parent().hasClass('context-menu-root')) {\r\n var $parent = opt.$selected.parent().parent();\r\n opt.$selected.trigger('contextmenu:blur');\r\n opt.$selected = $parent;\r\n return;\r\n }\r\n break;\r\n\r\n case 39: // right\r\n handle.keyStop(e, opt);\r\n if (opt.isInput || !opt.$selected || !opt.$selected.length) {\r\n break;\r\n }\r\n\r\n var itemdata = opt.$selected.data('contextMenu') || {};\r\n if (itemdata.$menu && opt.$selected.hasClass('context-menu-submenu')) {\r\n opt.$selected = null;\r\n itemdata.$selected = null;\r\n itemdata.$menu.trigger('nextcommand');\r\n return;\r\n }\r\n break;\r\n\r\n case 35: // end\r\n case 36: // home\r\n if (opt.$selected && opt.$selected.find('input, textarea, select').length) {\r\n return;\r\n } else {\r\n (opt.$selected && opt.$selected.parent() || opt.$menu)\r\n .children(':not(.' + opt.classNames.disabled + ', .' + opt.classNames.notSelectable + ')')[e.keyCode === 36 ? 'first' : 'last']()\r\n .trigger('contextmenu:focus');\r\n e.preventDefault();\r\n return;\r\n }\r\n break;\r\n\r\n case 13: // enter\r\n handle.keyStop(e, opt);\r\n if (opt.isInput) {\r\n if (opt.$selected && !opt.$selected.is('textarea, select')) {\r\n e.preventDefault();\r\n return;\r\n }\r\n break;\r\n }\r\n if (typeof opt.$selected !== 'undefined' && opt.$selected !== null) {\r\n opt.$selected.trigger('mouseup');\r\n }\r\n return;\r\n\r\n case 32: // space\r\n case 33: // page up\r\n case 34: // page down\r\n // prevent browser from scrolling down while menu is visible\r\n handle.keyStop(e, opt);\r\n return;\r\n\r\n case 27: // esc\r\n handle.keyStop(e, opt);\r\n if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n opt.$menu.trigger('contextmenu:hide');\r\n }\r\n return;\r\n\r\n default: // 0-9, a-z\r\n var k = (String.fromCharCode(e.keyCode)).toUpperCase();\r\n if (opt.accesskeys && opt.accesskeys[k]) {\r\n // according to the specs accesskeys must be invoked immediately\r\n opt.accesskeys[k].$node.trigger(opt.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup');\r\n return;\r\n }\r\n break;\r\n }\r\n // pass event to selected item,\r\n // stop propagation to avoid endless recursion\r\n e.stopPropagation();\r\n if (typeof opt.$selected !== 'undefined' && opt.$selected !== null) {\r\n opt.$selected.trigger(e);\r\n }\r\n },\r\n // select previous possible command in menu\r\n prevItem: function (e) {\r\n e.stopPropagation();\r\n var opt = $(this).data('contextMenu') || {};\r\n var root = $(this).data('contextMenuRoot') || {};\r\n\r\n // obtain currently selected menu\r\n if (opt.$selected) {\r\n var $s = opt.$selected;\r\n opt = opt.$selected.parent().data('contextMenu') || {};\r\n opt.$selected = $s;\r\n }\r\n\r\n var $children = opt.$menu.children(),\r\n $prev = !opt.$selected || !opt.$selected.prev().length ? $children.last() : opt.$selected.prev(),\r\n $round = $prev;\r\n\r\n // skip disabled or hidden elements\r\n while ($prev.hasClass(root.classNames.disabled) || $prev.hasClass(root.classNames.notSelectable) || $prev.is(':hidden')) {\r\n if ($prev.prev().length) {\r\n $prev = $prev.prev();\r\n } else {\r\n $prev = $children.last();\r\n }\r\n if ($prev.is($round)) {\r\n // break endless loop\r\n return;\r\n }\r\n }\r\n\r\n // leave current\r\n if (opt.$selected) {\r\n handle.itemMouseleave.call(opt.$selected.get(0), e);\r\n }\r\n\r\n // activate next\r\n handle.itemMouseenter.call($prev.get(0), e);\r\n\r\n // focus input\r\n var $input = $prev.find('input, textarea, select');\r\n if ($input.length) {\r\n $input.focus();\r\n }\r\n },\r\n // select next possible command in menu\r\n nextItem: function (e) {\r\n e.stopPropagation();\r\n var opt = $(this).data('contextMenu') || {};\r\n var root = $(this).data('contextMenuRoot') || {};\r\n\r\n // obtain currently selected menu\r\n if (opt.$selected) {\r\n var $s = opt.$selected;\r\n opt = opt.$selected.parent().data('contextMenu') || {};\r\n opt.$selected = $s;\r\n }\r\n\r\n var $children = opt.$menu.children(),\r\n $next = !opt.$selected || !opt.$selected.next().length ? $children.first() : opt.$selected.next(),\r\n $round = $next;\r\n\r\n // skip disabled\r\n while ($next.hasClass(root.classNames.disabled) || $next.hasClass(root.classNames.notSelectable) || $next.is(':hidden')) {\r\n if ($next.next().length) {\r\n $next = $next.next();\r\n } else {\r\n $next = $children.first();\r\n }\r\n if ($next.is($round)) {\r\n // break endless loop\r\n return;\r\n }\r\n }\r\n\r\n // leave current\r\n if (opt.$selected) {\r\n handle.itemMouseleave.call(opt.$selected.get(0), e);\r\n }\r\n\r\n // activate next\r\n handle.itemMouseenter.call($next.get(0), e);\r\n\r\n // focus input\r\n var $input = $next.find('input, textarea, select');\r\n if ($input.length) {\r\n $input.focus();\r\n }\r\n },\r\n // flag that we're inside an input so the key handler can act accordingly\r\n focusInput: function () {\r\n var $this = $(this).closest('.context-menu-item'),\r\n data = $this.data(),\r\n opt = data.contextMenu,\r\n root = data.contextMenuRoot;\r\n\r\n root.$selected = opt.$selected = $this;\r\n root.isInput = opt.isInput = true;\r\n },\r\n // flag that we're inside an input so the key handler can act accordingly\r\n blurInput: function () {\r\n var $this = $(this).closest('.context-menu-item'),\r\n data = $this.data(),\r\n opt = data.contextMenu,\r\n root = data.contextMenuRoot;\r\n\r\n root.isInput = opt.isInput = false;\r\n },\r\n // :hover on menu\r\n menuMouseenter: function () {\r\n var root = $(this).data().contextMenuRoot;\r\n root.hovering = true;\r\n },\r\n // :hover on menu\r\n menuMouseleave: function (e) {\r\n var root = $(this).data().contextMenuRoot;\r\n if (root.$layer && root.$layer.is(e.relatedTarget)) {\r\n root.hovering = false;\r\n }\r\n },\r\n // :hover done manually so key handling is possible\r\n itemMouseenter: function (e) {\r\n var $this = $(this),\r\n data = $this.data(),\r\n opt = data.contextMenu,\r\n root = data.contextMenuRoot;\r\n\r\n root.hovering = true;\r\n\r\n // abort if we're re-entering\r\n if (e && root.$layer && root.$layer.is(e.relatedTarget)) {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n // make sure only one item is selected\r\n (opt.$menu ? opt : root).$menu\r\n .children('.' + root.classNames.hover).trigger('contextmenu:blur')\r\n .children('.hover').trigger('contextmenu:blur');\r\n\r\n if ($this.hasClass(root.classNames.disabled) || $this.hasClass(root.classNames.notSelectable)) {\r\n opt.$selected = null;\r\n return;\r\n }\r\n\r\n\r\n $this.trigger('contextmenu:focus');\r\n },\r\n // :hover done manually so key handling is possible\r\n itemMouseleave: function (e) {\r\n var $this = $(this),\r\n data = $this.data(),\r\n opt = data.contextMenu,\r\n root = data.contextMenuRoot;\r\n\r\n if (root !== opt && root.$layer && root.$layer.is(e.relatedTarget)) {\r\n if (typeof root.$selected !== 'undefined' && root.$selected !== null) {\r\n root.$selected.trigger('contextmenu:blur');\r\n }\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n root.$selected = opt.$selected = opt.$node;\r\n return;\r\n }\r\n\r\n if(opt && opt.$menu && opt.$menu.hasClass('context-menu-visible')){\r\n return;\r\n }\r\n\r\n $this.trigger('contextmenu:blur');\r\n },\r\n // contextMenu item click\r\n itemClick: function (e) {\r\n var $this = $(this),\r\n data = $this.data(),\r\n opt = data.contextMenu,\r\n root = data.contextMenuRoot,\r\n key = data.contextMenuKey,\r\n callback;\r\n\r\n // abort if the key is unknown or disabled or is a menu\r\n if (!opt.items[key] || $this.is('.' + root.classNames.disabled + ', .context-menu-separator, .' + root.classNames.notSelectable) || ($this.is('.context-menu-submenu') && root.selectableSubMenu === false )) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n\r\n if ($.isFunction(opt.callbacks[key]) && Object.prototype.hasOwnProperty.call(opt.callbacks, key)) {\r\n // item-specific callback\r\n callback = opt.callbacks[key];\r\n } else if ($.isFunction(root.callback)) {\r\n // default callback\r\n callback = root.callback;\r\n } else {\r\n // no callback, no action\r\n return;\r\n }\r\n\r\n // hide menu if callback doesn't stop that\r\n if (callback.call(root.$trigger, key, root, e) !== false) {\r\n root.$menu.trigger('contextmenu:hide');\r\n } else if (root.$menu.parent().length) {\r\n op.update.call(root.$trigger, root);\r\n }\r\n },\r\n // ignore click events on input elements\r\n inputClick: function (e) {\r\n e.stopImmediatePropagation();\r\n },\r\n // hide <menu>\r\n hideMenu: function (e, data) {\r\n var root = $(this).data('contextMenuRoot');\r\n op.hide.call(root.$trigger, root, data && data.force);\r\n },\r\n // focus <command>\r\n focusItem: function (e) {\r\n e.stopPropagation();\r\n var $this = $(this),\r\n data = $this.data(),\r\n opt = data.contextMenu,\r\n root = data.contextMenuRoot;\r\n\r\n if ($this.hasClass(root.classNames.disabled) || $this.hasClass(root.classNames.notSelectable)) {\r\n return;\r\n }\r\n\r\n $this\r\n .addClass([root.classNames.hover, root.classNames.visible].join(' '))\r\n // select other items and included items\r\n .parent().find('.context-menu-item').not($this)\r\n .removeClass(root.classNames.visible)\r\n .filter('.' + root.classNames.hover)\r\n .trigger('contextmenu:blur');\r\n\r\n // remember selected\r\n opt.$selected = root.$selected = $this;\r\n\r\n\r\n if(opt && opt.$node && opt.$node.hasClass('context-menu-submenu')){\r\n opt.$node.addClass(root.classNames.hover);\r\n }\r\n\r\n // position sub-menu - do after show so dumb $.ui.position can keep up\r\n if (opt.$node) {\r\n root.positionSubmenu.call(opt.$node, opt.$menu);\r\n }\r\n },\r\n // blur <command>\r\n blurItem: function (e) {\r\n e.stopPropagation();\r\n var $this = $(this),\r\n data = $this.data(),\r\n opt = data.contextMenu,\r\n root = data.contextMenuRoot;\r\n\r\n if (opt.autoHide) { // for tablets and touch screens this needs to remain\r\n $this.removeClass(root.classNames.visible);\r\n }\r\n $this.removeClass(root.classNames.hover);\r\n opt.$selected = null;\r\n }\r\n },\r\n // operations\r\n op = {\r\n show: function (opt, x, y) {\r\n var $trigger = $(this),\r\n css = {};\r\n\r\n // hide any open menus\r\n $('#context-menu-layer').trigger('mousedown');\r\n\r\n // backreference for callbacks\r\n opt.$trigger = $trigger;\r\n\r\n // show event\r\n if (opt.events.show.call($trigger, opt) === false) {\r\n $currentTrigger = null;\r\n return;\r\n }\r\n\r\n // create or update context menu\r\n var hasVisibleItems = op.update.call($trigger, opt);\r\n if (hasVisibleItems === false) {\r\n $currentTrigger = null;\r\n return;\r\n }\r\n\r\n // position menu\r\n opt.position.call($trigger, opt, x, y);\r\n\r\n // make sure we're in front\r\n if (opt.zIndex) {\r\n var additionalZValue = opt.zIndex;\r\n // If opt.zIndex is a function, call the function to get the right zIndex.\r\n if (typeof opt.zIndex === 'function') {\r\n additionalZValue = opt.zIndex.call($trigger, opt);\r\n }\r\n css.zIndex = zindex($trigger) + additionalZValue;\r\n }\r\n\r\n // add layer\r\n op.layer.call(opt.$menu, opt, css.zIndex);\r\n\r\n // adjust sub-menu zIndexes\r\n opt.$menu.find('ul').css('zIndex', css.zIndex + 1);\r\n\r\n // position and show context menu\r\n opt.$menu.css(css)[opt.animation.show](opt.animation.duration, function () {\r\n $trigger.trigger('contextmenu:visible');\r\n\r\n op.activated(opt);\r\n opt.events.activated(opt);\r\n });\r\n // make options available and set state\r\n $trigger\r\n .data('contextMenu', opt)\r\n .addClass('context-menu-active');\r\n\r\n // register key handler\r\n $(document).off('keydown.contextMenu').on('keydown.contextMenu', handle.key);\r\n // register autoHide handler\r\n if (opt.autoHide) {\r\n // mouse position handler\r\n $(document).on('mousemove.contextMenuAutoHide', function (e) {\r\n // need to capture the offset on mousemove,\r\n // since the page might've been scrolled since activation\r\n var pos = $trigger.offset();\r\n pos.right = pos.left + $trigger.outerWidth();\r\n pos.bottom = pos.top + $trigger.outerHeight();\r\n\r\n if (opt.$layer && !opt.hovering && (!(e.pageX >= pos.left && e.pageX <= pos.right) || !(e.pageY >= pos.top && e.pageY <= pos.bottom))) {\r\n /* Additional hover check after short time, you might just miss the edge of the menu */\r\n setTimeout(function () {\r\n if (!opt.hovering && opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n opt.$menu.trigger('contextmenu:hide');\r\n }\r\n }, 50);\r\n }\r\n });\r\n }\r\n },\r\n hide: function (opt, force) {\r\n var $trigger = $(this);\r\n if (!opt) {\r\n opt = $trigger.data('contextMenu') || {};\r\n }\r\n\r\n // hide event\r\n if (!force && opt.events && opt.events.hide.call($trigger, opt) === false) {\r\n return;\r\n }\r\n\r\n // remove options and revert state\r\n $trigger\r\n .removeData('contextMenu')\r\n .removeClass('context-menu-active');\r\n\r\n if (opt.$layer) {\r\n // keep layer for a bit so the contextmenu event can be aborted properly by opera\r\n setTimeout((function ($layer) {\r\n return function () {\r\n $layer.remove();\r\n };\r\n })(opt.$layer), 10);\r\n\r\n try {\r\n delete opt.$layer;\r\n } catch (e) {\r\n opt.$layer = null;\r\n }\r\n }\r\n\r\n // remove handle\r\n $currentTrigger = null;\r\n // remove selected\r\n opt.$menu.find('.' + opt.classNames.hover).trigger('contextmenu:blur');\r\n opt.$selected = null;\r\n // collapse all submenus\r\n opt.$menu.find('.' + opt.classNames.visible).removeClass(opt.classNames.visible);\r\n // unregister key and mouse handlers\r\n // $(document).off('.contextMenuAutoHide keydown.contextMenu'); // http://bugs.jquery.com/ticket/10705\r\n $(document).off('.contextMenuAutoHide').off('keydown.contextMenu');\r\n // hide menu\r\n if (opt.$menu) {\r\n opt.$menu[opt.animation.hide](opt.animation.duration, function () {\r\n // tear down dynamically built menu after animation is completed.\r\n if (opt.build) {\r\n opt.$menu.remove();\r\n $.each(opt, function (key) {\r\n switch (key) {\r\n case 'ns':\r\n case 'selector':\r\n case 'build':\r\n case 'trigger':\r\n return true;\r\n\r\n default:\r\n opt[key] = undefined;\r\n try {\r\n delete opt[key];\r\n } catch (e) {\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n setTimeout(function () {\r\n $trigger.trigger('contextmenu:hidden');\r\n }, 10);\r\n });\r\n }\r\n },\r\n create: function (opt, root) {\r\n if (typeof root === 'undefined') {\r\n root = opt;\r\n }\r\n\r\n // create contextMenu\r\n opt.$menu = $('<ul class=\"context-menu-list\"></ul>').addClass(opt.className || '').data({\r\n 'contextMenu': opt,\r\n 'contextMenuRoot': root\r\n });\r\n if(opt.dataAttr){\r\n $.each(opt.dataAttr, function (key, item) {\r\n opt.$menu.attr('data-' + opt.key, item);\r\n });\r\n }\r\n\r\n $.each(['callbacks', 'commands', 'inputs'], function (i, k) {\r\n opt[k] = {};\r\n if (!root[k]) {\r\n root[k] = {};\r\n }\r\n });\r\n\r\n if (!root.accesskeys) {\r\n root.accesskeys = {};\r\n }\r\n\r\n function createNameNode(item) {\r\n var $name = $('<span></span>');\r\n if (item._accesskey) {\r\n if (item._beforeAccesskey) {\r\n $name.append(document.createTextNode(item._beforeAccesskey));\r\n }\r\n $('<span></span>')\r\n .addClass('context-menu-accesskey')\r\n .text(item._accesskey)\r\n .appendTo($name);\r\n if (item._afterAccesskey) {\r\n $name.append(document.createTextNode(item._afterAccesskey));\r\n }\r\n } else {\r\n if (item.isHtmlName) {\r\n // restrict use with access keys\r\n if (typeof item.accesskey !== 'undefined') {\r\n throw new Error('accesskeys are not compatible with HTML names and cannot be used together in the same item');\r\n }\r\n $name.html(item.name);\r\n } else {\r\n $name.text(item.name);\r\n }\r\n }\r\n return $name;\r\n }\r\n\r\n // create contextMenu items\r\n $.each(opt.items, function (key, item) {\r\n var $t = $('<li class=\"context-menu-item\"></li>').addClass(item.className || ''),\r\n $label = null,\r\n $input = null;\r\n\r\n // iOS needs to see a click-event bound to an element to actually\r\n // have the TouchEvents infrastructure trigger the click event\r\n $t.on('click', $.noop);\r\n\r\n // Make old school string seperator a real item so checks wont be\r\n // akward later.\r\n // And normalize 'cm_separator' into 'cm_seperator'.\r\n if (typeof item === 'string' || item.type === 'cm_separator') {\r\n item = {type: 'cm_seperator'};\r\n }\r\n\r\n item.$node = $t.data({\r\n 'contextMenu': opt,\r\n 'contextMenuRoot': root,\r\n 'contextMenuKey': key\r\n });\r\n\r\n // register accesskey\r\n // NOTE: the accesskey attribute should be applicable to any element, but Safari5 and Chrome13 still can't do that\r\n if (typeof item.accesskey !== 'undefined') {\r\n var aks = splitAccesskey(item.accesskey);\r\n for (var i = 0, ak; ak = aks[i]; i++) {\r\n if (!root.accesskeys[ak]) {\r\n root.accesskeys[ak] = item;\r\n var matched = item.name.match(new RegExp('^(.*?)(' + ak + ')(.*)$', 'i'));\r\n if (matched) {\r\n item._beforeAccesskey = matched[1];\r\n item._accesskey = matched[2];\r\n item._afterAccesskey = matched[3];\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (item.type && types[item.type]) {\r\n // run custom type handler\r\n types[item.type].call($t, item, opt, root);\r\n // register commands\r\n $.each([opt, root], function (i, k) {\r\n k.commands[key] = item;\r\n // Overwrite only if undefined or the item is appended to the root. This so it\r\n // doesn't overwrite callbacks of root elements if the name is the same.\r\n if ($.isFunction(item.callback) && (typeof k.callbacks[key] === 'undefined' || typeof opt.type === 'undefined')) {\r\n k.callbacks[key] = item.callback;\r\n }\r\n });\r\n } else {\r\n // add label for input\r\n if (item.type === 'cm_seperator') {\r\n $t.addClass('context-menu-separator ' + root.classNames.notSelectable);\r\n } else if (item.type === 'html') {\r\n $t.addClass('context-menu-html ' + root.classNames.notSelectable);\r\n } else if (item.type !== 'sub' && item.type) {\r\n $label = $('<label></label>').appendTo($t);\r\n createNameNode(item).appendTo($label);\r\n\r\n $t.addClass('context-menu-input');\r\n opt.hasTypes = true;\r\n $.each([opt, root], function (i, k) {\r\n k.commands[key] = item;\r\n k.inputs[key] = item;\r\n });\r\n } else if (item.items) {\r\n item.type = 'sub';\r\n }\r\n\r\n switch (item.type) {\r\n case 'cm_seperator':\r\n break;\r\n\r\n case 'text':\r\n $input = $('<input type=\"text\" value=\"1\" name=\"\" />')\r\n .attr('name', 'context-menu-input-' + key)\r\n .val(item.value || '')\r\n .appendTo($label);\r\n break;\r\n\r\n case 'textarea':\r\n $input = $('<textarea name=\"\"></textarea>')\r\n .attr('name', 'context-menu-input-' + key)\r\n .val(item.value || '')\r\n .appendTo($label);\r\n\r\n if (item.height) {\r\n $input.height(item.height);\r\n }\r\n break;\r\n\r\n case 'checkbox':\r\n $input = $('<input type=\"checkbox\" value=\"1\" name=\"\" />')\r\n .attr('name', 'context-menu-input-' + key)\r\n .val(item.value || '')\r\n .prop('checked', !!item.selected)\r\n .prependTo($label);\r\n break;\r\n\r\n case 'radio':\r\n $input = $('<input type=\"radio\" value=\"1\" name=\"\" />')\r\n .attr('name', 'context-menu-input-' + item.radio)\r\n .val(item.value || '')\r\n .prop('checked', !!item.selected)\r\n .prependTo($label);\r\n break;\r\n\r\n case 'select':\r\n $input = $('<select name=\"\"></select>')\r\n .attr('name', 'context-menu-input-' + key)\r\n .appendTo($label);\r\n if (item.options) {\r\n $.each(item.options, function (value, text) {\r\n $('<option></option>').val(value).text(text).appendTo($input);\r\n });\r\n $input.val(item.selected);\r\n }\r\n break;\r\n\r\n case 'sub':\r\n createNameNode(item).appendTo($t);\r\n item.appendTo = item.$node;\r\n $t.data('contextMenu', item).addClass('context-menu-submenu');\r\n item.callback = null;\r\n\r\n // If item contains items, and this is a promise, we should create it later\r\n // check if subitems is of type promise. If it is a promise we need to create\r\n // it later, after promise has been resolved.\r\n if ('function' === typeof item.items.then) {\r\n // probably a promise, process it, when completed it will create the sub menu's.\r\n op.processPromises(item, root, item.items);\r\n } else {\r\n // normal submenu.\r\n op.create(item, root);\r\n }\r\n break;\r\n\r\n case 'html':\r\n $(item.html).appendTo($t);\r\n break;\r\n\r\n default:\r\n $.each([opt, root], function (i, k) {\r\n k.commands[key] = item;\r\n // Overwrite only if undefined or the item is appended to the root. This so it\r\n // doesn't overwrite callbacks of root elements if the name is the same.\r\n if ($.isFunction(item.callback) && (typeof k.callbacks[key] === 'undefined' || typeof opt.type === 'undefined')) {\r\n k.callbacks[key] = item.callback;\r\n }\r\n });\r\n createNameNode(item).appendTo($t);\r\n break;\r\n }\r\n\r\n // disable key listener in <input>\r\n if (item.type && item.type !== 'sub' && item.type !== 'html' && item.type !== 'cm_seperator') {\r\n $input\r\n .on('focus', handle.focusInput)\r\n .on('blur', handle.blurInput);\r\n\r\n if (item.events) {\r\n $input.on(item.events, opt);\r\n }\r\n }\r\n\r\n // add icons\r\n if (item.icon) {\r\n if ($.isFunction(item.icon)) {\r\n item._icon = item.icon.call(this, this, $t, key, item);\r\n } else {\r\n if (typeof(item.icon) === 'string' && (\r\n item.icon.substring(0, 4) === 'fab '\r\n || item.icon.substring(0, 4) === 'fas '\r\n || item.icon.substring(0, 4) === 'fad '\r\n || item.icon.substring(0, 4) === 'far '\r\n || item.icon.substring(0, 4) === 'fal ')\r\n ) {\r\n // to enable font awesome\r\n $t.addClass(root.classNames.icon + ' ' + root.classNames.icon + '--fa5');\r\n item._icon = $('<i class=\"' + item.icon + '\"></i>');\r\n } else if (typeof(item.icon) === 'string' && item.icon.substring(0, 3) === 'fa-') {\r\n item._icon = root.classNames.icon + ' ' + root.classNames.icon + '--fa fa ' + item.icon;\r\n } else {\r\n item._icon = root.classNames.icon + ' ' + root.classNames.icon + '-' + item.icon;\r\n }\r\n }\r\n\r\n if(typeof(item._icon) === \"string\"){\r\n $t.addClass(item._icon);\r\n } else {\r\n $t.prepend(item._icon);\r\n }\r\n }\r\n }\r\n\r\n // cache contained elements\r\n item.$input = $input;\r\n item.$label = $label;\r\n\r\n // attach item to menu\r\n $t.appendTo(opt.$menu);\r\n\r\n // Disable text selection\r\n if (!opt.hasTypes && $.support.eventSelectstart) {\r\n // browsers support user-select: none,\r\n // IE has a special event for text-selection\r\n // browsers supporting neither will not be preventing text-selection\r\n $t.on('selectstart.disableTextSelect', handle.abortevent);\r\n }\r\n });\r\n // attach contextMenu to <body> (to bypass any possible overflow:hidden issues on parents of the trigger element)\r\n if (!opt.$node) {\r\n opt.$menu.css('display', 'none').addClass('context-menu-root');\r\n }\r\n opt.$menu.appendTo(opt.appendTo || document.body);\r\n },\r\n resize: function ($menu, nested) {\r\n var domMenu;\r\n // determine widths of submenus, as CSS won't grow them automatically\r\n // position:absolute within position:absolute; min-width:100; max-width:200; results in width: 100;\r\n // kinda sucks hard...\r\n\r\n // determine width of absolutely positioned element\r\n $menu.css({position: 'absolute', display: 'block'});\r\n // don't apply yet, because that would break nested elements' widths\r\n $menu.data('width',\r\n (domMenu = $menu.get(0)).getBoundingClientRect ?\r\n Math.ceil(domMenu.getBoundingClientRect().width) :\r\n $menu.outerWidth() + 1); // outerWidth() returns rounded pixels\r\n // reset styles so they allow nested elements to grow/shrink naturally\r\n $menu.css({\r\n position: 'static',\r\n minWidth: '0px',\r\n maxWidth: '100000px'\r\n });\r\n // identify width of nested menus\r\n $menu.find('> li > ul').each(function () {\r\n op.resize($(this), true);\r\n });\r\n // reset and apply changes in the end because nested\r\n // elements' widths wouldn't be calculatable otherwise\r\n if (!nested) {\r\n $menu.find('ul').addBack().css({\r\n position: '',\r\n display: '',\r\n minWidth: '',\r\n maxWidth: ''\r\n }).outerWidth(function () {\r\n return $(this).data('width');\r\n });\r\n }\r\n },\r\n update: function (opt, root) {\r\n var $trigger = this;\r\n if (typeof root === 'undefined') {\r\n root = opt;\r\n op.resize(opt.$menu);\r\n }\r\n\r\n var hasVisibleItems = false;\r\n\r\n // re-check disabled for each item\r\n opt.$menu.children().each(function () {\r\n var $item = $(this),\r\n key = $item.data('contextMenuKey'),\r\n item = opt.items[key],\r\n disabled = ($.isFunction(item.disabled) && item.disabled.call($trigger, key, root)) || item.disabled === true,\r\n visible;\r\n if ($.isFunction(item.visible)) {\r\n visible = item.visible.call($trigger, key, root);\r\n } else if (typeof item.visible !== 'undefined') {\r\n visible = item.visible === true;\r\n } else {\r\n visible = true;\r\n }\r\n\r\n if (visible) {\r\n hasVisibleItems = true;\r\n }\r\n\r\n $item[visible ? 'show' : 'hide']();\r\n\r\n // dis- / enable item\r\n $item[disabled ? 'addClass' : 'removeClass'](root.classNames.disabled);\r\n\r\n if ($.isFunction(item.icon)) {\r\n $item.removeClass(item._icon);\r\n var iconResult = item.icon.call(this, $trigger, $item, key, item);\r\n if(typeof(iconResult) === \"string\"){\r\n $item.addClass(iconResult);\r\n } else {\r\n $item.prepend(iconResult);\r\n }\r\n }\r\n\r\n if (item.type) {\r\n // dis- / enable input elements\r\n $item.find('input, select, textarea').prop('disabled', disabled);\r\n\r\n // update input states\r\n switch (item.type) {\r\n case 'text':\r\n case 'textarea':\r\n item.$input.val(item.value || '');\r\n break;\r\n\r\n case 'checkbox':\r\n case 'radio':\r\n item.$input.val(item.value || '').prop('checked', !!item.selected);\r\n break;\r\n\r\n case 'select':\r\n item.$input.val((item.selected === 0 ? \"0\" : item.selected) || '');\r\n break;\r\n }\r\n }\r\n\r\n if (item.$menu) {\r\n // update sub-menu\r\n var subMenuHasVisibleItems = op.update.call($trigger, item, root);\r\n if (subMenuHasVisibleItems) {\r\n hasVisibleItems = true;\r\n }\r\n }\r\n });\r\n return hasVisibleItems;\r\n },\r\n layer: function (opt, zIndex) {\r\n // add transparent layer for click area\r\n // filter and background for Internet Explorer, Issue #23\r\n var $layer = opt.$layer = $('<div id=\"context-menu-layer\"></div>')\r\n .css({\r\n height: $win.height(),\r\n width: $win.width(),\r\n display: 'block',\r\n position: 'fixed',\r\n 'z-index': zIndex - 1,\r\n top: 0,\r\n left: 0,\r\n opacity: 0,\r\n filter: 'alpha(opacity=0)',\r\n 'background-color': '#000'\r\n })\r\n .data('contextMenuRoot', opt)\r\n .appendTo(document.body)\r\n .on('contextmenu', handle.abortevent)\r\n .on('mousedown', handle.layerClick);\r\n\r\n // IE6 doesn't know position:fixed;\r\n if (typeof document.body.style.maxWidth === 'undefined') { // IE6 doesn't support maxWidth\r\n $layer.css({\r\n 'position': 'absolute',\r\n 'height': $(document).height()\r\n });\r\n }\r\n\r\n return $layer;\r\n },\r\n processPromises: function (opt, root, promise) {\r\n // Start\r\n opt.$node.addClass(root.classNames.iconLoadingClass);\r\n\r\n function completedPromise(opt, root, items) {\r\n // Completed promise (dev called promise.resolve). We now have a list of items which can\r\n // be used to create the rest of the context menu.\r\n if (typeof items === 'undefined') {\r\n // Null result, dev should have checked\r\n errorPromise(undefined);//own error object\r\n }\r\n finishPromiseProcess(opt, root, items);\r\n }\r\n\r\n function errorPromise(opt, root, errorItem) {\r\n // User called promise.reject() with an error item, if not, provide own error item.\r\n if (typeof errorItem === 'undefined') {\r\n errorItem = {\r\n \"error\": {\r\n name: \"No items and no error item\",\r\n icon: \"context-menu-icon context-menu-icon-quit\"\r\n }\r\n };\r\n if (window.console) {\r\n (console.error || console.log).call(console, 'When you reject a promise, provide an \"items\" object, equal to normal sub-menu items');\r\n }\r\n } else if (typeof errorItem === 'string') {\r\n errorItem = {\"error\": {name: errorItem}};\r\n }\r\n finishPromiseProcess(opt, root, errorItem);\r\n }\r\n\r\n function finishPromiseProcess(opt, root, items) {\r\n if (typeof root.$menu === 'undefined' || !root.$menu.is(':visible')) {\r\n return;\r\n }\r\n opt.$node.removeClass(root.classNames.iconLoadingClass);\r\n opt.items = items;\r\n op.create(opt, root, true); // Create submenu\r\n op.update(opt, root); // Correctly update position if user is already hovered over menu item\r\n root.positionSubmenu.call(opt.$node, opt.$menu); // positionSubmenu, will only do anything if user already hovered over menu item that just got new subitems.\r\n }\r\n\r\n // Wait for promise completion. .then(success, error, notify) (we don't track notify). Bind the opt\r\n // and root to avoid scope problems\r\n promise.then(completedPromise.bind(this, opt, root), errorPromise.bind(this, opt, root));\r\n },\r\n // operation that will run after contextMenu showed on screen\r\n activated: function(opt){\r\n var $menu = opt.$menu;\r\n var $menuOffset = $menu.offset();\r\n var winHeight = $(window).height();\r\n var winScrollTop = $(window).scrollTop();\r\n var menuHeight = $menu.height();\r\n if(menuHeight > winHeight){\r\n $menu.css({\r\n 'height' : winHeight + 'px',\r\n 'overflow-x': 'hidden',\r\n 'overflow-y': 'auto',\r\n 'top': winScrollTop + 'px'\r\n });\r\n } else if(($menuOffset.top < winScrollTop) || ($menuOffset.top + menuHeight > winScrollTop + winHeight)){\r\n $menu.css({\r\n 'top': winScrollTop + 'px'\r\n });\r\n }\r\n }\r\n };\r\n\r\n // split accesskey according to http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#assigned-access-key\r\n function splitAccesskey(val) {\r\n var t = val.split(/\\s+/);\r\n var keys = [];\r\n\r\n for (var i = 0, k; k = t[i]; i++) {\r\n k = k.charAt(0).toUpperCase(); // first character only\r\n // theoretically non-accessible characters should be ignored, but different systems, different keyboard layouts, ... screw it.\r\n // a map to look up already used access keys would be nice\r\n keys.push(k);\r\n }\r\n\r\n return keys;\r\n }\r\n\r\n// handle contextMenu triggers\r\n $.fn.contextMenu = function (operation) {\r\n var $t = this, $o = operation;\r\n if (this.length > 0) { // this is not a build on demand menu\r\n if (typeof operation === 'undefined') {\r\n this.first().trigger('contextmenu');\r\n } else if (typeof operation.x !== 'undefined' && typeof operation.y !== 'undefined') {\r\n this.first().trigger($.Event('contextmenu', {\r\n pageX: operation.x,\r\n pageY: operation.y,\r\n mouseButton: operation.button\r\n }));\r\n } else if (operation === 'hide') {\r\n var $menu = this.first().data('contextMenu') ? this.first().data('contextMenu').$menu : null;\r\n if ($menu) {\r\n $menu.trigger('contextmenu:hide');\r\n }\r\n } else if (operation === 'destroy') {\r\n $.contextMenu('destroy', {context: this});\r\n } else if ($.isPlainObject(operation)) {\r\n operation.context = this;\r\n $.contextMenu('create', operation);\r\n } else if (operation) {\r\n this.removeClass('context-menu-disabled');\r\n } else if (!operation) {\r\n this.addClass('context-menu-disabled');\r\n }\r\n } else {\r\n $.each(menus, function () {\r\n if (this.selector === $t.selector) {\r\n $o.data = this;\r\n\r\n $.extend($o.data, {trigger: 'demand'});\r\n }\r\n });\r\n\r\n handle.contextmenu.call($o.target, $o);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n // manage contextMenu instances\r\n $.contextMenu = function (operation, options) {\r\n if (typeof operation !== 'string') {\r\n options = operation;\r\n operation = 'create';\r\n }\r\n\r\n if (typeof options === 'string') {\r\n options = {selector: options};\r\n } else if (typeof options === 'undefined') {\r\n options = {};\r\n }\r\n\r\n // merge with default options\r\n var o = $.extend(true, {}, defaults, options || {});\r\n var $document = $(document);\r\n var $context = $document;\r\n var _hasContext = false;\r\n\r\n if (!o.context || !o.context.length) {\r\n o.context = document;\r\n } else {\r\n // you never know what they throw at you...\r\n $context = $(o.context).first();\r\n o.context = $context.get(0);\r\n _hasContext = !$(o.context).is(document);\r\n }\r\n\r\n switch (operation) {\r\n\r\n case 'update':\r\n // Updates visibility and such\r\n if(_hasContext){\r\n op.update($context);\r\n } else {\r\n for(var menu in menus){\r\n if(menus.hasOwnProperty(menu)){\r\n op.update(menus[menu]);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case 'create':\r\n // no selector no joy\r\n if (!o.selector) {\r\n throw new Error('No selector specified');\r\n }\r\n // make sure internal classes are not bound to\r\n if (o.selector.match(/.context-menu-(list|item|input)($|\\s)/)) {\r\n throw new Error('Cannot bind to selector \"' + o.selector + '\" as it contains a reserved className');\r\n }\r\n if (!o.build && (!o.items || $.isEmptyObject(o.items))) {\r\n throw new Error('No Items specified');\r\n }\r\n counter++;\r\n o.ns = '.contextMenu' + counter;\r\n if (!_hasContext) {\r\n namespaces[o.selector] = o.ns;\r\n }\r\n menus[o.ns] = o;\r\n\r\n // default to right click\r\n if (!o.trigger) {\r\n o.trigger = 'right';\r\n }\r\n\r\n if (!initialized) {\r\n var itemClick = o.itemClickEvent === 'click' ? 'click.contextMenu' : 'mouseup.contextMenu';\r\n var contextMenuItemObj = {\r\n // 'mouseup.contextMenu': handle.itemClick,\r\n // 'click.contextMenu': handle.itemClick,\r\n 'contextmenu:focus.contextMenu': handle.focusItem,\r\n 'contextmenu:blur.contextMenu': handle.blurItem,\r\n 'contextmenu.contextMenu': handle.abortevent,\r\n 'mouseenter.contextMenu': handle.itemMouseenter,\r\n 'mouseleave.contextMenu': handle.itemMouseleave\r\n };\r\n contextMenuItemObj[itemClick] = handle.itemClick;\r\n // make sure item click is registered first\r\n $document\r\n .on({\r\n 'contextmenu:hide.contextMenu': handle.hideMenu,\r\n 'prevcommand.contextMenu': handle.prevItem,\r\n 'nextcommand.contextMenu': handle.nextItem,\r\n 'contextmenu.contextMenu': handle.abortevent,\r\n 'mouseenter.contextMenu': handle.menuMouseenter,\r\n 'mouseleave.contextMenu': handle.menuMouseleave\r\n }, '.context-menu-list')\r\n .on('mouseup.contextMenu', '.context-menu-input', handle.inputClick)\r\n .on(contextMenuItemObj, '.context-menu-item');\r\n\r\n initialized = true;\r\n }\r\n\r\n // engage native contextmenu event\r\n $context\r\n .on('contextmenu' + o.ns, o.selector, o, handle.contextmenu);\r\n\r\n if (_hasContext) {\r\n // add remove hook, just in case\r\n $context.on('remove' + o.ns, function () {\r\n $(this).contextMenu('destroy');\r\n });\r\n }\r\n\r\n switch (o.trigger) {\r\n case 'hover':\r\n $context\r\n .on('mouseenter' + o.ns, o.selector, o, handle.mouseenter)\r\n .on('mouseleave' + o.ns, o.selector, o, handle.mouseleave);\r\n break;\r\n\r\n case 'left':\r\n $context.on('click' + o.ns, o.selector, o, handle.click);\r\n break;\r\n\t\t\t\t case 'touchstart':\r\n $context.on('touchstart' + o.ns, o.selector, o, handle.click);\r\n break;\r\n /*\r\n default:\r\n // http://www.quirksmode.org/dom/events/contextmenu.html\r\n $document\r\n .on('mousedown' + o.ns, o.selector, o, handle.mousedown)\r\n .on('mouseup' + o.ns, o.selector, o, handle.mouseup);\r\n break;\r\n */\r\n }\r\n\r\n // create menu\r\n if (!o.build) {\r\n op.create(o);\r\n }\r\n break;\r\n\r\n case 'destroy':\r\n var $visibleMenu;\r\n if (_hasContext) {\r\n // get proper options\r\n var context = o.context;\r\n $.each(menus, function (ns, o) {\r\n\r\n if (!o) {\r\n return true;\r\n }\r\n\r\n // Is this menu equest to the context called from\r\n if (!$(context).is(o.selector)) {\r\n return true;\r\n }\r\n\r\n $visibleMenu = $('.context-menu-list').filter(':visible');\r\n if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is($(o.context).find(o.selector))) {\r\n $visibleMenu.trigger('contextmenu:hide', {force: true});\r\n }\r\n\r\n try {\r\n if (menus[o.ns].$menu) {\r\n menus[o.ns].$menu.remove();\r\n }\r\n\r\n delete menus[o.ns];\r\n } catch (e) {\r\n menus[o.ns] = null;\r\n }\r\n\r\n $(o.context).off(o.ns);\r\n\r\n return true;\r\n });\r\n } else if (!o.selector) {\r\n $document.off('.contextMenu .contextMenuAutoHide');\r\n $.each(menus, function (ns, o) {\r\n $(o.context).off(o.ns);\r\n });\r\n\r\n namespaces = {};\r\n menus = {};\r\n counter = 0;\r\n initialized = false;\r\n\r\n $('#context-menu-layer, .context-menu-list').remove();\r\n } else if (namespaces[o.selector]) {\r\n $visibleMenu = $('.context-menu-list').filter(':visible');\r\n if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is(o.selector)) {\r\n $visibleMenu.trigger('contextmenu:hide', {force: true});\r\n }\r\n\r\n try {\r\n if (menus[namespaces[o.selector]].$menu) {\r\n menus[namespaces[o.selector]].$menu.remove();\r\n }\r\n\r\n delete menus[namespaces[o.selector]];\r\n } catch (e) {\r\n menus[namespaces[o.selector]] = null;\r\n }\r\n\r\n $document.off(namespaces[o.selector]);\r\n }\r\n break;\r\n\r\n case 'html5':\r\n // if <command> and <menuitem> are not handled by the browser,\r\n // or options was a bool true,\r\n // initialize $.contextMenu for them\r\n if ((!$.support.htmlCommand && !$.support.htmlMenuitem) || (typeof options === 'boolean' && options)) {\r\n $('menu[type=\"context\"]').each(function () {\r\n if (this.id) {\r\n $.contextMenu({\r\n selector: '[contextmenu=' + this.id + ']',\r\n items: $.contextMenu.fromMenu(this)\r\n });\r\n }\r\n }).css('display', 'none');\r\n }\r\n break;\r\n\r\n default:\r\n throw new Error('Unknown operation \"' + operation + '\"');\r\n }\r\n\r\n return this;\r\n };\r\n\r\n// import values into <input> commands\r\n $.contextMenu.setInputValues = function (opt, data) {\r\n if (typeof data === 'undefined') {\r\n data = {};\r\n }\r\n\r\n $.each(opt.inputs, function (key, item) {\r\n switch (item.type) {\r\n case 'text':\r\n case 'textarea':\r\n item.value = data[key] || '';\r\n break;\r\n\r\n case 'checkbox':\r\n item.selected = data[key] ? true : false;\r\n break;\r\n\r\n case 'radio':\r\n item.selected = (data[item.radio] || '') === item.value;\r\n break;\r\n\r\n case 'select':\r\n item.selected = data[key] || '';\r\n break;\r\n }\r\n });\r\n };\r\n\r\n// export values from <input> commands\r\n $.contextMenu.getInputValues = function (opt, data) {\r\n if (typeof data === 'undefined') {\r\n data = {};\r\n }\r\n\r\n $.each(opt.inputs, function (key, item) {\r\n switch (item.type) {\r\n case 'text':\r\n case 'textarea':\r\n case 'select':\r\n data[key] = item.$input.val();\r\n break;\r\n\r\n case 'checkbox':\r\n data[key] = item.$input.prop('checked');\r\n break;\r\n\r\n case 'radio':\r\n if (item.$input.prop('checked')) {\r\n data[item.radio] = item.value;\r\n }\r\n break;\r\n }\r\n });\r\n\r\n return data;\r\n };\r\n\r\n// find <label for=\"xyz\">\r\n function inputLabel(node) {\r\n return (node.id && $('label[for=\"' + node.id + '\"]').val()) || node.name;\r\n }\r\n\r\n// convert <menu> to items object\r\n function menuChildren(items, $children, counter) {\r\n if (!counter) {\r\n counter = 0;\r\n }\r\n\r\n $children.each(function () {\r\n var $node = $(this),\r\n node = this,\r\n nodeName = this.nodeName.toLowerCase(),\r\n label,\r\n item;\r\n\r\n // extract <label><input>\r\n if (nodeName === 'label' && $node.find('input, textarea, select').length) {\r\n label = $node.text();\r\n $node = $node.children().first();\r\n node = $node.get(0);\r\n nodeName = node.nodeName.toLowerCase();\r\n }\r\n\r\n /*\r\n * <menu> accepts flow-content as children. that means <embed>, <canvas> and such are valid menu items.\r\n * Not being the sadistic kind, $.contextMenu only accepts:\r\n * <command>, <menuitem>, <hr>, <span>, <p> <input [text, radio, checkbox]>, <textarea>, <select> and of course <menu>.\r\n * Everything else will be imported as an html node, which is not interfaced with contextMenu.\r\n */\r\n\r\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#concept-command\r\n switch (nodeName) {\r\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-menu-element\r\n case 'menu':\r\n item = {name: $node.attr('label'), items: {}};\r\n counter = menuChildren(item.items, $node.children(), counter);\r\n break;\r\n\r\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-a-element-to-define-a-command\r\n case 'a':\r\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-button-element-to-define-a-command\r\n case 'button':\r\n item = {\r\n name: $node.text(),\r\n disabled: !!$node.attr('disabled'),\r\n callback: (function () {\r\n return function () {\r\n $node.get(0).click();\r\n };\r\n })()\r\n };\r\n break;\r\n\r\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-command-element-to-define-a-command\r\n case 'menuitem':\r\n case 'command':\r\n switch ($node.attr('type')) {\r\n case undefined:\r\n case 'command':\r\n case 'menuitem':\r\n item = {\r\n name: $node.attr('label'),\r\n disabled: !!$node.attr('disabled'),\r\n icon: $node.attr('icon'),\r\n callback: (function () {\r\n return function () {\r\n $node.get(0).click();\r\n };\r\n })()\r\n };\r\n break;\r\n\r\n case 'checkbox':\r\n item = {\r\n type: 'checkbox',\r\n disabled: !!$node.attr('disabled'),\r\n name: $node.attr('label'),\r\n selected: !!$node.attr('checked')\r\n };\r\n break;\r\n case 'radio':\r\n item = {\r\n type: 'radio',\r\n disabled: !!$node.attr('disabled'),\r\n name: $node.attr('label'),\r\n radio: $node.attr('radiogroup'),\r\n value: $node.attr('id'),\r\n selected: !!$node.attr('checked')\r\n };\r\n break;\r\n\r\n default:\r\n item = undefined;\r\n }\r\n break;\r\n\r\n case 'hr':\r\n item = '-------';\r\n break;\r\n\r\n case 'input':\r\n switch ($node.attr('type')) {\r\n case 'text':\r\n item = {\r\n type: 'text',\r\n name: label || inputLabel(node),\r\n disabled: !!$node.attr('disabled'),\r\n value: $node.val()\r\n };\r\n break;\r\n\r\n case 'checkbox':\r\n item = {\r\n type: 'checkbox',\r\n name: label || inputLabel(node),\r\n disabled: !!$node.attr('disabled'),\r\n selected: !!$node.attr('checked')\r\n };\r\n break;\r\n\r\n case 'radio':\r\n item = {\r\n type: 'radio',\r\n name: label || inputLabel(node),\r\n disabled: !!$node.attr('disabled'),\r\n radio: !!$node.attr('name'),\r\n value: $node.val(),\r\n selected: !!$node.attr('checked')\r\n };\r\n break;\r\n\r\n default:\r\n item = undefined;\r\n break;\r\n }\r\n break;\r\n\r\n case 'select':\r\n item = {\r\n type: 'select',\r\n name: label || inputLabel(node),\r\n disabled: !!$node.attr('disabled'),\r\n selected: $node.val(),\r\n options: {}\r\n };\r\n $node.children().each(function () {\r\n item.options[this.value] = $(this).text();\r\n });\r\n break;\r\n\r\n case 'textarea':\r\n item = {\r\n type: 'textarea',\r\n name: label || inputLabel(node),\r\n disabled: !!$node.attr('disabled'),\r\n value: $node.val()\r\n };\r\n break;\r\n\r\n case 'label':\r\n break;\r\n\r\n default:\r\n item = {type: 'html', html: $node.clone(true)};\r\n break;\r\n }\r\n\r\n if (item) {\r\n counter++;\r\n items['key' + counter] = item;\r\n }\r\n });\r\n\r\n return counter;\r\n }\r\n\r\n// convert html5 menu\r\n $.contextMenu.fromMenu = function (element) {\r\n var $this = $(element),\r\n items = {};\r\n\r\n menuChildren(items, $this.children());\r\n\r\n return items;\r\n };\r\n\r\n// make defaults accessible\r\n $.contextMenu.defaults = defaults;\r\n $.contextMenu.types = types;\r\n// export internal functions - undocumented, for hacking only!\r\n $.contextMenu.handle = handle;\r\n $.contextMenu.op = op;\r\n $.contextMenu.menus = menus;\r\n});\r\n"],"names":["factory","define","amd","exports","require","jQuery","$","orig","support","htmlMenuitem","window","htmlCommand","eventSelectstart","document","documentElement","ui","widget","cleanData","elems","events","elem","i","_data","remove","triggerHandler","e","$currentTrigger","initialized","$win","counter","namespaces","menus","types","defaults","selector","appendTo","trigger","autoHide","delay","reposition","hideOnSecondTrigger","selectableSubMenu","classNames","hover","disabled","visible","notSelectable","icon","iconEdit","iconCut","iconCopy","iconPaste","iconDelete","iconAdd","iconQuit","iconLoadingClass","determinePosition","$menu","position","css","my","at","of","this","offset","collision","top","outerHeight","left","outerWidth","opt","x","y","offsetParentOffset","offsetParent","bottom","scrollTop","height","right","scrollLeft","width","call","positionSubmenu","zIndex","animation","duration","show","hide","preShow","noop","activated","callback","items","hoveract","timer","pageX","pageY","handle","abortevent","preventDefault","stopImmediatePropagation","contextmenu","$this","data","originalEvent","mouseButton","hasClass","build","built","extend","isEmptyObject","console","error","log","Error","$trigger","op","create","click","Event","mousedown","length","is","button","mouseup","removeData","mouseenter","$related","relatedTarget","$document","closest","on","mousemove","setTimeout","off","mouseleave","clearTimeout","layerClick","target","root","fakeClick","undefined","$window","triggerAction","elementFromPoint","$layer","isContentEditable","range","createRange","sel","getSelection","selectNode","collapse","removeAllRanges","addRange","one","contextMenu","keyStop","isInput","stopPropagation","key","targetZIndex","getZIndexOfTriggerTarget","style","parentElement","parseInt","keyCode","shiftKey","$selected","find","blur","prop","parent","$parent","itemdata","children","k","String","fromCharCode","toUpperCase","accesskeys","$node","prevItem","$s","$children","$prev","prev","last","$round","itemMouseleave","get","itemMouseenter","$input","focus","nextItem","$next","next","first","focusInput","contextMenuRoot","blurInput","menuMouseenter","hovering","menuMouseleave","itemClick","contextMenuKey","isFunction","callbacks","Object","prototype","hasOwnProperty","update","inputClick","hideMenu","force","focusItem","addClass","join","not","removeClass","filter","blurItem","additionalZValue","$t","zin","$tt","Math","max","indexOf","toLowerCase","zindex","layer","pos","each","createNameNode","item","$name","_accesskey","_beforeAccesskey","append","createTextNode","text","_afterAccesskey","isHtmlName","accesskey","html","name","className","dataAttr","attr","$label","type","ak","aks","val","t","split","keys","charAt","push","splitAccesskey","matched","match","RegExp","commands","hasTypes","inputs","value","selected","prependTo","radio","options","then","processPromises","_icon","substring","prepend","body","resize","nested","domMenu","display","getBoundingClientRect","ceil","minWidth","maxWidth","addBack","hasVisibleItems","$item","iconResult","z-index","opacity","background-color","promise","errorPromise","errorItem","finishPromiseProcess","bind","$menuOffset","winHeight","winScrollTop","menuHeight","overflow-x","overflow-y","inputLabel","node","id","fn","operation","$o","context","isPlainObject","o","$context","_hasContext","menu","ns","itemClickEvent","contextMenuItemObj","contextmenu:focus.contextMenu","contextmenu:blur.contextMenu","contextmenu.contextMenu","mouseenter.contextMenu","mouseleave.contextMenu","contextmenu:hide.contextMenu","prevcommand.contextMenu","nextcommand.contextMenu","$visibleMenu","fromMenu","setInputValues","getInputValues","element","menuChildren","label","nodeName","clone"],"mappings":"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"} jquery-contextmenu/jquery.contextMenu.min.css.map 0000644 00000034404 14704452271 0016344 0 ustar 00 {"version":3,"sources":["jquery.contextMenu.css","jquery.contextMenu.min.css"],"names":[],"mappings":"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","file":"jquery.contextMenu.min.css","sourcesContent":["@charset \"UTF-8\";\n/*!\r\n * jQuery contextMenu - Plugin for simple contextMenu handling\r\n *\r\n * Version: v2.9.2\r\n *\r\n * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)\r\n * Web: http://swisnl.github.io/jQuery-contextMenu/\r\n *\r\n * Copyright (c) 2011-2020 SWIS BV and contributors\r\n *\r\n * Licensed under\r\n * MIT License http://www.opensource.org/licenses/mit-license\r\n *\r\n * Date: 2020-05-13T13:55:37.023Z\r\n */\n@keyframes cm-spin {\n 0% {\n -webkit-transform: translateY(-50%) rotate(0deg);\n transform: translateY(-50%) rotate(0deg); }\n 100% {\n -webkit-transform: translateY(-50%) rotate(359deg);\n transform: translateY(-50%) rotate(359deg); } }\n\n@font-face {\n font-family: \"context-menu-icons\";\n src: url(\"font/context-menu-icons.eot?33lxn\");\n src: url(\"font/context-menu-icons.eot?33lxn#iefix\") format(\"embedded-opentype\"), url(\"font/context-menu-icons.woff2?33lxn\") format(\"woff2\"), url(\"font/context-menu-icons.woff?33lxn\") format(\"woff\"), url(\"font/context-menu-icons.ttf?33lxn\") format(\"truetype\");\n font-weight: normal;\n font-style: normal; }\n\n.context-menu-icon-add:before {\n content: \"\\EA01\"; }\n\n.context-menu-icon-copy:before {\n content: \"\\EA02\"; }\n\n.context-menu-icon-cut:before {\n content: \"\\EA03\"; }\n\n.context-menu-icon-delete:before {\n content: \"\\EA04\"; }\n\n.context-menu-icon-edit:before {\n content: \"\\EA05\"; }\n\n.context-menu-icon-loading:before {\n content: \"\\EA06\"; }\n\n.context-menu-icon-paste:before {\n content: \"\\EA07\"; }\n\n.context-menu-icon-quit:before {\n content: \"\\EA08\"; }\n\n.context-menu-icon::before {\n color: #2980B9;\n font-family: \"context-menu-icons\";\n font-style: normal;\n font-weight: normal;\n font-size: 1em;\n left: 0;\n line-height: 1;\n position: absolute;\n text-align: center;\n top: 50%;\n transform: translateY(-50%);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: 2em; }\n\n.context-menu-icon.context-menu-hover:before {\n color: #FFF; }\n\n.context-menu-icon.context-menu-disabled::before {\n color: #bbbbbb; }\n\n.context-menu-icon.context-menu-icon-loading:before {\n animation: cm-spin 2s infinite; }\n\n.context-menu-icon.context-menu-icon--fa {\n display: list-item;\n font-family: inherit;\n line-height: inherit; }\n .context-menu-icon.context-menu-icon--fa::before {\n color: #2980B9;\n font-family: FontAwesome;\n font-style: normal;\n font-weight: normal;\n font-size: 1em;\n left: 0;\n line-height: 1;\n position: absolute;\n text-align: center;\n top: 50%;\n transform: translateY(-50%);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: 2em; }\n .context-menu-icon.context-menu-icon--fa.context-menu-hover:before {\n color: #FFF; }\n .context-menu-icon.context-menu-icon--fa.context-menu-disabled::before {\n color: #bbbbbb; }\n\n.context-menu-icon.context-menu-icon--fa5 {\n display: list-item;\n font-family: inherit;\n line-height: inherit; }\n .context-menu-icon.context-menu-icon--fa5 i, .context-menu-icon.context-menu-icon--fa5 svg {\n color: #2980B9;\n left: 0.5em;\n position: absolute;\n top: 0.3em; }\n .context-menu-icon.context-menu-icon--fa5.context-menu-hover > i, .context-menu-icon.context-menu-icon--fa5.context-menu-hover > svg {\n color: #FFF; }\n .context-menu-icon.context-menu-icon--fa5.context-menu-disabled i, .context-menu-icon.context-menu-icon--fa5.context-menu-disabled svg {\n color: #bbbbbb; }\n\n.context-menu-list {\n background: #FFF;\n border: 1px solid #bebebe;\n border-radius: 0.2em;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);\n display: inline-block;\n font-family: inherit;\n font-size: inherit;\n list-style-type: none;\n margin: 0.3em;\n max-width: 26em;\n min-width: 13em;\n padding: 0.25em 0;\n position: absolute; }\n\n.context-menu-item {\n background-color: #FFF;\n box-sizing: content-box;\n color: #2F2F2F;\n padding: 0.2em 2em;\n position: relative;\n user-select: none; }\n\n.context-menu-separator {\n border-bottom: 1px solid #e6e6e6;\n margin: 0.35em 0;\n padding: 0; }\n\n.context-menu-item > label > input,\n.context-menu-item > label > textarea {\n user-select: text; }\n\n.context-menu-item.context-menu-hover {\n background-color: #2980B9;\n color: #FFF;\n cursor: pointer; }\n\n.context-menu-item.context-menu-disabled {\n background-color: #FFF;\n color: #bbbbbb;\n cursor: default; }\n\n.context-menu-input.context-menu-hover {\n cursor: default;\n color: #2F2F2F; }\n\n.context-menu-submenu:after {\n content: '';\n border-style: solid;\n border-width: .25em 0 .25em .25em;\n border-color: transparent transparent transparent #2F2F2F;\n height: 0;\n position: absolute;\n right: .5em;\n top: 50%;\n transform: translateY(-50%);\n width: 0;\n z-index: 1; }\n\n/**\r\n * Inputs\r\n */\n.context-menu-item.context-menu-input {\n padding: .3em .6em; }\n\n/* vertically align inside labels */\n.context-menu-input > label > * {\n vertical-align: top; }\n\n/* position checkboxes and radios as icons */\n.context-menu-input > label > input[type=\"checkbox\"],\n.context-menu-input > label > input[type=\"radio\"] {\n margin-right: .4em;\n position: relative;\n top: .12em; }\n\n.context-menu-input > label {\n margin: 0; }\n\n.context-menu-input > label,\n.context-menu-input > label > input[type=\"text\"],\n.context-menu-input > label > textarea,\n.context-menu-input > label > select {\n box-sizing: border-box;\n display: block;\n width: 100%; }\n\n.context-menu-input > label > textarea {\n height: 7em; }\n\n.context-menu-item > .context-menu-list {\n display: none;\n /* re-positioned by js */\n right: -.3em;\n top: .3em; }\n\n.context-menu-item.context-menu-visible > .context-menu-list {\n display: block; }\n\n.context-menu-accesskey {\n text-decoration: underline; }\n","@charset \"UTF-8\";/*!\r\n * jQuery contextMenu - Plugin for simple contextMenu handling\r\n *\r\n * Version: v2.9.0\r\n *\r\n * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)\r\n * Web: http://swisnl.github.io/jQuery-contextMenu/\r\n *\r\n * Copyright (c) 2011-2020 SWIS BV and contributors\r\n *\r\n * Licensed under\r\n * MIT License http://www.opensource.org/licenses/mit-license\r\n *\r\n * Date: 2020-05-06T18:55:06.258Z\r\n */@-webkit-keyframes cm-spin{0%{-webkit-transform:translateY(-50%) rotate(0);transform:translateY(-50%) rotate(0)}100%{-webkit-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@-o-keyframes cm-spin{0%{-webkit-transform:translateY(-50%) rotate(0);-o-transform:translateY(-50%) rotate(0);transform:translateY(-50%) rotate(0)}100%{-webkit-transform:translateY(-50%) rotate(359deg);-o-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@keyframes cm-spin{0%{-webkit-transform:translateY(-50%) rotate(0);-o-transform:translateY(-50%) rotate(0);transform:translateY(-50%) rotate(0)}100%{-webkit-transform:translateY(-50%) rotate(359deg);-o-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@font-face{font-family:context-menu-icons;font-style:normal;font-weight:400;src:url(font/context-menu-icons.eot?33lxn);src:url(font/context-menu-icons.eot?33lxn#iefix) format(\"embedded-opentype\"),url(font/context-menu-icons.woff2?33lxn) format(\"woff2\"),url(font/context-menu-icons.woff?33lxn) format(\"woff\"),url(font/context-menu-icons.ttf?33lxn) format(\"truetype\")}.context-menu-icon-add:before{content:\"\\EA01\"}.context-menu-icon-copy:before{content:\"\\EA02\"}.context-menu-icon-cut:before{content:\"\\EA03\"}.context-menu-icon-delete:before{content:\"\\EA04\"}.context-menu-icon-edit:before{content:\"\\EA05\"}.context-menu-icon-loading:before{content:\"\\EA06\"}.context-menu-icon-paste:before{content:\"\\EA07\"}.context-menu-icon-quit:before{content:\"\\EA08\"}.context-menu-icon::before{position:absolute;top:50%;left:0;width:2em;font-family:context-menu-icons;font-size:1em;font-style:normal;font-weight:400;line-height:1;color:#2980b9;text-align:center;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.context-menu-icon.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-disabled::before{color:#bbb}.context-menu-icon.context-menu-icon-loading:before{-webkit-animation:cm-spin 2s infinite;-o-animation:cm-spin 2s infinite;animation:cm-spin 2s infinite}.context-menu-icon.context-menu-icon--fa{display:list-item;font-family:inherit;line-height:inherit}.context-menu-icon.context-menu-icon--fa::before{position:absolute;top:50%;left:0;width:2em;font-family:FontAwesome;font-size:1em;font-style:normal;font-weight:400;line-height:1;color:#2980b9;text-align:center;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.context-menu-icon.context-menu-icon--fa.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-icon--fa.context-menu-disabled::before{color:#bbb}.context-menu-icon.context-menu-icon--fa5{display:list-item;font-family:inherit;line-height:inherit}.context-menu-icon.context-menu-icon--fa5 i,.context-menu-icon.context-menu-icon--fa5 svg{position:absolute;top:.3em;left:.5em;color:#2980b9}.context-menu-icon.context-menu-icon--fa5.context-menu-hover>i,.context-menu-icon.context-menu-icon--fa5.context-menu-hover>svg{color:#fff}.context-menu-icon.context-menu-icon--fa5.context-menu-disabled i,.context-menu-icon.context-menu-icon--fa5.context-menu-disabled svg{color:#bbb}.context-menu-list{position:absolute;display:inline-block;min-width:13em;max-width:26em;padding:.25em 0;margin:.3em;font-family:inherit;font-size:inherit;list-style-type:none;background:#fff;border:1px solid #bebebe;border-radius:.2em;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.5);box-shadow:0 2px 5px rgba(0,0,0,.5)}.context-menu-item{position:relative;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;padding:.2em 2em;color:#2f2f2f;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.context-menu-separator{padding:0;margin:.35em 0;border-bottom:1px solid #e6e6e6}.context-menu-item>label>input,.context-menu-item>label>textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.context-menu-item.context-menu-hover{color:#fff;cursor:pointer;background-color:#2980b9}.context-menu-item.context-menu-disabled{color:#bbb;cursor:default;background-color:#fff}.context-menu-input.context-menu-hover{color:#2f2f2f;cursor:default}.context-menu-submenu:after{position:absolute;top:50%;right:.5em;z-index:1;width:0;height:0;content:'';border-color:transparent transparent transparent #2f2f2f;border-style:solid;border-width:.25em 0 .25em .25em;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.context-menu-item.context-menu-input{padding:.3em .6em}.context-menu-input>label>*{vertical-align:top}.context-menu-input>label>input[type=checkbox],.context-menu-input>label>input[type=radio]{position:relative;top:.12em;margin-right:.4em}.context-menu-input>label{margin:0}.context-menu-input>label,.context-menu-input>label>input[type=text],.context-menu-input>label>select,.context-menu-input>label>textarea{display:block;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.context-menu-input>label>textarea{height:7em}.context-menu-item>.context-menu-list{top:.3em;right:-.3em;display:none}.context-menu-item.context-menu-visible>.context-menu-list{display:block}.context-menu-accesskey{text-decoration:underline}\r\n/*# sourceMappingURL=jquery.contextMenu.min.css.map */\r\n"]} js/bootstrap.min.js.map 0000644 00000657564 14704452271 0011126 0 ustar 00 {"version":3,"sources":["../../js/src/util/index.js","../../js/src/dom/data.js","../../js/src/dom/event-handler.js","../../js/src/base-component.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/manipulator.js","../../js/src/dom/selector-engine.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"names":["getUID","prefix","Math","floor","random","document","getElementById","getSelector","element","selector","getAttribute","hrefAttr","includes","startsWith","split","trim","getSelectorFromElement","querySelector","getElementFromSelector","getTransitionDurationFromElement","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","triggerTransitionEnd","dispatchEvent","Event","isElement","obj","nodeType","emulateTransitionEnd","duration","called","emulatedDuration","addEventListener","listener","removeEventListener","setTimeout","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","toString","call","match","toLowerCase","RegExp","test","TypeError","toUpperCase","isVisible","style","parentNode","elementStyle","parentNodeStyle","display","visibility","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","isRTL","dir","defineJQueryPlugin","name","plugin","callback","$","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","execute","elementMap","Map","Data","set","key","instance","has","instanceMap","get","size","console","error","Array","from","remove","delete","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","customEventsRegex","nativeEvents","Set","getUidEvent","uid","getEvent","findHandler","events","handler","delegationSelector","uidEventList","i","len","length","event","originalHandler","normalizeParams","originalTypeEvent","delegationFn","delegation","typeEvent","getTypeEvent","addHandler","oneOff","wrapFn","relatedTarget","delegateTarget","this","handlers","previousFn","replace","domElements","querySelectorAll","target","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","on","one","inNamespace","isNamespace","elementEvent","namespace","storeElementEvent","handlerKey","removeNamespacedHandlers","slice","keyHandlers","trigger","args","isNative","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","evt","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","createEvent","initEvent","CustomEvent","cancelable","defineProperty","preventDefault","BaseComponent","constructor","_element","DATA_KEY","dispose","[object Object]","VERSION","Alert","close","rootElement","_getRootElement","customEvent","_triggerCloseEvent","_removeElement","closest","_destroyElement","removeChild","each","data","alertInstance","handleDismiss","Button","toggle","setAttribute","normalizeData","val","normalizeDataKey","chr","button","Manipulator","setDataAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","dataset","filter","pureKey","charAt","getDataAttribute","offset","rect","getBoundingClientRect","top","scrollTop","left","scrollLeft","position","offsetTop","offsetLeft","SelectorEngine","find","concat","Element","prototype","findOne","children","child","matches","parents","ancestor","push","prev","previous","previousElementSibling","next","nextElementSibling","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","Carousel","super","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","_addEventListeners","_slide","nextWhenVisible","hidden","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","order","_handleSwipe","absDeltax","abs","direction","_keydown","_addTouchEventListeners","start","pointerType","touches","clientX","move","end","clearTimeout","itemImg","e","add","tagName","indexOf","_getItemByOrder","activeElement","isNext","isPrev","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","_setActiveIndicatorElement","activeIndicator","indicators","parseInt","elementInterval","defaultInterval","directionOrOrder","_directionToOrder","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","_orderToDirection","action","ride","carouselInterface","slideIndex","dataApiClickHandler","carousels","parent","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","container","tempActiveData","elemActive","collapseInterface","dimension","_getDimension","setTransitioning","scrollSize","triggerArrayLength","isTransitioning","jquery","selected","triggerArray","isOpen","triggerData","REGEXP_KEYDOWN","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","boundary","reference","popperConfig","autoClose","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","getParentFromElement","Popper","referenceElement","_getPopperConfig","isDisplayStatic","modifiers","modifier","enabled","createPopper","focus","_completeHide","destroy","update","_getPlacement","parentDropdown","isEnd","getPropertyValue","_getOffset","map","popperData","defaultBsPopperConfig","placement","options","_selectMenuItem","items","dropdownInterface","toggles","context","composedPath","isMenuTarget","clickEvent","isActive","stopPropagation","getToggleButton","clearMenus","getInstance","click","dataApiKeydownHandler","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","actualValue","overflow","styleProp","scrollbarWidth","reset","_resetElementAttributes","removeProperty","isAnimated","clickCallback","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","className","appendChild","backdropTransitionDuration","Modal","_dialog","_backdrop","_initializeBackDrop","_isShown","_ignoreBackdropClick","_isAnimated","showEvent","scrollBarHide","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","htmlElement","handleUpdate","modalBody","_enforceFocus","transitionComplete","_triggerBackdropTransition","_resetAdjustments","scrollBarReset","currentTarget","isModalOverflowing","scrollHeight","clientHeight","overflowY","modalTransitionDuration","getScrollBarWidth","isBodyOverflowing","paddingLeft","paddingRight","scroll","Offcanvas","_enforceFocusOnElement","blur","undefined","allReadyOpen","el","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attr","allowedAttributeList","attrName","nodeName","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","allowList","sanitizeFn","createdDocument","DOMParser","parseFromString","allowlistKeys","elements","elName","attributeList","allowedAttributes","innerHTML","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","html","fallbackPlacements","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","*","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","NAME","EVENT_KEY","enable","disable","toggleEnabled","_initializeOnDelegatedTarget","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","Error","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","setContent","attachment","_getAttachment","_addAttachmentClass","_getContainer","complete","prevHoverState","_cleanTipClass","getTitle","setElementContent","content","textContent","updateAttachment","dataKey","_getDelegateConfig","phase","_handlePopperPlacementChange","onFirstUpdate","eventIn","eventOut","_fixTitle","originalTitleType","dataAttributes","dataAttr","tabClass","token","tClass","state","popper","Popover","_getContent","method","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","height","item","sort","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","link","join","listGroup","navItem","node","spy","Tab","listElement","itemSelector","hideEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdown","autohide","Toast","_clearTimeout"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n if (obj === null || obj === undefined) {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttr = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n hrefAttr = `#${hrefAttr.split('#')[1]}`\n }\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => (obj[0] || obj).nodeType\n\nconst emulateTransitionEnd = (element, duration) => {\n let called = false\n const durationPadding = 5\n const emulatedDuration = duration + durationPadding\n\n function listener() {\n called = true\n element.removeEventListener(TRANSITION_END, listener)\n }\n\n element.addEventListener(TRANSITION_END, listener)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(element)\n }\n }, emulatedDuration)\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach(property => {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n })\n}\n\nconst isVisible = element => {\n if (!element) {\n return false\n }\n\n if (element.style && element.parentNode && element.parentNode.style) {\n const elementStyle = getComputedStyle(element)\n const parentNodeStyle = getComputedStyle(element.parentNode)\n\n return elementStyle.display !== 'none' &&\n parentNodeStyle.display !== 'none' &&\n elementStyle.visibility !== 'hidden'\n }\n\n return false\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\nconst reflow = element => element.offsetHeight\n\nconst getjQuery = () => {\n const { jQuery } = window\n\n if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return jQuery\n }\n\n return null\n}\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = (name, plugin) => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nexport {\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n emulateTransitionEnd,\n typeCheckConfig,\n isVisible,\n isDisabled,\n findShadowRoot,\n noop,\n reflow,\n getjQuery,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin,\n execute\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\nconst customEventsRegex = /^(mouseenter|mouseleave)/i\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getEvent(element) {\n const uid = getUidEvent(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n event.delegateTarget = element\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (let i = domElements.length; i--;) {\n if (domElements[i] === target) {\n event.delegateTarget = target\n\n if (handler.oneOff) {\n // eslint-disable-next-line unicorn/consistent-destructuring\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n\n // To please ESLint\n return null\n }\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n const uidEventList = Object.keys(events)\n\n for (let i = 0, len = uidEventList.length; i < len; i++) {\n const event = events[uidEventList[i]]\n\n if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n return event\n }\n }\n\n return null\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n const delegation = typeof handler === 'string'\n const originalHandler = delegation ? delegationFn : handler\n\n let typeEvent = getTypeEvent(originalTypeEvent)\n const isNative = nativeEvents.has(typeEvent)\n\n if (!isNative) {\n typeEvent = originalTypeEvent\n }\n\n return [delegation, originalHandler, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n if (!handler) {\n handler = delegationFn\n delegationFn = null\n }\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (customEventsRegex.test(originalTypeEvent)) {\n const wrapFn = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n if (delegationFn) {\n delegationFn = wrapFn(delegationFn)\n } else {\n handler = wrapFn(handler)\n }\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n const events = getEvent(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null)\n\n if (previousFn) {\n previousFn.oneOff = previousFn.oneOff && oneOff\n\n return\n }\n\n const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = delegation ?\n bootstrapDelegationHandler(element, handler, delegationFn) :\n bootstrapHandler(element, handler)\n\n fn.delegationSelector = delegation ? handler : null\n fn.originalHandler = originalHandler\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, delegation)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n Object.keys(storeElementEvent).forEach(handlerKey => {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n\n removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n }\n })\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, false)\n },\n\n one(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFn) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getEvent(element)\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof originalHandler !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!events || !events[typeEvent]) {\n return\n }\n\n removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null)\n return\n }\n\n if (isNamespace) {\n Object.keys(events).forEach(elementEvent => {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n })\n }\n\n const storeElementEvent = events[typeEvent] || {}\n Object.keys(storeElementEvent).forEach(keyHandlers => {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n\n removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n }\n })\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n const isNative = nativeEvents.has(typeEvent)\n\n let jQueryEvent\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n let evt = null\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n if (isNative) {\n evt = document.createEvent('HTMLEvents')\n evt.initEvent(typeEvent, bubbles, true)\n } else {\n evt = new CustomEvent(event, {\n bubbles,\n cancelable: true\n })\n }\n\n // merge custom information in our event\n if (typeof args !== 'undefined') {\n Object.keys(args).forEach(key => {\n Object.defineProperty(evt, key, {\n get() {\n return args[key]\n }\n })\n })\n }\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.0'\n\nclass BaseComponent {\n constructor(element) {\n element = typeof element === 'string' ? document.querySelector(element) : element\n\n if (!element) {\n return\n }\n\n this._element = element\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, `.${this.constructor.DATA_KEY}`)\n this._element = null\n }\n\n /** Static */\n\n static getInstance(element) {\n return Data.get(element, this.DATA_KEY)\n }\n\n static get VERSION() {\n return VERSION\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getElementFromSelector,\n getTransitionDurationFromElement\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n // Getters\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n close(element) {\n const rootElement = element ? this._getRootElement(element) : this._element\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent === null || customEvent.defaultPrevented) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n // Private\n\n _getRootElement(element) {\n return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`)\n }\n\n _triggerCloseEvent(element) {\n return EventHandler.trigger(element, EVENT_CLOSE)\n }\n\n _removeElement(element) {\n element.classList.remove(CLASS_NAME_SHOW)\n\n if (!element.classList.contains(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = getTransitionDurationFromElement(element)\n\n EventHandler.one(element, 'transitionend', () => this._destroyElement(element))\n emulateTransitionEnd(element, transitionDuration)\n }\n\n _destroyElement(element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n }\n\n EventHandler.trigger(element, EVENT_CLOSED)\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.get(this, DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()))\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n // Getters\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.get(this, DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n\n let data = Data.get(button, DATA_KEY)\n if (!data) {\n data = new Button(button)\n }\n\n data.toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true\n }\n\n if (val === 'false') {\n return false\n }\n\n if (val === Number(val).toString()) {\n return Number(val)\n }\n\n if (val === '' || val === 'null') {\n return null\n }\n\n return val\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n\n Object.keys(element.dataset)\n .filter(key => key.startsWith('bs'))\n .forEach(key => {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n })\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n },\n\n offset(element) {\n const rect = element.getBoundingClientRect()\n\n return {\n top: rect.top + document.body.scrollTop,\n left: rect.left + document.body.scrollLeft\n }\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft\n }\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NODE_TEXT = 3\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children)\n .filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n\n let ancestor = element.parentNode\n\n while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n if (ancestor.matches(selector)) {\n parents.push(ancestor)\n }\n\n ancestor = ancestor.parentNode\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getElementFromSelector,\n getTransitionDurationFromElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_INDICATOR = '[data-bs-target]'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(ORDER_NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(ORDER_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config && this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const order = index > activeIndex ?\n ORDER_NEXT :\n ORDER_PREV\n\n this._slide(order, this._items[index])\n }\n\n dispose() {\n this._items = null\n this._config = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n\n super.dispose()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n if (!direction) {\n return\n }\n\n this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT)\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event))\n EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch && this._touchSupported) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n const start = event => {\n if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n this.touchStartX = event.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n this.touchDeltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this.touchStartX\n }\n\n const end = event => {\n if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n this.touchDeltaX = event.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault())\n })\n\n if (this._pointerEvent) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n if (event.key === ARROW_LEFT_KEY) {\n event.preventDefault()\n this._slide(DIRECTION_RIGHT)\n } else if (event.key === ARROW_RIGHT_KEY) {\n event.preventDefault()\n this._slide(DIRECTION_LEFT)\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n SelectorEngine.find(SELECTOR_ITEM, element.parentNode) :\n []\n\n return this._items.indexOf(element)\n }\n\n _getItemByOrder(order, activeElement) {\n const isNext = order === ORDER_NEXT\n const isPrev = order === ORDER_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = (isPrev && activeIndex === 0) || (isNext && activeIndex === lastItemIndex)\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = isPrev ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] :\n this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element))\n\n return EventHandler.trigger(this._element, EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement)\n\n for (let i = 0; i < indicators.length; i++) {\n if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n indicators[i].classList.add(CLASS_NAME_ACTIVE)\n indicators[i].setAttribute('aria-current', 'true')\n break\n }\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(directionOrOrder, element) {\n const order = this._directionToOrder(directionOrOrder)\n const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || this._getItemByOrder(order, activeElement)\n\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n const isNext = order === ORDER_NEXT\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n const eventDirectionName = this._orderToDirection(order)\n\n if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const transitionDuration = getTransitionDurationFromElement(activeElement)\n\n EventHandler.one(activeElement, 'transitionend', () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n setTimeout(() => {\n EventHandler.trigger(this._element, EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n }, 0)\n })\n\n emulateTransitionEnd(activeElement, transitionDuration)\n } else {\n activeElement.classList.remove(CLASS_NAME_ACTIVE)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n EventHandler.trigger(this._element, EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _directionToOrder(direction) {\n if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n return direction\n }\n\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n return order\n }\n\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n\n static carouselInterface(element, config) {\n let data = Data.get(element, DATA_KEY)\n let _config = {\n ...Default,\n ...Manipulator.getDataAttributes(element)\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(element, _config)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n Carousel.carouselInterface(this, config)\n })\n }\n\n static dataApiClickHandler(event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...Manipulator.getDataAttributes(target),\n ...Manipulator.getDataAttributes(this)\n }\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel.carouselInterface(target, config)\n\n if (slideIndex) {\n Data.get(target, DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler)\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (let i = 0, len = carousels.length; i < len; i++) {\n Carousel.carouselInterface(carousels[i], Data.get(carousels[i], DATA_KEY))\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n isElement,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._isTransitioning = false\n this._config = this._getConfig(config)\n this._triggerArray = SelectorEngine.find(\n `${SELECTOR_DATA_TOGGLE}[href=\"#${this._element.id}\"],` +\n `${SELECTOR_DATA_TOGGLE}[data-bs-target=\"#${this._element.id}\"]`\n )\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElem => foundElem === this._element)\n\n if (selector !== null && filterElement.length) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n toggle() {\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent)\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-bs-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n const container = SelectorEngine.findOne(this._selector)\n if (actives) {\n const tempActiveData = actives.find(elem => container !== elem)\n activesData = tempActiveData ? Data.get(tempActiveData, DATA_KEY) : null\n\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n if (actives) {\n actives.forEach(elemActive => {\n if (container !== elemActive) {\n Collapse.collapseInterface(elemActive, 'hide')\n }\n\n if (!activesData) {\n Data.set(elemActive, DATA_KEY, null)\n }\n })\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n this._triggerArray.forEach(element => {\n element.classList.remove(CLASS_NAME_COLLAPSED)\n element.setAttribute('aria-expanded', true)\n })\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', complete)\n\n emulateTransitionEnd(this._element, transitionDuration)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const elem = getElementFromSelector(trigger)\n\n if (elem && !elem.classList.contains(CLASS_NAME_SHOW)) {\n trigger.classList.add(CLASS_NAME_COLLAPSED)\n trigger.setAttribute('aria-expanded', false)\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', complete)\n emulateTransitionEnd(this._element, transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n super.dispose()\n this._config = null\n this._parent = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT\n }\n\n _getParent() {\n let { parent } = this._config\n\n if (isElement(parent)) {\n // it's a jQuery object\n if (typeof parent.jquery !== 'undefined' || typeof parent[0] !== 'undefined') {\n parent = parent[0]\n }\n } else {\n parent = SelectorEngine.findOne(parent)\n }\n\n const selector = `${SELECTOR_DATA_TOGGLE}[data-bs-parent=\"${parent}\"]`\n\n SelectorEngine.find(selector, parent)\n .forEach(element => {\n const selected = getElementFromSelector(element)\n\n this._addAriaAndCollapsedClass(\n selected,\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n if (!element || !triggerArray.length) {\n return\n }\n\n const isOpen = element.classList.contains(CLASS_NAME_SHOW)\n\n triggerArray.forEach(elem => {\n if (isOpen) {\n elem.classList.remove(CLASS_NAME_COLLAPSED)\n } else {\n elem.classList.add(CLASS_NAME_COLLAPSED)\n }\n\n elem.setAttribute('aria-expanded', isOpen)\n })\n }\n\n // Static\n\n static collapseInterface(element, config) {\n let data = Data.get(element, DATA_KEY)\n const _config = {\n ...Default,\n ...Manipulator.getDataAttributes(element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(element, _config)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n Collapse.collapseInterface(this, config)\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const triggerData = Manipulator.getDataAttributes(this)\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n selectorElements.forEach(element => {\n const data = Data.get(element, DATA_KEY)\n let config\n if (data) {\n // update parent attribute\n if (data._parent === null && typeof triggerData.parent === 'string') {\n data._config.parent = triggerData.parent\n data._parent = data._getParent()\n }\n\n config = 'toggle'\n } else {\n config = triggerData\n }\n\n Collapse.collapseInterface(element, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isElement,\n isVisible,\n isRTL,\n noop,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst SPACE_KEY = 'Space'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_NAVBAR = 'navbar'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\n\nconst Default = {\n offset: [0, 2],\n boundary: 'clippingParents',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null,\n autoClose: true\n}\n\nconst DefaultType = {\n offset: '(array|string|function)',\n boundary: '(string|element)',\n reference: '(string|element|object)',\n display: 'string',\n popperConfig: '(null|object|function)',\n autoClose: '(boolean|string)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n toggle() {\n if (isDisabled(this._element)) {\n return\n }\n\n const isActive = this._element.classList.contains(CLASS_NAME_SHOW)\n\n if (isActive) {\n this.hide()\n return\n }\n\n this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const parent = Dropdown.getParentFromElement(this._element)\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (this._inNavbar) {\n Manipulator.setDataAttribute(this._menu, 'popper', 'none')\n } else {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false)\n\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n\n if (isDisplayStatic) {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static')\n }\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n !parent.closest(SELECTOR_NAVBAR_NAV)) {\n [].concat(...document.body.children)\n .forEach(elem => EventHandler.on(elem, 'mouseover', noop))\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.toggle(CLASS_NAME_SHOW)\n this._element.classList.toggle(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n this._menu = null\n\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_CLICK, event => {\n event.preventDefault()\n this.toggle()\n })\n }\n\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n [].concat(...document.body.children)\n .forEach(elem => EventHandler.off(elem, 'mouseover', noop))\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _getMenuElement() {\n return SelectorEngine.next(this._element, SELECTOR_MENU)[0]\n }\n\n _getPlacement() {\n const parentDropdown = this._element.parentNode\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(val => Number.parseInt(val, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem(event) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible)\n\n if (!items.length) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n // Up\n if (event.key === ARROW_UP_KEY && index > 0) {\n index--\n }\n\n // Down\n if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {\n index++\n }\n\n // index is -1 if the first keydown is an ArrowUp\n index = index === -1 ? 0 : index\n\n items[index].focus()\n }\n\n // Static\n\n static dropdownInterface(element, config) {\n let data = Data.get(element, DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(element, _config)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n Dropdown.dropdownInterface(this, config)\n })\n }\n\n static clearMenus(event) {\n if (event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n if (/input|select|option|textarea|form/i.test(event.target.tagName)) {\n return\n }\n }\n\n const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const context = Data.get(toggles[i], DATA_KEY)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n if (!context._element.classList.contains(CLASS_NAME_SHOW)) {\n continue\n }\n\n const relatedTarget = {\n relatedTarget: context._element\n }\n\n if (event) {\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu shouldn't close the menu\n if (event.type === 'keyup' && event.key === TAB_KEY && context._menu.contains(event.target)) {\n continue\n }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static getParentFromElement(element) {\n return getElementFromSelector(element) || element.parentNode\n }\n\n static dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.key === SPACE_KEY || (event.key !== ESCAPE_KEY &&\n ((event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY) ||\n event.target.closest(SELECTOR_MENU))) :\n !REGEXP_KEYDOWN.test(event.key)) {\n return\n }\n\n const isActive = this.classList.contains(CLASS_NAME_SHOW)\n\n if (!isActive && event.key === ESCAPE_KEY) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (isDisabled(this)) {\n return\n }\n\n const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0]\n\n if (event.key === ESCAPE_KEY) {\n getToggleButton().focus()\n Dropdown.clearMenus()\n return\n }\n\n if (!isActive && (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY)) {\n getToggleButton().click()\n return\n }\n\n if (!isActive || event.key === SPACE_KEY) {\n Dropdown.clearMenus()\n return\n }\n\n Dropdown.getInstance(getToggleButton())._selectMenuItem(event)\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.dropdownInterface(this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nconst getWidth = () => {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n}\n\nconst hide = (width = getWidth()) => {\n _disableOverFlow()\n // give padding to element to balances the hidden scrollbar width\n _setElementAttributes('body', 'paddingRight', calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements, to keep shown fullwidth\n _setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width)\n _setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width)\n}\n\nconst _disableOverFlow = () => {\n const actualValue = document.body.style.overflow\n if (actualValue) {\n Manipulator.setDataAttribute(document.body, 'overflow', actualValue)\n }\n\n document.body.style.overflow = 'hidden'\n}\n\nconst _setElementAttributes = (selector, styleProp, callback) => {\n const scrollbarWidth = getWidth()\n SelectorEngine.find(selector)\n .forEach(element => {\n if (element !== document.body && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n const actualValue = element.style[styleProp]\n const calculatedValue = window.getComputedStyle(element)[styleProp]\n Manipulator.setDataAttribute(element, styleProp, actualValue)\n element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`\n })\n}\n\nconst reset = () => {\n _resetElementAttributes('body', 'overflow')\n _resetElementAttributes('body', 'paddingRight')\n _resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight')\n _resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight')\n}\n\nconst _resetElementAttributes = (selector, styleProp) => {\n SelectorEngine.find(selector).forEach(element => {\n const value = Manipulator.getDataAttribute(element, styleProp)\n if (typeof value === 'undefined') {\n element.style.removeProperty(styleProp)\n } else {\n Manipulator.removeDataAttribute(element, styleProp)\n element.style[styleProp] = value\n }\n })\n}\n\nconst isBodyOverflowing = () => {\n return getWidth() > 0\n}\n\nexport {\n getWidth,\n hide,\n isBodyOverflowing,\n reset\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { emulateTransitionEnd, execute, getTransitionDurationFromElement, reflow, typeCheckConfig } from './index'\n\nconst Default = {\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n isAnimated: false,\n rootElement: document.body, // give the choice to place backdrop under different elements\n clickCallback: null\n}\n\nconst DefaultType = {\n isVisible: 'boolean',\n isAnimated: 'boolean',\n rootElement: 'element',\n clickCallback: '(function|null)'\n}\nconst NAME = 'backdrop'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nclass Backdrop {\n constructor(config) {\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n if (this._config.isAnimated) {\n reflow(this._getElement())\n }\n\n this._getElement().classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n // Private\n\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = CLASS_NAME_BACKDROP\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n this._config.rootElement.appendChild(this._getElement())\n\n EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._getElement().parentNode.removeChild(this._element)\n this._isAppended = false\n }\n\n _emulateAnimation(callback) {\n if (!this._config.isAnimated) {\n execute(callback)\n return\n }\n\n const backdropTransitionDuration = getTransitionDurationFromElement(this._getElement())\n EventHandler.one(this._getElement(), 'transitionend', () => execute(callback))\n emulateTransitionEnd(this._getElement(), backdropTransitionDuration)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getElementFromSelector,\n getTransitionDurationFromElement,\n isRTL,\n isVisible,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport { getWidth as getScrollBarWidth, hide as scrollBarHide, reset as scrollBarReset } from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"modal\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._isShown = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if (this._isAnimated()) {\n this._isTransitioning = true\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (this._isShown || showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n\n scrollBarHide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, event => this.hide(event))\n\n EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n if (event.target === this._element) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n const isAnimated = this._isAnimated()\n\n if (isAnimated) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n EventHandler.off(document, EVENT_FOCUSIN)\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n EventHandler.off(this._element, EVENT_CLICK_DISMISS)\n EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS)\n\n if (isAnimated) {\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', event => this._hideModal(event))\n emulateTransitionEnd(this._element, transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._dialog]\n .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))\n\n super.dispose()\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n EventHandler.off(document, EVENT_FOCUSIN)\n\n this._config = null\n this._dialog = null\n this._backdrop.dispose()\n this._backdrop = null\n this._isShown = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value\n isAnimated: this._isAnimated()\n })\n }\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const isAnimated = this._isAnimated()\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n if (isAnimated) {\n reflow(this._element)\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n if (isAnimated) {\n const transitionDuration = getTransitionDurationFromElement(this._dialog)\n\n EventHandler.one(this._dialog, 'transitionend', transitionComplete)\n emulateTransitionEnd(this._dialog, transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n EventHandler.off(document, EVENT_FOCUSIN) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n !this._element.contains(event.target)) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.key === ESCAPE_KEY) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.key === ESCAPE_KEY) {\n this._triggerBackdropTransition()\n }\n })\n } else {\n EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog())\n } else {\n EventHandler.off(window, EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n scrollBarReset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _showBackdrop(callback) {\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === true) {\n this.hide()\n } else if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n }\n })\n\n this._backdrop.show(callback)\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n const modalTransitionDuration = getTransitionDurationFromElement(this._dialog)\n EventHandler.off(this._element, 'transitionend')\n EventHandler.one(this._element, 'transitionend', () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n EventHandler.one(this._element, 'transitionend', () => {\n this._element.style.overflowY = ''\n })\n emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n emulateTransitionEnd(this._element, modalTransitionDuration)\n this._element.focus()\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = getScrollBarWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if ((!isBodyOverflowing && isModalOverflowing && !isRTL()) || (isBodyOverflowing && !isModalOverflowing && isRTL())) {\n this._element.style.paddingLeft = `${scrollbarWidth}px`\n }\n\n if ((isBodyOverflowing && !isModalOverflowing && !isRTL()) || (!isBodyOverflowing && isModalOverflowing && isRTL())) {\n this._element.style.paddingRight = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getInstance(this) || new Modal(this, typeof config === 'object' ? config : {})\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n const data = Modal.getInstance(target) || new Modal(target)\n\n data.toggle(this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getElementFromSelector,\n getTransitionDurationFromElement,\n isDisabled,\n isVisible,\n typeCheckConfig\n} from './util/index'\nimport { hide as scrollBarHide, reset as scrollBarReset } from './util/scrollbar'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\nimport Backdrop from './util/backdrop'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: 'boolean',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\nconst CLASS_NAME_SHOW = 'show'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"offcanvas\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._addEventListeners()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._element.style.visibility = 'visible'\n\n this._backdrop.show()\n\n if (!this._config.scroll) {\n scrollBarHide()\n this._enforceFocusOnElement(this._element)\n }\n\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const completeCallBack = () => {\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n const transitionDuration = getTransitionDurationFromElement(this._element)\n EventHandler.one(this._element, 'transitionend', completeCallBack)\n emulateTransitionEnd(this._element, transitionDuration)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n EventHandler.off(document, EVENT_FOCUSIN)\n this._element.blur()\n this._isShown = false\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._element.style.visibility = 'hidden'\n\n if (!this._config.scroll) {\n scrollBarReset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n const transitionDuration = getTransitionDurationFromElement(this._element)\n EventHandler.one(this._element, 'transitionend', completeCallback)\n emulateTransitionEnd(this._element, transitionDuration)\n }\n\n dispose() {\n this._backdrop.dispose()\n super.dispose()\n EventHandler.off(document, EVENT_FOCUSIN)\n\n this._config = null\n this._backdrop = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: this._config.backdrop,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: () => this.hide()\n })\n }\n\n _enforceFocusOnElement(element) {\n EventHandler.off(document, EVENT_FOCUSIN) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n element !== event.target &&\n !element.contains(event.target)) {\n element.focus()\n }\n })\n element.focus()\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.key === ESCAPE_KEY) {\n this.hide()\n }\n })\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Data.get(this, DATA_KEY) || new Offcanvas(this, typeof config === 'object' ? config : {})\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (allReadyOpen && allReadyOpen !== target) {\n Offcanvas.getInstance(allReadyOpen).hide()\n }\n\n const data = Data.get(target, DATA_KEY) || new Offcanvas(target)\n\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n SelectorEngine.find(OPEN_SELECTOR).forEach(el => (Data.get(el, DATA_KEY) || new Offcanvas(el)).show())\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(NAME, Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attrName)) {\n if (uriAttrs.has(attrName)) {\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attrName)) {\n return true\n }\n }\n\n return false\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const allowlistKeys = Object.keys(allowList)\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (!allowlistKeys.includes(elName)) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].concat(...el.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, allowedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n findShadowRoot,\n getTransitionDurationFromElement,\n getUID,\n isElement,\n isRTL,\n noop,\n typeCheckConfig\n} from './util/index'\nimport {\n DefaultAllowlist,\n sanitizeHtml\n} from './util/sanitizer'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(array|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacements: 'array',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n allowList: 'object',\n popperConfig: '(null|object|function)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: [0, 0],\n container: false,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n boundary: 'clippingParents',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n allowList: DefaultAllowlist,\n popperConfig: null\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element)\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const context = this._initializeOnDelegatedTarget(event)\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler)\n\n if (this.tip && this.tip.parentNode) {\n this.tip.parentNode.removeChild(this.tip)\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.config = null\n this.tip = null\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this.isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW)\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = shadowRoot === null ?\n this._element.ownerDocument.documentElement.contains(this._element) :\n shadowRoot.contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this._element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this._element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this._addAttachmentClass(attachment)\n\n const container = this._getContainer()\n Data.set(tip, this.constructor.DATA_KEY, this)\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.appendChild(tip)\n EventHandler.trigger(this._element, this.constructor.Event.INSERTED)\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n const customClass = typeof this.config.customClass === 'function' ? this.config.customClass() : this.config.customClass\n if (customClass) {\n tip.classList.add(...customClass.split(' '))\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n [].concat(...document.body.children).forEach(element => {\n EventHandler.on(element, 'mouseover', noop)\n })\n }\n\n const complete = () => {\n const prevHoverState = this._hoverState\n\n this._hoverState = null\n EventHandler.trigger(this._element, this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if (this.tip.classList.contains(CLASS_NAME_FADE)) {\n const transitionDuration = getTransitionDurationFromElement(this.tip)\n EventHandler.one(this.tip, 'transitionend', complete)\n emulateTransitionEnd(this.tip, transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._popper) {\n return\n }\n\n const tip = this.getTipElement()\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.Event.HIDDEN)\n\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n [].concat(...document.body.children)\n .forEach(element => EventHandler.off(element, 'mouseover', noop))\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if (this.tip.classList.contains(CLASS_NAME_FADE)) {\n const transitionDuration = getTransitionDurationFromElement(tip)\n\n EventHandler.one(tip, 'transitionend', complete)\n emulateTransitionEnd(tip, transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.update()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n getTipElement() {\n if (this.tip) {\n return this.tip\n }\n\n const element = document.createElement('div')\n element.innerHTML = this.config.template\n\n this.tip = element.children[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle())\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n }\n\n setElementContent(element, content) {\n if (element === null) {\n return\n }\n\n if (typeof content === 'object' && isElement(content)) {\n if (content.jquery) {\n content = content[0]\n }\n\n // content is a DOM node or a jQuery\n if (this.config.html) {\n if (content.parentNode !== element) {\n element.innerHTML = ''\n element.appendChild(content)\n }\n } else {\n element.textContent = content.textContent\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.allowList, this.config.sanitizeFn)\n }\n\n element.innerHTML = content\n } else {\n element.textContent = content\n }\n }\n\n getTitle() {\n let title = this._element.getAttribute('data-bs-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this._element) :\n this.config.title\n }\n\n return title\n }\n\n updateAttachment(attachment) {\n if (attachment === 'right') {\n return 'end'\n }\n\n if (attachment === 'left') {\n return 'start'\n }\n\n return attachment\n }\n\n // Private\n\n _initializeOnDelegatedTarget(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || Data.get(event.delegateTarget, dataKey)\n\n if (!context) {\n context = new this.constructor(event.delegateTarget, this._getDelegateConfig())\n Data.set(event.delegateTarget, dataKey, context)\n }\n\n return context\n }\n\n _getOffset() {\n const { offset } = this.config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(val => Number.parseInt(val, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this.config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this.config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'onChange',\n enabled: true,\n phase: 'afterWrite',\n fn: data => this._handlePopperPlacementChange(data)\n }\n ],\n onFirstUpdate: data => {\n if (data.options.placement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n }\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this.config.popperConfig === 'function' ? this.config.popperConfig(defaultBsPopperConfig) : this.config.popperConfig)\n }\n }\n\n _addAttachmentClass(attachment) {\n this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`)\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (isElement(this.config.container)) {\n return this.config.container\n }\n\n return SelectorEngine.findOne(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.Event.CLICK, this.config.selector, event => this.toggle(event))\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n EventHandler.on(this._element, eventIn, this.config.selector, event => this._enter(event))\n EventHandler.on(this._element, eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n const originalTitleType = typeof this._element.getAttribute('data-bs-original-title')\n\n if (title || originalTitleType !== 'string') {\n this._element.setAttribute('data-bs-original-title', title || '')\n if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n context = this._initializeOnDelegatedTarget(event, context)\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n context = this._initializeOnDelegatedTarget(event, context)\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = context._element.contains(event.relatedTarget)\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n Object.keys(dataAttributes).forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n delete dataAttributes[dataAttr]\n }\n })\n\n if (config && typeof config.container === 'object' && config.container.jquery) {\n config.container = config.container[0]\n }\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const tip = this.getTipElement()\n const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n tabClass.map(token => token.trim())\n .forEach(tClass => tip.classList.remove(tClass))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const { state } = popperData\n\n if (!state) {\n return\n }\n\n this.tip = state.elements.popper\n this._cleanTipClass()\n this._addAttachmentClass(this._getAttachment(state.placement))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.get(this, DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Data from './dom/data'\nimport SelectorEngine from './dom/selector-engine'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n offset: [0, 8],\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n setContent() {\n const tip = this.getTipElement()\n\n // we use append for html objects to maintain js events\n this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this._element)\n }\n\n this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content)\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n }\n\n // Private\n\n _addAttachmentClass(attachment) {\n this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`)\n }\n\n _getContent() {\n return this._element.getAttribute('data-bs-content') || this.config.content\n }\n\n _cleanTipClass() {\n const tip = this.getTipElement()\n const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n tabClass.map(token => token.trim())\n .forEach(tClass => tip.classList.remove(tClass))\n }\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.get(this, DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n Data.set(this, DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getSelectorFromElement,\n getUID,\n isElement,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element)\n this._scrollElement = this._element.tagName === 'BODY' ? window : this._element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process())\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET :\n METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod :\n this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() :\n 0\n\n this._offsets = []\n this._targets = []\n this._scrollHeight = this._getScrollHeight()\n\n const targets = SelectorEngine.find(this._selector)\n\n targets.map(element => {\n const targetSelector = getSelectorFromElement(element)\n const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n return [\n Manipulator[offsetMethod](target).top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n super.dispose()\n EventHandler.off(this._scrollElement, EVENT_KEY)\n\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && isElement(config.target)) {\n let { id } = config.target\n if (!id) {\n id = getUID(NAME)\n config.target.id = id\n }\n\n config.target = `#${id}`\n }\n\n typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset :\n this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight :\n this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector.split(',')\n .map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const link = SelectorEngine.findOne(queries.join(','))\n\n if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n\n link.classList.add(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n link.classList.add(CLASS_NAME_ACTIVE)\n\n SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)\n .forEach(listGroup => {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n\n // Handle special case when .nav-link is inside .nav-item\n SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS)\n .forEach(navItem => {\n SelectorEngine.children(navItem, SELECTOR_NAV_LINKS)\n .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n })\n })\n }\n\n EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n SelectorEngine.find(this._selector)\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getInstance(this) || new ScrollSpy(this, typeof config === 'object' ? config : {})\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n SelectorEngine.find(SELECTOR_DATA_SPY)\n .forEach(spy => new ScrollSpy(spy))\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getElementFromSelector,\n getTransitionDurationFromElement,\n isDisabled,\n reflow\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n // Getters\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n show() {\n if ((this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n this._element.classList.contains(CLASS_NAME_ACTIVE))) {\n return\n }\n\n let previous\n const target = getElementFromSelector(this._element)\n const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = SelectorEngine.find(itemSelector, listElement)\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = previous ?\n EventHandler.trigger(previous, EVENT_HIDE, {\n relatedTarget: this._element\n }) :\n null\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (showEvent.defaultPrevented || (hideEvent !== null && hideEvent.defaultPrevented)) {\n return\n }\n\n this._activate(this._element, listElement)\n\n const complete = () => {\n EventHandler.trigger(previous, EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget: previous\n })\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n SelectorEngine.find(SELECTOR_ACTIVE_UL, container) :\n SelectorEngine.children(container, SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && active.classList.contains(CLASS_NAME_FADE))\n\n const complete = () => this._transitionComplete(element, active, callback)\n\n if (active && isTransitioning) {\n const transitionDuration = getTransitionDurationFromElement(active)\n active.classList.remove(CLASS_NAME_SHOW)\n\n EventHandler.one(active, 'transitionend', complete)\n emulateTransitionEnd(active, transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n active.classList.remove(CLASS_NAME_ACTIVE)\n\n const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode)\n\n if (dropdownChild) {\n dropdownChild.classList.remove(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n let parent = element.parentNode\n if (parent && parent.nodeName === 'LI') {\n parent = parent.parentNode\n }\n\n if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = element.closest(SELECTOR_DROPDOWN)\n\n if (dropdownElement) {\n SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement)\n .forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE))\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Data.get(this, DATA_KEY) || new Tab(this)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const data = Data.get(this, DATA_KEY) || new Tab(this)\n data.show()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getTransitionDurationFromElement,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', complete)\n emulateTransitionEnd(this._element, transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', complete)\n emulateTransitionEnd(this._element, transitionDuration)\n } else {\n complete()\n }\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n return config\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.get(this, DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert'\nimport Button from './src/button'\nimport Carousel from './src/carousel'\nimport Collapse from './src/collapse'\nimport Dropdown from './src/dropdown'\nimport Modal from './src/modal'\nimport Offcanvas from './src/offcanvas'\nimport Popover from './src/popover'\nimport ScrollSpy from './src/scrollspy'\nimport Tab from './src/tab'\nimport Toast from './src/toast'\nimport Tooltip from './src/tooltip'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"]} js/vendor.bundle.base.js 0000644 00000560274 14704452271 0011220 0 ustar 00 /*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S}); /*! * Bootstrap v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t},e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i="#"+i.split("#")[1]),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0},o=t=>{t.dispatchEvent(new Event("transitionend"))},r=t=>(t[0]||t).nodeType,a=(t,e)=>{let i=!1;const n=e+5;t.addEventListener("transitionend",(function e(){i=!0,t.removeEventListener("transitionend",e)})),setTimeout(()=>{i||o(t)},n)},l=(t,e,i)=>{Object.keys(i).forEach(n=>{const s=i[n],o=e[n],a=o&&r(o)?"element":null==(l=o)?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)})},c=t=>{if(!t)return!1;if(t.style&&t.parentNode&&t.parentNode.style){const e=getComputedStyle(t),i=getComputedStyle(t.parentNode);return"none"!==e.display&&"none"!==i.display&&"hidden"!==e.visibility}return!1},d=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},u=()=>{},f=t=>t.offsetHeight,p=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},g=()=>"rtl"===document.documentElement.dir,m=(t,e)=>{var i;i=()=>{const i=p();if(i){const n=i.fn[t];i.fn[t]=e.jQueryInterface,i.fn[t].Constructor=e,i.fn[t].noConflict=()=>(i.fn[t]=n,e.jQueryInterface)}},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",i):i()},_=t=>{"function"==typeof t&&t()},b=new Map;var v={set(t,e,i){b.has(t)||b.set(t,new Map);const n=b.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>b.has(t)&&b.get(t).get(e)||null,remove(t,e){if(!b.has(t))return;const i=b.get(t);i.delete(e),0===i.size&&b.delete(t)}};const y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,T={};let A=1;const L={mouseenter:"mouseover",mouseleave:"mouseout"},O=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function D(t,e){return e&&`${e}::${A++}`||t.uidEvent||A++}function x(t){const e=D(t);return t.uidEvent=e,T[e]=T[e]||{},T[e]}function C(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;s<o;s++){const o=t[n[s]];if(o.originalHandler===e&&o.delegationSelector===i)return o}return null}function S(t,e,i){const n="string"==typeof e,s=n?i:e;let o=P(t);return k.has(o)||(o=t),[n,s,o]}function N(t,e,i,n,s){if("string"!=typeof e||!t)return;if(i||(i=n,n=null),O.test(e)){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),d=C(c,r,o?i:null);if(d)return void(d.oneOff=d.oneOff&&s);const h=D(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&I.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&I.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=h,c[h]=u,t.addEventListener(a,u,o)}function j(t,e,i,n,s){const o=C(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),L[t]||t}const I={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void j(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach(i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach(o=>{if(o.includes(n)){const n=s[o];j(t,e,i,n.originalHandler,n.delegationSelector)}})}(t,l,i,e.slice(1))});const d=l[r]||{};Object.keys(d).forEach(i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=d[i];j(t,l,r,e.originalHandler,e.delegationSelector)}})},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=p(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,d=!1,h=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),d=a.isDefaultPrevented()),r?(h=document.createEvent("HTMLEvents"),h.initEvent(s,l,!0)):h=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach(t=>{Object.defineProperty(h,t,{get:()=>i[t]})}),d&&h.preventDefault(),c&&t.dispatchEvent(h),h.defaultPrevented&&void 0!==a&&a.preventDefault(),h}};class M{constructor(t){(t="string"==typeof t?document.querySelector(t):t)&&(this._element=t,v.set(this._element,this.constructor.DATA_KEY,this))}dispose(){v.remove(this._element,this.constructor.DATA_KEY),I.off(this._element,"."+this.constructor.DATA_KEY),this._element=null}static getInstance(t){return v.get(t,this.DATA_KEY)}static get VERSION(){return"5.0.0"}}class H extends M{static get DATA_KEY(){return"bs.alert"}close(t){const e=t?this._getRootElement(t):this._element,i=this._triggerCloseEvent(e);null===i||i.defaultPrevented||this._removeElement(e)}_getRootElement(t){return n(t)||t.closest(".alert")}_triggerCloseEvent(t){return I.trigger(t,"close.bs.alert")}_removeElement(t){if(t.classList.remove("show"),!t.classList.contains("fade"))return void this._destroyElement(t);const e=s(t);I.one(t,"transitionend",()=>this._destroyElement(t)),a(t,e)}_destroyElement(t){t.parentNode&&t.parentNode.removeChild(t),I.trigger(t,"closed.bs.alert")}static jQueryInterface(t){return this.each((function(){let e=v.get(this,"bs.alert");e||(e=new H(this)),"close"===t&&e[t](this)}))}static handleDismiss(t){return function(e){e&&e.preventDefault(),t.close(this)}}}I.on(document,"click.bs.alert.data-api",'[data-bs-dismiss="alert"]',H.handleDismiss(new H)),m("alert",H);class R extends M{static get DATA_KEY(){return"bs.button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){let e=v.get(this,"bs.button");e||(e=new R(this)),"toggle"===t&&e[t]()}))}}function B(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function W(t){return t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase())}I.on(document,"click.bs.button.data-api",'[data-bs-toggle="button"]',t=>{t.preventDefault();const e=t.target.closest('[data-bs-toggle="button"]');let i=v.get(e,"bs.button");i||(i=new R(e)),i.toggle()}),m("button",R);const z={setDataAttribute(t,e,i){t.setAttribute("data-bs-"+W(e),i)},removeDataAttribute(t,e){t.removeAttribute("data-bs-"+W(e))},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter(t=>t.startsWith("bs")).forEach(i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=B(t.dataset[i])}),e},getDataAttribute:(t,e)=>B(t.getAttribute("data-bs-"+W(e))),offset(t){const e=t.getBoundingClientRect();return{top:e.top+document.body.scrollTop,left:e.left+document.body.scrollLeft}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},U={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]}},$={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},F={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},K="next",Y="prev",q="left",V="right";class X extends M{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=U.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return $}static get DATA_KEY(){return"bs.carousel"}next(){this._isSliding||this._slide(K)}nextWhenVisible(){!document.hidden&&c(this._element)&&this.next()}prev(){this._isSliding||this._slide(Y)}pause(t){t||(this._isPaused=!0),U.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(o(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=U.findOne(".active.carousel-item",this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void I.one(this._element,"slid.bs.carousel",()=>this.to(t));if(e===t)return this.pause(),void this.cycle();const i=t>e?K:Y;this._slide(i,this._items[t])}dispose(){this._items=null,this._config=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null,super.dispose()}_getConfig(t){return t={...$,...t},l("carousel",t,F),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?V:q)}_addEventListeners(){this._config.keyboard&&I.on(this._element,"keydown.bs.carousel",t=>this._keydown(t)),"hover"===this._config.pause&&(I.on(this._element,"mouseenter.bs.carousel",t=>this.pause(t)),I.on(this._element,"mouseleave.bs.carousel",t=>this.cycle(t))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType?this._pointerEvent||(this.touchStartX=t.touches[0].clientX):this.touchStartX=t.clientX},e=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},i=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType||(this.touchDeltaX=t.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(t=>this.cycle(t),500+this._config.interval))};U.find(".carousel-item img",this._element).forEach(t=>{I.on(t,"dragstart.bs.carousel",t=>t.preventDefault())}),this._pointerEvent?(I.on(this._element,"pointerdown.bs.carousel",e=>t(e)),I.on(this._element,"pointerup.bs.carousel",t=>i(t)),this._element.classList.add("pointer-event")):(I.on(this._element,"touchstart.bs.carousel",e=>t(e)),I.on(this._element,"touchmove.bs.carousel",t=>e(t)),I.on(this._element,"touchend.bs.carousel",t=>i(t)))}_keydown(t){/input|textarea/i.test(t.target.tagName)||("ArrowLeft"===t.key?(t.preventDefault(),this._slide(V)):"ArrowRight"===t.key&&(t.preventDefault(),this._slide(q)))}_getItemIndex(t){return this._items=t&&t.parentNode?U.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===K,n=t===Y,s=this._getItemIndex(e),o=this._items.length-1;if((n&&0===s||i&&s===o)&&!this._config.wrap)return e;const r=(s+(n?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(U.findOne(".active.carousel-item",this._element));return I.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=U.findOne(".active",this._indicatorsElement);e.classList.remove("active"),e.removeAttribute("aria-current");const i=U.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e<i.length;e++)if(Number.parseInt(i[e].getAttribute("data-bs-slide-to"),10)===this._getItemIndex(t)){i[e].classList.add("active"),i[e].setAttribute("aria-current","true");break}}}_updateInterval(){const t=this._activeElement||U.findOne(".active.carousel-item",this._element);if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}_slide(t,e){const i=this._directionToOrder(t),n=U.findOne(".active.carousel-item",this._element),o=this._getItemIndex(n),r=e||this._getItemByOrder(i,n),l=this._getItemIndex(r),c=Boolean(this._interval),d=i===K,h=d?"carousel-item-start":"carousel-item-end",u=d?"carousel-item-next":"carousel-item-prev",p=this._orderToDirection(i);if(r&&r.classList.contains("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(r,p).defaultPrevented&&n&&r){if(this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(r),this._activeElement=r,this._element.classList.contains("slide")){r.classList.add(u),f(r),n.classList.add(h),r.classList.add(h);const t=s(n);I.one(n,"transitionend",()=>{r.classList.remove(h,u),r.classList.add("active"),n.classList.remove("active",u,h),this._isSliding=!1,setTimeout(()=>{I.trigger(this._element,"slid.bs.carousel",{relatedTarget:r,direction:p,from:o,to:l})},0)}),a(n,t)}else n.classList.remove("active"),r.classList.add("active"),this._isSliding=!1,I.trigger(this._element,"slid.bs.carousel",{relatedTarget:r,direction:p,from:o,to:l});c&&this.cycle()}}_directionToOrder(t){return[V,q].includes(t)?g()?t===q?Y:K:t===q?K:Y:t}_orderToDirection(t){return[K,Y].includes(t)?g()?t===Y?q:V:t===Y?V:q:t}static carouselInterface(t,e){let i=v.get(t,"bs.carousel"),n={...$,...z.getDataAttributes(t)};"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if(i||(i=new X(t,n)),"number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){X.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...z.getDataAttributes(e),...z.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),X.carouselInterface(e,i),s&&v.get(e,"bs.carousel").to(s),t.preventDefault()}}I.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",X.dataApiClickHandler),I.on(window,"load.bs.carousel.data-api",()=>{const t=U.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;e<i;e++)X.carouselInterface(t[e],v.get(t[e],"bs.carousel"))}),m("carousel",X);const Q={toggle:!0,parent:""},G={toggle:"boolean",parent:"(string|element)"};class Z extends M{constructor(t,e){super(t),this._isTransitioning=!1,this._config=this._getConfig(e),this._triggerArray=U.find(`[data-bs-toggle="collapse"][href="#${this._element.id}"],[data-bs-toggle="collapse"][data-bs-target="#${this._element.id}"]`);const n=U.find('[data-bs-toggle="collapse"]');for(let t=0,e=n.length;t<e;t++){const e=n[t],s=i(e),o=U.find(s).filter(t=>t===this._element);null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}static get Default(){return Q}static get DATA_KEY(){return"bs.collapse"}toggle(){this._element.classList.contains("show")?this.hide():this.show()}show(){if(this._isTransitioning||this._element.classList.contains("show"))return;let t,e;this._parent&&(t=U.find(".show, .collapsing",this._parent).filter(t=>"string"==typeof this._config.parent?t.getAttribute("data-bs-parent")===this._config.parent:t.classList.contains("collapse")),0===t.length&&(t=null));const i=U.findOne(this._selector);if(t){const n=t.find(t=>i!==t);if(e=n?v.get(n,"bs.collapse"):null,e&&e._isTransitioning)return}if(I.trigger(this._element,"show.bs.collapse").defaultPrevented)return;t&&t.forEach(t=>{i!==t&&Z.collapseInterface(t,"hide"),e||v.set(t,"bs.collapse",null)});const n=this._getDimension();this._element.classList.remove("collapse"),this._element.classList.add("collapsing"),this._element.style[n]=0,this._triggerArray.length&&this._triggerArray.forEach(t=>{t.classList.remove("collapsed"),t.setAttribute("aria-expanded",!0)}),this.setTransitioning(!0);const o="scroll"+(n[0].toUpperCase()+n.slice(1)),r=s(this._element);I.one(this._element,"transitionend",()=>{this._element.classList.remove("collapsing"),this._element.classList.add("collapse","show"),this._element.style[n]="",this.setTransitioning(!1),I.trigger(this._element,"shown.bs.collapse")}),a(this._element,r),this._element.style[n]=this._element[o]+"px"}hide(){if(this._isTransitioning||!this._element.classList.contains("show"))return;if(I.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=this._element.getBoundingClientRect()[t]+"px",f(this._element),this._element.classList.add("collapsing"),this._element.classList.remove("collapse","show");const e=this._triggerArray.length;if(e>0)for(let t=0;t<e;t++){const e=this._triggerArray[t],i=n(e);i&&!i.classList.contains("show")&&(e.classList.add("collapsed"),e.setAttribute("aria-expanded",!1))}this.setTransitioning(!0),this._element.style[t]="";const i=s(this._element);I.one(this._element,"transitionend",()=>{this.setTransitioning(!1),this._element.classList.remove("collapsing"),this._element.classList.add("collapse"),I.trigger(this._element,"hidden.bs.collapse")}),a(this._element,i)}setTransitioning(t){this._isTransitioning=t}dispose(){super.dispose(),this._config=null,this._parent=null,this._triggerArray=null,this._isTransitioning=null}_getConfig(t){return(t={...Q,...t}).toggle=Boolean(t.toggle),l("collapse",t,G),t}_getDimension(){return this._element.classList.contains("width")?"width":"height"}_getParent(){let{parent:t}=this._config;r(t)?void 0===t.jquery&&void 0===t[0]||(t=t[0]):t=U.findOne(t);const e=`[data-bs-toggle="collapse"][data-bs-parent="${t}"]`;return U.find(e,t).forEach(t=>{const e=n(t);this._addAriaAndCollapsedClass(e,[t])}),t}_addAriaAndCollapsedClass(t,e){if(!t||!e.length)return;const i=t.classList.contains("show");e.forEach(t=>{i?t.classList.remove("collapsed"):t.classList.add("collapsed"),t.setAttribute("aria-expanded",i)})}static collapseInterface(t,e){let i=v.get(t,"bs.collapse");const n={...Q,...z.getDataAttributes(t),..."object"==typeof e&&e?e:{}};if(!i&&n.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(n.toggle=!1),i||(i=new Z(t,n)),"string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}}static jQueryInterface(t){return this.each((function(){Z.collapseInterface(this,t)}))}}I.on(document,"click.bs.collapse.data-api",'[data-bs-toggle="collapse"]',(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=z.getDataAttributes(this),n=i(this);U.find(n).forEach(t=>{const i=v.get(t,"bs.collapse");let n;i?(null===i._parent&&"string"==typeof e.parent&&(i._config.parent=e.parent,i._parent=i._getParent()),n="toggle"):n=e,Z.collapseInterface(t,n)})})),m("collapse",Z);var J="top",tt="bottom",et="right",it="left",nt=[J,tt,et,it],st=nt.reduce((function(t,e){return t.concat([e+"-start",e+"-end"])}),[]),ot=[].concat(nt,["auto"]).reduce((function(t,e){return t.concat([e,e+"-start",e+"-end"])}),[]),rt=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function at(t){return t?(t.nodeName||"").toLowerCase():null}function lt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function ct(t){return t instanceof lt(t).Element||t instanceof Element}function dt(t){return t instanceof lt(t).HTMLElement||t instanceof HTMLElement}function ht(t){return"undefined"!=typeof ShadowRoot&&(t instanceof lt(t).ShadowRoot||t instanceof ShadowRoot)}var ut={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];dt(s)&&at(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});dt(n)&&at(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function ft(t){return t.split("-")[0]}function pt(t){var e=t.getBoundingClientRect();return{width:e.width,height:e.height,top:e.top,right:e.right,bottom:e.bottom,left:e.left,x:e.left,y:e.top}}function gt(t){var e=pt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function mt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ht(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function _t(t){return lt(t).getComputedStyle(t)}function bt(t){return["table","td","th"].indexOf(at(t))>=0}function vt(t){return((ct(t)?t.ownerDocument:t.document)||window.document).documentElement}function yt(t){return"html"===at(t)?t:t.assignedSlot||t.parentNode||(ht(t)?t.host:null)||vt(t)}function wt(t){return dt(t)&&"fixed"!==_t(t).position?t.offsetParent:null}function Et(t){for(var e=lt(t),i=wt(t);i&&bt(i)&&"static"===_t(i).position;)i=wt(i);return i&&("html"===at(i)||"body"===at(i)&&"static"===_t(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&dt(t)&&"fixed"===_t(t).position)return null;for(var i=yt(t);dt(i)&&["html","body"].indexOf(at(i))<0;){var n=_t(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Tt(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var At=Math.max,Lt=Math.min,Ot=Math.round;function kt(t,e,i){return At(t,Lt(e,i))}function Dt(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function xt(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}var Ct={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=ft(i.placement),l=Tt(a),c=[it,et].indexOf(a)>=0?"height":"width";if(o&&r){var d=function(t,e){return Dt("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:xt(t,nt))}(s.padding,i),h=gt(o),u="y"===l?J:it,f="y"===l?tt:et,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],g=r[l]-i.rects.reference[l],m=Et(o),_=m?"y"===l?m.clientHeight||0:m.clientWidth||0:0,b=p/2-g/2,v=d[u],y=_-h[c]-d[f],w=_/2-h[c]/2+b,E=kt(v,w,y),T=l;i.modifiersData[n]=((e={})[T]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&mt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},St={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Nt(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.offsets,r=t.position,a=t.gpuAcceleration,l=t.adaptive,c=t.roundOffsets,d=!0===c?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:Ot(Ot(e*n)/n)||0,y:Ot(Ot(i*n)/n)||0}}(o):"function"==typeof c?c(o):o,h=d.x,u=void 0===h?0:h,f=d.y,p=void 0===f?0:f,g=o.hasOwnProperty("x"),m=o.hasOwnProperty("y"),_=it,b=J,v=window;if(l){var y=Et(i),w="clientHeight",E="clientWidth";y===lt(i)&&"static"!==_t(y=vt(i)).position&&(w="scrollHeight",E="scrollWidth"),y=y,s===J&&(b=tt,p-=y[w]-n.height,p*=a?1:-1),s===it&&(_=et,u-=y[E]-n.width,u*=a?1:-1)}var T,A=Object.assign({position:r},l&&St);return a?Object.assign({},A,((T={})[b]=m?"0":"",T[_]=g?"0":"",T.transform=(v.devicePixelRatio||1)<2?"translate("+u+"px, "+p+"px)":"translate3d("+u+"px, "+p+"px, 0)",T)):Object.assign({},A,((e={})[b]=m?p+"px":"",e[_]=g?u+"px":"",e.transform="",e))}var jt={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:ft(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,Nt(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,Nt(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},Pt={passive:!0},It={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=lt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,Pt)})),a&&l.addEventListener("resize",i.update,Pt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,Pt)})),a&&l.removeEventListener("resize",i.update,Pt)}},data:{}},Mt={left:"right",right:"left",bottom:"top",top:"bottom"};function Ht(t){return t.replace(/left|right|bottom|top/g,(function(t){return Mt[t]}))}var Rt={start:"end",end:"start"};function Bt(t){return t.replace(/start|end/g,(function(t){return Rt[t]}))}function Wt(t){var e=lt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function zt(t){return pt(vt(t)).left+Wt(t).scrollLeft}function Ut(t){var e=_t(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function $t(t,e){var i;void 0===e&&(e=[]);var n=function t(e){return["html","body","#document"].indexOf(at(e))>=0?e.ownerDocument.body:dt(e)&&Ut(e)?e:t(yt(e))}(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=lt(n),r=s?[o].concat(o.visualViewport||[],Ut(n)?n:[]):n,a=e.concat(r);return s?a:a.concat($t(yt(r)))}function Ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Kt(t,e){return"viewport"===e?Ft(function(t){var e=lt(t),i=vt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+zt(t),y:a}}(t)):dt(e)?function(t){var e=pt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Ft(function(t){var e,i=vt(t),n=Wt(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=At(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=At(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+zt(t),l=-n.scrollTop;return"rtl"===_t(s||i).direction&&(a+=At(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(vt(t)))}function Yt(t){return t.split("-")[1]}function qt(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?ft(s):null,r=s?Yt(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case J:e={x:a,y:i.y-n.height};break;case tt:e={x:a,y:i.y+i.height};break;case et:e={x:i.x+i.width,y:l};break;case it:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Tt(o):null;if(null!=c){var d="y"===c?"height":"width";switch(r){case"start":e[c]=e[c]-(i[d]/2-n[d]/2);break;case"end":e[c]=e[c]+(i[d]/2-n[d]/2)}}return e}function Vt(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?"clippingParents":o,a=i.rootBoundary,l=void 0===a?"viewport":a,c=i.elementContext,d=void 0===c?"popper":c,h=i.altBoundary,u=void 0!==h&&h,f=i.padding,p=void 0===f?0:f,g=Dt("number"!=typeof p?p:xt(p,nt)),m="popper"===d?"reference":"popper",_=t.elements.reference,b=t.rects.popper,v=t.elements[u?m:d],y=function(t,e,i){var n="clippingParents"===e?function(t){var e=$t(yt(t)),i=["absolute","fixed"].indexOf(_t(t).position)>=0&&dt(t)?Et(t):t;return ct(i)?e.filter((function(t){return ct(t)&&mt(t,i)&&"body"!==at(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Kt(t,i);return e.top=At(n.top,e.top),e.right=Lt(n.right,e.right),e.bottom=Lt(n.bottom,e.bottom),e.left=At(n.left,e.left),e}),Kt(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}(ct(v)?v:v.contextElement||vt(t.elements.popper),r,l),w=pt(_),E=qt({reference:w,element:b,strategy:"absolute",placement:s}),T=Ft(Object.assign({},b,E)),A="popper"===d?T:w,L={top:y.top-A.top+g.top,bottom:A.bottom-y.bottom+g.bottom,left:y.left-A.left+g.left,right:A.right-y.right+g.right},O=t.modifiersData.offset;if("popper"===d&&O){var k=O[s];Object.keys(L).forEach((function(t){var e=[et,tt].indexOf(t)>=0?1:-1,i=[J,tt].indexOf(t)>=0?"y":"x";L[t]+=k[i]*e}))}return L}function Xt(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ot:l,d=Yt(n),h=d?a?st:st.filter((function(t){return Yt(t)===d})):nt,u=h.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=h);var f=u.reduce((function(e,i){return e[i]=Vt(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[ft(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}var Qt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,d=i.boundary,h=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,g=i.allowedAutoPlacements,m=e.options.placement,_=ft(m),b=l||(_!==m&&p?function(t){if("auto"===ft(t))return[];var e=Ht(t);return[Bt(t),e,Bt(e)]}(m):[Ht(m)]),v=[m].concat(b).reduce((function(t,i){return t.concat("auto"===ft(i)?Xt(e,{placement:i,boundary:d,rootBoundary:h,padding:c,flipVariations:p,allowedAutoPlacements:g}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,T=!0,A=v[0],L=0;L<v.length;L++){var O=v[L],k=ft(O),D="start"===Yt(O),x=[J,tt].indexOf(k)>=0,C=x?"width":"height",S=Vt(e,{placement:O,boundary:d,rootBoundary:h,altBoundary:u,padding:c}),N=x?D?et:it:D?tt:J;y[C]>w[C]&&(N=Ht(N));var j=Ht(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[j]<=0),P.every((function(t){return t}))){A=O,T=!1;break}E.set(O,P)}if(T)for(var I=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return A=e,"break"},M=p?3:1;M>0&&"break"!==I(M);M--);e.placement!==A&&(e.modifiersData[n]._skip=!0,e.placement=A,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Gt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Zt(t){return[J,et,tt,it].some((function(e){return t[e]>=0}))}var Jt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=Vt(e,{elementContext:"reference"}),a=Vt(e,{altBoundary:!0}),l=Gt(r,n),c=Gt(a,s,o),d=Zt(l),h=Zt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:d,hasPopperEscaped:h},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":d,"data-popper-escaped":h})}},te={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ot.reduce((function(t,i){return t[i]=function(t,e,i){var n=ft(t),s=[it,J].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[it,et].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ee={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=qt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},ie={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,d=i.altBoundary,h=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,g=void 0===p?0:p,m=Vt(e,{boundary:l,rootBoundary:c,padding:h,altBoundary:d}),_=ft(e.placement),b=Yt(e.placement),v=!b,y=Tt(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,T=e.rects.reference,A=e.rects.popper,L="function"==typeof g?g(Object.assign({},e.rects,{placement:e.placement})):g,O={x:0,y:0};if(E){if(o||a){var k="y"===y?J:it,D="y"===y?tt:et,x="y"===y?"height":"width",C=E[y],S=E[y]+m[k],N=E[y]-m[D],j=f?-A[x]/2:0,P="start"===b?T[x]:A[x],I="start"===b?-A[x]:-T[x],M=e.elements.arrow,H=f&&M?gt(M):{width:0,height:0},R=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},B=R[k],W=R[D],z=kt(0,T[x],H[x]),U=v?T[x]/2-j-z-B-L:P-z-B-L,$=v?-T[x]/2+j+z+W+L:I+z+W+L,F=e.elements.arrow&&Et(e.elements.arrow),K=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,Y=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,q=E[y]+U-Y-K,V=E[y]+$-Y;if(o){var X=kt(f?Lt(S,q):S,C,f?At(N,V):N);E[y]=X,O[y]=X-C}if(a){var Q="x"===y?J:it,G="x"===y?tt:et,Z=E[w],nt=Z+m[Q],st=Z-m[G],ot=kt(f?Lt(nt,q):nt,Z,f?At(st,V):st);E[w]=ot,O[w]=ot-Z}}e.modifiersData[n]=O}},requiresIfExists:["offset"]};function ne(t,e,i){void 0===i&&(i=!1);var n,s,o=vt(e),r=pt(t),a=dt(e),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(a||!a&&!i)&&(("body"!==at(e)||Ut(o))&&(l=(n=e)!==lt(n)&&dt(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Wt(n)),dt(e)?((c=pt(e)).x+=e.clientLeft,c.y+=e.clientTop):o&&(c.x=zt(o))),{x:r.left+l.scrollLeft-c.x,y:r.top+l.scrollTop-c.y,width:r.width,height:r.height}}var se={placement:"bottom",modifiers:[],strategy:"absolute"};function oe(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return!e.some((function(t){return!(t&&"function"==typeof t.getBoundingClientRect)}))}function re(t){void 0===t&&(t={});var e=t,i=e.defaultModifiers,n=void 0===i?[]:i,s=e.defaultOptions,o=void 0===s?se:s;return function(t,e,i){void 0===i&&(i=o);var s,r,a={placement:"bottom",orderedModifiers:[],options:Object.assign({},se,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l=[],c=!1,d={state:a,setOptions:function(i){h(),a.options=Object.assign({},o,a.options,i),a.scrollParents={reference:ct(t)?$t(t):t.contextElement?$t(t.contextElement):[],popper:$t(e)};var s,r,c=function(t){var e=function(t){var e=new Map,i=new Set,n=[];return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||function t(s){i.add(s.name),[].concat(s.requires||[],s.requiresIfExists||[]).forEach((function(n){if(!i.has(n)){var s=e.get(n);s&&t(s)}})),n.push(s)}(t)})),n}(t);return rt.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase===i})))}),[])}((s=[].concat(n,a.options.modifiers),r=s.reduce((function(t,e){var i=t[e.name];return t[e.name]=i?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(r).map((function(t){return r[t]}))));return a.orderedModifiers=c.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e=t.name,i=t.options,n=void 0===i?{}:i,s=t.effect;if("function"==typeof s){var o=s({state:a,name:e,instance:d,options:n});l.push(o||function(){})}})),d.update()},forceUpdate:function(){if(!c){var t=a.elements,e=t.reference,i=t.popper;if(oe(e,i)){a.rects={reference:ne(e,Et(i),"fixed"===a.options.strategy),popper:gt(i)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]=Object.assign({},t.data)}));for(var n=0;n<a.orderedModifiers.length;n++)if(!0!==a.reset){var s=a.orderedModifiers[n],o=s.fn,r=s.options,l=void 0===r?{}:r,h=s.name;"function"==typeof o&&(a=o({state:a,options:l,name:h,instance:d})||a)}else a.reset=!1,n=-1}}},update:(s=function(){return new Promise((function(t){d.forceUpdate(),t(a)}))},function(){return r||(r=new Promise((function(t){Promise.resolve().then((function(){r=void 0,t(s())}))}))),r}),destroy:function(){h(),c=!0}};if(!oe(t,e))return d;function h(){l.forEach((function(t){return t()})),l=[]}return d.setOptions(i).then((function(t){!c&&i.onFirstUpdate&&i.onFirstUpdate(t)})),d}}var ae=re(),le=re({defaultModifiers:[It,ee,jt,ut]}),ce=re({defaultModifiers:[It,ee,jt,ut,te,Qt,ie,Ct,Jt]}),de=Object.freeze({__proto__:null,popperGenerator:re,detectOverflow:Vt,createPopperBase:ae,createPopper:ce,createPopperLite:le,top:J,bottom:tt,right:et,left:it,auto:"auto",basePlacements:nt,start:"start",end:"end",clippingParents:"clippingParents",viewport:"viewport",popper:"popper",reference:"reference",variationPlacements:st,placements:ot,beforeRead:"beforeRead",read:"read",afterRead:"afterRead",beforeMain:"beforeMain",main:"main",afterMain:"afterMain",beforeWrite:"beforeWrite",write:"write",afterWrite:"afterWrite",modifierPhases:rt,applyStyles:ut,arrow:Ct,computeStyles:jt,eventListeners:It,flip:Qt,hide:Jt,offset:te,popperOffsets:ee,preventOverflow:ie});const he=new RegExp("ArrowUp|ArrowDown|Escape"),ue=g()?"top-end":"top-start",fe=g()?"top-start":"top-end",pe=g()?"bottom-end":"bottom-start",ge=g()?"bottom-start":"bottom-end",me=g()?"left-start":"right-start",_e=g()?"right-start":"left-start",be={offset:[0,2],boundary:"clippingParents",reference:"toggle",display:"dynamic",popperConfig:null,autoClose:!0},ve={offset:"(array|string|function)",boundary:"(string|element)",reference:"(string|element|object)",display:"string",popperConfig:"(null|object|function)",autoClose:"(boolean|string)"};class ye extends M{constructor(t,e){super(t),this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}static get Default(){return be}static get DefaultType(){return ve}static get DATA_KEY(){return"bs.dropdown"}toggle(){d(this._element)||(this._element.classList.contains("show")?this.hide():this.show())}show(){if(d(this._element)||this._menu.classList.contains("show"))return;const t=ye.getParentFromElement(this._element),e={relatedTarget:this._element};if(!I.trigger(this._element,"show.bs.dropdown",e).defaultPrevented){if(this._inNavbar)z.setDataAttribute(this._menu,"popper","none");else{if(void 0===de)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:r(this._config.reference)?(e=this._config.reference,void 0!==this._config.reference.jquery&&(e=this._config.reference[0])):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find(t=>"applyStyles"===t.name&&!1===t.enabled);this._popper=ce(e,this._menu,i),n&&z.setDataAttribute(this._menu,"popper","static")}"ontouchstart"in document.documentElement&&!t.closest(".navbar-nav")&&[].concat(...document.body.children).forEach(t=>I.on(t,"mouseover",u)),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.toggle("show"),this._element.classList.toggle("show"),I.trigger(this._element,"shown.bs.dropdown",e)}}hide(){if(d(this._element)||!this._menu.classList.contains("show"))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._menu=null,this._popper&&(this._popper.destroy(),this._popper=null),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_addEventListeners(){I.on(this._element,"click.bs.dropdown",t=>{t.preventDefault(),this.toggle()})}_completeHide(t){I.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>I.off(t,"mouseover",u)),this._popper&&this._popper.destroy(),this._menu.classList.remove("show"),this._element.classList.remove("show"),this._element.setAttribute("aria-expanded","false"),z.removeDataAttribute(this._menu,"popper"),I.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...z.getDataAttributes(this._element),...t},l("dropdown",t,this.constructor.DefaultType),"object"==typeof t.reference&&!r(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError("dropdown".toUpperCase()+': Option "reference" provided type "object" without a required "getBoundingClientRect" method.');return t}_getMenuElement(){return U.next(this._element,".dropdown-menu")[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return me;if(t.classList.contains("dropstart"))return _e;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?fe:ue:e?ge:pe}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem(t){const e=U.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(c);if(!e.length)return;let i=e.indexOf(t.target);"ArrowUp"===t.key&&i>0&&i--,"ArrowDown"===t.key&&i<e.length-1&&i++,i=-1===i?0:i,e[i].focus()}static dropdownInterface(t,e){let i=v.get(t,"bs.dropdown");if(i||(i=new ye(t,"object"==typeof e?e:null)),"string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}}static jQueryInterface(t){return this.each((function(){ye.dropdownInterface(this,t)}))}static clearMenus(t){if(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;if(/input|select|option|textarea|form/i.test(t.target.tagName))return}const e=U.find('[data-bs-toggle="dropdown"]');for(let i=0,n=e.length;i<n;i++){const n=v.get(e[i],"bs.dropdown");if(!n||!1===n._config.autoClose)continue;if(!n._element.classList.contains("show"))continue;const s={relatedTarget:n._element};if(t){const e=t.composedPath(),i=e.includes(n._menu);if(e.includes(n._element)||"inside"===n._config.autoClose&&!i||"outside"===n._config.autoClose&&i)continue;if("keyup"===t.type&&"Tab"===t.key&&n._menu.contains(t.target))continue;"click"===t.type&&(s.clickEvent=t)}n._completeHide(s)}}static getParentFromElement(t){return n(t)||t.parentNode}static dataApiKeydownHandler(t){if(/input|textarea/i.test(t.target.tagName)?"Space"===t.key||"Escape"!==t.key&&("ArrowDown"!==t.key&&"ArrowUp"!==t.key||t.target.closest(".dropdown-menu")):!he.test(t.key))return;const e=this.classList.contains("show");if(!e&&"Escape"===t.key)return;if(t.preventDefault(),t.stopPropagation(),d(this))return;const i=()=>this.matches('[data-bs-toggle="dropdown"]')?this:U.prev(this,'[data-bs-toggle="dropdown"]')[0];if("Escape"===t.key)return i().focus(),void ye.clearMenus();e||"ArrowUp"!==t.key&&"ArrowDown"!==t.key?e&&"Space"!==t.key?ye.getInstance(i())._selectMenuItem(t):ye.clearMenus():i().click()}}I.on(document,"keydown.bs.dropdown.data-api",'[data-bs-toggle="dropdown"]',ye.dataApiKeydownHandler),I.on(document,"keydown.bs.dropdown.data-api",".dropdown-menu",ye.dataApiKeydownHandler),I.on(document,"click.bs.dropdown.data-api",ye.clearMenus),I.on(document,"keyup.bs.dropdown.data-api",ye.clearMenus),I.on(document,"click.bs.dropdown.data-api",'[data-bs-toggle="dropdown"]',(function(t){t.preventDefault(),ye.dropdownInterface(this)})),m("dropdown",ye);const we=()=>{const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)},Ee=(t=we())=>{Te(),Ae("body","paddingRight",e=>e+t),Ae(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top","paddingRight",e=>e+t),Ae(".sticky-top","marginRight",e=>e-t)},Te=()=>{const t=document.body.style.overflow;t&&z.setDataAttribute(document.body,"overflow",t),document.body.style.overflow="hidden"},Ae=(t,e,i)=>{const n=we();U.find(t).forEach(t=>{if(t!==document.body&&window.innerWidth>t.clientWidth+n)return;const s=t.style[e],o=window.getComputedStyle(t)[e];z.setDataAttribute(t,e,s),t.style[e]=i(Number.parseFloat(o))+"px"})},Le=()=>{Oe("body","overflow"),Oe("body","paddingRight"),Oe(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top","paddingRight"),Oe(".sticky-top","marginRight")},Oe=(t,e)=>{U.find(t).forEach(t=>{const i=z.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(z.removeDataAttribute(t,e),t.style[e]=i)})},ke={isVisible:!0,isAnimated:!1,rootElement:document.body,clickCallback:null},De={isVisible:"boolean",isAnimated:"boolean",rootElement:"element",clickCallback:"(function|null)"};class xe{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&f(this._getElement()),this._getElement().classList.add("show"),this._emulateAnimation(()=>{_(t)})):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove("show"),this._emulateAnimation(()=>{this.dispose(),_(t)})):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className="modal-backdrop",this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return t={...ke,..."object"==typeof t?t:{}},l("backdrop",t,De),t}_append(){this._isAppended||(this._config.rootElement.appendChild(this._getElement()),I.on(this._getElement(),"mousedown.bs.backdrop",()=>{_(this._config.clickCallback)}),this._isAppended=!0)}dispose(){this._isAppended&&(I.off(this._element,"mousedown.bs.backdrop"),this._getElement().parentNode.removeChild(this._element),this._isAppended=!1)}_emulateAnimation(t){if(!this._config.isAnimated)return void _(t);const e=s(this._getElement());I.one(this._getElement(),"transitionend",()=>_(t)),a(this._getElement(),e)}}const Ce={backdrop:!0,keyboard:!0,focus:!0},Se={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"};class Ne extends M{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=U.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1}static get Default(){return Ce}static get DATA_KEY(){return"bs.modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||this._isTransitioning)return;this._isAnimated()&&(this._isTransitioning=!0);const e=I.trigger(this._element,"show.bs.modal",{relatedTarget:t});this._isShown||e.defaultPrevented||(this._isShown=!0,Ee(),document.body.classList.add("modal-open"),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),I.on(this._element,"click.dismiss.bs.modal",'[data-bs-dismiss="modal"]',t=>this.hide(t)),I.on(this._dialog,"mousedown.dismiss.bs.modal",()=>{I.one(this._element,"mouseup.dismiss.bs.modal",t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)})}),this._showBackdrop(()=>this._showElement(t)))}hide(t){if(t&&t.preventDefault(),!this._isShown||this._isTransitioning)return;if(I.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const e=this._isAnimated();if(e&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),I.off(document,"focusin.bs.modal"),this._element.classList.remove("show"),I.off(this._element,"click.dismiss.bs.modal"),I.off(this._dialog,"mousedown.dismiss.bs.modal"),e){const t=s(this._element);I.one(this._element,"transitionend",t=>this._hideModal(t)),a(this._element,t)}else this._hideModal()}dispose(){[window,this._dialog].forEach(t=>I.off(t,".bs.modal")),super.dispose(),I.off(document,"focusin.bs.modal"),this._config=null,this._dialog=null,this._backdrop.dispose(),this._backdrop=null,this._isShown=null,this._ignoreBackdropClick=null,this._isTransitioning=null}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new xe({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_getConfig(t){return t={...Ce,...z.getDataAttributes(this._element),...t},l("modal",t,Se),t}_showElement(t){const e=this._isAnimated(),i=U.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&f(this._element),this._element.classList.add("show"),this._config.focus&&this._enforceFocus();const n=()=>{this._config.focus&&this._element.focus(),this._isTransitioning=!1,I.trigger(this._element,"shown.bs.modal",{relatedTarget:t})};if(e){const t=s(this._dialog);I.one(this._dialog,"transitionend",n),a(this._dialog,t)}else n()}_enforceFocus(){I.off(document,"focusin.bs.modal"),I.on(document,"focusin.bs.modal",t=>{document===t.target||this._element===t.target||this._element.contains(t.target)||this._element.focus()})}_setEscapeEvent(){this._isShown?I.on(this._element,"keydown.dismiss.bs.modal",t=>{this._config.keyboard&&"Escape"===t.key?(t.preventDefault(),this.hide()):this._config.keyboard||"Escape"!==t.key||this._triggerBackdropTransition()}):I.off(this._element,"keydown.dismiss.bs.modal")}_setResizeEvent(){this._isShown?I.on(window,"resize.bs.modal",()=>this._adjustDialog()):I.off(window,"resize.bs.modal")}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove("modal-open"),this._resetAdjustments(),Le(),I.trigger(this._element,"hidden.bs.modal")})}_showBackdrop(t){I.on(this._element,"click.dismiss.bs.modal",t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())}),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(I.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight;t||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");const e=s(this._dialog);I.off(this._element,"transitionend"),I.one(this._element,"transitionend",()=>{this._element.classList.remove("modal-static"),t||(I.one(this._element,"transitionend",()=>{this._element.style.overflowY=""}),a(this._element,e))}),a(this._element,e),this._element.focus()}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=we(),i=e>0;(!i&&t&&!g()||i&&!t&&g())&&(this._element.style.paddingLeft=e+"px"),(i&&!t&&!g()||!i&&t&&g())&&(this._element.style.paddingRight=e+"px")}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Ne.getInstance(this)||new Ne(this,"object"==typeof t?t:{});if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}I.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),I.one(e,"show.bs.modal",t=>{t.defaultPrevented||I.one(e,"hidden.bs.modal",()=>{c(this)&&this.focus()})}),(Ne.getInstance(e)||new Ne(e)).toggle(this)})),m("modal",Ne);const je={backdrop:!0,keyboard:!0,scroll:!1},Pe={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"};class Ie extends M{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._addEventListeners()}static get Default(){return je}static get DATA_KEY(){return"bs.offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown)return;if(I.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(Ee(),this._enforceFocusOnElement(this._element)),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add("show");const e=s(this._element);I.one(this._element,"transitionend",()=>{I.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),a(this._element,e)}hide(){if(!this._isShown)return;if(I.trigger(this._element,"hide.bs.offcanvas").defaultPrevented)return;I.off(document,"focusin.bs.offcanvas"),this._element.blur(),this._isShown=!1,this._element.classList.remove("show"),this._backdrop.hide();const t=s(this._element);I.one(this._element,"transitionend",()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||Le(),I.trigger(this._element,"hidden.bs.offcanvas")}),a(this._element,t)}dispose(){this._backdrop.dispose(),super.dispose(),I.off(document,"focusin.bs.offcanvas"),this._config=null,this._backdrop=null}_getConfig(t){return t={...je,...z.getDataAttributes(this._element),..."object"==typeof t?t:{}},l("offcanvas",t,Pe),t}_initializeBackDrop(){return new xe({isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_enforceFocusOnElement(t){I.off(document,"focusin.bs.offcanvas"),I.on(document,"focusin.bs.offcanvas",e=>{document===e.target||t===e.target||t.contains(e.target)||t.focus()}),t.focus()}_addEventListeners(){I.on(this._element,"click.dismiss.bs.offcanvas",'[data-bs-dismiss="offcanvas"]',()=>this.hide()),I.on(this._element,"keydown.dismiss.bs.offcanvas",t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()})}static jQueryInterface(t){return this.each((function(){const e=v.get(this,"bs.offcanvas")||new Ie(this,"object"==typeof t?t:{});if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}I.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),d(this))return;I.one(e,"hidden.bs.offcanvas",()=>{c(this)&&this.focus()});const i=U.findOne(".offcanvas.show");i&&i!==e&&Ie.getInstance(i).hide(),(v.get(e,"bs.offcanvas")||new Ie(e)).toggle(this)})),I.on(window,"load.bs.offcanvas.data-api",()=>{U.find(".offcanvas.show").forEach(t=>(v.get(t,"bs.offcanvas")||new Ie(t)).show())}),m("offcanvas",Ie);const Me=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),He=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i,Re=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Be=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Me.has(i)||Boolean(He.test(t.nodeValue)||Re.test(t.nodeValue));const n=e.filter(t=>t instanceof RegExp);for(let t=0,e=n.length;t<e;t++)if(n[t].test(i))return!0;return!1};function We(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=Object.keys(e),o=[].concat(...n.body.querySelectorAll("*"));for(let t=0,i=o.length;t<i;t++){const i=o[t],n=i.nodeName.toLowerCase();if(!s.includes(n)){i.parentNode.removeChild(i);continue}const r=[].concat(...i.attributes),a=[].concat(e["*"]||[],e[n]||[]);r.forEach(t=>{Be(t,a)||i.removeAttribute(t.nodeName)})}return n.body.innerHTML}const ze=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Ue=new Set(["sanitize","allowList","sanitizeFn"]),$e={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Fe={AUTO:"auto",TOP:"top",RIGHT:g()?"left":"right",BOTTOM:"bottom",LEFT:g()?"right":"left"},Ke={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},Ye={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"};class qe extends M{constructor(t,e){if(void 0===de)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return Ke}static get NAME(){return"tooltip"}static get DATA_KEY(){return"bs.tooltip"}static get Event(){return Ye}static get EVENT_KEY(){return".bs.tooltip"}static get DefaultType(){return $e}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains("show"))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),I.off(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this.tip&&this.tip.parentNode&&this.tip.parentNode.removeChild(this.tip),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.config=null,this.tip=null,super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const e=I.trigger(this._element,this.constructor.Event.SHOW),i=h(this._element),n=null===i?this._element.ownerDocument.documentElement.contains(this._element):i.contains(this._element);if(e.defaultPrevented||!n)return;const o=this.getTipElement(),r=t(this.constructor.NAME);o.setAttribute("id",r),this._element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&o.classList.add("fade");const l="function"==typeof this.config.placement?this.config.placement.call(this,o,this._element):this.config.placement,c=this._getAttachment(l);this._addAttachmentClass(c);const d=this._getContainer();v.set(o,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(d.appendChild(o),I.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=ce(this._element,o,this._getPopperConfig(c)),o.classList.add("show");const f="function"==typeof this.config.customClass?this.config.customClass():this.config.customClass;f&&o.classList.add(...f.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>{I.on(t,"mouseover",u)});const p=()=>{const t=this._hoverState;this._hoverState=null,I.trigger(this._element,this.constructor.Event.SHOWN),"out"===t&&this._leave(null,this)};if(this.tip.classList.contains("fade")){const t=s(this.tip);I.one(this.tip,"transitionend",p),a(this.tip,t)}else p()}hide(){if(!this._popper)return;const t=this.getTipElement(),e=()=>{this._isWithActiveTrigger()||("show"!==this._hoverState&&t.parentNode&&t.parentNode.removeChild(t),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),I.trigger(this._element,this.constructor.Event.HIDDEN),this._popper&&(this._popper.destroy(),this._popper=null))};if(!I.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented){if(t.classList.remove("show"),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>I.off(t,"mouseover",u)),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this.tip.classList.contains("fade")){const i=s(t);I.one(t,"transitionend",e),a(t,i)}else e();this._hoverState=""}}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");return t.innerHTML=this.config.template,this.tip=t.children[0],this.tip}setContent(){const t=this.getTipElement();this.setElementContent(U.findOne(".tooltip-inner",t),this.getTitle()),t.classList.remove("fade","show")}setElementContent(t,e){if(null!==t)return"object"==typeof e&&r(e)?(e.jquery&&(e=e[0]),void(this.config.html?e.parentNode!==t&&(t.innerHTML="",t.appendChild(e)):t.textContent=e.textContent)):void(this.config.html?(this.config.sanitize&&(e=We(e,this.config.allowList,this.config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){let t=this._element.getAttribute("data-bs-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this._element):this.config.title),t}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){const i=this.constructor.DATA_KEY;return(e=e||v.get(t.delegateTarget,i))||(e=new this.constructor(t.delegateTarget,this._getDelegateConfig()),v.set(t.delegateTarget,i,e)),e}_getOffset(){const{offset:t}=this.config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this.config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this.config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this.config.popperConfig?this.config.popperConfig(e):this.config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add("bs-tooltip-"+this.updateAttachment(t))}_getContainer(){return!1===this.config.container?document.body:r(this.config.container)?this.config.container:U.findOne(this.config.container)}_getAttachment(t){return Fe[t.toUpperCase()]}_setListeners(){this.config.trigger.split(" ").forEach(t=>{if("click"===t)I.on(this._element,this.constructor.Event.CLICK,this.config.selector,t=>this.toggle(t));else if("manual"!==t){const e="hover"===t?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i="hover"===t?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;I.on(this._element,e,this.config.selector,t=>this._enter(t)),I.on(this._element,i,this.config.selector,t=>this._leave(t))}}),this._hideModalHandler=()=>{this._element&&this.hide()},I.on(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this.config.selector?this.config={...this.config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e.getTipElement().classList.contains("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout(()=>{"show"===e._hoverState&&e.show()},e.config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(()=>{"out"===e._hoverState&&e.hide()},e.config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=z.getDataAttributes(this._element);return Object.keys(e).forEach(t=>{Ue.has(t)&&delete e[t]}),t&&"object"==typeof t.container&&t.container.jquery&&(t.container=t.container[0]),"number"==typeof(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),l("tooltip",t,this.constructor.DefaultType),t.sanitize&&(t.template=We(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};if(this.config)for(const e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=t.getAttribute("class").match(ze);null!==e&&e.length>0&&e.map(t=>t.trim()).forEach(e=>t.classList.remove(e))}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}static jQueryInterface(t){return this.each((function(){let e=v.get(this,"bs.tooltip");const i="object"==typeof t&&t;if((e||!/dispose|hide/.test(t))&&(e||(e=new qe(this,i)),"string"==typeof t)){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m("tooltip",qe);const Ve=new RegExp("(^|\\s)bs-popover\\S+","g"),Xe={...qe.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'},Qe={...qe.DefaultType,content:"(string|element|function)"},Ge={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class Ze extends qe{static get Default(){return Xe}static get NAME(){return"popover"}static get DATA_KEY(){return"bs.popover"}static get Event(){return Ge}static get EVENT_KEY(){return".bs.popover"}static get DefaultType(){return Qe}isWithContent(){return this.getTitle()||this._getContent()}setContent(){const t=this.getTipElement();this.setElementContent(U.findOne(".popover-header",t),this.getTitle());let e=this._getContent();"function"==typeof e&&(e=e.call(this._element)),this.setElementContent(U.findOne(".popover-body",t),e),t.classList.remove("fade","show")}_addAttachmentClass(t){this.getTipElement().classList.add("bs-popover-"+this.updateAttachment(t))}_getContent(){return this._element.getAttribute("data-bs-content")||this.config.content}_cleanTipClass(){const t=this.getTipElement(),e=t.getAttribute("class").match(Ve);null!==e&&e.length>0&&e.map(t=>t.trim()).forEach(e=>t.classList.remove(e))}static jQueryInterface(t){return this.each((function(){let e=v.get(this,"bs.popover");const i="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new Ze(this,i),v.set(this,"bs.popover",e)),"string"==typeof t)){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m("popover",Ze);const Je={offset:10,method:"auto",target:""},ti={offset:"number",method:"string",target:"(string|element)"};class ei extends M{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._selector=`${this._config.target} .nav-link, ${this._config.target} .list-group-item, ${this._config.target} .dropdown-item`,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,I.on(this._scrollElement,"scroll.bs.scrollspy",()=>this._process()),this.refresh(),this._process()}static get Default(){return Je}static get DATA_KEY(){return"bs.scrollspy"}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":"position",e="auto"===this._config.method?t:this._config.method,n="position"===e?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),U.find(this._selector).map(t=>{const s=i(t),o=s?U.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[z[e](o).top+n,s]}return null}).filter(t=>t).sort((t,e)=>t[0]-e[0]).forEach(t=>{this._offsets.push(t[0]),this._targets.push(t[1])})}dispose(){super.dispose(),I.off(this._scrollElement,".bs.scrollspy"),this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null}_getConfig(e){if("string"!=typeof(e={...Je,...z.getDataAttributes(this._element),..."object"==typeof e&&e?e:{}}).target&&r(e.target)){let{id:i}=e.target;i||(i=t("scrollspy"),e.target.id=i),e.target="#"+i}return l("scrollspy",e,ti),e}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t<this._offsets[e+1])&&this._activate(this._targets[e])}}_activate(t){this._activeTarget=t,this._clear();const e=this._selector.split(",").map(e=>`${e}[data-bs-target="${t}"],${e}[href="${t}"]`),i=U.findOne(e.join(","));i.classList.contains("dropdown-item")?(U.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add("active"),i.classList.add("active")):(i.classList.add("active"),U.parents(i,".nav, .list-group").forEach(t=>{U.prev(t,".nav-link, .list-group-item").forEach(t=>t.classList.add("active")),U.prev(t,".nav-item").forEach(t=>{U.children(t,".nav-link").forEach(t=>t.classList.add("active"))})})),I.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){U.find(this._selector).filter(t=>t.classList.contains("active")).forEach(t=>t.classList.remove("active"))}static jQueryInterface(t){return this.each((function(){const e=ei.getInstance(this)||new ei(this,"object"==typeof t?t:{});if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}I.on(window,"load.bs.scrollspy.data-api",()=>{U.find('[data-bs-spy="scroll"]').forEach(t=>new ei(t))}),m("scrollspy",ei);class ii extends M{static get DATA_KEY(){return"bs.tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains("active"))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?":scope > li > .active":".active";t=U.find(e,i),t=t[t.length-1]}const s=t?I.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(I.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{I.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),I.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?U.children(e,".active"):U.find(":scope > li > .active",e))[0],o=i&&n&&n.classList.contains("fade"),r=()=>this._transitionComplete(t,n,i);if(n&&o){const t=s(n);n.classList.remove("show"),I.one(n,"transitionend",r),a(n,t)}else r()}_transitionComplete(t,e,i){if(e){e.classList.remove("active");const t=U.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),f(t),t.classList.contains("fade")&&t.classList.add("show");let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&U.find(".dropdown-toggle",e).forEach(t=>t.classList.add("active")),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=v.get(this,"bs.tab")||new ii(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}I.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),d(this)||(v.get(this,"bs.tab")||new ii(this)).show()})),m("tab",ii);const ni={animation:"boolean",autohide:"boolean",delay:"number"},si={animation:!0,autohide:!0,delay:5e3};class oi extends M{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._setListeners()}static get DefaultType(){return ni}static get Default(){return si}static get DATA_KEY(){return"bs.toast"}show(){if(I.trigger(this._element,"show.bs.toast").defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");const t=()=>{this._element.classList.remove("showing"),this._element.classList.add("show"),I.trigger(this._element,"shown.bs.toast"),this._config.autohide&&(this._timeout=setTimeout(()=>{this.hide()},this._config.delay))};if(this._element.classList.remove("hide"),f(this._element),this._element.classList.add("showing"),this._config.animation){const e=s(this._element);I.one(this._element,"transitionend",t),a(this._element,e)}else t()}hide(){if(!this._element.classList.contains("show"))return;if(I.trigger(this._element,"hide.bs.toast").defaultPrevented)return;const t=()=>{this._element.classList.add("hide"),I.trigger(this._element,"hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){const e=s(this._element);I.one(this._element,"transitionend",t),a(this._element,e)}else t()}dispose(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),super.dispose(),this._config=null}_getConfig(t){return t={...si,...z.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},l("toast",t,this.constructor.DefaultType),t}_setListeners(){I.on(this._element,"click.dismiss.bs.toast",'[data-bs-dismiss="toast"]',()=>this.hide())}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){let e=v.get(this,"bs.toast");if(e||(e=new oi(this,"object"==typeof t&&t)),"string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return m("toast",oi),{Alert:H,Button:R,Carousel:X,Collapse:Z,Dropdown:ye,Modal:Ne,Offcanvas:Ie,Popover:Ze,ScrollSpy:ei,Tab:ii,Toast:oi,Tooltip:qe}})); //# sourceMappingURL=bootstrap.bundle.min.js.map /*! * perfect-scrollbar v1.5.0 * Copyright 2020 Hyunje Jun, MDBootstrap and Contributors * Licensed under MIT */(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):(a=a||self,a.PerfectScrollbar=b())})(this,function(){'use strict';var u=Math.abs,v=Math.floor;function a(a){return getComputedStyle(a)}function b(a,b){for(var c in b){var d=b[c];"number"==typeof d&&(d+="px"),a.style[c]=d}return a}function c(a){var b=document.createElement("div");return b.className=a,b}function d(a,b){if(!w)throw new Error("No element matching method supported");return w.call(a,b)}function e(a){a.remove?a.remove():a.parentNode&&a.parentNode.removeChild(a)}function f(a,b){return Array.prototype.filter.call(a.children,function(a){return d(a,b)})}function g(a,b){var c=a.element.classList,d=z.state.scrolling(b);c.contains(d)?clearTimeout(A[b]):c.add(d)}function h(a,b){A[b]=setTimeout(function(){return a.isAlive&&a.element.classList.remove(z.state.scrolling(b))},a.settings.scrollingThreshold)}function j(a,b){g(a,b),h(a,b)}function k(a){if("function"==typeof window.CustomEvent)return new CustomEvent(a);var b=document.createEvent("CustomEvent");return b.initCustomEvent(a,!1,!1,void 0),b}function l(a,b,c,d,e){void 0===d&&(d=!0),void 0===e&&(e=!1);var f;if("top"===b)f=["contentHeight","containerHeight","scrollTop","y","up","down"];else if("left"===b)f=["contentWidth","containerWidth","scrollLeft","x","left","right"];else throw new Error("A proper axis should be provided");m(a,c,f,d,e)}function m(a,b,c,d,e){var f=c[0],g=c[1],h=c[2],i=c[3],l=c[4],m=c[5];void 0===d&&(d=!0),void 0===e&&(e=!1);var n=a.element;// reset reach a.reach[i]=null,1>n[h]&&(a.reach[i]="start"),n[h]>a[f]-a[g]-1&&(a.reach[i]="end"),b&&(n.dispatchEvent(k("ps-scroll-"+i)),0>b?n.dispatchEvent(k("ps-scroll-"+l)):0<b&&n.dispatchEvent(k("ps-scroll-"+m)),d&&j(a,i)),a.reach[i]&&(b||e)&&n.dispatchEvent(k("ps-"+i+"-reach-"+a.reach[i]))}function n(a){return parseInt(a,10)||0}function o(a){return d(a,"input,[contenteditable]")||d(a,"select,[contenteditable]")||d(a,"textarea,[contenteditable]")||d(a,"button,[contenteditable]")}function p(b){var c=a(b);return n(c.width)+n(c.paddingLeft)+n(c.paddingRight)+n(c.borderLeftWidth)+n(c.borderRightWidth)}function q(a){var b=Math.ceil,c=a.element,d=v(c.scrollTop),g=c.getBoundingClientRect();a.containerWidth=b(g.width),a.containerHeight=b(g.height),a.contentWidth=c.scrollWidth,a.contentHeight=c.scrollHeight,c.contains(a.scrollbarXRail)||(f(c,z.element.rail("x")).forEach(function(a){return e(a)}),c.appendChild(a.scrollbarXRail)),c.contains(a.scrollbarYRail)||(f(c,z.element.rail("y")).forEach(function(a){return e(a)}),c.appendChild(a.scrollbarYRail)),!a.settings.suppressScrollX&&a.containerWidth+a.settings.scrollXMarginOffset<a.contentWidth?(a.scrollbarXActive=!0,a.railXWidth=a.containerWidth-a.railXMarginWidth,a.railXRatio=a.containerWidth/a.railXWidth,a.scrollbarXWidth=r(a,n(a.railXWidth*a.containerWidth/a.contentWidth)),a.scrollbarXLeft=n((a.negativeScrollAdjustment+c.scrollLeft)*(a.railXWidth-a.scrollbarXWidth)/(a.contentWidth-a.containerWidth))):a.scrollbarXActive=!1,!a.settings.suppressScrollY&&a.containerHeight+a.settings.scrollYMarginOffset<a.contentHeight?(a.scrollbarYActive=!0,a.railYHeight=a.containerHeight-a.railYMarginHeight,a.railYRatio=a.containerHeight/a.railYHeight,a.scrollbarYHeight=r(a,n(a.railYHeight*a.containerHeight/a.contentHeight)),a.scrollbarYTop=n(d*(a.railYHeight-a.scrollbarYHeight)/(a.contentHeight-a.containerHeight))):a.scrollbarYActive=!1,a.scrollbarXLeft>=a.railXWidth-a.scrollbarXWidth&&(a.scrollbarXLeft=a.railXWidth-a.scrollbarXWidth),a.scrollbarYTop>=a.railYHeight-a.scrollbarYHeight&&(a.scrollbarYTop=a.railYHeight-a.scrollbarYHeight),s(c,a),a.scrollbarXActive?c.classList.add(z.state.active("x")):(c.classList.remove(z.state.active("x")),a.scrollbarXWidth=0,a.scrollbarXLeft=0,c.scrollLeft=!0===a.isRtl?a.contentWidth:0),a.scrollbarYActive?c.classList.add(z.state.active("y")):(c.classList.remove(z.state.active("y")),a.scrollbarYHeight=0,a.scrollbarYTop=0,c.scrollTop=0)}function r(a,b){var c=Math.min,d=Math.max;return a.settings.minScrollbarLength&&(b=d(b,a.settings.minScrollbarLength)),a.settings.maxScrollbarLength&&(b=c(b,a.settings.maxScrollbarLength)),b}function s(a,c){var d={width:c.railXWidth},e=v(a.scrollTop);d.left=c.isRtl?c.negativeScrollAdjustment+a.scrollLeft+c.containerWidth-c.contentWidth:a.scrollLeft,c.isScrollbarXUsingBottom?d.bottom=c.scrollbarXBottom-e:d.top=c.scrollbarXTop+e,b(c.scrollbarXRail,d);var f={top:e,height:c.railYHeight};c.isScrollbarYUsingRight?c.isRtl?f.right=c.contentWidth-(c.negativeScrollAdjustment+a.scrollLeft)-c.scrollbarYRight-c.scrollbarYOuterWidth-9:f.right=c.scrollbarYRight-a.scrollLeft:c.isRtl?f.left=c.negativeScrollAdjustment+a.scrollLeft+2*c.containerWidth-c.contentWidth-c.scrollbarYLeft-c.scrollbarYOuterWidth:f.left=c.scrollbarYLeft+a.scrollLeft,b(c.scrollbarYRail,f),b(c.scrollbarX,{left:c.scrollbarXLeft,width:c.scrollbarXWidth-c.railBorderXWidth}),b(c.scrollbarY,{top:c.scrollbarYTop,height:c.scrollbarYHeight-c.railBorderYWidth})}function t(a,b){function c(b){b.touches&&b.touches[0]&&(b[k]=b.touches[0].pageY),s[o]=t+v*(b[k]-u),g(a,p),q(a),b.stopPropagation(),b.preventDefault()}function d(){h(a,p),a[r].classList.remove(z.state.clicking),a.event.unbind(a.ownerDocument,"mousemove",c)}function f(b,e){t=s[o],e&&b.touches&&(b[k]=b.touches[0].pageY),u=b[k],v=(a[j]-a[i])/(a[l]-a[n]),e?a.event.bind(a.ownerDocument,"touchmove",c):(a.event.bind(a.ownerDocument,"mousemove",c),a.event.once(a.ownerDocument,"mouseup",d),b.preventDefault()),a[r].classList.add(z.state.clicking),b.stopPropagation()}var i=b[0],j=b[1],k=b[2],l=b[3],m=b[4],n=b[5],o=b[6],p=b[7],r=b[8],s=a.element,t=null,u=null,v=null;a.event.bind(a[m],"mousedown",function(a){f(a)}),a.event.bind(a[m],"touchstart",function(a){f(a,!0)})}var w="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector),z={main:"ps",rtl:"ps__rtl",element:{thumb:function(a){return"ps__thumb-"+a},rail:function(a){return"ps__rail-"+a},consuming:"ps__child--consume"},state:{focus:"ps--focus",clicking:"ps--clicking",active:function(a){return"ps--active-"+a},scrolling:function(a){return"ps--scrolling-"+a}}},A={x:null,y:null},B=function(a){this.element=a,this.handlers={}},C={isEmpty:{configurable:!0}};B.prototype.bind=function(a,b){"undefined"==typeof this.handlers[a]&&(this.handlers[a]=[]),this.handlers[a].push(b),this.element.addEventListener(a,b,!1)},B.prototype.unbind=function(a,b){var c=this;this.handlers[a]=this.handlers[a].filter(function(d){return!!(b&&d!==b)||(c.element.removeEventListener(a,d,!1),!1)})},B.prototype.unbindAll=function(){for(var a in this.handlers)this.unbind(a)},C.isEmpty.get=function(){var a=this;return Object.keys(this.handlers).every(function(b){return 0===a.handlers[b].length})},Object.defineProperties(B.prototype,C);var D=function(){this.eventElements=[]};D.prototype.eventElement=function(a){var b=this.eventElements.filter(function(b){return b.element===a})[0];return b||(b=new B(a),this.eventElements.push(b)),b},D.prototype.bind=function(a,b,c){this.eventElement(a).bind(b,c)},D.prototype.unbind=function(a,b,c){var d=this.eventElement(a);d.unbind(b,c),d.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(d),1)},D.prototype.unbindAll=function(){this.eventElements.forEach(function(a){return a.unbindAll()}),this.eventElements=[]},D.prototype.once=function(a,b,c){var d=this.eventElement(a),e=function(a){d.unbind(b,e),c(a)};d.bind(b,e)};var E={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||"maxTouchPoints"in window.navigator&&0<window.navigator.maxTouchPoints||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:"undefined"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:"undefined"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)},F=function(){return{handlers:["click-rail","drag-thumb","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1}},G={"click-rail":function(a){a.element;a.event.bind(a.scrollbarY,"mousedown",function(a){return a.stopPropagation()}),a.event.bind(a.scrollbarYRail,"mousedown",function(b){var c=b.pageY-window.pageYOffset-a.scrollbarYRail.getBoundingClientRect().top,d=c>a.scrollbarYTop?1:-1;a.element.scrollTop+=d*a.containerHeight,q(a),b.stopPropagation()}),a.event.bind(a.scrollbarX,"mousedown",function(a){return a.stopPropagation()}),a.event.bind(a.scrollbarXRail,"mousedown",function(b){var c=b.pageX-window.pageXOffset-a.scrollbarXRail.getBoundingClientRect().left,d=c>a.scrollbarXLeft?1:-1;a.element.scrollLeft+=d*a.containerWidth,q(a),b.stopPropagation()})},"drag-thumb":function(a){t(a,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),t(a,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(a){function b(b,d){var e=v(c.scrollTop);if(0===b){if(!a.scrollbarYActive)return!1;if(0===e&&0<d||e>=a.contentHeight-a.containerHeight&&0>d)return!a.settings.wheelPropagation}var f=c.scrollLeft;if(0===d){if(!a.scrollbarXActive)return!1;if(0===f&&0>b||f>=a.contentWidth-a.containerWidth&&0<b)return!a.settings.wheelPropagation}return!0}var c=a.element,f=function(){return d(c,":hover")},g=function(){return d(a.scrollbarX,":focus")||d(a.scrollbarY,":focus")};a.event.bind(a.ownerDocument,"keydown",function(d){if(!(d.isDefaultPrevented&&d.isDefaultPrevented()||d.defaultPrevented)&&(f()||g())){var e=document.activeElement?document.activeElement:a.ownerDocument.activeElement;if(e){if("IFRAME"===e.tagName)e=e.contentDocument.activeElement;else// go deeper if element is a webcomponent for(;e.shadowRoot;)e=e.shadowRoot.activeElement;if(o(e))return}var h=0,i=0;switch(d.which){case 37:h=d.metaKey?-a.contentWidth:d.altKey?-a.containerWidth:-30;break;case 38:i=d.metaKey?a.contentHeight:d.altKey?a.containerHeight:30;break;case 39:h=d.metaKey?a.contentWidth:d.altKey?a.containerWidth:30;break;case 40:i=d.metaKey?-a.contentHeight:d.altKey?-a.containerHeight:-30;break;case 32:i=d.shiftKey?a.containerHeight:-a.containerHeight;break;case 33:i=a.containerHeight;break;case 34:i=-a.containerHeight;break;case 36:i=a.contentHeight;break;case 35:i=-a.contentHeight;break;default:return;}a.settings.suppressScrollX&&0!==h||a.settings.suppressScrollY&&0!==i||(c.scrollTop-=i,c.scrollLeft+=h,q(a),b(h,i)&&d.preventDefault())}})},wheel:function(b){function c(a,c){var d,e=v(h.scrollTop),f=0===h.scrollTop,g=e+h.offsetHeight===h.scrollHeight,i=0===h.scrollLeft,j=h.scrollLeft+h.offsetWidth===h.scrollWidth;return d=u(c)>u(a)?f||g:i||j,!d||!b.settings.wheelPropagation}function d(a){var b=a.deltaX,c=-1*a.deltaY;return("undefined"==typeof b||"undefined"==typeof c)&&(b=-1*a.wheelDeltaX/6,c=a.wheelDeltaY/6),a.deltaMode&&1===a.deltaMode&&(b*=10,c*=10),b!==b&&c!==c/* NaN checks */&&(b=0,c=a.wheelDelta),a.shiftKey?[-c,-b]:[b,c]}function f(b,c,d){// FIXME: this is a workaround for <select> issue in FF and IE #571 if(!E.isWebKit&&h.querySelector("select:focus"))return!0;if(!h.contains(b))return!1;for(var e=b;e&&e!==h;){if(e.classList.contains(z.element.consuming))return!0;var f=a(e);// if deltaY && vertical scrollable if(d&&f.overflowY.match(/(scroll|auto)/)){var g=e.scrollHeight-e.clientHeight;if(0<g&&(0<e.scrollTop&&0>d||e.scrollTop<g&&0<d))return!0}// if deltaX && horizontal scrollable if(c&&f.overflowX.match(/(scroll|auto)/)){var i=e.scrollWidth-e.clientWidth;if(0<i&&(0<e.scrollLeft&&0>c||e.scrollLeft<i&&0<c))return!0}e=e.parentNode}return!1}function g(a){var e=d(a),g=e[0],i=e[1];if(!f(a.target,g,i)){var j=!1;b.settings.useBothWheelAxes?b.scrollbarYActive&&!b.scrollbarXActive?(i?h.scrollTop-=i*b.settings.wheelSpeed:h.scrollTop+=g*b.settings.wheelSpeed,j=!0):b.scrollbarXActive&&!b.scrollbarYActive&&(g?h.scrollLeft+=g*b.settings.wheelSpeed:h.scrollLeft-=i*b.settings.wheelSpeed,j=!0):(h.scrollTop-=i*b.settings.wheelSpeed,h.scrollLeft+=g*b.settings.wheelSpeed),q(b),j=j||c(g,i),j&&!a.ctrlKey&&(a.stopPropagation(),a.preventDefault())}}var h=b.element;"undefined"==typeof window.onwheel?"undefined"!=typeof window.onmousewheel&&b.event.bind(h,"mousewheel",g):b.event.bind(h,"wheel",g)},touch:function(b){function c(a,c){var d=v(l.scrollTop),e=l.scrollLeft,f=u(a),g=u(c);if(g>f){// user is perhaps trying to swipe up/down the page if(0>c&&d===b.contentHeight-b.containerHeight||0<c&&0===d)// set prevent for mobile Chrome refresh return 0===window.scrollY&&0<c&&E.isChrome;}else if(f>g&&(0>a&&e===b.contentWidth-b.containerWidth||0<a&&0===e))// user is perhaps trying to swipe left/right across the page return!0;return!0}function d(a,c){l.scrollTop-=c,l.scrollLeft-=a,q(b)}function f(a){return a.targetTouches?a.targetTouches[0]:a}function g(a){return!(a.pointerType&&"pen"===a.pointerType&&0===a.buttons)&&(!!(a.targetTouches&&1===a.targetTouches.length)||!!(a.pointerType&&"mouse"!==a.pointerType&&a.pointerType!==a.MSPOINTER_TYPE_MOUSE))}function h(a){if(g(a)){var b=f(a);m.pageX=b.pageX,m.pageY=b.pageY,n=new Date().getTime(),null!==p&&clearInterval(p)}}function i(b,c,d){if(!l.contains(b))return!1;for(var e=b;e&&e!==l;){if(e.classList.contains(z.element.consuming))return!0;var f=a(e);// if deltaY && vertical scrollable if(d&&f.overflowY.match(/(scroll|auto)/)){var g=e.scrollHeight-e.clientHeight;if(0<g&&(0<e.scrollTop&&0>d||e.scrollTop<g&&0<d))return!0}// if deltaX && horizontal scrollable if(c&&f.overflowX.match(/(scroll|auto)/)){var h=e.scrollWidth-e.clientWidth;if(0<h&&(0<e.scrollLeft&&0>c||e.scrollLeft<h&&0<c))return!0}e=e.parentNode}return!1}function j(a){if(g(a)){var b=f(a),e={pageX:b.pageX,pageY:b.pageY},h=e.pageX-m.pageX,j=e.pageY-m.pageY;if(i(a.target,h,j))return;d(h,j),m=e;var k=new Date().getTime(),l=k-n;0<l&&(o.x=h/l,o.y=j/l,n=k),c(h,j)&&a.preventDefault()}}function k(){b.settings.swipeEasing&&(clearInterval(p),p=setInterval(function(){return b.isInitialized?void clearInterval(p):o.x||o.y?.01>u(o.x)&&.01>u(o.y)?void clearInterval(p):void(d(30*o.x,30*o.y),o.x*=.8,o.y*=.8):void clearInterval(p)},10))}if(E.supportsTouch||E.supportsIePointer){var l=b.element,m={},n=0,o={},p=null;E.supportsTouch?(b.event.bind(l,"touchstart",h),b.event.bind(l,"touchmove",j),b.event.bind(l,"touchend",k)):E.supportsIePointer&&(window.PointerEvent?(b.event.bind(l,"pointerdown",h),b.event.bind(l,"pointermove",j),b.event.bind(l,"pointerup",k)):window.MSPointerEvent&&(b.event.bind(l,"MSPointerDown",h),b.event.bind(l,"MSPointerMove",j),b.event.bind(l,"MSPointerUp",k)))}}},H=function(d,e){var f=this;if(void 0===e&&(e={}),"string"==typeof d&&(d=document.querySelector(d)),!d||!d.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");for(var g in this.element=d,d.classList.add(z.main),this.settings=F(),e)this.settings[g]=e[g];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var h=function(){return d.classList.add(z.state.focus)},i=function(){return d.classList.remove(z.state.focus)};this.isRtl="rtl"===a(d).direction,!0===this.isRtl&&d.classList.add(z.rtl),this.isNegativeScroll=function(){var a=d.scrollLeft,b=null;return d.scrollLeft=-1,b=0>d.scrollLeft,d.scrollLeft=a,b}(),this.negativeScrollAdjustment=this.isNegativeScroll?d.scrollWidth-d.clientWidth:0,this.event=new D,this.ownerDocument=d.ownerDocument||document,this.scrollbarXRail=c(z.element.rail("x")),d.appendChild(this.scrollbarXRail),this.scrollbarX=c(z.element.thumb("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),this.event.bind(this.scrollbarX,"focus",h),this.event.bind(this.scrollbarX,"blur",i),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var j=a(this.scrollbarXRail);this.scrollbarXBottom=parseInt(j.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=n(j.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=n(j.borderLeftWidth)+n(j.borderRightWidth),b(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=n(j.marginLeft)+n(j.marginRight),b(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=c(z.element.rail("y")),d.appendChild(this.scrollbarYRail),this.scrollbarY=c(z.element.thumb("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),this.event.bind(this.scrollbarY,"focus",h),this.event.bind(this.scrollbarY,"blur",i),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var k=a(this.scrollbarYRail);this.scrollbarYRight=parseInt(k.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=n(k.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?p(this.scrollbarY):null,this.railBorderYWidth=n(k.borderTopWidth)+n(k.borderBottomWidth),b(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=n(k.marginTop)+n(k.marginBottom),b(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:0>=d.scrollLeft?"start":d.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:0>=d.scrollTop?"start":d.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach(function(a){return G[a](f)}),this.lastScrollTop=v(d.scrollTop),this.lastScrollLeft=d.scrollLeft,this.event.bind(this.element,"scroll",function(a){return f.onScroll(a)}),q(this)};return H.prototype.update=function(){this.isAlive&&(// Recalcuate negative scrollLeft adjustment // Recalculate rail margins // Hide scrollbars not to affect scrollWidth and scrollHeight this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,b(this.scrollbarXRail,{display:"block"}),b(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=n(a(this.scrollbarXRail).marginLeft)+n(a(this.scrollbarXRail).marginRight),this.railYMarginHeight=n(a(this.scrollbarYRail).marginTop)+n(a(this.scrollbarYRail).marginBottom),b(this.scrollbarXRail,{display:"none"}),b(this.scrollbarYRail,{display:"none"}),q(this),l(this,"top",0,!1,!0),l(this,"left",0,!1,!0),b(this.scrollbarXRail,{display:""}),b(this.scrollbarYRail,{display:""}))},H.prototype.onScroll=function(){this.isAlive&&(q(this),l(this,"top",this.element.scrollTop-this.lastScrollTop),l(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=v(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},H.prototype.destroy=function(){this.isAlive&&(// unset elements this.event.unbindAll(),e(this.scrollbarX),e(this.scrollbarY),e(this.scrollbarXRail),e(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},H.prototype.removePsClasses=function(){this.element.className=this.element.className.split(" ").filter(function(a){return!a.match(/^ps([-_].+|)$/)}).join(" ")},H}); //# sourceMappingURL=perfect-scrollbar.min.js.map jquery-bar-rating/examples.css 0000644 00000005514 14704452271 0012452 0 ustar 00 /* Center ratings in container */ .box-example-1to10 .br-wrapper { width: 210px; position: absolute; margin: 0px 0 0 -105px; left: 50%; } .box-example-movie .br-wrapper { width: 250px; position: absolute; margin: 0px 0 0 -125px; left: 50%; } .box-example-square .br-wrapper { width: 190px; position: absolute; margin: 0px 0 0 -95px; left: 50%; } .box-example-pill .br-wrapper { width: 232px; position: absolute; margin: 0px 0 0 -116px; left: 50%; } .box-example-reversed .br-wrapper { padding-top: 1.3em; width: 356px; position: absolute; margin: 0px 0 0 -178px; left: 50%; } .box-example-horizontal .br-wrapper { width: 120px; position: absolute; margin: 0px 0 0 -60px; left: 50%; } /* Display star ratings */ .star-ratings h1 { font-size: 1.5em; line-height: 2; margin-top: 3em; color: #757575; } .star-ratings p { margin-bottom: 3em; line-height: 1.2; } .star-ratings h1, .star-ratings p { text-align: center; } .star-ratings .stars { width: 120px; text-align: center; margin: auto; padding: 0 95px; } .star-ratings .stars .title { font-size: 14px; color: #cccccc; line-height: 3; } .star-ratings .stars select { width: 120px; font-size: 16px; } .star-ratings .stars-example-fontawesome, .star-ratings .stars-example-css, .star-ratings .stars-example-bootstrap { float: left; } .star-ratings .stars-example-fontawesome-o { width: 200px; } .star-ratings .stars-example-fontawesome-o select { width: 200px; } .start-ratings-main { margin-bottom: 3em; } /* Boxes */ .box { width: 100%; float: left; margin: 1em 0; } .box .box-header { text-align: center; font-weight: 400; padding: .5em 0; } .box .box-body { padding-top: 2em; height: 85px; /* rating widgets will be absolutely centered relative to box body */ position: relative; } .box select { width: 120px; margin: 10px auto 0 auto; display: block; font-size: 16px; } .box-large .box-body { padding-top: 2em; height: 120px; } .box-orange .box-header { background-color: #edb867; color: white; } .box-orange .box-body { background-color: white; border: 2px solid #f5d8ab; border-top: 0; } .box-green .box-header { background-color: #50e3c2; color: white; } .box-green .box-body { background-color: white; border: 2px solid #92eed9; border-top: 0; } .box-blue .box-header { background-color: #4278f5; color: white; } .box-blue .box-body { background-color: white; border: 2px solid #8bacf9; border-top: 0; } @media print { .star-ratings h1 { color: black; } .star-ratings .stars .title { color: black; } .box-orange .box-header, .box-green .box-header, .box-blue .box-header { background-color: transparent; color: black; } .box-orange .box-body, .box-green .box-body, .box-blue .box-body { background-color: transparent; border: none; } } jquery-bar-rating/fontawesome-stars.css 0000644 00000001676 14704452271 0014322 0 ustar 00 .br-theme-fontawesome-stars .br-widget { height: 28px; white-space: nowrap; } .br-theme-fontawesome-stars .br-widget a { font: normal normal normal 20px/1 FontAwesome; text-rendering: auto; -webkit-font-smoothing: antialiased; text-decoration: none; margin-right: 2px; } .br-theme-fontawesome-stars .br-widget a:after { content: '\f005'; color: #d2d2d2; } .br-theme-fontawesome-stars .br-widget a.br-active:after { color: #EDB867; } .br-theme-fontawesome-stars .br-widget a.br-selected:after { color: #EDB867; } .br-theme-fontawesome-stars .br-widget .br-current-rating { display: none; } .br-theme-fontawesome-stars .br-readonly a { cursor: default; } @media print { .br-theme-fontawesome-stars .br-widget a:after { content: '\f006'; color: black; } .br-theme-fontawesome-stars .br-widget a.br-active:after, .br-theme-fontawesome-stars .br-widget a.br-selected:after { content: '\f005'; color: black; } } jquery-bar-rating/bars-square.css 0000644 00000002245 14704452271 0013057 0 ustar 00 .br-theme-bars-square .br-widget { height: 15px; white-space: nowrap; } .br-theme-bars-square .br-widget a { display: block; width: 30px; height: 30px; float: left; border: 2px solid #bbcefb; background-color: white; margin: 2px; text-decoration: none; font-size: 14px; font-weight: 400; line-height: 2; text-align: center; color: #bbcefb; font-weight: 600; } .br-theme-bars-square .br-widget a.br-active, .br-theme-bars-square .br-widget a.br-selected { border: 2px solid #4278F5; color: #4278F5; } .br-theme-bars-square .br-widget .br-current-rating { clear: both; width: 330px; text-align: center; font-weight: 600; display: block; padding: .5em 0; color: #646464; } .br-theme-bars-square .br-readonly a { cursor: default; } .br-theme-bars-square .br-readonly a.br-active, .br-theme-bars-square .br-readonly a.br-selected { border: 2px solid #729bf8; color: #729bf8; } @media print { .br-theme-bars-square .br-widget a { border: 2px solid #b3b3b3; color: #b3b3b3; } .br-theme-bars-square .br-widget a.br-active, .br-theme-bars-square .br-widget a.br-selected { border: 2px solid black; color: black; } } jquery-bar-rating/bars-movie.css 0000644 00000002341 14704452271 0012673 0 ustar 00 .br-theme-bars-movie .br-widget { height: 10px; white-space: nowrap; } .br-theme-bars-movie .br-widget a { display: block; width: 60px; height: 8px; float: left; background-color: #bbcefb; margin: 1px; } .br-theme-bars-movie .br-widget a.br-active, .br-theme-bars-movie .br-widget a.br-selected { background-color: #4278F5; } .br-theme-bars-movie .br-widget .br-current-rating { clear: both; width: 240px; text-align: center; font-weight: 600; display: block; padding: .5em 0; color: #4278F5; font-weight: 400; } .br-theme-bars-movie .br-readonly a { cursor: default; } .br-theme-bars-movie .br-readonly a.br-active, .br-theme-bars-movie .br-readonly a.br-selected { background-color: #729bf8; } .br-theme-bars-movie .br-readonly .br-current-rating { color: #729bf8; } @media print { .br-theme-bars-movie .br-widget a { border: 1px solid #b3b3b3; background: white; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .br-theme-bars-movie .br-widget a.br-active, .br-theme-bars-movie .br-widget a.br-selected { border: 1px solid black; background: white; } .br-theme-bars-movie .br-widget .br-current-rating { color: black; } } jquery-bar-rating/bars-horizontal.css 0000644 00000002361 14704452271 0013747 0 ustar 00 .br-theme-bars-horizontal .br-widget { width: 120px; white-space: nowrap; } .br-theme-bars-horizontal .br-widget a { display: block; width: 120px; height: 5px; background-color: #fbedd9; margin: 1px; } .br-theme-bars-horizontal .br-widget a.br-active, .br-theme-bars-horizontal .br-widget a.br-selected { background-color: #EDB867; } .br-theme-bars-horizontal .br-widget .br-current-rating { width: 120px; font-size: 18px; font-weight: 600; line-height: 2; text-align: center; color: #EDB867; } .br-theme-bars-horizontal .br-readonly a { cursor: default; } .br-theme-bars-horizontal .br-readonly a.br-active, .br-theme-bars-horizontal .br-readonly a.br-selected { background-color: #f2cd95; } .br-theme-bars-horizontal .br-readonly .br-current-rating { color: #f2cd95; } @media print { .br-theme-bars-horizontal .br-widget a { border: 1px solid #b3b3b3; background: white; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .br-theme-bars-horizontal .br-widget a.br-active, .br-theme-bars-horizontal .br-widget a.br-selected { border: 1px solid black; background: white; } .br-theme-bars-horizontal .br-widget .br-current-rating { color: black; } } jquery-bar-rating/css-stars.css 0000644 00000001477 14704452271 0012562 0 ustar 00 .br-theme-css-stars .br-widget { height: 28px; white-space: nowrap; } .br-theme-css-stars .br-widget a { text-decoration: none; height: 18px; width: 18px; float: left; font-size: 23px; margin-right: 5px; } .br-theme-css-stars .br-widget a:after { content: "\2605"; color: #d2d2d2; } .br-theme-css-stars .br-widget a.br-active:after { color: #EDB867; } .br-theme-css-stars .br-widget a.br-selected:after { color: #EDB867; } .br-theme-css-stars .br-widget .br-current-rating { display: none; } .br-theme-css-stars .br-readonly a { cursor: default; } @media print { .br-theme-css-stars .br-widget a:after { content: "\2606"; color: black; } .br-theme-css-stars .br-widget a.br-active:after, .br-theme-css-stars .br-widget a.br-selected:after { content: "\2605"; color: black; } } jquery-bar-rating/bars-1to10.css 0000644 00000002374 14704452271 0012426 0 ustar 00 .br-theme-bars-1to10 .br-widget { height: 50px; white-space: nowrap; } .br-theme-bars-1to10 .br-widget a { display: block; width: 12px; padding: 5px 0; height: 28px; float: left; background-color: #fbedd9; margin: 1px; text-align: center; } .br-theme-bars-1to10 .br-widget a.br-active, .br-theme-bars-1to10 .br-widget a.br-selected { background-color: #EDB867; } .br-theme-bars-1to10 .br-widget .br-current-rating { font-size: 20px; line-height: 2; float: left; padding: 0 20px 0 20px; color: #EDB867; font-weight: 400; } .br-theme-bars-1to10 .br-readonly a { cursor: default; } .br-theme-bars-1to10 .br-readonly a.br-active, .br-theme-bars-1to10 .br-readonly a.br-selected { background-color: #f2cd95; } .br-theme-bars-1to10 .br-readonly .br-current-rating { color: #f2cd95; } @media print { .br-theme-bars-1to10 .br-widget a { border: 1px solid #b3b3b3; background: white; height: 38px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .br-theme-bars-1to10 .br-widget a.br-active, .br-theme-bars-1to10 .br-widget a.br-selected { border: 1px solid black; background: white; } .br-theme-bars-1to10 .br-widget .br-current-rating { color: black; } } jquery-bar-rating/fontawesome-stars-o.css 0000644 00000002651 14704452271 0014550 0 ustar 00 .br-theme-fontawesome-stars-o .br-widget { height: 28px; white-space: nowrap; } .br-theme-fontawesome-stars-o .br-widget a { font: normal normal normal 20px/1 FontAwesome; text-rendering: auto; -webkit-font-smoothing: antialiased; text-decoration: none; margin-right: 2px; } .br-theme-fontawesome-stars-o .br-widget a:after { content: '\f006'; color: #d2d2d2; } .br-theme-fontawesome-stars-o .br-widget a.br-active:after { content: '\f005'; color: #50E3C2; } .br-theme-fontawesome-stars-o .br-widget a.br-selected:after { content: '\f005'; color: #50E3C2; } .br-theme-fontawesome-stars-o .br-widget a.br-fractional:after { content: '\f123'; color: #50E3C2; } .br-theme-fontawesome-stars-o .br-widget .br-current-rating { display: none; } .br-theme-fontawesome-stars-o .br-readonly a { cursor: default; } .br-theme-fontawesome-stars-o .br-reverse a.br-fractional { display: inline-block; transform: scaleX(-1); -moz-transform: scaleX(-1); -webkit-transform: scaleX(-1); filter: FlipH; -ms-filter: "FlipH"; } @media print { .br-theme-fontawesome-stars-o .br-widget a:after { content: '\f006'; color: black; } .br-theme-fontawesome-stars-o .br-widget a.br-active:after, .br-theme-fontawesome-stars-o .br-widget a.br-selected:after { content: '\f005'; color: black; } .br-theme-fontawesome-stars-o .br-widget a.br-fractional:after { content: '\f123'; color: black; } } jquery-bar-rating/jquery.barrating.min.js.map 0000644 00000066503 14704452271 0015312 0 ustar 00 {"version":3,"sources":["jquery.barrating.js"],"names":["factory","define","amd","module","exports","require","jQuery","$","BarRating","self","this","wrapElement","classes","options","theme","push","$elem","wrap","class","join","unwrapElement","unwrap","findOption","value","isNumeric","Math","floor","getInitialOption","initialRating","getEmptyOption","$emptyOpt","find","emptyValue","length","allowEmpty","prependTo","getData","key","data","setData","saveDataOnElement","$opt","val","text","emptyText","userOptions","ratingValue","ratingText","originalRatingValue","originalRatingText","emptyRatingValue","emptyRatingText","readOnly","readonly","ratingMade","removeDataOnElement","removeData","buildWidget","$w","each","html","$a","href","data-rating-value","data-rating-text","append","showSelectedRating","reverse","addClass","nextAllorPreviousAll","setSelectFieldValue","prop","change","resetSelectField","defaultSelected","parent","fraction","round","resetStyle","$widget","removeClass","index","match","applyStyle","$all","$fractional","baseValue","f","isDeselectable","$element","deselectable","attr","attachClickHandler","$elements","on","event","preventDefault","onSelect","call","attachMouseEnterHandler","attachMouseLeaveHandler","fastClicks","stopPropagation","click","disableClicks","attachHandlers","hoverState","detachHandlers","off","setupHandlers","show","insertAfter","hide","state","toggleClass","set","silent","clear","onClear","destroy","remove","onDestroy","prototype","init","elem","extend","fn","barrating","defaults","method","plugin","is","error","hasOwnProperty","next","showValues"],"mappings":"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","file":"jquery.barrating.min.js","sourcesContent":["/**\n * jQuery Bar Rating Plugin v1.2.2\n *\n * http://github.com/antennaio/jquery-bar-rating\n *\n * Copyright (c) 2012-2016 Kazik Pietruszewski\n *\n * This plugin is available under the MIT license.\n * http://www.opensource.org/licenses/mit-license.php\n */\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node/CommonJS\n module.exports = factory(require('jquery'));\n } else {\n // browser globals\n factory(jQuery);\n }\n}(function ($) {\n\n var BarRating = (function() {\n\n function BarRating() {\n var self = this;\n\n // wrap element in a wrapper div\n var wrapElement = function() {\n var classes = ['br-wrapper'];\n\n if (self.options.theme !== '') {\n classes.push('br-theme-' + self.options.theme);\n }\n\n self.$elem.wrap($('<div />', {\n 'class': classes.join(' ')\n }));\n };\n\n // unwrap element\n var unwrapElement = function() {\n self.$elem.unwrap();\n };\n\n // find option by value\n var findOption = function(value) {\n if ($.isNumeric(value)) {\n value = Math.floor(value);\n }\n\n return $('option[value=\"' + value + '\"]', self.$elem);\n };\n\n // get initial option\n var getInitialOption = function() {\n var initialRating = self.options.initialRating;\n\n if (!initialRating) {\n return $('option:selected', self.$elem);\n }\n\n return findOption(initialRating);\n };\n\n // get empty option\n var getEmptyOption = function() {\n var $emptyOpt = self.$elem.find('option[value=\"' + self.options.emptyValue + '\"]');\n\n if (!$emptyOpt.length && self.options.allowEmpty) {\n $emptyOpt = $('<option />', { 'value': self.options.emptyValue });\n\n return $emptyOpt.prependTo(self.$elem);\n }\n\n return $emptyOpt;\n };\n\n // get data\n var getData = function(key) {\n var data = self.$elem.data('barrating');\n\n if (typeof key !== 'undefined') {\n return data[key];\n }\n\n return data;\n };\n\n // set data\n var setData = function(key, value) {\n if (value !== null && typeof value === 'object') {\n self.$elem.data('barrating', value);\n } else {\n self.$elem.data('barrating')[key] = value;\n }\n };\n\n // save data on element\n var saveDataOnElement = function() {\n var $opt = getInitialOption();\n var $emptyOpt = getEmptyOption();\n\n var value = $opt.val();\n var text = $opt.data('html') ? $opt.data('html') : $opt.text();\n\n // if the allowEmpty option is not set let's check if empty option exists in the select field\n var allowEmpty = (self.options.allowEmpty !== null) ?\n self.options.allowEmpty :\n !!$emptyOpt.length;\n\n var emptyValue = ($emptyOpt.length) ? $emptyOpt.val() : null;\n var emptyText = ($emptyOpt.length) ? $emptyOpt.text() : null;\n\n setData(null, {\n userOptions: self.options,\n\n // initial rating based on the OPTION value\n ratingValue: value,\n ratingText: text,\n\n // rating will be restored by calling clear method\n originalRatingValue: value,\n originalRatingText: text,\n\n // allow empty ratings?\n allowEmpty: allowEmpty,\n\n // rating value and text of the empty OPTION\n emptyRatingValue: emptyValue,\n emptyRatingText: emptyText,\n\n // read-only state\n readOnly: self.options.readonly,\n\n // did the user already select a rating?\n ratingMade: false\n });\n };\n\n // remove data on element\n var removeDataOnElement = function() {\n self.$elem.removeData('barrating');\n };\n\n // return current rating text\n var ratingText = function() {\n return getData('ratingText');\n };\n\n // return current rating value\n var ratingValue = function() {\n return getData('ratingValue');\n };\n\n // build widget and return jQuery element\n var buildWidget = function() {\n var $w = $('<div />', { 'class': 'br-widget' });\n\n // create A elements that will replace OPTIONs\n self.$elem.find('option').each(function() {\n var val, text, html, $a;\n\n val = $(this).val();\n\n // create ratings - but only if val is not defined as empty\n if (val !== getData('emptyRatingValue')) {\n text = $(this).text();\n html = $(this).data('html');\n if (html) { text = html; }\n\n $a = $('<a />', {\n 'href': '#',\n 'data-rating-value': val,\n 'data-rating-text': text,\n 'html': (self.options.showValues) ? text : ''\n });\n\n $w.append($a);\n }\n\n });\n\n // append .br-current-rating div to the widget\n if (self.options.showSelectedRating) {\n $w.append($('<div />', { 'text': '', 'class': 'br-current-rating' }));\n }\n\n // additional classes for the widget\n if (self.options.reverse) {\n $w.addClass('br-reverse');\n }\n\n if (self.options.readonly) {\n $w.addClass('br-readonly');\n }\n\n return $w;\n };\n\n // return a jQuery function name depending on the 'reverse' setting\n var nextAllorPreviousAll = function() {\n if (getData('userOptions').reverse) {\n return 'nextAll';\n } else {\n return 'prevAll';\n }\n };\n\n // set the value of the select field\n var setSelectFieldValue = function(value) {\n // change selected option\n findOption(value).prop('selected', true);\n\n self.$elem.change();\n };\n\n // reset select field\n var resetSelectField = function() {\n $('option', self.$elem).prop('selected', function() {\n return this.defaultSelected;\n });\n\n self.$elem.change();\n };\n\n // display the currently selected rating\n var showSelectedRating = function(text) {\n // text undefined?\n text = text ? text : ratingText();\n\n // special case when the selected rating is defined as empty\n if (text == getData('emptyRatingText')) {\n text = '';\n }\n\n // update .br-current-rating div\n if (self.options.showSelectedRating) {\n self.$elem.parent().find('.br-current-rating').text(text);\n }\n };\n\n // return rounded fraction of a value (14.4 -> 40, 0.99 -> 90)\n var fraction = function(value) {\n return Math.round(((Math.floor(value * 10) / 10) % 1) * 100);\n };\n\n // remove all classes from elements\n var resetStyle = function() {\n // remove all classes starting with br-*\n self.$widget.find('a').removeClass(function(index, classes) {\n return (classes.match(/(^|\\s)br-\\S+/g) || []).join(' ');\n });\n };\n\n // apply style by setting classes on elements\n var applyStyle = function() {\n var $a = self.$widget.find('a[data-rating-value=\"' + ratingValue() + '\"]');\n var initialRating = getData('userOptions').initialRating;\n var baseValue = $.isNumeric(ratingValue()) ? ratingValue() : 0;\n var f = fraction(initialRating);\n var $all, $fractional;\n\n resetStyle();\n\n // add classes\n $a.addClass('br-selected br-current')[nextAllorPreviousAll()]()\n .addClass('br-selected');\n\n if (!getData('ratingMade') && $.isNumeric(initialRating)) {\n if ((initialRating <= baseValue) || !f) {\n return;\n }\n\n $all = self.$widget.find('a');\n\n $fractional = ($a.length) ?\n $a[(getData('userOptions').reverse) ? 'prev' : 'next']() :\n $all[(getData('userOptions').reverse) ? 'last' : 'first']();\n\n $fractional.addClass('br-fractional');\n $fractional.addClass('br-fractional-' + f);\n }\n };\n\n // check if the element is deselectable?\n var isDeselectable = function($element) {\n if (!getData('allowEmpty') || !getData('userOptions').deselectable) {\n return false;\n }\n\n return (ratingValue() == $element.attr('data-rating-value'));\n };\n\n // handle click events\n var attachClickHandler = function($elements) {\n $elements.on('click.barrating', function(event) {\n var $a = $(this),\n options = getData('userOptions'),\n value,\n text;\n\n event.preventDefault();\n\n value = $a.attr('data-rating-value');\n text = $a.attr('data-rating-text');\n\n // is current and deselectable?\n if (isDeselectable($a)) {\n value = getData('emptyRatingValue');\n text = getData('emptyRatingText');\n }\n\n // remember selected rating\n setData('ratingValue', value);\n setData('ratingText', text);\n setData('ratingMade', true);\n\n setSelectFieldValue(value);\n showSelectedRating(text);\n\n applyStyle();\n\n // onSelect callback\n options.onSelect.call(\n self,\n ratingValue(),\n ratingText(),\n event\n );\n\n return false;\n });\n };\n\n // handle mouseenter events\n var attachMouseEnterHandler = function($elements) {\n $elements.on('mouseenter.barrating', function() {\n var $a = $(this);\n\n resetStyle();\n\n $a.addClass('br-active')[nextAllorPreviousAll()]()\n .addClass('br-active');\n\n showSelectedRating($a.attr('data-rating-text'));\n });\n };\n\n // handle mouseleave events\n var attachMouseLeaveHandler = function($elements) {\n self.$widget.on('mouseleave.barrating blur.barrating', function() {\n showSelectedRating();\n applyStyle();\n });\n };\n\n // somewhat primitive way to remove 300ms click delay on touch devices\n // for a more advanced solution consider setting `fastClicks` option to false\n // and using a library such as fastclick (https://github.com/ftlabs/fastclick)\n var fastClicks = function($elements) {\n $elements.on('touchstart.barrating', function(event) {\n event.preventDefault();\n event.stopPropagation();\n\n $(this).click();\n });\n };\n\n // disable clicks\n var disableClicks = function($elements) {\n $elements.on('click.barrating', function(event) {\n event.preventDefault();\n });\n };\n\n var attachHandlers = function($elements) {\n // attach click event handler\n attachClickHandler($elements);\n\n if (self.options.hoverState) {\n // attach mouseenter event handler\n attachMouseEnterHandler($elements);\n\n // attach mouseleave event handler\n attachMouseLeaveHandler($elements);\n }\n };\n\n var detachHandlers = function($elements) {\n // remove event handlers in the \".barrating\" namespace\n $elements.off('.barrating');\n };\n\n var setupHandlers = function(readonly) {\n var $elements = self.$widget.find('a');\n\n if (fastClicks) {\n fastClicks($elements);\n }\n\n if (readonly) {\n detachHandlers($elements);\n disableClicks($elements);\n } else {\n attachHandlers($elements);\n }\n };\n\n this.show = function() {\n // run only once\n if (getData()) return;\n\n // wrap element\n wrapElement();\n\n // save data\n saveDataOnElement();\n\n // build & append widget to the DOM\n self.$widget = buildWidget();\n self.$widget.insertAfter(self.$elem);\n\n applyStyle();\n\n showSelectedRating();\n\n setupHandlers(self.options.readonly);\n\n // hide the select field\n self.$elem.hide();\n };\n\n this.readonly = function(state) {\n if (typeof state !== 'boolean' || getData('readOnly') == state) return;\n\n setupHandlers(state);\n setData('readOnly', state);\n self.$widget.toggleClass('br-readonly');\n };\n\n this.set = function(value) {\n var options = getData('userOptions');\n\n if (self.$elem.find('option[value=\"' + value + '\"]').length === 0) return;\n\n // set data\n setData('ratingValue', value);\n setData('ratingText', self.$elem.find('option[value=\"' + value + '\"]').text());\n setData('ratingMade', true);\n\n setSelectFieldValue(ratingValue());\n showSelectedRating(ratingText());\n\n applyStyle();\n\n // onSelect callback\n if (!options.silent) {\n options.onSelect.call(\n this,\n ratingValue(),\n ratingText()\n );\n }\n };\n\n this.clear = function() {\n var options = getData('userOptions');\n\n // restore original data\n setData('ratingValue', getData('originalRatingValue'));\n setData('ratingText', getData('originalRatingText'));\n setData('ratingMade', false);\n\n resetSelectField();\n showSelectedRating(ratingText());\n\n applyStyle();\n\n // onClear callback\n options.onClear.call(\n this,\n ratingValue(),\n ratingText()\n );\n };\n\n this.destroy = function() {\n var value = ratingValue();\n var text = ratingText();\n var options = getData('userOptions');\n\n // detach handlers\n detachHandlers(self.$widget.find('a'));\n\n // remove widget\n self.$widget.remove();\n\n // remove data\n removeDataOnElement();\n\n // unwrap the element\n unwrapElement();\n\n // show the element\n self.$elem.show();\n\n // onDestroy callback\n options.onDestroy.call(\n this,\n value,\n text\n );\n };\n }\n\n BarRating.prototype.init = function (options, elem) {\n this.$elem = $(elem);\n this.options = $.extend({}, $.fn.barrating.defaults, options);\n\n return this.options;\n };\n\n return BarRating;\n })();\n\n $.fn.barrating = function (method, options) {\n return this.each(function () {\n var plugin = new BarRating();\n\n // plugin works with select fields\n if (!$(this).is('select')) {\n $.error('Sorry, this plugin only works with select fields.');\n }\n\n // method supplied\n if (plugin.hasOwnProperty(method)) {\n plugin.init(options, this);\n if (method === 'show') {\n return plugin.show(options);\n } else {\n // plugin exists?\n if (plugin.$elem.data('barrating')) {\n plugin.$widget = $(this).next('.br-widget');\n return plugin[method](options);\n }\n }\n\n // no method supplied or only options supplied\n } else if (typeof method === 'object' || !method) {\n options = method;\n plugin.init(options, this);\n return plugin.show();\n\n } else {\n $.error('Method ' + method + ' does not exist on jQuery.barrating');\n }\n });\n };\n\n $.fn.barrating.defaults = {\n theme:'',\n initialRating:null, // initial rating\n allowEmpty:null, // allow empty ratings?\n emptyValue:'', // this is the expected value of the empty rating\n showValues:false, // display rating values on the bars?\n showSelectedRating:true, // append a div with a rating to the widget?\n deselectable:true, // allow to deselect ratings?\n reverse:false, // reverse the rating?\n readonly:false, // make the rating ready-only?\n fastClicks:true, // remove 300ms click delay on touch devices?\n hoverState:true, // change state on hover?\n silent:false, // supress callbacks when controlling ratings programatically\n onSelect:function (value, text, event) {\n }, // callback fired when a rating is selected\n onClear:function (value, text) {\n }, // callback fired when a rating is cleared\n onDestroy:function (value, text) {\n } // callback fired when a widget is destroyed\n };\n\n $.fn.barrating.BarRating = BarRating;\n\n}));\n"],"sourceRoot":"/source/"} jquery-bar-rating/bootstrap-stars.css 0000644 00000001665 14704452271 0014006 0 ustar 00 .br-theme-bootstrap-stars .br-widget { height: 28px; white-space: nowrap; } .br-theme-bootstrap-stars .br-widget a { font: normal normal normal 18px/1 'Glyphicons Halflings'; text-rendering: auto; -webkit-font-smoothing: antialiased; text-decoration: none; margin-right: 2px; } .br-theme-bootstrap-stars .br-widget a:after { content: '\e006'; color: #d2d2d2; } .br-theme-bootstrap-stars .br-widget a.br-active:after { color: #EDB867; } .br-theme-bootstrap-stars .br-widget a.br-selected:after { color: #EDB867; } .br-theme-bootstrap-stars .br-widget .br-current-rating { display: none; } .br-theme-bootstrap-stars .br-readonly a { cursor: default; } @media print { .br-theme-bootstrap-stars .br-widget a:after { content: '\e007'; color: black; } .br-theme-bootstrap-stars .br-widget a.br-active:after, .br-theme-bootstrap-stars .br-widget a.br-selected:after { content: '\e006'; color: black; } } jquery-bar-rating/bars-pill.css 0000644 00000003201 14704452271 0012510 0 ustar 00 .br-theme-bars-pill .br-widget { white-space: nowrap; } .br-theme-bars-pill .br-widget a { padding: 7px 15px; background-color: #bef5e8; color: #50E3C2; text-decoration: none; font-size: 13px; line-height: 3; text-align: center; font-weight: 400; } .br-theme-bars-pill .br-widget a:first-child { -webkit-border-top-left-radius: 999px; -webkit-border-bottom-left-radius: 999px; -moz-border-radius-topleft: 999px; -moz-border-radius-bottomleft: 999px; border-top-left-radius: 999px; border-bottom-left-radius: 999px; } .br-theme-bars-pill .br-widget a:last-child { -webkit-border-top-right-radius: 999px; -webkit-border-bottom-right-radius: 999px; -moz-border-radius-topright: 999px; -moz-border-radius-bottomright: 999px; border-top-right-radius: 999px; border-bottom-right-radius: 999px; } .br-theme-bars-pill .br-widget a.br-active, .br-theme-bars-pill .br-widget a.br-selected { background-color: #50E3C2; color: white; } .br-theme-bars-pill .br-readonly a { cursor: default; } .br-theme-bars-pill .br-readonly a.br-active, .br-theme-bars-pill .br-readonly a.br-selected { background-color: #7cead1; } @media print { .br-theme-bars-pill .br-widget a { border: 1px solid #b3b3b3; border-left: none; background: white; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .br-theme-bars-pill .br-widget a.br-active, .br-theme-bars-pill .br-widget a.br-selected { border: 1px solid black; border-left: none; background: white; color: black; } .br-theme-bars-pill .br-widget a:first-child { border-left: 1px solid black; } } jquery-bar-rating/jquery.barrating.min.js 0000644 00000013127 14704452271 0014530 0 ustar 00 !function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=function(){function e(){var e=this,n=function(){var n=["br-wrapper"];""!==e.options.theme&&n.push("br-theme-"+e.options.theme),e.$elem.wrap(t("<div />",{"class":n.join(" ")}))},i=function(){e.$elem.unwrap()},a=function(n){return t.isNumeric(n)&&(n=Math.floor(n)),t('option[value="'+n+'"]',e.$elem)},r=function(){var n=e.options.initialRating;return n?a(n):t("option:selected",e.$elem)},o=function(){var n=e.$elem.find('option[value="'+e.options.emptyValue+'"]');return!n.length&&e.options.allowEmpty?(n=t("<option />",{value:e.options.emptyValue}),n.prependTo(e.$elem)):n},l=function(t){var n=e.$elem.data("barrating");return"undefined"!=typeof t?n[t]:n},s=function(t,n){null!==n&&"object"==typeof n?e.$elem.data("barrating",n):e.$elem.data("barrating")[t]=n},u=function(){var t=r(),n=o(),i=t.val(),a=t.data("html")?t.data("html"):t.text(),l=null!==e.options.allowEmpty?e.options.allowEmpty:!!n.length,u=n.length?n.val():null,d=n.length?n.text():null;s(null,{userOptions:e.options,ratingValue:i,ratingText:a,originalRatingValue:i,originalRatingText:a,allowEmpty:l,emptyRatingValue:u,emptyRatingText:d,readOnly:e.options.readonly,ratingMade:!1})},d=function(){e.$elem.removeData("barrating")},c=function(){return l("ratingText")},f=function(){return l("ratingValue")},g=function(){var n=t("<div />",{"class":"br-widget"});return e.$elem.find("option").each(function(){var i,a,r,o;i=t(this).val(),i!==l("emptyRatingValue")&&(a=t(this).text(),r=t(this).data("html"),r&&(a=r),o=t("<a />",{href:"#","data-rating-value":i,"data-rating-text":a,html:e.options.showValues?a:""}),n.append(o))}),e.options.showSelectedRating&&n.append(t("<div />",{text:"","class":"br-current-rating"})),e.options.reverse&&n.addClass("br-reverse"),e.options.readonly&&n.addClass("br-readonly"),n},p=function(){return l("userOptions").reverse?"nextAll":"prevAll"},h=function(t){a(t).prop("selected",!0),e.$elem.change()},m=function(){t("option",e.$elem).prop("selected",function(){return this.defaultSelected}),e.$elem.change()},v=function(t){t=t?t:c(),t==l("emptyRatingText")&&(t=""),e.options.showSelectedRating&&e.$elem.parent().find(".br-current-rating").text(t)},y=function(t){return Math.round(Math.floor(10*t)/10%1*100)},b=function(){e.$widget.find("a").removeClass(function(t,e){return(e.match(/(^|\s)br-\S+/g)||[]).join(" ")})},w=function(){var n,i,a=e.$widget.find('a[data-rating-value="'+f()+'"]'),r=l("userOptions").initialRating,o=t.isNumeric(f())?f():0,s=y(r);if(b(),a.addClass("br-selected br-current")[p()]().addClass("br-selected"),!l("ratingMade")&&t.isNumeric(r)){if(o>=r||!s)return;n=e.$widget.find("a"),i=a.length?a[l("userOptions").reverse?"prev":"next"]():n[l("userOptions").reverse?"last":"first"](),i.addClass("br-fractional"),i.addClass("br-fractional-"+s)}},$=function(t){return l("allowEmpty")&&l("userOptions").deselectable?f()==t.attr("data-rating-value"):!1},x=function(n){n.on("click.barrating",function(n){var i,a,r=t(this),o=l("userOptions");return n.preventDefault(),i=r.attr("data-rating-value"),a=r.attr("data-rating-text"),$(r)&&(i=l("emptyRatingValue"),a=l("emptyRatingText")),s("ratingValue",i),s("ratingText",a),s("ratingMade",!0),h(i),v(a),w(),o.onSelect.call(e,f(),c(),n),!1})},R=function(e){e.on("mouseenter.barrating",function(){var e=t(this);b(),e.addClass("br-active")[p()]().addClass("br-active"),v(e.attr("data-rating-text"))})},V=function(t){e.$widget.on("mouseleave.barrating blur.barrating",function(){v(),w()})},O=function(e){e.on("touchstart.barrating",function(e){e.preventDefault(),e.stopPropagation(),t(this).click()})},C=function(t){t.on("click.barrating",function(t){t.preventDefault()})},S=function(t){x(t),e.options.hoverState&&(R(t),V(t))},T=function(t){t.off(".barrating")},j=function(t){var n=e.$widget.find("a");O&&O(n),t?(T(n),C(n)):S(n)};this.show=function(){l()||(n(),u(),e.$widget=g(),e.$widget.insertAfter(e.$elem),w(),v(),j(e.options.readonly),e.$elem.hide())},this.readonly=function(t){"boolean"==typeof t&&l("readOnly")!=t&&(j(t),s("readOnly",t),e.$widget.toggleClass("br-readonly"))},this.set=function(t){var n=l("userOptions");0!==e.$elem.find('option[value="'+t+'"]').length&&(s("ratingValue",t),s("ratingText",e.$elem.find('option[value="'+t+'"]').text()),s("ratingMade",!0),h(f()),v(c()),w(),n.silent||n.onSelect.call(this,f(),c()))},this.clear=function(){var t=l("userOptions");s("ratingValue",l("originalRatingValue")),s("ratingText",l("originalRatingText")),s("ratingMade",!1),m(),v(c()),w(),t.onClear.call(this,f(),c())},this.destroy=function(){var t=f(),n=c(),a=l("userOptions");T(e.$widget.find("a")),e.$widget.remove(),d(),i(),e.$elem.show(),a.onDestroy.call(this,t,n)}}return e.prototype.init=function(e,n){return this.$elem=t(n),this.options=t.extend({},t.fn.barrating.defaults,e),this.options},e}();t.fn.barrating=function(n,i){return this.each(function(){var a=new e;if(t(this).is("select")||t.error("Sorry, this plugin only works with select fields."),a.hasOwnProperty(n)){if(a.init(i,this),"show"===n)return a.show(i);if(a.$elem.data("barrating"))return a.$widget=t(this).next(".br-widget"),a[n](i)}else{if("object"==typeof n||!n)return i=n,a.init(i,this),a.show();t.error("Method "+n+" does not exist on jQuery.barrating")}})},t.fn.barrating.defaults={theme:"",initialRating:null,allowEmpty:null,emptyValue:"",showValues:!1,showSelectedRating:!0,deselectable:!0,reverse:!1,readonly:!1,fastClicks:!0,hoverState:!0,silent:!1,onSelect:function(t,e,n){},onClear:function(t,e){},onDestroy:function(t,e){}},t.fn.barrating.BarRating=e}); //# sourceMappingURL=jquery.barrating.min.js.map jquery-bar-rating/bars-reversed.css 0000644 00000002536 14704452271 0013401 0 ustar 00 .br-theme-bars-reversed .br-widget { height: 25px; white-space: nowrap; } .br-theme-bars-reversed .br-widget a { display: block; width: 22px; height: 22px; float: left; background-color: #bef5e8; margin: 1px; font-size: 15px; font-weight: 400; line-height: 1.4; color: #50E3C2; text-align: center; } .br-theme-bars-reversed .br-widget a.br-active, .br-theme-bars-reversed .br-widget a.br-selected { background-color: #50E3C2; color: white; } .br-theme-bars-reversed .br-widget .br-current-rating { line-height: 1.3; float: left; padding: 0 20px 0 20px; color: #50E3C2; font-size: 17px; font-weight: 400; } .br-theme-bars-reversed .br-readonly a { cursor: default; } .br-theme-bars-reversed .br-readonly a.br-active, .br-theme-bars-reversed .br-readonly a.br-selected { background-color: #7cead1; } .br-theme-bars-reversed .br-readonly .br-current-rating { color: #7cead1; } @media print { .br-theme-bars-reversed .br-widget a { border: 1px solid #b3b3b3; background: white; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .br-theme-bars-reversed .br-widget a.br-active, .br-theme-bars-reversed .br-widget a.br-selected { border: 1px solid black; background: white; } .br-theme-bars-reversed .br-widget .br-current-rating { color: black; } } feather/feather.css 0000644 00000015731 14704452271 0010327 0 ustar 00 @charset "UTF-8"; @font-face { font-family: "feather"; src:url("fonts/feather-webfont.eot"); src:url("fonts/feather-webfont.eot?#iefix") format("embedded-opentype"), url("fonts/feather-webfont.woff") format("woff"), url("fonts/feather-webfont.ttf") format("truetype"), url("fonts/feather-webfont.svg#feather") format("svg"); font-weight: normal; font-style: normal; } /* Character Mapping Method */ [data-icon]:before { display: inline-block; font-family: "feather"; content: attr(data-icon); font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; speak: none; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* CSS Class Mapping Method */ [class^="icon-"], [class*=" icon-"] { display: inline-block; font-family: "feather"; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; speak: none; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .icon-eye:before { content: "\e000"; } .icon-paper-clip:before { content: "\e001"; } .icon-mail:before { content: "\e002"; } .icon-mail:before { content: "\e002"; } .icon-toggle:before { content: "\e003"; } .icon-layout:before { content: "\e004"; } .icon-link:before { content: "\e005"; } .icon-bell:before { content: "\e006"; } .icon-lock:before { content: "\e007"; } .icon-unlock:before { content: "\e008"; } .icon-ribbon:before { content: "\e009"; } .icon-image:before { content: "\e010"; } .icon-signal:before { content: "\e011"; } .icon-target:before { content: "\e012"; } .icon-clipboard:before { content: "\e013"; } .icon-clock:before { content: "\e014"; } .icon-clock:before { content: "\e014"; } .icon-watch:before { content: "\e015"; } .icon-air-play:before { content: "\e016"; } .icon-camera:before { content: "\e017"; } .icon-video:before { content: "\e018"; } .icon-disc:before { content: "\e019"; } .icon-printer:before { content: "\e020"; } .icon-monitor:before { content: "\e021"; } .icon-server:before { content: "\e022"; } .icon-cog:before { content: "\e023"; } .icon-heart:before { content: "\e024"; } .icon-paragraph:before { content: "\e025"; } .icon-align-justify:before { content: "\e026"; } .icon-align-left:before { content: "\e027"; } .icon-align-center:before { content: "\e028"; } .icon-align-right:before { content: "\e029"; } .icon-book:before { content: "\e030"; } .icon-layers:before { content: "\e031"; } .icon-stack:before { content: "\e032"; } .icon-stack-2:before { content: "\e033"; } .icon-paper:before { content: "\e034"; } .icon-paper-stack:before { content: "\e035"; } .icon-search:before { content: "\e036"; } .icon-zoom-in:before { content: "\e037"; } .icon-zoom-out:before { content: "\e038"; } .icon-reply:before { content: "\e039"; } .icon-circle-plus:before { content: "\e040"; } .icon-circle-minus:before { content: "\e041"; } .icon-circle-check:before { content: "\e042"; } .icon-circle-cross:before { content: "\e043"; } .icon-square-plus:before { content: "\e044"; } .icon-square-minus:before { content: "\e045"; } .icon-square-check:before { content: "\e046"; } .icon-square-cross:before { content: "\e047"; } .icon-microphone:before { content: "\e048"; } .icon-record:before { content: "\e049"; } .icon-skip-back:before { content: "\e050"; } .icon-rewind:before { content: "\e051"; } .icon-play:before { content: "\e052"; } .icon-pause:before { content: "\e053"; } .icon-stop:before { content: "\e054"; } .icon-fast-forward:before { content: "\e055"; } .icon-skip-forward:before { content: "\e056"; } .icon-shuffle:before { content: "\e057"; } .icon-repeat:before { content: "\e058"; } .icon-folder:before { content: "\e059"; } .icon-umbrella:before { content: "\e060"; } .icon-moon:before { content: "\e061"; } .icon-thermometer:before { content: "\e062"; } .icon-drop:before { content: "\e063"; } .icon-sun:before { content: "\e064"; } .icon-cloud:before { content: "\e065"; } .icon-cloud-upload:before { content: "\e066"; } .icon-cloud-download:before { content: "\e067"; } .icon-upload:before { content: "\e068"; } .icon-download:before { content: "\e069"; } .icon-location:before { content: "\e070"; } .icon-location-2:before { content: "\e071"; } .icon-map:before { content: "\e072"; } .icon-battery:before { content: "\e073"; } .icon-head:before { content: "\e074"; } .icon-briefcase:before { content: "\e075"; } .icon-speech-bubble:before { content: "\e076"; } .icon-anchor:before { content: "\e077"; } .icon-globe:before { content: "\e078"; } .icon-box:before { content: "\e079"; } .icon-reload:before { content: "\e080"; } .icon-share:before { content: "\e081"; } .icon-marquee:before { content: "\e082"; } .icon-marquee-plus:before { content: "\e083"; } .icon-marquee-minus:before { content: "\e084"; } .icon-tag:before { content: "\e085"; } .icon-power:before { content: "\e086"; } .icon-command:before { content: "\e087"; } .icon-alt:before { content: "\e088"; } .icon-esc:before { content: "\e089"; } .icon-bar-graph:before { content: "\e090"; } .icon-bar-graph-2:before { content: "\e091"; } .icon-pie-graph:before { content: "\e092"; } .icon-star:before { content: "\e093"; } .icon-arrow-left:before { content: "\e094"; } .icon-arrow-right:before { content: "\e095"; } .icon-arrow-up:before { content: "\e096"; } .icon-arrow-down:before { content: "\e097"; } .icon-volume:before { content: "\e098"; } .icon-mute:before { content: "\e099"; } .icon-content-right:before { content: "\e100"; } .icon-content-left:before { content: "\e101"; } .icon-grid:before { content: "\e102"; } .icon-grid-2:before { content: "\e103"; } .icon-columns:before { content: "\e104"; } .icon-loader:before { content: "\e105"; } .icon-bag:before { content: "\e106"; } .icon-ban:before { content: "\e107"; } .icon-flag:before { content: "\e108"; } .icon-trash:before { content: "\e109"; } .icon-expand:before { content: "\e110"; } .icon-contract:before { content: "\e111"; } .icon-maximize:before { content: "\e112"; } .icon-minimize:before { content: "\e113"; } .icon-plus:before { content: "\e114"; } .icon-minus:before { content: "\e115"; } .icon-check:before { content: "\e116"; } .icon-cross:before { content: "\e117"; } .icon-move:before { content: "\e118"; } .icon-delete:before { content: "\e119"; } .icon-menu:before { content: "\e120"; } .icon-archive:before { content: "\e121"; } .icon-inbox:before { content: "\e122"; } .icon-outbox:before { content: "\e123"; } .icon-file:before { content: "\e124"; } .icon-file-add:before { content: "\e125"; } .icon-file-subtract:before { content: "\e126"; } .icon-help:before { content: "\e127"; } .icon-open:before { content: "\e128"; } .icon-ellipsis:before { content: "\e129"; } feather/fonts/feather-webfont.ttf 0000644 00000067564 14704452271 0013142 0 ustar 00 � `FFTMj� � GDEF � OS/2~�^� ( `cmap-�� � �gasp�� d glyf� �'