diff --git a/package-lock.json b/package-lock.json index 2fa1372..c3d83e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -771,6 +771,12 @@ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.6.3.tgz", "integrity": "sha512-s5PLdI9NYgjBvfrv6rhirPHlAHWx+Sfo/IjsAeiXYfmemC/GSjwsyz1wLnGPazbLPXWfk62ks980o9AmsxYUEQ==" }, + "@mdi/font": { + "version": "3.3.92", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-3.3.92.tgz", + "integrity": "sha512-Ux6iPfRjT9gHtejfss7aHBjgedLx8OrnX7Q+DuqgGYVkr9Amhi7cWFd745znrj7Y74pnjrs+uAbpohPK3ue5Ew==", + "dev": true + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", diff --git a/package.json b/package.json index 7be633c..182cd58 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,14 @@ "vuetify": "^1.4.0" }, "devDependencies": { + "@mdi/font": "^3.3.92", "axios": "^0.18", "bootstrap": "^4.0.0", "cross-env": "^5.1", - "material-design-icons-iconfont": "^4.0.3", "jquery": "^3.2", "laravel-mix": "^4.0.7", "lodash": "^4.17.5", + "material-design-icons-iconfont": "^4.0.3", "node-sass": "^4.10.0", "popper.js": "^1.12", "pug": "^2.0.3", diff --git a/public/fonts/vendor/@mdi/materialdesignicons-webfont.eot b/public/fonts/vendor/@mdi/materialdesignicons-webfont.eot new file mode 100644 index 0000000..b9798ea Binary files /dev/null and b/public/fonts/vendor/@mdi/materialdesignicons-webfont.eot differ diff --git a/public/fonts/vendor/@mdi/materialdesignicons-webfont.svg b/public/fonts/vendor/@mdi/materialdesignicons-webfont.svg new file mode 100644 index 0000000..4fc7cdd --- /dev/null +++ b/public/fonts/vendor/@mdi/materialdesignicons-webfont.svg @@ -0,0 +1,10188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/vendor/@mdi/materialdesignicons-webfont.ttf b/public/fonts/vendor/@mdi/materialdesignicons-webfont.ttf new file mode 100644 index 0000000..75cde78 Binary files /dev/null and b/public/fonts/vendor/@mdi/materialdesignicons-webfont.ttf differ diff --git a/public/fonts/vendor/@mdi/materialdesignicons-webfont.woff b/public/fonts/vendor/@mdi/materialdesignicons-webfont.woff new file mode 100644 index 0000000..8adbd27 Binary files /dev/null and b/public/fonts/vendor/@mdi/materialdesignicons-webfont.woff differ diff --git a/public/fonts/vendor/@mdi/materialdesignicons-webfont.woff2 b/public/fonts/vendor/@mdi/materialdesignicons-webfont.woff2 new file mode 100644 index 0000000..bc58886 Binary files /dev/null and b/public/fonts/vendor/@mdi/materialdesignicons-webfont.woff2 differ diff --git a/public/js/app.js b/public/js/app.js index c6a9055..8e1d97c 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -86,1077 +86,972 @@ /************************************************************************/ /******/ ({ -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/App.vue?vue&type=script&lang=js&": -/*!***************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/App.vue?vue&type=script&lang=js& ***! - \***************************************************************************************************************************************************/ -/*! exports provided: default */ +/***/ "./node_modules/Vuex/dist/vuex.esm.js": +/*!********************************************!*\ + !*** ./node_modules/Vuex/dist/vuex.esm.js ***! + \********************************************/ +/*! exports provided: Store, install, mapState, mapMutations, mapGetters, mapActions, createNamespacedHelpers, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Body_Header_Nav_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/Body/Header/Nav.vue */ "./resources/js/components/Body/Header/Nav.vue"); -/* harmony import */ var _components_Misc_Loading_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/Misc/Loading.vue */ "./resources/js/components/Misc/Loading.vue"); -/* harmony import */ var _components_Body_Header_HeaderBG_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/Body/Header/HeaderBG.vue */ "./resources/js/components/Body/Header/HeaderBG.vue"); -/* harmony import */ var _components_Body_Footer_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/Body/Footer.vue */ "./resources/js/components/Body/Footer.vue"); -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Store", function() { return Store; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "install", function() { return install; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapState", function() { return mapState; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapMutations", function() { return mapMutations; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapGetters", function() { return mapGetters; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapActions", function() { return mapActions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createNamespacedHelpers", function() { return createNamespacedHelpers; }); +/** + * vuex v3.0.1 + * (c) 2017 Evan You + * @license MIT + */ +var applyMixin = function (Vue) { + var version = Number(Vue.version.split('.')[0]); + if (version >= 2) { + Vue.mixin({ beforeCreate: vuexInit }); + } else { + // override init and inject vuex init procedure + // for 1.x backwards compatibility. + var _init = Vue.prototype._init; + Vue.prototype._init = function (options) { + if ( options === void 0 ) options = {}; + options.init = options.init + ? [vuexInit].concat(options.init) + : vuexInit; + _init.call(this, options); + }; + } + /** + * Vuex init hook, injected into each instances init hooks list. + */ -/* harmony default export */ __webpack_exports__["default"] = ({ - data: function data() { - return { - loadingVisible: false - }; - }, - components: { - Nav: _components_Body_Header_Nav_vue__WEBPACK_IMPORTED_MODULE_0__["default"], - HeaderBG: _components_Body_Header_HeaderBG_vue__WEBPACK_IMPORTED_MODULE_2__["default"], - Footer: _components_Body_Footer_vue__WEBPACK_IMPORTED_MODULE_3__["default"], - Loading: _components_Misc_Loading_vue__WEBPACK_IMPORTED_MODULE_1__["default"] + function vuexInit () { + var options = this.$options; + // store injection + if (options.store) { + this.$store = typeof options.store === 'function' + ? options.store() + : options.store; + } else if (options.parent && options.parent.$store) { + this.$store = options.parent.$store; + } } -}); +}; -/***/ }), +var devtoolHook = + typeof window !== 'undefined' && + window.__VUE_DEVTOOLS_GLOBAL_HOOK__; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Footer.vue?vue&type=script&lang=js&": -/*!**********************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Footer.vue?vue&type=script&lang=js& ***! - \**********************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +function devtoolPlugin (store) { + if (!devtoolHook) { return } -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({}); + store._devtoolHook = devtoolHook; -/***/ }), + devtoolHook.emit('vuex:init', store); -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Header/HeaderBG.vue?vue&type=script&lang=js&": -/*!*******************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Header/HeaderBG.vue?vue&type=script&lang=js& ***! - \*******************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + devtoolHook.on('vuex:travel-to-state', function (targetState) { + store.replaceState(targetState); + }); -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({}); + store.subscribe(function (mutation, state) { + devtoolHook.emit('vuex:mutation', mutation, state); + }); +} -/***/ }), +/** + * Get the first item that pass the test + * by second argument function + * + * @param {Array} list + * @param {Function} f + * @return {*} + */ +/** + * Deep copy the given object considering circular structure. + * This function caches all nested objects and its copies. + * If it detects circular structure, use cached copy to avoid infinite loop. + * + * @param {*} obj + * @param {Array} cache + * @return {*} + */ -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Header/Nav.vue?vue&type=script&lang=js&": -/*!**************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Header/Nav.vue?vue&type=script&lang=js& ***! - \**************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _NavItem_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NavItem.vue */ "./resources/js/components/Body/Header/NavItem.vue"); -/* harmony import */ var _NavIcon_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NavIcon.vue */ "./resources/js/components/Body/Header/NavIcon.vue"); -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// +/** + * forEach for object + */ +function forEachValue (obj, fn) { + Object.keys(obj).forEach(function (key) { return fn(obj[key], key); }); +} +function isObject (obj) { + return obj !== null && typeof obj === 'object' +} -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - NavItem: _NavItem_vue__WEBPACK_IMPORTED_MODULE_0__["default"], - NavIcon: _NavIcon_vue__WEBPACK_IMPORTED_MODULE_1__["default"] - } -}); +function isPromise (val) { + return val && typeof val.then === 'function' +} -/***/ }), +function assert (condition, msg) { + if (!condition) { throw new Error(("[vuex] " + msg)) } +} -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Header/NavIcon.vue?vue&type=script&lang=js&": -/*!******************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Header/NavIcon.vue?vue&type=script&lang=js& ***! - \******************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +var Module = function Module (rawModule, runtime) { + this.runtime = runtime; + this._children = Object.create(null); + this._rawModule = rawModule; + var rawState = rawModule.state; + this.state = (typeof rawState === 'function' ? rawState() : rawState) || {}; +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - Icon: { - default: "دسترسی سریع" - }, - ThemeColor: { - default: "Red" - }, - Quantity: { - default: "" - }, - IconSize: { - default: "WM-Font-20" - }, - Route: { - default: "#" - } - }, - data: function data() { - return { - aClass: 'WM-Link-' + this.ThemeColor, - spanClass: 'WM-BG-' + this.ThemeColor - }; - } -}); +var prototypeAccessors$1 = { namespaced: { configurable: true } }; -/***/ }), +prototypeAccessors$1.namespaced.get = function () { + return !!this._rawModule.namespaced +}; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Header/NavItem.vue?vue&type=script&lang=js&": -/*!******************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Header/NavItem.vue?vue&type=script&lang=js& ***! - \******************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +Module.prototype.addChild = function addChild (key, module) { + this._children[key] = module; +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - TitleFa: { - default: "دسترسی سریع" - }, - TitleEn: { - default: "Quick Link" - }, - ThemeColor: { - default: "Red" - }, - Route: { - default: "#" - } - }, - data: function data() { - return { - HoverClass: 'WM-Link-' + this.ThemeColor - }; - } // - // data() { - // return { - // Color,HoverClass - // } - // }, - // created : function ( ) { - // this.Color = 'WM-BG-' + this.ThemeColor; - // this.HoverClass = 'WM-Link-' + this.ThemeColor; - // } +Module.prototype.removeChild = function removeChild (key) { + delete this._children[key]; +}; -}); +Module.prototype.getChild = function getChild (key) { + return this._children[key] +}; -/***/ }), +Module.prototype.update = function update (rawModule) { + this._rawModule.namespaced = rawModule.namespaced; + if (rawModule.actions) { + this._rawModule.actions = rawModule.actions; + } + if (rawModule.mutations) { + this._rawModule.mutations = rawModule.mutations; + } + if (rawModule.getters) { + this._rawModule.getters = rawModule.getters; + } +}; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Charts/BarChart.vue?vue&type=script&lang=js&": -/*!**************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Charts/BarChart.vue?vue&type=script&lang=js& ***! - \**************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +Module.prototype.forEachChild = function forEachChild (fn) { + forEachValue(this._children, fn); +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var vue_chartjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-chartjs */ "./node_modules/vue-chartjs/es/index.js"); +Module.prototype.forEachGetter = function forEachGetter (fn) { + if (this._rawModule.getters) { + forEachValue(this._rawModule.getters, fn); + } +}; -/* harmony default export */ __webpack_exports__["default"] = ({ - extends: vue_chartjs__WEBPACK_IMPORTED_MODULE_0__["Bar"], - mounted: function mounted() { - this.renderChart({ - labels: ["محصولات", "نمونه کارها", "اخبار", "سفارشات", "اعضا"], - datasets: [{ - label: ' تعداد آیتم ', - data: [16, 12, 24, 8, 40], - backgroundColor: ['rgba(238, 53, 82, 0.2)', 'rgba(255, 107, 87, 0.2)', 'rgba(172, 55, 115, 0.2)', 'rgba(50, 197, 210, 0.2)', 'rgba(0, 0, 0, 0.2)'], - borderColor: ['#ee3552', '#FF6B57', '#ac3773', '#32c5d2', '#000'], - borderWidth: 1 - }] - }); +Module.prototype.forEachAction = function forEachAction (fn) { + if (this._rawModule.actions) { + forEachValue(this._rawModule.actions, fn); } -}); +}; -/***/ }), +Module.prototype.forEachMutation = function forEachMutation (fn) { + if (this._rawModule.mutations) { + forEachValue(this._rawModule.mutations, fn); + } +}; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Charts/LineChart.vue?vue&type=script&lang=js&": -/*!***************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Charts/LineChart.vue?vue&type=script&lang=js& ***! - \***************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +Object.defineProperties( Module.prototype, prototypeAccessors$1 ); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var vue_chartjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-chartjs */ "./node_modules/vue-chartjs/es/index.js"); +var ModuleCollection = function ModuleCollection (rawRootModule) { + // register root module (Vuex.Store options) + this.register([], rawRootModule, false); +}; -Chart.defaults.global.defaultFontFamily = '"B Yekan","arial"'; -Chart.defaults.global.defaultFontSize = 14; // Chart.canvas.parentNode.style.height = '600px'; +ModuleCollection.prototype.get = function get (path) { + return path.reduce(function (module, key) { + return module.getChild(key) + }, this.root) +}; -/* harmony default export */ __webpack_exports__["default"] = ({ - extends: vue_chartjs__WEBPACK_IMPORTED_MODULE_0__["Line"], - data: function data() { - return { - datacollection: { - datasets: [{ - label: ' بازدید وبسایت شما ', - borderColor: '#ee3552', - backgroundColor: '#ee3552', - fill: false, - data: [10, 25, 15, 45, 65, 15] - }, { - label: ' باز دید صفحه ی شما در ویلامال ', - borderColor: '#32c5d2', - backgroundColor: '#32c5d2', - fill: false, - data: [15, 30, 20, 10, 25, 5] - }], - labels: ['مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'] - }, - options: { - tooltips: { - borderWidth: 1, - borderColor: '#eeeeee', - titleFontStyle: 'lighter', - titleFontColor: '#000', - titleMarginBottom: 10, - bodyFontColor: '#000', - backgroundColor: '#fff', - xPadding: 16, - yPadding: 8 - }, - scales: { - yAxes: [{ - ticks: { - beginAtZero: true - }, - gridLines: { - display: true - } - }], - xAxes: [{ - gridLines: { - display: false - } - }] - }, - legend: { - display: true - }, - responsive: true, - maintainAspectRatio: false - } - }; - }, - mounted: function mounted() { - this.renderChart(this.datacollection, this.options); +ModuleCollection.prototype.getNamespace = function getNamespace (path) { + var module = this.root; + return path.reduce(function (namespace, key) { + module = module.getChild(key); + return namespace + (module.namespaced ? key + '/' : '') + }, '') +}; + +ModuleCollection.prototype.update = function update$1 (rawRootModule) { + update([], this.root, rawRootModule); +}; + +ModuleCollection.prototype.register = function register (path, rawModule, runtime) { + var this$1 = this; + if ( runtime === void 0 ) runtime = true; + + if (true) { + assertRawModule(path, rawModule); } -}); -/***/ }), + var newModule = new Module(rawModule, runtime); + if (path.length === 0) { + this.root = newModule; + } else { + var parent = this.get(path.slice(0, -1)); + parent.addChild(path[path.length - 1], newModule); + } -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Dividers/PageTitle.vue?vue&type=script&lang=js&": -/*!*****************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Dividers/PageTitle.vue?vue&type=script&lang=js& ***! - \*****************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + // register nested modules + if (rawModule.modules) { + forEachValue(rawModule.modules, function (rawChildModule, key) { + this$1.register(path.concat(key), rawChildModule, runtime); + }); + } +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - TitleFa: { - default: "عنوان بخش" - }, - TitleEn: { - default: "Part Title" - }, - ThemeColor: { - default: "Red" - }, - TitleFaClass: { - default: "WM-Color-White" +ModuleCollection.prototype.unregister = function unregister (path) { + var parent = this.get(path.slice(0, -1)); + var key = path[path.length - 1]; + if (!parent.getChild(key).runtime) { return } + + parent.removeChild(key); +}; + +function update (path, targetModule, newModule) { + if (true) { + assertRawModule(path, newModule); + } + + // update target module + targetModule.update(newModule); + + // update nested modules + if (newModule.modules) { + for (var key in newModule.modules) { + if (!targetModule.getChild(key)) { + if (true) { + console.warn( + "[vuex] trying to add a new module '" + key + "' on hot reloading, " + + 'manual reload is needed' + ); + } + return + } + update( + path.concat(key), + targetModule.getChild(key), + newModule.modules[key] + ); } - }, - data: function data() { - return { - Color: Color - }; - }, - created: function created() { - this.Color = 'WM-BG-' + this.ThemeColor; } -}); +} -/***/ }), +var functionAssert = { + assert: function (value) { return typeof value === 'function'; }, + expected: 'function' +}; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Dividers/PartTitle.vue?vue&type=script&lang=js&": -/*!*****************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Dividers/PartTitle.vue?vue&type=script&lang=js& ***! - \*****************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +var objectAssert = { + assert: function (value) { return typeof value === 'function' || + (typeof value === 'object' && typeof value.handler === 'function'); }, + expected: 'function or object with "handler" function' +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - TitleFa: { - default: "عنوان بخش" - }, - TitleEn: { - default: "Part Title" - }, - ThemeColor: { - default: "Red" - } - }, - data: function data() { - return { - Color: 'WM-BG-' + this.ThemeColor - }; - } // - // data() { - // return { - // Color, - // } - // }, - // created : function ( ) { - // this.Color = 'WM-BG-' + this.ThemeColor; - // } +var assertTypes = { + getters: functionAssert, + mutations: functionAssert, + actions: objectAssert +}; -}); +function assertRawModule (path, rawModule) { + Object.keys(assertTypes).forEach(function (key) { + if (!rawModule[key]) { return } -/***/ }), + var assertOptions = assertTypes[key]; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Inputs/ButtonShodowed.vue?vue&type=script&lang=js&": -/*!********************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Inputs/ButtonShodowed.vue?vue&type=script&lang=js& ***! - \********************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + forEachValue(rawModule[key], function (value, type) { + assert( + assertOptions.assert(value), + makeAssertionMessage(path, key, type, value, assertOptions.expected) + ); + }); + }); +} -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - BtnClass: { - default: "WM-Btn-Black" - }, - Icon: { - default: "ok" - }, - Text: { - default: "" - } - }, - data: function data() { - return { - IconClass: 'WMi-' + this.Icon - }; +function makeAssertionMessage (path, key, type, value, expected) { + var buf = key + " should be " + expected + " but \"" + key + "." + type + "\""; + if (path.length > 0) { + buf += " in module \"" + (path.join('.')) + "\""; } -}); - -/***/ }), + buf += " is " + (JSON.stringify(value)) + "."; + return buf +} -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Inputs/SelectPicker.vue?vue&type=script&lang=js&": -/*!******************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Inputs/SelectPicker.vue?vue&type=script&lang=js& ***! - \******************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +var Vue; // bind on install -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - liveSearch: { - default: true - } - }, - mounted: function mounted() { - var _this = this; +var Store = function Store (options) { + var this$1 = this; + if ( options === void 0 ) options = {}; - var $selectpicker = $(this.$el).find(".selectpicker"); - $selectpicker.selectpicker().on("changed.bs.select", function () { - return _this.$emit("change", _this.options[$selectpicker.val()]); - }); - }, - updated: function updated() { - $(this.$el).find(".selectpicker").selectpicker("refresh"); - }, - destroyed: function destroyed() { - $(this.$el).find(".selectpicker").off().selectpicker("destroy"); - }, - computed: { - options: function options() { - return [{ - value: "asdfadf", - title: "asfd", - selected: false - }, { - value: "asdfadfasdfasd", - title: "asdf", - selected: true - }]; - } + // Auto install if it is not done yet and `window` has `Vue`. + // To allow users to avoid auto-installation in some cases, + // this code should be placed here. See #731 + if (!Vue && typeof window !== 'undefined' && window.Vue) { + install(window.Vue); } -}); -/***/ }), + if (true) { + assert(Vue, "must call Vue.use(Vuex) before creating a store instance."); + assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser."); + assert(this instanceof Store, "Store must be called with the new operator."); + } -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Misc/Loading.vue?vue&type=script&lang=js&": -/*!***********************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Misc/Loading.vue?vue&type=script&lang=js& ***! - \***********************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + var plugins = options.plugins; if ( plugins === void 0 ) plugins = []; + var strict = options.strict; if ( strict === void 0 ) strict = false; -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({}); + var state = options.state; if ( state === void 0 ) state = {}; + if (typeof state === 'function') { + state = state() || {}; + } -/***/ }), + // store internal state + this._committing = false; + this._actions = Object.create(null); + this._actionSubscribers = []; + this._mutations = Object.create(null); + this._wrappedGetters = Object.create(null); + this._modules = new ModuleCollection(options); + this._modulesNamespaceMap = Object.create(null); + this._subscribers = []; + this._watcherVM = new Vue(); -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Misc/QuickLink.vue?vue&type=script&lang=js&": -/*!*************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Misc/QuickLink.vue?vue&type=script&lang=js& ***! - \*************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + // bind commit and dispatch to self + var store = this; + var ref = this; + var dispatch = ref.dispatch; + var commit = ref.commit; + this.dispatch = function boundDispatch (type, payload) { + return dispatch.call(store, type, payload) + }; + this.commit = function boundCommit (type, payload, options) { + return commit.call(store, type, payload, options) + }; -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - Counter: { - default: 0 - }, - TitleFa: { - default: "دسترسی سریع" - }, - TitleEn: { - default: "Quick Link" - }, - ThemeColor: { - default: "Red" - } - }, - data: function data() { - return { - HoverClass: 'WM-Hover-' + this.ThemeColor, - h4Class: 'WM-BG-' + this.ThemeColor - }; - } // data() { - // return { - // Color,HoverClass - // } - // }, - // - // created : function ( ) { - // this.Color = 'WM-BG-' + this.ThemeColor; - // this.HoverClass = 'WM-Hover-' + this.ThemeColor; - // } + // strict mode + this.strict = strict; -}); + // init root module. + // this also recursively registers all sub-modules + // and collects all module getters inside this._wrappedGetters + installModule(this, state, [], this._modules.root); -/***/ }), + // initialize the store vm, which is responsible for the reactivity + // (also registers _wrappedGetters as computed properties) + resetStoreVM(this, state); -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Misc/TabDropdownItem.vue?vue&type=script&lang=js&": -/*!*******************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Misc/TabDropdownItem.vue?vue&type=script&lang=js& ***! - \*******************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + // apply plugins + plugins.forEach(function (plugin) { return plugin(this$1); }); -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - TitleFa: { - default: "دسترسی سریع" - }, - TitleEn: { - default: "Title" - }, - Color: { - default: "Black" - }, - SubItems: { - type: Object, - default: function _default() { - return {}; - } - }, - TabContent: { - default: '' - }, - Status: { - default: '' - } - }, - data: function data() { - return { - aClass: 'WM-' + this.Color, - TabHref: '#' + this.TabContent, - SubItemsCount: Object.keys(this.SubItems).length - }; - }, - mounted: function mounted() { - console.log(Object.keys(this.SubItems).length); + if (Vue.config.devtools) { + devtoolPlugin(this); } -}); +}; -/***/ }), +var prototypeAccessors = { state: { configurable: true } }; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Misc/TabItem.vue?vue&type=script&lang=js&": -/*!***********************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Misc/TabItem.vue?vue&type=script&lang=js& ***! - \***********************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +prototypeAccessors.state.get = function () { + return this._vm._data.$$state +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - TitleFa: { - default: "دسترسی سریع" - }, - TitleEn: { - default: "Title" - }, - Color: { - default: "Black" - }, - TabContent: { - default: '' - }, - Status: { - default: '' - } - }, - data: function data() { - return { - aClass: 'WM-' + this.Color, - TabHref: '#' + this.TabContent - }; +prototypeAccessors.state.set = function (v) { + if (true) { + assert(false, "Use store.replaceState() to explicit replace store state."); } -}); +}; -/***/ }), +Store.prototype.commit = function commit (_type, _payload, _options) { + var this$1 = this; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Title.vue?vue&type=script&lang=js&": -/*!****************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Title.vue?vue&type=script&lang=js& ***! - \****************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + // check object-style commit + var ref = unifyObjectStyle(_type, _payload, _options); + var type = ref.type; + var payload = ref.payload; + var options = ref.options; -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - props: { - color: { - default: "hot" - }, - text: { - default: "عنوان" - }, - secondaryText: { - default: "title" - }, - helpText: { - default: null - }, - helpUrl: { - default: null + var mutation = { type: type, payload: payload }; + var entry = this._mutations[type]; + if (!entry) { + if (true) { + console.error(("[vuex] unknown mutation type: " + type)); } + return } -}); - -/***/ }), + this._withCommit(function () { + entry.forEach(function commitIterator (handler) { + handler(payload); + }); + }); + this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); }); -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/AccountBalance.vue?vue&type=script&lang=js&": -/*!********************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/AccountBalance.vue?vue&type=script&lang=js& ***! - \********************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + if ( + true && + options && options.silent + ) { + console.warn( + "[vuex] mutation type: " + type + ". Silent option has been removed. " + + 'Use the filter functionality in the vue-devtools' + ); + } +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); -// -// -// +Store.prototype.dispatch = function dispatch (_type, _payload) { + var this$1 = this; -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + // check object-style dispatch + var ref = unifyObjectStyle(_type, _payload); + var type = ref.type; + var payload = ref.payload; + + var action = { type: type, payload: payload }; + var entry = this._actions[type]; + if (!entry) { + if (true) { + console.error(("[vuex] unknown action type: " + type)); + } + return } -}); -/***/ }), + this._actionSubscribers.forEach(function (sub) { return sub(action, this$1.state); }); -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/Comments.vue?vue&type=script&lang=js&": -/*!**************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/Comments.vue?vue&type=script&lang=js& ***! - \**************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + return entry.length > 1 + ? Promise.all(entry.map(function (handler) { return handler(payload); })) + : entry[0](payload) +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); -// -// -// +Store.prototype.subscribe = function subscribe (fn) { + return genericSubscribe(fn, this._subscribers) +}; -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] - } -}); +Store.prototype.subscribeAction = function subscribeAction (fn) { + return genericSubscribe(fn, this._actionSubscribers) +}; -/***/ }), +Store.prototype.watch = function watch (getter, cb, options) { + var this$1 = this; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/CreateBusiness.vue?vue&type=script&lang=js&": -/*!********************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/CreateBusiness.vue?vue&type=script&lang=js& ***! - \********************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + if (true) { + assert(typeof getter === 'function', "store.watch only accepts a function."); + } + return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options) +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); -/* harmony import */ var _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Dividers/PartTitle.vue */ "./resources/js/components/Dividers/PartTitle.vue"); -/* harmony import */ var _components_Inputs_SelectPicker_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Inputs/SelectPicker.vue */ "./resources/js/components/Inputs/SelectPicker.vue"); -// -// -// +Store.prototype.replaceState = function replaceState (state) { + var this$1 = this; + this._withCommit(function () { + this$1._vm._data.$$state = state; + }); +}; +Store.prototype.registerModule = function registerModule (path, rawModule, options) { + if ( options === void 0 ) options = {}; -/* harmony default export */ __webpack_exports__["default"] = ({ - data: function data() { - return { - items: ["item 1", "item 2", "item 3", "item 4", "item 5"] - }; - }, - components: { - Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"], - PartTitle: _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_1__["default"], - SelectPicker: _components_Inputs_SelectPicker_vue__WEBPACK_IMPORTED_MODULE_2__["default"] + if (typeof path === 'string') { path = [path]; } + + if (true) { + assert(Array.isArray(path), "module path must be a string or an Array."); + assert(path.length > 0, 'cannot register the root module by using registerModule.'); } -}); -/***/ }), + this._modules.register(path, rawModule); + installModule(this, this.state, path, this._modules.get(path), options.preserveState); + // reset store to update getters... + resetStoreVM(this, this.state); +}; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/Home.vue?vue&type=script&lang=js&": -/*!**********************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/Home.vue?vue&type=script&lang=js& ***! - \**********************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +Store.prototype.unregisterModule = function unregisterModule (path) { + var this$1 = this; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Dividers/PartTitle.vue */ "./resources/js/components/Dividers/PartTitle.vue"); -/* harmony import */ var _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Misc/QuickLink.vue */ "./resources/js/components/Misc/QuickLink.vue"); -/* harmony import */ var _components_Charts_BarChart_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Charts/BarChart.vue */ "./resources/js/components/Charts/BarChart.vue"); -/* harmony import */ var _components_Charts_LineChart_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/Charts/LineChart.vue */ "./resources/js/components/Charts/LineChart.vue"); -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// + if (typeof path === 'string') { path = [path]; } + if (true) { + assert(Array.isArray(path), "module path must be a string or an Array."); + } + this._modules.unregister(path); + this._withCommit(function () { + var parentState = getNestedState(this$1.state, path.slice(0, -1)); + Vue.delete(parentState, path[path.length - 1]); + }); + resetStore(this); +}; +Store.prototype.hotUpdate = function hotUpdate (newOptions) { + this._modules.update(newOptions); + resetStore(this, true); +}; -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - PartTitle: _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__["default"], - QuickLink: _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_1__["default"], - BarChart: _components_Charts_BarChart_vue__WEBPACK_IMPORTED_MODULE_2__["default"], - LineChart: _components_Charts_LineChart_vue__WEBPACK_IMPORTED_MODULE_3__["default"] +Store.prototype._withCommit = function _withCommit (fn) { + var committing = this._committing; + this._committing = true; + fn(); + this._committing = committing; +}; + +Object.defineProperties( Store.prototype, prototypeAccessors ); + +function genericSubscribe (fn, subs) { + if (subs.indexOf(fn) < 0) { + subs.push(fn); } -}); + return function () { + var i = subs.indexOf(fn); + if (i > -1) { + subs.splice(i, 1); + } + } +} -/***/ }), +function resetStore (store, hot) { + store._actions = Object.create(null); + store._mutations = Object.create(null); + store._wrappedGetters = Object.create(null); + store._modulesNamespaceMap = Object.create(null); + var state = store.state; + // init all modules + installModule(store, state, [], store._modules.root, true); + // reset vm + resetStoreVM(store, state, hot); +} -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/MyBusiness.vue?vue&type=script&lang=js&": -/*!****************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/MyBusiness.vue?vue&type=script&lang=js& ***! - \****************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +function resetStoreVM (store, state, hot) { + var oldVm = store._vm; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); -// -// -// + // bind store public getters + store.getters = {}; + var wrappedGetters = store._wrappedGetters; + var computed = {}; + forEachValue(wrappedGetters, function (fn, key) { + // use computed to leverage its lazy-caching mechanism + computed[key] = function () { return fn(store); }; + Object.defineProperty(store.getters, key, { + get: function () { return store._vm[key]; }, + enumerable: true // for local getters + }); + }); -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + // use a Vue instance to store the state tree + // suppress warnings just in case the user has added + // some funky global mixins + var silent = Vue.config.silent; + Vue.config.silent = true; + store._vm = new Vue({ + data: { + $$state: state + }, + computed: computed + }); + Vue.config.silent = silent; + + // enable strict mode for new vm + if (store.strict) { + enableStrictMode(store); } -}); -/***/ }), + if (oldVm) { + if (hot) { + // dispatch changes in all subscribed watchers + // to force getter re-evaluation for hot reloading. + store._withCommit(function () { + oldVm._data.$$state = null; + }); + } + Vue.nextTick(function () { return oldVm.$destroy(); }); + } +} -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/PMs.vue?vue&type=script&lang=js&": -/*!*********************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/PMs.vue?vue&type=script&lang=js& ***! - \*********************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +function installModule (store, rootState, path, module, hot) { + var isRoot = !path.length; + var namespace = store._modules.getNamespace(path); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); -// -// -// + // register in namespace map + if (module.namespaced) { + store._modulesNamespaceMap[namespace] = module; + } -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + // set state + if (!isRoot && !hot) { + var parentState = getNestedState(rootState, path.slice(0, -1)); + var moduleName = path[path.length - 1]; + store._withCommit(function () { + Vue.set(parentState, moduleName, module.state); + }); } -}); -/***/ }), + var local = module.context = makeLocalContext(store, namespace, path); -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/Summery.vue?vue&type=script&lang=js&": -/*!*************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/Summery.vue?vue&type=script&lang=js& ***! - \*************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + module.forEachMutation(function (mutation, key) { + var namespacedType = namespace + key; + registerMutation(store, namespacedType, mutation, local); + }); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Dividers/PartTitle.vue */ "./resources/js/components/Dividers/PartTitle.vue"); -/* harmony import */ var _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Misc/QuickLink.vue */ "./resources/js/components/Misc/QuickLink.vue"); -/* harmony import */ var _components_Charts_BarChart_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Charts/BarChart.vue */ "./resources/js/components/Charts/BarChart.vue"); -/* harmony import */ var _components_Charts_LineChart_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/Charts/LineChart.vue */ "./resources/js/components/Charts/LineChart.vue"); -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// + module.forEachAction(function (action, key) { + var type = action.root ? key : namespace + key; + var handler = action.handler || action; + registerAction(store, type, handler, local); + }); + module.forEachGetter(function (getter, key) { + var namespacedType = namespace + key; + registerGetter(store, namespacedType, getter, local); + }); + module.forEachChild(function (child, key) { + installModule(store, rootState, path.concat(key), child, hot); + }); +} +/** + * make localized dispatch, commit, getters and state + * if there is no namespace, just use root ones + */ +function makeLocalContext (store, namespace, path) { + var noNamespace = namespace === ''; -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - PartTitle: _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__["default"], - QuickLink: _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_1__["default"], - BarChart: _components_Charts_BarChart_vue__WEBPACK_IMPORTED_MODULE_2__["default"], - LineChart: _components_Charts_LineChart_vue__WEBPACK_IMPORTED_MODULE_3__["default"] - } -}); + var local = { + dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) { + var args = unifyObjectStyle(_type, _payload, _options); + var payload = args.payload; + var options = args.options; + var type = args.type; -/***/ }), + if (!options || !options.root) { + type = namespace + type; + if ( true && !store._actions[type]) { + console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type)); + return + } + } -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/UserInfo.vue?vue&type=script&lang=js&": -/*!**************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/UserInfo.vue?vue&type=script&lang=js& ***! - \**************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + return store.dispatch(type, payload) + }, -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); -// -// -// -// + commit: noNamespace ? store.commit : function (_type, _payload, _options) { + var args = unifyObjectStyle(_type, _payload, _options); + var payload = args.payload; + var options = args.options; + var type = args.type; -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] - } -}); + if (!options || !options.root) { + type = namespace + type; + if ( true && !store._mutations[type]) { + console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type)); + return + } + } -/***/ }), + store.commit(type, payload, options); + } + }; -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/UserOrders.vue?vue&type=script&lang=js&": -/*!****************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/UserOrders.vue?vue&type=script&lang=js& ***! - \****************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + // getters and state object must be gotten lazily + // because they will be changed by vm update + Object.defineProperties(local, { + getters: { + get: noNamespace + ? function () { return store.getters; } + : function () { return makeLocalGetters(store, namespace); } + }, + state: { + get: function () { return getNestedState(store.state, path); } + } + }); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); -// -// -// -// + return local +} -/* harmony default export */ __webpack_exports__["default"] = ({ - components: { - Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] - } -}); +function makeLocalGetters (store, namespace) { + var gettersProxy = {}; -/***/ }), + var splitPos = namespace.length; + Object.keys(store.getters).forEach(function (type) { + // skip if the target getter is not match this namespace + if (type.slice(0, splitPos) !== namespace) { return } -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/WebsiteManagment.vue?vue&type=script&lang=js&": -/*!**********************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/WebsiteManagment.vue?vue&type=script&lang=js& ***! - \**********************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + // extract local getter type + var localType = type.slice(splitPos); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Dividers/PartTitle.vue */ "./resources/js/components/Dividers/PartTitle.vue"); -/* harmony import */ var _components_Dividers_PageTitle_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Dividers/PageTitle.vue */ "./resources/js/components/Dividers/PageTitle.vue"); -/* harmony import */ var _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Misc/QuickLink.vue */ "./resources/js/components/Misc/QuickLink.vue"); -/* harmony import */ var _components_Misc_TabItem_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/Misc/TabItem.vue */ "./resources/js/components/Misc/TabItem.vue"); -/* harmony import */ var _components_Misc_TabDropdownItem_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/Misc/TabDropdownItem.vue */ "./resources/js/components/Misc/TabDropdownItem.vue"); -/* harmony import */ var _components_Inputs_ButtonShodowed_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/Inputs/ButtonShodowed.vue */ "./resources/js/components/Inputs/ButtonShodowed.vue"); -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + // Add a port to the getters proxy. + // Define as getter property because + // we do not want to evaluate the getters in this time. + Object.defineProperty(gettersProxy, localType, { + get: function () { return store.getters[type]; }, + enumerable: true + }); + }); + return gettersProxy +} + +function registerMutation (store, type, handler, local) { + var entry = store._mutations[type] || (store._mutations[type] = []); + entry.push(function wrappedMutationHandler (payload) { + handler.call(store, local.state, payload); + }); +} + +function registerAction (store, type, handler, local) { + var entry = store._actions[type] || (store._actions[type] = []); + entry.push(function wrappedActionHandler (payload, cb) { + var res = handler.call(store, { + dispatch: local.dispatch, + commit: local.commit, + getters: local.getters, + state: local.state, + rootGetters: store.getters, + rootState: store.state + }, payload, cb); + if (!isPromise(res)) { + res = Promise.resolve(res); + } + if (store._devtoolHook) { + return res.catch(function (err) { + store._devtoolHook.emit('vuex:error', err); + throw err + }) + } else { + return res + } + }); +} + +function registerGetter (store, type, rawGetter, local) { + if (store._wrappedGetters[type]) { + if (true) { + console.error(("[vuex] duplicate getter key: " + type)); + } + return + } + store._wrappedGetters[type] = function wrappedGetter (store) { + return rawGetter( + local.state, // local state + local.getters, // local getters + store.state, // root state + store.getters // root getters + ) + }; +} + +function enableStrictMode (store) { + store._vm.$watch(function () { return this._data.$$state }, function () { + if (true) { + assert(store._committing, "Do not mutate vuex store state outside mutation handlers."); + } + }, { deep: true, sync: true }); +} + +function getNestedState (state, path) { + return path.length + ? path.reduce(function (state, key) { return state[key]; }, state) + : state +} + +function unifyObjectStyle (type, payload, options) { + if (isObject(type) && type.type) { + options = payload; + payload = type; + type = type.type; + } + + if (true) { + assert(typeof type === 'string', ("Expects string as the type, but found " + (typeof type) + ".")); + } + + return { type: type, payload: payload, options: options } +} + +function install (_Vue) { + if (Vue && _Vue === Vue) { + if (true) { + console.error( + '[vuex] already installed. Vue.use(Vuex) should be called only once.' + ); + } + return + } + Vue = _Vue; + applyMixin(Vue); +} + +var mapState = normalizeNamespace(function (namespace, states) { + var res = {}; + normalizeMap(states).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedState () { + var state = this.$store.state; + var getters = this.$store.getters; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapState', namespace); + if (!module) { + return + } + state = module.context.state; + getters = module.context.getters; + } + return typeof val === 'function' + ? val.call(this, state, getters) + : state[val] + }; + // mark vuex getter for devtools + res[key].vuex = true; + }); + return res +}); + +var mapMutations = normalizeNamespace(function (namespace, mutations) { + var res = {}; + normalizeMap(mutations).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedMutation () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var commit = this.$store.commit; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapMutations', namespace); + if (!module) { + return + } + commit = module.context.commit; + } + return typeof val === 'function' + ? val.apply(this, [commit].concat(args)) + : commit.apply(this.$store, [val].concat(args)) + }; + }); + return res +}); + +var mapGetters = normalizeNamespace(function (namespace, getters) { + var res = {}; + normalizeMap(getters).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + val = namespace + val; + res[key] = function mappedGetter () { + if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) { + return + } + if ( true && !(val in this.$store.getters)) { + console.error(("[vuex] unknown getter: " + val)); + return + } + return this.$store.getters[val] + }; + // mark vuex getter for devtools + res[key].vuex = true; + }); + return res +}); + +var mapActions = normalizeNamespace(function (namespace, actions) { + var res = {}; + normalizeMap(actions).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedAction () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var dispatch = this.$store.dispatch; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapActions', namespace); + if (!module) { + return + } + dispatch = module.context.dispatch; + } + return typeof val === 'function' + ? val.apply(this, [dispatch].concat(args)) + : dispatch.apply(this.$store, [val].concat(args)) + }; + }); + return res +}); + +var createNamespacedHelpers = function (namespace) { return ({ + mapState: mapState.bind(null, namespace), + mapGetters: mapGetters.bind(null, namespace), + mapMutations: mapMutations.bind(null, namespace), + mapActions: mapActions.bind(null, namespace) +}); }; + +function normalizeMap (map) { + return Array.isArray(map) + ? map.map(function (key) { return ({ key: key, val: key }); }) + : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); }) +} + +function normalizeNamespace (fn) { + return function (namespace, map) { + if (typeof namespace !== 'string') { + map = namespace; + namespace = ''; + } else if (namespace.charAt(namespace.length - 1) !== '/') { + namespace += '/'; + } + return fn(namespace, map) + } +} + +function getModuleByNamespace (store, helper, namespace) { + var module = store._modulesNamespaceMap[namespace]; + if ( true && !module) { + console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace)); + } + return module +} + +var index_esm = { + Store: Store, + install: install, + version: '3.0.1', + mapState: mapState, + mapMutations: mapMutations, + mapGetters: mapGetters, + mapActions: mapActions, + createNamespacedHelpers: createNamespacedHelpers +}; + + +/* harmony default export */ __webpack_exports__["default"] = (index_esm); + + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/App.vue?vue&type=script&lang=js&": +/*!***************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/App.vue?vue&type=script&lang=js& ***! + \***************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Body_Header_Nav_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/Body/Header/Nav.vue */ "./resources/js/components/Body/Header/Nav.vue"); +/* harmony import */ var _components_Misc_Loading_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/Misc/Loading.vue */ "./resources/js/components/Misc/Loading.vue"); +/* harmony import */ var _components_Body_Header_HeaderBG_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/Body/Header/HeaderBG.vue */ "./resources/js/components/Body/Header/HeaderBG.vue"); +/* harmony import */ var _components_Body_Footer_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/Body/Footer.vue */ "./resources/js/components/Body/Footer.vue"); +// +// // // // @@ -1171,6 +1066,35 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // // // + + + + +/* harmony default export */ __webpack_exports__["default"] = ({ + data: function data() { + return { + loadingVisible: false + }; + }, + components: { + Nav: _components_Body_Header_Nav_vue__WEBPACK_IMPORTED_MODULE_0__["default"], + HeaderBG: _components_Body_Header_HeaderBG_vue__WEBPACK_IMPORTED_MODULE_2__["default"], + Footer: _components_Body_Footer_vue__WEBPACK_IMPORTED_MODULE_3__["default"], + Loading: _components_Misc_Loading_vue__WEBPACK_IMPORTED_MODULE_1__["default"] + } +}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Footer.vue?vue&type=script&lang=js&": +/*!**********************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Footer.vue?vue&type=script&lang=js& ***! + \**********************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); // // // @@ -1207,10 +1131,38 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // // // +/* harmony default export */ __webpack_exports__["default"] = ({}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Header/HeaderBG.vue?vue&type=script&lang=js&": +/*!*******************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Header/HeaderBG.vue?vue&type=script&lang=js& ***! + \*******************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); // // // // +/* harmony default export */ __webpack_exports__["default"] = ({}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Header/Nav.vue?vue&type=script&lang=js&": +/*!**************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Header/Nav.vue?vue&type=script&lang=js& ***! + \**************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _NavItem_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NavItem.vue */ "./resources/js/components/Body/Header/NavItem.vue"); +/* harmony import */ var _NavIcon_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NavIcon.vue */ "./resources/js/components/Body/Header/NavIcon.vue"); // // // @@ -1238,6 +1190,26 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // // // + + +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + NavItem: _NavItem_vue__WEBPACK_IMPORTED_MODULE_0__["default"], + NavIcon: _NavIcon_vue__WEBPACK_IMPORTED_MODULE_1__["default"] + } +}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Header/NavIcon.vue?vue&type=script&lang=js&": +/*!******************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Header/NavIcon.vue?vue&type=script&lang=js& ***! + \******************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); // // // @@ -1245,6 +1217,43 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // // // +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + Icon: { + default: "دسترسی سریع" + }, + ThemeColor: { + default: "Red" + }, + Quantity: { + default: "" + }, + IconSize: { + default: "WM-Font-20" + }, + Route: { + default: "#" + } + }, + data: function data() { + return { + aClass: 'WM-Link-' + this.ThemeColor, + spanClass: 'WM-BG-' + this.ThemeColor + }; + } +}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Body/Header/NavItem.vue?vue&type=script&lang=js&": +/*!******************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Body/Header/NavItem.vue?vue&type=script&lang=js& ***! + \******************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); // // // @@ -1252,4143 +1261,4607 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // // // -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// - +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + TitleFa: { + default: "دسترسی سریع" + }, + TitleEn: { + default: "Quick Link" + }, + ThemeColor: { + default: "Red" + }, + Route: { + default: "#" + } + }, + data: function data() { + return { + HoverClass: 'WM-Link-' + this.ThemeColor + }; + } // + // data() { + // return { + // Color,HoverClass + // } + // }, + // created : function ( ) { + // this.Color = 'WM-BG-' + this.ThemeColor; + // this.HoverClass = 'WM-Link-' + this.ThemeColor; + // } +}); +/***/ }), +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Charts/BarChart.vue?vue&type=script&lang=js&": +/*!**************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Charts/BarChart.vue?vue&type=script&lang=js& ***! + \**************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var vue_chartjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-chartjs */ "./node_modules/vue-chartjs/es/index.js"); /* harmony default export */ __webpack_exports__["default"] = ({ - components: { - PartTitle: _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__["default"], - PageTitle: _components_Dividers_PageTitle_vue__WEBPACK_IMPORTED_MODULE_1__["default"], - QuickLink: _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_2__["default"], - TabItem: _components_Misc_TabItem_vue__WEBPACK_IMPORTED_MODULE_3__["default"], - TabDropdownItem: _components_Misc_TabDropdownItem_vue__WEBPACK_IMPORTED_MODULE_4__["default"], - ButtonShodowed: _components_Inputs_ButtonShodowed_vue__WEBPACK_IMPORTED_MODULE_5__["default"] - }, - data: function data() { - return _defineProperty({ - UserDetails: false, - UserRoles: false, - Tabs: { - MembersClub: { - Type: 'TabItem', - NameFa: ' باشگاه مشتریان ', - NameEn: 'Members Club', - Status: 'Active' - }, - SpecialForms: { - Type: 'TabDropdownItem', - NameFa: ' فرم های خاص من ', - NameEn: 'My Special Forms', - SubItems: { - Item1: { - NameFa: ' فرم تماس با ما ', - NameEn: 'Contact Us' - }, - Item2: { - NameFa: ' فرم پیش ثبت نام من ', - NameEn: 'My Pre SignUp Form' - } - } - }, - Reservation: { - Type: 'TabItem', - NameFa: ' رزرو وقت ', - NameEn: 'Reservation' - } - }, - Users: { - 1: { - Name: ' علیرضا حسنی ', - Email: 'Alireza-Hassani@outlook.com', - CellNumber: '09127004945' - }, - 4: { - Name: ' فرید ساروی ', - CellNumber: '09127476990' - }, - 27: { - Name: ' سعید خاکبازان ', - CellNumber: '09336541236' - } - } - }, "UserDetails", { - Name: ' علیرضا حسنی ', - Email: 'Alireza-Hassani@outlook.com', - CellNumber: '09127004945' + extends: vue_chartjs__WEBPACK_IMPORTED_MODULE_0__["Bar"], + mounted: function mounted() { + this.renderChart({ + labels: ["محصولات", "نمونه کارها", "اخبار", "سفارشات", "اعضا"], + datasets: [{ + label: ' تعداد آیتم ', + data: [16, 12, 24, 8, 40], + backgroundColor: ['rgba(238, 53, 82, 0.2)', 'rgba(255, 107, 87, 0.2)', 'rgba(172, 55, 115, 0.2)', 'rgba(50, 197, 210, 0.2)', 'rgba(0, 0, 0, 0.2)'], + borderColor: ['#ee3552', '#FF6B57', '#ac3773', '#32c5d2', '#000'], + borderWidth: 1 + }] }); } }); /***/ }), -/***/ "./node_modules/bootstrap-select/dist/css/bootstrap-select.css": -/*!*********************************************************************!*\ - !*** ./node_modules/bootstrap-select/dist/css/bootstrap-select.css ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - - -var content = __webpack_require__(/*! !../../../css-loader??ref--5-1!../../../postcss-loader/src??ref--5-2!./bootstrap-select.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/bootstrap-select/dist/css/bootstrap-select.css"); +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Charts/DoughnutChart.vue?vue&type=script&lang=js&": +/*!*******************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Charts/DoughnutChart.vue?vue&type=script&lang=js& ***! + \*******************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { -if(typeof content === 'string') content = [[module.i, content, '']]; +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var vue_chartjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-chartjs */ "./node_modules/vue-chartjs/es/index.js"); -var transform; -var insertInto; +/* harmony default export */ __webpack_exports__["default"] = ({ + extends: vue_chartjs__WEBPACK_IMPORTED_MODULE_0__["Doughnut"], + mounted: function mounted() { + this.renderChart({ + labels: ["محصولات", "نمونه کارها", "اخبار", "سفارشات", "اعضا"], + datasets: [{ + labels: ['Red', 'Yellow', 'Blue'], + data: [16, 12, 24, 8, 40], + backgroundColor: ['rgba(238, 53, 82, 0.2)', 'rgba(255, 107, 87, 0.2)', 'rgba(172, 55, 115, 0.2)', 'rgba(50, 197, 210, 0.2)', 'rgba(0, 0, 0, 0.2)'], + borderColor: ['#ee3552', '#FF6B57', '#ac3773', '#32c5d2', '#000'], + borderWidth: 1 + }] + }); + } +}); +/***/ }), +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Charts/LineChart.vue?vue&type=script&lang=js&": +/*!***************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Charts/LineChart.vue?vue&type=script&lang=js& ***! + \***************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { -var options = {"hmr":true} - -options.transform = transform -options.insertInto = undefined; - -var update = __webpack_require__(/*! ../../../style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var vue_chartjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-chartjs */ "./node_modules/vue-chartjs/es/index.js"); -if(content.locals) module.exports = content.locals; +Chart.defaults.global.defaultFontFamily = '"B Yekan","arial"'; +Chart.defaults.global.defaultFontSize = 14; // Chart.canvas.parentNode.style.height = '600px'; -if(false) {} +/* harmony default export */ __webpack_exports__["default"] = ({ + extends: vue_chartjs__WEBPACK_IMPORTED_MODULE_0__["Line"], + data: function data() { + return { + datacollection: { + datasets: [{ + label: ' بازدید وبسایت شما ', + borderColor: '#ee3552', + backgroundColor: '#ee3552', + fill: false, + data: [10, 25, 15, 45, 65, 15] + }, { + label: ' باز دید صفحه ی شما در ویلامال ', + borderColor: '#32c5d2', + backgroundColor: '#32c5d2', + fill: false, + data: [15, 30, 20, 10, 25, 5] + }], + labels: ['مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'] + }, + options: { + tooltips: { + borderWidth: 1, + borderColor: '#eeeeee', + titleFontStyle: 'lighter', + titleFontColor: '#000', + titleMarginBottom: 10, + bodyFontColor: '#000', + backgroundColor: '#fff', + xPadding: 16, + yPadding: 8 + }, + scales: { + yAxes: [{ + ticks: { + beginAtZero: true + }, + gridLines: { + display: true + } + }], + xAxes: [{ + gridLines: { + display: false + } + }] + }, + legend: { + display: true + }, + responsive: true, + maintainAspectRatio: false + } + }; + }, + mounted: function mounted() { + this.renderChart(this.datacollection, this.options); + } +}); /***/ }), -/***/ "./node_modules/bootstrap-select/dist/js/bootstrap-select.js": -/*!*******************************************************************!*\ - !*** ./node_modules/bootstrap-select/dist/js/bootstrap-select.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - * Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select) - * - * Copyright 2012-2018 SnapAppointments, LLC - * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (root === undefined && window !== undefined) root = window; - if (true) { - // AMD. Register as an anonymous module unless amdModuleId is set - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (a0) { - return (factory(a0)); - }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} -}(this, function (jQuery) { - -(function ($) { - 'use strict'; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Dividers/PageTitle.vue?vue&type=script&lang=js&": +/*!*****************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Dividers/PageTitle.vue?vue&type=script&lang=js& ***! + \*****************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - // Polyfill for browsers with no classList support - // Remove in v2 - if (!('classList' in document.createElement('_'))) { - (function (view) { - if (!('Element' in view)) return; +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + TitleFa: { + default: "عنوان بخش" + }, + TitleEn: { + default: "Part Title" + }, + Color: { + default: "Red" + }, + TitleFaClass: { + default: "WM-Color-White" + } + }, + data: function data() { + return { + Color: Color + }; + } +}); - var classListProp = 'classList', - protoProp = 'prototype', - elemCtrProto = view.Element[protoProp], - objCtr = Object, - classListGetter = function () { - var $elem = $(this); +/***/ }), - return { - add: function (classes) { - return $elem.addClass(classes); - }, - remove: function (classes) { - return $elem.removeClass(classes); - }, - toggle: function (classes, force) { - return $elem.toggleClass(classes, force); - }, - contains: function (classes) { - return $elem.hasClass(classes); - } - } - }; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Dividers/PartTitle.vue?vue&type=script&lang=js&": +/*!*****************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Dividers/PartTitle.vue?vue&type=script&lang=js& ***! + \*****************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - if (objCtr.defineProperty) { - var classListPropDesc = { - get: classListGetter, - enumerable: true, - configurable: true - }; - try { - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } catch (ex) { // IE 8 doesn't support enumerable:true - // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36 - // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected - if (ex.number === undefined || ex.number === -0x7FF5EC54) { - classListPropDesc.enumerable = false; - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } - } - } else if (objCtr[protoProp].__defineGetter__) { - elemCtrProto.__defineGetter__(classListProp, classListGetter); - } - }(window)); +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + TitleFa: { + default: "عنوان بخش" + }, + TitleEn: { + default: "Part Title" + }, + Color: { + default: "black" + }, + TextColor: { + default: "white--text" + } + }, + data: function data() { + return {}; } +}); - var testElement = document.createElement('_'); - - testElement.classList.toggle('c3', false); +/***/ }), - // Polyfill for IE 10 and Firefox <24, where classList.toggle does not - // support the second argument. - if (testElement.classList.contains('c3')) { - var _toggle = DOMTokenList.prototype.toggle; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Inputs/ButtonShodowed.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Inputs/ButtonShodowed.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - DOMTokenList.prototype.toggle = function (token, force) { - if (1 in arguments && !this.contains(token) === !force) { - return force; - } else { - return _toggle.call(this, token); - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + BtnClass: { + default: "WM-Btn-Black" + }, + Icon: { + default: "ok" + }, + Text: { + default: "" + } + }, + data: function data() { + return { + IconClass: 'WMi-' + this.Icon }; } +}); - testElement = null; - - // shallow array comparison - function isEqual (array1, array2) { - return array1.length === array2.length && array1.every(function (element, index) { - return element === array2[index]; - }); - }; +/***/ }), - // - if (!String.prototype.startsWith) { - (function () { - 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` - var defineProperty = (function () { - // IE 8 only supports `Object.defineProperty` on DOM elements - try { - var object = {}; - var $defineProperty = Object.defineProperty; - var result = $defineProperty(object, object, object) && $defineProperty; - } catch (error) { - } - return result; - }()); - var toString = {}.toString; - var startsWith = function (search) { - if (this == null) { - throw new TypeError(); - } - var string = String(this); - if (search && toString.call(search) == '[object RegExp]') { - throw new TypeError(); - } - var stringLength = string.length; - var searchString = String(search); - var searchLength = searchString.length; - var position = arguments.length > 1 ? arguments[1] : undefined; - // `ToInteger` - var pos = position ? Number(position) : 0; - if (pos != pos) { // better `isNaN` - pos = 0; - } - var start = Math.min(Math.max(pos, 0), stringLength); - // Avoid the `indexOf` call if no match is possible - if (searchLength + start > stringLength) { - return false; - } - var index = -1; - while (++index < searchLength) { - if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) { - return false; - } - } - return true; - }; - if (defineProperty) { - defineProperty(String.prototype, 'startsWith', { - 'value': startsWith, - 'configurable': true, - 'writable': true - }); - } else { - String.prototype.startsWith = startsWith; - } - }()); - } +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Inputs/Checkbox.vue?vue&type=script&lang=js&": +/*!**************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Inputs/Checkbox.vue?vue&type=script&lang=js& ***! + \**************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - if (!Object.keys) { - Object.keys = function ( - o, // object - k, // key - r // result array - ) { - // initialize object and result - r = []; - // iterate over object keys - for (k in o) { - // fill result array with non-prototypical keys - r.hasOwnProperty.call(o, k) && r.push(k); - } - // return result - return r; +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + ItemID: { + default: "Checkbox" + }, + ItemText: { + default: " مقدار پیش فرض " + }, + Color: { + default: "Red" + } + }, + data: function data() { + return { + IconClass: 'WMi-' + this.Icon }; } +}); - // much faster than $.val() - function getSelectValues (select) { - var result = []; - var options = select && select.options; - var opt; +/***/ }), - if (select.multiple) { - for (var i = 0, len = options.length; i < len; i++) { - opt = options[i]; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Inputs/SelectPicker.vue?vue&type=script&lang=js&": +/*!******************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Inputs/SelectPicker.vue?vue&type=script&lang=js& ***! + \******************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - if (opt.selected) { - result.push(opt.value || opt.text); - } - } - } else { - result = select.value; +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + liveSearch: { + default: true } + }, + mounted: function mounted() { + var _this = this; - return result; + var $selectpicker = $(this.$el).find(".selectpicker"); + $selectpicker.selectpicker().on("changed.bs.select", function () { + return _this.$emit("change", _this.options[$selectpicker.val()]); + }); + }, + updated: function updated() { + $(this.$el).find(".selectpicker").selectpicker("refresh"); + }, + destroyed: function destroyed() { + $(this.$el).find(".selectpicker").off().selectpicker("destroy"); + }, + computed: { + options: function options() { + return [{ + value: "asdfadf", + title: "asfd", + selected: false + }, { + value: "asdfadfasdfasd", + title: "asdf", + selected: true + }]; + } } +}); - // set data-selected on select element if the value has been programmatically selected - // prior to initialization of bootstrap-select - // * consider removing or replacing an alternative method * - var valHooks = { - useDefault: false, - _set: $.valHooks.select.set - }; - - $.valHooks.select.set = function (elem, value) { - if (value && !valHooks.useDefault) $(elem).data('selected', true); - - return valHooks._set.apply(this, arguments); - }; +/***/ }), - var changedArguments = null; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Misc/Loading.vue?vue&type=script&lang=js&": +/*!***********************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Misc/Loading.vue?vue&type=script&lang=js& ***! + \***********************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - var EventIsSupported = (function () { - try { - new Event('change'); - return true; - } catch (e) { - return false; - } - })(); +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({}); - $.fn.triggerNative = function (eventName) { - var el = this[0], - event; +/***/ }), - if (el.dispatchEvent) { // for modern browsers & IE9+ - if (EventIsSupported) { - // For modern browsers - event = new Event(eventName, { - bubbles: true - }); - } else { - // For IE since it doesn't support Event constructor - event = document.createEvent('Event'); - event.initEvent(eventName, true, false); - } +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Misc/QuickLink.vue?vue&type=script&lang=js&": +/*!*************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Misc/QuickLink.vue?vue&type=script&lang=js& ***! + \*************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - el.dispatchEvent(event); - } else if (el.fireEvent) { // for IE8 - event = document.createEventObject(); - event.eventType = eventName; - el.fireEvent('on' + eventName, event); - } else { - // fall back to jQuery.trigger - this.trigger(eventName); +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + Counter: { + default: 0 + }, + TitleFa: { + default: "دسترسی سریع" + }, + TitleEn: { + default: "Quick Link" + }, + ThemeColor: { + default: "Red" } - }; - // - - function stringSearch (li, searchString, method, normalize) { - var stringTypes = [ - 'content', - 'subtext', - 'tokens' - ], - searchSuccess = false; - - for (var i = 0; i < stringTypes.length; i++) { - var stringType = stringTypes[i], - string = li[stringType]; - - if (string) { - string = string.toString(); - - // Strip HTML tags. This isn't perfect, but it's much faster than any other method - if (stringType === 'content') { - string = string.replace(/<[^>]+>/g, ''); - } + }, + data: function data() { + return { + HoverClass: 'WM-Hover-' + this.ThemeColor, + h4Class: 'WM-BG-' + this.ThemeColor + }; + } +}); - if (normalize) string = normalizeToBase(string); - string = string.toUpperCase(); +/***/ }), - if (method === 'contains') { - searchSuccess = string.indexOf(searchString) >= 0; - } else { - searchSuccess = string.startsWith(searchString); - } +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Misc/TabDropdownItem.vue?vue&type=script&lang=js&": +/*!*******************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Misc/TabDropdownItem.vue?vue&type=script&lang=js& ***! + \*******************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - if (searchSuccess) break; +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + TitleFa: { + default: "دسترسی سریع" + }, + TitleEn: { + default: "Title" + }, + Color: { + default: "Black" + }, + SubItems: { + type: Object, + default: function _default() { + return {}; } + }, + TabContent: { + default: '' + }, + Status: { + default: '' } - - return searchSuccess; - } - - function toInteger (value) { - return parseInt(value, 10) || 0; + }, + data: function data() { + return { + aClass: 'WM-' + this.Color, + TabHref: '#' + this.TabContent, + SubItemsCount: Object.keys(this.SubItems).length + }; + }, + mounted: function mounted() { + console.log(Object.keys(this.SubItems).length); } +}); - // Borrowed from Lodash (_.deburr) - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' - }; - - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; +/***/ }), - /** Used to compose unicode character classes. */ - var rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboMarksExtendedRange = '\\u1ab0-\\u1aff', - rsComboMarksSupplementRange = '\\u1dc0-\\u1dff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Misc/TabItem.vue?vue&type=script&lang=js&": +/*!***********************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Misc/TabItem.vue?vue&type=script&lang=js& ***! + \***********************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - /** Used to compose unicode capture groups. */ - var rsCombo = '[' + rsComboRange + ']'; +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + TitleFa: { + default: "دسترسی سریع" + }, + TitleEn: { + default: "Title" + }, + Color: { + default: "Black" + }, + TabContent: { + default: '' + }, + Status: { + default: '' + }, + Quantity: { + default: 0 + } + }, + data: function data() { + return { + aClass: 'WM-' + this.Color, + TabHref: '#' + this.TabContent + }; + } +}); - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); +/***/ }), - function deburrLetter (key) { - return deburredLetters[key]; - }; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Modals/SendEmailModal.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Modals/SendEmailModal.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - function normalizeToBase (string) { - string = string.toString(); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + Color: { + default: 'grey darken-4' + } } +}); - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - - var unescapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - '`': '`' - }; +/***/ }), - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function (map) { - var escaper = function (match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped. - var source = '(?:' + Object.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function (string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Modals/SendSMSModal.vue?vue&type=script&lang=js&": +/*!******************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Modals/SendSMSModal.vue?vue&type=script&lang=js& ***! + \******************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - var htmlEscape = createEscaper(escapeMap); - var htmlUnescape = createEscaper(unescapeMap); +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + Color: { + default: 'grey darken-4' + } + } +}); - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ +/***/ }), - var keyCodeMap = { - 32: ' ', - 48: '0', - 49: '1', - 50: '2', - 51: '3', - 52: '4', - 53: '5', - 54: '6', - 55: '7', - 56: '8', - 57: '9', - 59: ';', - 65: 'A', - 66: 'B', - 67: 'C', - 68: 'D', - 69: 'E', - 70: 'F', - 71: 'G', - 72: 'H', - 73: 'I', - 74: 'J', - 75: 'K', - 76: 'L', - 77: 'M', - 78: 'N', - 79: 'O', - 80: 'P', - 81: 'Q', - 82: 'R', - 83: 'S', - 84: 'T', - 85: 'U', - 86: 'V', - 87: 'W', - 88: 'X', - 89: 'Y', - 90: 'Z', - 96: '0', - 97: '1', - 98: '2', - 99: '3', - 100: '4', - 101: '5', - 102: '6', - 103: '7', - 104: '8', - 105: '9' - }; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Modals/UserDetailsModal.vue?vue&type=script&lang=js&": +/*!**********************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Modals/UserDetailsModal.vue?vue&type=script&lang=js& ***! + \**********************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - var keyCodes = { - ESCAPE: 27, // KeyboardEvent.which value for Escape (Esc) key - ENTER: 13, // KeyboardEvent.which value for Enter key - SPACE: 32, // KeyboardEvent.which value for space key - TAB: 9, // KeyboardEvent.which value for tab key - ARROW_UP: 38, // KeyboardEvent.which value for up arrow key - ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Dividers/PartTitle.vue */ "./resources/js/components/Dividers/PartTitle.vue"); +/* harmony import */ var Vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Vuex */ "./node_modules/Vuex/dist/vuex.esm.js"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// - var version = { - success: false, - major: '3' - }; - try { - version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.'); - version.major = version.full[0]; - version.success = true; - } catch (err) { - console.warn( - 'There was an issue retrieving Bootstrap\'s version. ' + - 'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' + - 'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.', - err - ); +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + PartTitle: _Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__["default"] } +}); - var selectId = 0; +/***/ }), - var EVENT_KEY = '.bs.select'; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Modals/UserRolesModal.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Modals/UserRolesModal.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - var classNames = { - DISABLED: 'disabled', - DIVIDER: 'divider', - SHOW: 'open', - DROPUP: 'dropup', - MENU: 'dropdown-menu', - MENURIGHT: 'dropdown-menu-right', - MENULEFT: 'dropdown-menu-left', - // to-do: replace with more advanced template/customization options - BUTTONCLASS: 'btn-default', - POPOVERHEADER: 'popover-title' - } - - var Selector = { - MENU: '.' + classNames.MENU - } - - if (version.major === '4') { - classNames.DIVIDER = 'dropdown-divider'; - classNames.SHOW = 'show'; - classNames.BUTTONCLASS = 'btn-light'; - classNames.POPOVERHEADER = 'popover-header'; - } - - var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN); - var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE); - - var Selectpicker = function (element, options) { - var that = this; - - // bootstrap-select has been initialized - revert valHooks.select.set back to its original function - if (!valHooks.useDefault) { - $.valHooks.select.set = valHooks._set; - valHooks.useDefault = true; +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + Color: { + default: 'grey darken-4' } - - this.$element = $(element); - this.$newElement = null; - this.$button = null; - this.$menu = null; - this.options = options; - this.selectpicker = { - main: { - // store originalIndex (key) and newIndex (value) in this.selectpicker.main.map.newIndex for fast accessibility - // allows us to do this.main.elements[this.selectpicker.main.map.newIndex[index]] to select an element based on the originalIndex - map: { - newIndex: {}, - originalIndex: {} - } - }, - current: { - map: {} - }, // current changes if a search is in progress - search: { - map: {} - }, - view: {}, - keydown: { - keyHistory: '', - resetKeyHistory: { - start: function () { - return setTimeout(function () { - that.selectpicker.keydown.keyHistory = ''; - }, 800); - } + }, + data: function data() { + return { + Permissions: { + 'BusinessItem': { + Name: ' کالاها و خدمات ', + Icon: 'WMi-dropbox', + Color: 'WM-Color-Red' + }, + 'News': { + Name: ' اخبار ', + Icon: 'WMi-rss', + Color: 'WM-Color-Orange' + }, + 'Portfolio': { + Name: ' نمونه کار ها ', + Icon: 'WMi-picture', + Color: 'WM-Color-Purple' } } }; - // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a - // data-attribute) - if (this.options.title === null) { - this.options.title = this.$element.attr('title'); - } - - // Format window padding - var winPad = this.options.windowPadding; - if (typeof winPad === 'number') { - this.options.windowPadding = [winPad, winPad, winPad, winPad]; - } - - // Expose public methods - this.val = Selectpicker.prototype.val; - this.render = Selectpicker.prototype.render; - this.refresh = Selectpicker.prototype.refresh; - this.setStyle = Selectpicker.prototype.setStyle; - this.selectAll = Selectpicker.prototype.selectAll; - this.deselectAll = Selectpicker.prototype.deselectAll; - this.destroy = Selectpicker.prototype.destroy; - this.remove = Selectpicker.prototype.remove; - this.show = Selectpicker.prototype.show; - this.hide = Selectpicker.prototype.hide; - - this.init(); - }; + } +}); - Selectpicker.VERSION = '1.13.5'; +/***/ }), - Selectpicker.BootstrapVersion = version.major; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/Title.vue?vue&type=script&lang=js&": +/*!****************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/Title.vue?vue&type=script&lang=js& ***! + \****************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. - Selectpicker.DEFAULTS = { - noneSelectedText: 'Nothing selected', - noneResultsText: 'No results matched {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? '{0} item selected' : '{0} items selected'; +"use strict"; +__webpack_require__.r(__webpack_exports__); +// +// +// +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + color: { + default: "hot" }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', - (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' - ]; + text: { + default: "عنوان" }, - selectAllText: 'Select All', - deselectAllText: 'Deselect All', - doneButton: false, - doneButtonText: 'Close', - multipleSeparator: ', ', - styleBase: 'btn', - style: classNames.BUTTONCLASS, - size: 'auto', - title: null, - selectedTextFormat: 'values', - width: false, - container: false, - hideDisabled: false, - showSubtext: false, - showIcon: true, - showContent: true, - dropupAuto: true, - header: false, - liveSearch: false, - liveSearchPlaceholder: null, - liveSearchNormalize: false, - liveSearchStyle: 'contains', - actionsBox: false, - iconBase: 'glyphicon', - tickIcon: 'glyphicon-ok', - showTick: false, - template: { - caret: '' + secondaryText: { + default: "title" }, - maxOptions: false, - mobile: false, - selectOnTab: false, - dropdownAlignRight: false, - windowPadding: 0, - virtualScroll: 600, - display: false - }; - - if (version.major === '4') { - Selectpicker.DEFAULTS.style = 'btn-light'; - Selectpicker.DEFAULTS.iconBase = ''; - Selectpicker.DEFAULTS.tickIcon = 'bs-ok-default'; + helpText: { + default: null + }, + helpUrl: { + default: null + } } +}); - Selectpicker.prototype = { +/***/ }), - constructor: Selectpicker, +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/AccountBalance.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/AccountBalance.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - init: function () { - var that = this, - id = this.$element.attr('id'); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); +// +// +// - this.selectId = selectId++; +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + } +}); - this.$element.addClass('bs-select-hidden'); +/***/ }), - this.multiple = this.$element.prop('multiple'); - this.autofocus = this.$element.prop('autofocus'); - this.$newElement = this.createDropdown(); - this.createLi(); - this.$element - .after(this.$newElement) - .prependTo(this.$newElement); - this.$button = this.$newElement.children('button'); - this.$menu = this.$newElement.children(Selector.MENU); - this.$menuInner = this.$menu.children('.inner'); - this.$searchbox = this.$menu.find('input'); +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/Comments.vue?vue&type=script&lang=js&": +/*!**************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/Comments.vue?vue&type=script&lang=js& ***! + \**************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - this.$element.removeClass('bs-select-hidden'); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); +// +// +// - if (this.options.dropdownAlignRight === true) this.$menu.addClass(classNames.MENURIGHT); +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + } +}); - if (typeof id !== 'undefined') { - this.$button.attr('data-id', id); - } +/***/ }), - this.checkDisabled(); - this.clickListener(); - if (this.options.liveSearch) this.liveSearchListener(); - this.render(); - this.setStyle(); - this.setWidth(); - if (this.options.container) { - this.selectPosition(); - } else { - this.$element.on('hide' + EVENT_KEY, function () { - if (that.isVirtual()) { - // empty menu on close - var menuInner = that.$menuInner[0], - emptyMenu = menuInner.firstChild.cloneNode(false); +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/CreateBusiness.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/CreateBusiness.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = '' - menuInner.replaceChild(emptyMenu, menuInner.firstChild); - menuInner.scrollTop = 0; - } - }); - } - this.$menu.data('this', this); - this.$newElement.data('this', this); - if (this.options.mobile) this.mobile(); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); +/* harmony import */ var _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Dividers/PartTitle.vue */ "./resources/js/components/Dividers/PartTitle.vue"); +/* harmony import */ var _components_Inputs_SelectPicker_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Inputs/SelectPicker.vue */ "./resources/js/components/Inputs/SelectPicker.vue"); +// +// +// - this.$newElement.on({ - 'hide.bs.dropdown': function (e) { - that.$menuInner.attr('aria-expanded', false); - that.$element.trigger('hide' + EVENT_KEY, e); - }, - 'hidden.bs.dropdown': function (e) { - that.$element.trigger('hidden' + EVENT_KEY, e); - }, - 'show.bs.dropdown': function (e) { - that.$menuInner.attr('aria-expanded', true); - that.$element.trigger('show' + EVENT_KEY, e); - }, - 'shown.bs.dropdown': function (e) { - that.$element.trigger('shown' + EVENT_KEY, e); - } - }); - if (that.$element[0].hasAttribute('required')) { - this.$element.on('invalid', function () { - that.$button.addClass('bs-invalid'); - that.$element - .on('shown' + EVENT_KEY + '.invalid', function () { - that.$element - .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened - .off('shown' + EVENT_KEY + '.invalid'); - }) - .on('rendered' + EVENT_KEY, function () { - // if select is no longer invalid, remove the bs-invalid class - if (this.validity.valid) that.$button.removeClass('bs-invalid'); - that.$element.off('rendered' + EVENT_KEY); - }); +/* harmony default export */ __webpack_exports__["default"] = ({ + data: function data() { + return { + items: ["item 1", "item 2", "item 3", "item 4", "item 5"] + }; + }, + components: { + Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"], + PartTitle: _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_1__["default"], + SelectPicker: _components_Inputs_SelectPicker_vue__WEBPACK_IMPORTED_MODULE_2__["default"] + } +}); - that.$button.on('blur' + EVENT_KEY, function () { - that.$element.focus().blur(); - that.$button.off('blur' + EVENT_KEY); - }); - }); - } +/***/ }), - setTimeout(function () { - that.$element.trigger('loaded' + EVENT_KEY); - }); - }, +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/Home.vue?vue&type=script&lang=js&": +/*!**********************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/Home.vue?vue&type=script&lang=js& ***! + \**********************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - createDropdown: function () { - // Options - // If we are multiple or showTick option is set, then add the show-tick class - var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '', - autofocus = this.autofocus ? ' autofocus' : ''; +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Dividers/PartTitle.vue */ "./resources/js/components/Dividers/PartTitle.vue"); +/* harmony import */ var _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Misc/QuickLink.vue */ "./resources/js/components/Misc/QuickLink.vue"); +/* harmony import */ var _components_Charts_BarChart_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Charts/BarChart.vue */ "./resources/js/components/Charts/BarChart.vue"); +/* harmony import */ var _components_Charts_LineChart_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/Charts/LineChart.vue */ "./resources/js/components/Charts/LineChart.vue"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// - // Elements - var drop, - header = '', - searchbox = '', - actionsbox = '', - donebutton = ''; - if (this.options.header) { - header = - '
' + - '' + - this.options.header + - '
'; - } - if (this.options.liveSearch) { - searchbox = - ''; - } - if (this.multiple && this.options.actionsBox) { - actionsbox = - '
' + - '
' + - '' + - '' + - '
' + - '
'; - } +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + PartTitle: _components_Dividers_PartTitle_vue__WEBPACK_IMPORTED_MODULE_0__["default"], + QuickLink: _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_1__["default"], + BarChart: _components_Charts_BarChart_vue__WEBPACK_IMPORTED_MODULE_2__["default"], + LineChart: _components_Charts_LineChart_vue__WEBPACK_IMPORTED_MODULE_3__["default"] + } +}); - if (this.multiple && this.options.doneButton) { - donebutton = - '
' + - '
' + - '' + - '
' + - '
'; - } +/***/ }), - drop = - ''; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/MyBusiness.vue?vue&type=script&lang=js&": +/*!****************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/MyBusiness.vue?vue&type=script&lang=js& ***! + \****************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - return $(drop); - }, +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); +// +// +// - setPositionData: function () { - this.selectpicker.view.canHighlight = []; +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + } +}); - for (var i = 0; i < this.selectpicker.current.data.length; i++) { - var li = this.selectpicker.current.data[i], - canHighlight = true; +/***/ }), - if (li.type === 'divider') { - canHighlight = false; - li.height = this.sizeInfo.dividerHeight; - } else if (li.type === 'optgroup-label') { - canHighlight = false; - li.height = this.sizeInfo.dropdownHeaderHeight; - } else { - li.height = this.sizeInfo.liHeight; - } +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/Order/Management.vue?vue&type=script&lang=js&": +/*!**********************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/Order/Management.vue?vue&type=script&lang=js& ***! + \**********************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - if (li.disabled) canHighlight = false; +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../components/Misc/QuickLink.vue */ "./resources/js/components/Misc/QuickLink.vue"); +/* harmony import */ var _components_Misc_TabItem_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/Misc/TabItem.vue */ "./resources/js/components/Misc/TabItem.vue"); +/* harmony import */ var _components_Misc_TabDropdownItem_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/Misc/TabDropdownItem.vue */ "./resources/js/components/Misc/TabDropdownItem.vue"); +/* harmony import */ var _components_Charts_DoughnutChart_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/Charts/DoughnutChart.vue */ "./resources/js/components/Charts/DoughnutChart.vue"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// - this.selectpicker.view.canHighlight.push(canHighlight); - li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height; + + +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + QuickLink: _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_0__["default"], + TabItem: _components_Misc_TabItem_vue__WEBPACK_IMPORTED_MODULE_1__["default"], + TabDropdownItem: _components_Misc_TabDropdownItem_vue__WEBPACK_IMPORTED_MODULE_2__["default"], + DoughnutChart: _components_Charts_DoughnutChart_vue__WEBPACK_IMPORTED_MODULE_3__["default"] + }, + data: function data() { + return { + date: new Date().toISOString().substr(0, 10), + DateFilterAfter: false, + DateFilterBefore: false, + Tabs: { + OngoingOrders: { + Type: 'TabItem', + NameFa: ' سفارشات در حال انجام ', + NameEn: ' Ongoing Orders ', + Status: 'Active', + Quantity: 5 + }, + CompletedOrders: { + Type: 'TabItem', + NameFa: ' سفارشات انجام شده ', + NameEn: ' Completed Orders ', + Quantity: 42 + } } - }, + }; + } +}); - isVirtual: function () { - return (this.options.virtualScroll !== false) && (this.selectpicker.main.elements.length >= this.options.virtualScroll) || this.options.virtualScroll === true; - }, +/***/ }), - createView: function (isSearching, scrollTop) { - scrollTop = scrollTop || 0; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/PMs.vue?vue&type=script&lang=js&": +/*!*********************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/PMs.vue?vue&type=script&lang=js& ***! + \*********************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - var that = this; +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); +// +// +// - this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main; +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + } +}); - var active = []; - var selected; - var prevActive; +/***/ }), - this.setPositionData(); +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/Summery.vue?vue&type=script&lang=js&": +/*!*************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/Summery.vue?vue&type=script&lang=js& ***! + \*************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - scroll(scrollTop, true); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Misc/QuickLink.vue */ "./resources/js/components/Misc/QuickLink.vue"); +/* harmony import */ var _components_Charts_BarChart_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Charts/BarChart.vue */ "./resources/js/components/Charts/BarChart.vue"); +/* harmony import */ var _components_Charts_LineChart_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Charts/LineChart.vue */ "./resources/js/components/Charts/LineChart.vue"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// - this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) { - if (!that.noScroll) scroll(this.scrollTop, updateValue); - that.noScroll = false; - }); - function scroll (scrollTop, init) { - var size = that.selectpicker.current.elements.length, - chunks = [], - chunkSize, - chunkCount, - firstChunk, - lastChunk, - currentChunk, - prevPositions, - positionIsDifferent, - previousElements, - menuIsDifferent = true, - isVirtual = that.isVirtual(); - that.selectpicker.view.scrollTop = scrollTop; +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + QuickLink: _components_Misc_QuickLink_vue__WEBPACK_IMPORTED_MODULE_0__["default"], + BarChart: _components_Charts_BarChart_vue__WEBPACK_IMPORTED_MODULE_1__["default"], + LineChart: _components_Charts_LineChart_vue__WEBPACK_IMPORTED_MODULE_2__["default"] + } +}); - if (isVirtual === true) { - // if an option that is encountered that is wider than the current menu width, update the menu width accordingly - if (that.sizeInfo.hasScrollBar && that.$menu[0].offsetWidth > that.sizeInfo.totalMenuWidth) { - that.sizeInfo.menuWidth = that.$menu[0].offsetWidth; - that.sizeInfo.totalMenuWidth = that.sizeInfo.menuWidth + that.sizeInfo.scrollBarWidth; - that.$menu.css('min-width', that.sizeInfo.menuWidth); - } - } +/***/ }), - chunkSize = Math.ceil(that.sizeInfo.menuInnerHeight / that.sizeInfo.liHeight * 1.5); // number of options in a chunk - chunkCount = Math.round(size / chunkSize) || 1; // number of chunks +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/UserInfo.vue?vue&type=script&lang=js&": +/*!**************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/UserInfo.vue?vue&type=script&lang=js& ***! + \**************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - for (var i = 0; i < chunkCount; i++) { - var endOfChunk = (i + 1) * chunkSize; +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); +// +// +// +// - if (i === chunkCount - 1) { - endOfChunk = size; - } +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + } +}); - chunks[i] = [ - (i) * chunkSize + (!i ? 0 : 1), - endOfChunk - ]; +/***/ }), - if (!size) break; +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/UserOrders.vue?vue&type=script&lang=js&": +/*!****************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/UserOrders.vue?vue&type=script&lang=js& ***! + \****************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - if (currentChunk === undefined && scrollTop <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) { - currentChunk = i; - } - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Title.vue */ "./resources/js/components/Title.vue"); +// +// +// +// - if (currentChunk === undefined) currentChunk = 0; +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + Title: _components_Title_vue__WEBPACK_IMPORTED_MODULE_0__["default"] + } +}); - prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1]; +/***/ }), - // always display previous, current, and next chunks - firstChunk = Math.max(0, currentChunk - 1); - lastChunk = Math.min(chunkCount - 1, currentChunk + 1); +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/views/Website/Management.vue?vue&type=script&lang=js&": +/*!************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/views/Website/Management.vue?vue&type=script&lang=js& ***! + \************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - that.selectpicker.view.position0 = Math.max(0, chunks[firstChunk][0]) || 0; - that.selectpicker.view.position1 = Math.min(size, chunks[lastChunk][1]) || 0; +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_Misc_TabItem_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../components/Misc/TabItem.vue */ "./resources/js/components/Misc/TabItem.vue"); +/* harmony import */ var _components_Misc_TabDropdownItem_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/Misc/TabDropdownItem.vue */ "./resources/js/components/Misc/TabDropdownItem.vue"); +/* harmony import */ var _components_Modals_UserDetailsModal_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/Modals/UserDetailsModal.vue */ "./resources/js/components/Modals/UserDetailsModal.vue"); +/* harmony import */ var _components_Modals_UserRolesModal_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/Modals/UserRolesModal.vue */ "./resources/js/components/Modals/UserRolesModal.vue"); +/* harmony import */ var _components_Modals_SendEmailModal_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/Modals/SendEmailModal.vue */ "./resources/js/components/Modals/SendEmailModal.vue"); +/* harmony import */ var _components_Modals_SendSMSModal_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/Modals/SendSMSModal.vue */ "./resources/js/components/Modals/SendSMSModal.vue"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// - positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1; - if (that.activeIndex !== undefined) { - prevActive = that.selectpicker.current.elements[that.selectpicker.current.map.newIndex[that.prevActiveIndex]]; - active = that.selectpicker.current.elements[that.selectpicker.current.map.newIndex[that.activeIndex]]; - selected = that.selectpicker.current.elements[that.selectpicker.current.map.newIndex[that.selectedIndex]]; - if (init) { - if (that.activeIndex !== that.selectedIndex) { - active.classList.remove('active'); - if (active.firstChild) active.firstChild.classList.remove('active'); - } - that.activeIndex = undefined; - } - if (that.activeIndex && that.activeIndex !== that.selectedIndex && selected && selected.length) { - selected.classList.remove('active'); - if (selected.firstChild) selected.firstChild.classList.remove('active'); + + +/* harmony default export */ __webpack_exports__["default"] = ({ + components: { + TabItem: _components_Misc_TabItem_vue__WEBPACK_IMPORTED_MODULE_0__["default"], + TabDropdownItem: _components_Misc_TabDropdownItem_vue__WEBPACK_IMPORTED_MODULE_1__["default"], + UserDetailsModal: _components_Modals_UserDetailsModal_vue__WEBPACK_IMPORTED_MODULE_2__["default"], + UserRolesModal: _components_Modals_UserRolesModal_vue__WEBPACK_IMPORTED_MODULE_3__["default"], + SendEmailModal: _components_Modals_SendEmailModal_vue__WEBPACK_IMPORTED_MODULE_4__["default"], + SendSMSModal: _components_Modals_SendSMSModal_vue__WEBPACK_IMPORTED_MODULE_5__["default"] + }, + data: function data() { + return { + date: new Date().toISOString().substr(0, 10), + DateFilterAfter: false, + DateFilterBefore: false, + Tabs: { + MembersClub: { + Type: 'TabItem', + NameFa: ' باشگاه مشتریان ', + NameEn: 'Members Club', + Status: 'Active' + }, + SpecialForms: { + Type: 'TabDropdownItem', + NameFa: ' فرم های خاص من ', + NameEn: 'My Special Forms', + SubItems: { + Item1: { + NameFa: ' فرم تماس با ما ', + NameEn: 'Contact Us' + }, + Item2: { + NameFa: ' فرم پیش ثبت نام من ', + NameEn: 'My Pre SignUp Form' + } } + }, + Reservation: { + Type: 'TabItem', + NameFa: ' رزرو وقت ', + NameEn: 'Reservation' } - - if (that.prevActiveIndex !== undefined && that.prevActiveIndex !== that.activeIndex && that.prevActiveIndex !== that.selectedIndex && prevActive && prevActive.length) { - prevActive.classList.remove('active'); - if (prevActive.firstChild) prevActive.firstChild.classList.remove('active'); + }, + Users: { + 1: { + Name: ' علیرضا حسنی ', + Email: 'Alireza-Hassani@outlook.com', + CellNumber: '09127004945' + }, + 4: { + Name: ' فرید ساروی ', + CellNumber: '09127476990' + }, + 27: { + Name: ' سعید خاکبازان ', + CellNumber: '09336541236' } + } + }; + } +}); - if (init || positionIsDifferent) { - previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : []; +/***/ }), - that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1); +/***/ "./node_modules/bootstrap-select/dist/css/bootstrap-select.css": +/*!*********************************************************************!*\ + !*** ./node_modules/bootstrap-select/dist/css/bootstrap-select.css ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - that.setOptionStatus(); - // if searching, check to make sure the list has actually been updated before updating DOM - // this prevents unnecessary repaints - if (isSearching || (isVirtual === false && init)) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements); +var content = __webpack_require__(/*! !../../../css-loader??ref--5-1!../../../postcss-loader/src??ref--5-2!./bootstrap-select.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/bootstrap-select/dist/css/bootstrap-select.css"); - // if virtual scroll is disabled and not searching, - // menu should never need to be updated more than once - if ((init || isVirtual === true) && menuIsDifferent) { - var menuInner = that.$menuInner[0], - menuFragment = document.createDocumentFragment(), - emptyMenu = menuInner.firstChild.cloneNode(false), - marginTop, - marginBottom, - elements = isVirtual === true ? that.selectpicker.view.visibleElements : that.selectpicker.current.elements; +if(typeof content === 'string') content = [[module.i, content, '']]; - // replace the existing UL with an empty one - this is faster than $.empty() - menuInner.replaceChild(emptyMenu, menuInner.firstChild); +var transform; +var insertInto; - for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) { - menuFragment.appendChild(elements[i]); - } - if (isVirtual === true) { - marginTop = (that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position); - marginBottom = (that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position); - menuInner.firstChild.style.marginTop = marginTop + 'px'; - menuInner.firstChild.style.marginBottom = marginBottom + 'px'; - } +var options = {"hmr":true} - menuInner.firstChild.appendChild(menuFragment); - } - } +options.transform = transform +options.insertInto = undefined; - that.prevActiveIndex = that.activeIndex; +var update = __webpack_require__(/*! ../../../style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); - if (!that.options.liveSearch) { - that.$menuInner.focus(); - } else if (isSearching && init) { - var index = 0, - newActive; +if(content.locals) module.exports = content.locals; - if (!that.selectpicker.view.canHighlight[index]) { - index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true); - } +if(false) {} - newActive = that.selectpicker.view.visibleElements[index]; +/***/ }), - if (that.selectpicker.view.currentActive) { - that.selectpicker.view.currentActive.classList.remove('active'); - if (that.selectpicker.view.currentActive.firstChild) that.selectpicker.view.currentActive.firstChild.classList.remove('active'); - } +/***/ "./node_modules/bootstrap-select/dist/js/bootstrap-select.js": +/*!*******************************************************************!*\ + !*** ./node_modules/bootstrap-select/dist/js/bootstrap-select.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - if (newActive) { - newActive.classList.add('active'); - if (newActive.firstChild) newActive.firstChild.classList.add('active'); - } - - that.activeIndex = that.selectpicker.current.map.originalIndex[index]; - } - } +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select) + * + * Copyright 2012-2018 SnapAppointments, LLC + * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) + */ - $(window) - .off('resize' + EVENT_KEY + '.' + this.selectId + '.createView') - .on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () { - var isActive = that.$newElement.hasClass(classNames.SHOW); +(function (root, factory) { + if (root === undefined && window !== undefined) root = window; + if (true) { + // AMD. Register as an anonymous module unless amdModuleId is set + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (a0) { + return (factory(a0)); + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} +}(this, function (jQuery) { - if (isActive) scroll(that.$menuInner[0].scrollTop); - }); - }, +(function ($) { + 'use strict'; - createLi: function () { - var that = this, - mainElements = [], - hiddenOptions = {}, - widestOption, - availableOptionsCount = 0, - widestOptionLength = 0, - mainData = [], - optID = 0, - headerIndex = 0, - liIndex = -1; // increment liIndex whenever a new
  • element is created to ensure newIndex is correct + // Polyfill for browsers with no classList support + // Remove in v2 + if (!('classList' in document.createElement('_'))) { + (function (view) { + if (!('Element' in view)) return; - if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option'); + var classListProp = 'classList', + protoProp = 'prototype', + elemCtrProto = view.Element[protoProp], + objCtr = Object, + classListGetter = function () { + var $elem = $(this); - var elementTemplates = { - span: document.createElement('span'), - subtext: document.createElement('small'), - a: document.createElement('a'), - li: document.createElement('li'), - whitespace: document.createTextNode('\u00A0') - }, - checkMark, - fragment = document.createDocumentFragment(); + return { + add: function (classes) { + return $elem.addClass(classes); + }, + remove: function (classes) { + return $elem.removeClass(classes); + }, + toggle: function (classes, force) { + return $elem.toggleClass(classes, force); + }, + contains: function (classes) { + return $elem.hasClass(classes); + } + } + }; - if (that.options.showTick || that.multiple) { - checkMark = elementTemplates.span.cloneNode(false); - checkMark.className = that.options.iconBase + ' ' + that.options.tickIcon + ' check-mark'; - elementTemplates.a.appendChild(checkMark); + if (objCtr.defineProperty) { + var classListPropDesc = { + get: classListGetter, + enumerable: true, + configurable: true + }; + try { + objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); + } catch (ex) { // IE 8 doesn't support enumerable:true + // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36 + // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected + if (ex.number === undefined || ex.number === -0x7FF5EC54) { + classListPropDesc.enumerable = false; + objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); + } + } + } else if (objCtr[protoProp].__defineGetter__) { + elemCtrProto.__defineGetter__(classListProp, classListGetter); } + }(window)); + } - elementTemplates.a.setAttribute('role', 'option'); - - elementTemplates.subtext.className = 'text-muted'; - - elementTemplates.text = elementTemplates.span.cloneNode(false); - elementTemplates.text.className = 'text'; + var testElement = document.createElement('_'); - // Helper functions - /** - * @param content - * @param [classes] - * @param [optgroup] - * @returns {HTMLElement} - */ - var generateLI = function (content, classes, optgroup) { - var li = elementTemplates.li.cloneNode(false); + testElement.classList.toggle('c3', false); - if (content) { - if (content.nodeType === 1 || content.nodeType === 11) { - li.appendChild(content); - } else { - li.innerHTML = content; - } - } + // Polyfill for IE 10 and Firefox <24, where classList.toggle does not + // support the second argument. + if (testElement.classList.contains('c3')) { + var _toggle = DOMTokenList.prototype.toggle; - if (typeof classes !== 'undefined' && classes !== '') li.className = classes; - if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup); + DOMTokenList.prototype.toggle = function (token, force) { + if (1 in arguments && !this.contains(token) === !force) { + return force; + } else { + return _toggle.call(this, token); + } + }; + } - return li; - }; + testElement = null; - /** - * @param text - * @param [classes] - * @param [inline] - * @returns {string} - */ - var generateA = function (text, classes, inline) { - var a = elementTemplates.a.cloneNode(true); + // shallow array comparison + function isEqual (array1, array2) { + return array1.length === array2.length && array1.every(function (element, index) { + return element === array2[index]; + }); + }; - if (text) { - if (text.nodeType === 11) { - a.appendChild(text); - } else { - a.insertAdjacentHTML('beforeend', text); + // + if (!String.prototype.startsWith) { + (function () { + 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` + var defineProperty = (function () { + // IE 8 only supports `Object.defineProperty` on DOM elements + try { + var object = {}; + var $defineProperty = Object.defineProperty; + var result = $defineProperty(object, object, object) && $defineProperty; + } catch (error) { + } + return result; + }()); + var toString = {}.toString; + var startsWith = function (search) { + if (this == null) { + throw new TypeError(); + } + var string = String(this); + if (search && toString.call(search) == '[object RegExp]') { + throw new TypeError(); + } + var stringLength = string.length; + var searchString = String(search); + var searchLength = searchString.length; + var position = arguments.length > 1 ? arguments[1] : undefined; + // `ToInteger` + var pos = position ? Number(position) : 0; + if (pos != pos) { // better `isNaN` + pos = 0; + } + var start = Math.min(Math.max(pos, 0), stringLength); + // Avoid the `indexOf` call if no match is possible + if (searchLength + start > stringLength) { + return false; + } + var index = -1; + while (++index < searchLength) { + if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) { + return false; } } - - if (typeof classes !== 'undefined' && classes !== '') a.className = classes; - if (version.major === '4') a.classList.add('dropdown-item'); - if (inline) a.setAttribute('style', inline); - - return a; + return true; }; + if (defineProperty) { + defineProperty(String.prototype, 'startsWith', { + 'value': startsWith, + 'configurable': true, + 'writable': true + }); + } else { + String.prototype.startsWith = startsWith; + } + }()); + } - var generateText = function (options) { - var textElement = elementTemplates.text.cloneNode(false), - optionSubtextElement, - optionIconElement; - - if (options.optionContent) { - textElement.innerHTML = options.optionContent; - } else { - textElement.textContent = options.text; - - if (options.optionIcon) { - var whitespace = elementTemplates.whitespace.cloneNode(false); + if (!Object.keys) { + Object.keys = function ( + o, // object + k, // key + r // result array + ) { + // initialize object and result + r = []; + // iterate over object keys + for (k in o) { + // fill result array with non-prototypical keys + r.hasOwnProperty.call(o, k) && r.push(k); + } + // return result + return r; + }; + } - optionIconElement = elementTemplates.span.cloneNode(false); - optionIconElement.className = that.options.iconBase + ' ' + options.optionIcon; + // much faster than $.val() + function getSelectValues (select) { + var result = []; + var options = select && select.options; + var opt; - fragment.appendChild(optionIconElement); - fragment.appendChild(whitespace); - } + if (select.multiple) { + for (var i = 0, len = options.length; i < len; i++) { + opt = options[i]; - if (options.optionSubtext) { - optionSubtextElement = elementTemplates.subtext.cloneNode(false); - optionSubtextElement.innerHTML = options.optionSubtext; - textElement.appendChild(optionSubtextElement); - } + if (opt.selected) { + result.push(opt.value || opt.text); } + } + } else { + result = select.value; + } - fragment.appendChild(textElement); - - return fragment; - }; - - var generateLabel = function (options) { - var labelTextElement = elementTemplates.text.cloneNode(false), - labelSubtextElement, - labelIconElement; + return result; + } - labelTextElement.innerHTML = options.labelEscaped; + // set data-selected on select element if the value has been programmatically selected + // prior to initialization of bootstrap-select + // * consider removing or replacing an alternative method * + var valHooks = { + useDefault: false, + _set: $.valHooks.select.set + }; - if (options.labelIcon) { - var whitespace = elementTemplates.whitespace.cloneNode(false); + $.valHooks.select.set = function (elem, value) { + if (value && !valHooks.useDefault) $(elem).data('selected', true); - labelIconElement = elementTemplates.span.cloneNode(false); - labelIconElement.className = that.options.iconBase + ' ' + options.labelIcon; + return valHooks._set.apply(this, arguments); + }; - fragment.appendChild(labelIconElement); - fragment.appendChild(whitespace); - } + var changedArguments = null; - if (options.labelSubtext) { - labelSubtextElement = elementTemplates.subtext.cloneNode(false); - labelSubtextElement.textContent = options.labelSubtext; - labelTextElement.appendChild(labelSubtextElement); - } + var EventIsSupported = (function () { + try { + new Event('change'); + return true; + } catch (e) { + return false; + } + })(); - fragment.appendChild(labelTextElement); + $.fn.triggerNative = function (eventName) { + var el = this[0], + event; - return fragment; + if (el.dispatchEvent) { // for modern browsers & IE9+ + if (EventIsSupported) { + // For modern browsers + event = new Event(eventName, { + bubbles: true + }); + } else { + // For IE since it doesn't support Event constructor + event = document.createEvent('Event'); + event.initEvent(eventName, true, false); } - if (this.options.title && !this.multiple) { - // this option doesn't create a new
  • element, but does add a new option, so liIndex is decreased - // since newIndex is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended - liIndex--; + el.dispatchEvent(event); + } else if (el.fireEvent) { // for IE8 + event = document.createEventObject(); + event.eventType = eventName; + el.fireEvent('on' + eventName, event); + } else { + // fall back to jQuery.trigger + this.trigger(eventName); + } + }; + // - var element = this.$element[0], - isSelected = false, - titleNotAppended = !this.selectpicker.view.titleOption.parentNode; + function stringSearch (li, searchString, method, normalize) { + var stringTypes = [ + 'content', + 'subtext', + 'tokens' + ], + searchSuccess = false; - if (titleNotAppended) { - // Use native JS to prepend option (faster) - this.selectpicker.view.titleOption.className = 'bs-title-option'; - this.selectpicker.view.titleOption.value = ''; + for (var i = 0; i < stringTypes.length; i++) { + var stringType = stringTypes[i], + string = li[stringType]; - // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option. - // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs, - // if so, the select will have the data-selected attribute - var $opt = $(element.options[element.selectedIndex]); - isSelected = $opt.attr('selected') === undefined && this.$element.data('selected') === undefined; + if (string) { + string = string.toString(); + + // Strip HTML tags. This isn't perfect, but it's much faster than any other method + if (stringType === 'content') { + string = string.replace(/<[^>]+>/g, ''); } - if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) { - element.insertBefore(this.selectpicker.view.titleOption, element.firstChild); + if (normalize) string = normalizeToBase(string); + string = string.toUpperCase(); + + if (method === 'contains') { + searchSuccess = string.indexOf(searchString) >= 0; + } else { + searchSuccess = string.startsWith(searchString); } - // Set selected *after* appending to select, - // otherwise the option doesn't get selected in IE - // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11 - if (isSelected) element.selectedIndex = 0; + if (searchSuccess) break; } + } - var $selectOptions = this.$element.find('option'); - - $selectOptions.each(function (index) { - var $this = $(this); + return searchSuccess; + } - liIndex++; + function toInteger (value) { + return parseInt(value, 10) || 0; + } - if ($this.hasClass('bs-title-option')) return; + // Borrowed from Lodash (_.deburr) + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; - var thisData = $this.data(); + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - // Get the class and text for the option - var optionClass = this.className || '', - inline = htmlEscape(this.style.cssText), - optionContent = thisData.content, - text = this.textContent, - tokens = thisData.tokens, - subtext = thisData.subtext, - icon = thisData.icon, - $parent = $this.parent(), - parent = $parent[0], - isOptgroup = parent.tagName === 'OPTGROUP', - isOptgroupDisabled = isOptgroup && parent.disabled, - isDisabled = this.disabled || isOptgroupDisabled, - prevHiddenIndex, - showDivider = this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP', - textElement, - labelElement, - prevHidden; + /** Used to compose unicode character classes. */ + var rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboMarksExtendedRange = '\\u1ab0-\\u1aff', + rsComboMarksSupplementRange = '\\u1dc0-\\u1dff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange; - var parentData = $parent.data(); + /** Used to compose unicode capture groups. */ + var rsCombo = '[' + rsComboRange + ']'; - if ((thisData.hidden === true || this.hidden) || (that.options.hideDisabled && (isDisabled || isOptgroupDisabled))) { - // set prevHiddenIndex - the index of the first hidden option in a group of hidden options - // used to determine whether or not a divider should be placed after an optgroup if there are - // hidden options between the optgroup and the first visible option - prevHiddenIndex = thisData.prevHiddenIndex; - $this.next().data('prevHiddenIndex', (prevHiddenIndex !== undefined ? prevHiddenIndex : index)); + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); - liIndex--; + function deburrLetter (key) { + return deburredLetters[key]; + }; - hiddenOptions[index] = { - type: 'hidden', - data: thisData - } + function normalizeToBase (string) { + string = string.toString(); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } - // if previous element is not an optgroup - if (!showDivider) { - if (prevHiddenIndex !== undefined) { - // select the element **before** the first hidden element in the group - prevHidden = $selectOptions[prevHiddenIndex].previousElementSibling; - - if (prevHidden && prevHidden.tagName === 'OPTGROUP' && !prevHidden.disabled) { - showDivider = true; - } - } - } - - if (showDivider && mainData[mainData.length - 1].type !== 'divider') { - liIndex++; - mainElements.push( - generateLI( - false, - classNames.DIVIDER, - optID + 'div' - ) - ); - mainData.push({ - type: 'divider', - optID: optID - }); - } - - return; - } + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; - if (isOptgroup && thisData.divider !== true) { - if (that.options.hideDisabled && isDisabled) { - if (parentData.allOptionsDisabled === undefined) { - var $options = $parent.children(); - $parent.data('allOptionsDisabled', $options.filter(':disabled').length === $options.length); - } + var unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + }; - if ($parent.data('allOptionsDisabled')) { - liIndex--; - return; - } - } + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function (map) { + var escaper = function (match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + Object.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function (string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; - var optGroupClass = ' ' + parent.className || false, - previousOption = this.previousElementSibling; + var htmlEscape = createEscaper(escapeMap); + var htmlUnescape = createEscaper(unescapeMap); - prevHiddenIndex = thisData.prevHiddenIndex; + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ - if (prevHiddenIndex !== undefined) { - previousOption = $selectOptions[prevHiddenIndex].previousElementSibling; - } + var keyCodeMap = { + 32: ' ', + 48: '0', + 49: '1', + 50: '2', + 51: '3', + 52: '4', + 53: '5', + 54: '6', + 55: '7', + 56: '8', + 57: '9', + 59: ';', + 65: 'A', + 66: 'B', + 67: 'C', + 68: 'D', + 69: 'E', + 70: 'F', + 71: 'G', + 72: 'H', + 73: 'I', + 74: 'J', + 75: 'K', + 76: 'L', + 77: 'M', + 78: 'N', + 79: 'O', + 80: 'P', + 81: 'Q', + 82: 'R', + 83: 'S', + 84: 'T', + 85: 'U', + 86: 'V', + 87: 'W', + 88: 'X', + 89: 'Y', + 90: 'Z', + 96: '0', + 97: '1', + 98: '2', + 99: '3', + 100: '4', + 101: '5', + 102: '6', + 103: '7', + 104: '8', + 105: '9' + }; - if (!previousOption) { // Is it the first option of the optgroup? - optID += 1; + var keyCodes = { + ESCAPE: 27, // KeyboardEvent.which value for Escape (Esc) key + ENTER: 13, // KeyboardEvent.which value for Enter key + SPACE: 32, // KeyboardEvent.which value for space key + TAB: 9, // KeyboardEvent.which value for tab key + ARROW_UP: 38, // KeyboardEvent.which value for up arrow key + ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key + } - // Get the opt group label - var label = parent.label, - labelEscaped = htmlEscape(label), - labelSubtext = parentData.subtext, - labelIcon = parentData.icon; + var version = { + success: false, + major: '3' + }; - if (index !== 0 && mainElements.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown? - liIndex++; - mainElements.push( - generateLI( - false, - classNames.DIVIDER, - optID + 'div' - ) - ); - mainData.push({ - type: 'divider', - optID: optID - }); - } - liIndex++; + try { + version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.'); + version.major = version.full[0]; + version.success = true; + } catch (err) { + console.warn( + 'There was an issue retrieving Bootstrap\'s version. ' + + 'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' + + 'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.', + err + ); + } - labelElement = generateLabel({ - labelEscaped: labelEscaped, - labelSubtext: labelSubtext, - labelIcon: labelIcon - }); + var selectId = 0; - mainElements.push(generateLI(labelElement, 'dropdown-header' + optGroupClass, optID)); - mainData.push({ - content: labelEscaped, - subtext: labelSubtext, - type: 'optgroup-label', - optID: optID - }); + var EVENT_KEY = '.bs.select'; - headerIndex = liIndex - 1; - } + var classNames = { + DISABLED: 'disabled', + DIVIDER: 'divider', + SHOW: 'open', + DROPUP: 'dropup', + MENU: 'dropdown-menu', + MENURIGHT: 'dropdown-menu-right', + MENULEFT: 'dropdown-menu-left', + // to-do: replace with more advanced template/customization options + BUTTONCLASS: 'btn-default', + POPOVERHEADER: 'popover-title' + } - textElement = generateText({ - text: text, - optionContent: optionContent, - optionSubtext: subtext, - optionIcon: icon - }); + var Selector = { + MENU: '.' + classNames.MENU + } - mainElements.push(generateLI(generateA(textElement, 'opt ' + optionClass + optGroupClass, inline), '', optID)); - mainData.push({ - content: optionContent || text, - subtext: subtext, - tokens: tokens, - type: 'option', - optID: optID, - headerIndex: headerIndex, - lastIndex: headerIndex + parent.childElementCount, - originalIndex: index, - data: thisData - }); + if (version.major === '4') { + classNames.DIVIDER = 'dropdown-divider'; + classNames.SHOW = 'show'; + classNames.BUTTONCLASS = 'btn-light'; + classNames.POPOVERHEADER = 'popover-header'; + } - availableOptionsCount++; - } else if (thisData.divider === true) { - mainElements.push(generateLI(false, classNames.DIVIDER)); - mainData.push({ - type: 'divider', - originalIndex: index, - data: thisData - }); - } else { - // if previous element is not an optgroup and hideDisabled is true - if (!showDivider && that.options.hideDisabled) { - prevHiddenIndex = thisData.prevHiddenIndex; + var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN); + var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE); - if (prevHiddenIndex !== undefined) { - // select the element **before** the first hidden element in the group - prevHidden = $selectOptions[prevHiddenIndex].previousElementSibling; + var Selectpicker = function (element, options) { + var that = this; - if (prevHidden && prevHidden.tagName === 'OPTGROUP' && !prevHidden.disabled) { - showDivider = true; - } - } - } + // bootstrap-select has been initialized - revert valHooks.select.set back to its original function + if (!valHooks.useDefault) { + $.valHooks.select.set = valHooks._set; + valHooks.useDefault = true; + } - if (showDivider && mainData[mainData.length - 1].type !== 'divider') { - liIndex++; - mainElements.push( - generateLI( - false, - classNames.DIVIDER, - optID + 'div' - ) - ); - mainData.push({ - type: 'divider', - optID: optID - }); + this.$element = $(element); + this.$newElement = null; + this.$button = null; + this.$menu = null; + this.options = options; + this.selectpicker = { + main: { + // store originalIndex (key) and newIndex (value) in this.selectpicker.main.map.newIndex for fast accessibility + // allows us to do this.main.elements[this.selectpicker.main.map.newIndex[index]] to select an element based on the originalIndex + map: { + newIndex: {}, + originalIndex: {} + } + }, + current: { + map: {} + }, // current changes if a search is in progress + search: { + map: {} + }, + view: {}, + keydown: { + keyHistory: '', + resetKeyHistory: { + start: function () { + return setTimeout(function () { + that.selectpicker.keydown.keyHistory = ''; + }, 800); } - - textElement = generateText({ - text: text, - optionContent: optionContent, - optionSubtext: subtext, - optionIcon: icon - }); - - mainElements.push(generateLI(generateA(textElement, optionClass, inline))); - mainData.push({ - content: optionContent || text, - subtext: subtext, - tokens: tokens, - type: 'option', - originalIndex: index, - data: thisData - }); - - availableOptionsCount++; } + } + }; + // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a + // data-attribute) + if (this.options.title === null) { + this.options.title = this.$element.attr('title'); + } - that.selectpicker.main.map.newIndex[index] = liIndex; - that.selectpicker.main.map.originalIndex[liIndex] = index; - - // get the most recent option info added to mainData - var _mainDataLast = mainData[mainData.length - 1]; - - _mainDataLast.disabled = isDisabled; + // Format window padding + var winPad = this.options.windowPadding; + if (typeof winPad === 'number') { + this.options.windowPadding = [winPad, winPad, winPad, winPad]; + } - var combinedLength = 0; + // Expose public methods + this.val = Selectpicker.prototype.val; + this.render = Selectpicker.prototype.render; + this.refresh = Selectpicker.prototype.refresh; + this.setStyle = Selectpicker.prototype.setStyle; + this.selectAll = Selectpicker.prototype.selectAll; + this.deselectAll = Selectpicker.prototype.deselectAll; + this.destroy = Selectpicker.prototype.destroy; + this.remove = Selectpicker.prototype.remove; + this.show = Selectpicker.prototype.show; + this.hide = Selectpicker.prototype.hide; - // count the number of characters in the option - not perfect, but should work in most cases - if (_mainDataLast.content) combinedLength += _mainDataLast.content.length; - if (_mainDataLast.subtext) combinedLength += _mainDataLast.subtext.length; - // if there is an icon, ensure this option's width is checked - if (icon) combinedLength += 1; + this.init(); + }; - if (combinedLength > widestOptionLength) { - widestOptionLength = combinedLength; + Selectpicker.VERSION = '1.13.5'; - // guess which option is the widest - // use this when calculating menu width - // not perfect, but it's fast, and the width will be updating accordingly when scrolling - widestOption = mainElements[mainElements.length - 1]; - } - }); + Selectpicker.BootstrapVersion = version.major; - this.selectpicker.main.elements = mainElements; - this.selectpicker.main.data = mainData; - this.selectpicker.main.hidden = hiddenOptions; + // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. + Selectpicker.DEFAULTS = { + noneSelectedText: 'Nothing selected', + noneResultsText: 'No results matched {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? '{0} item selected' : '{0} items selected'; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', + (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' + ]; + }, + selectAllText: 'Select All', + deselectAllText: 'Deselect All', + doneButton: false, + doneButtonText: 'Close', + multipleSeparator: ', ', + styleBase: 'btn', + style: classNames.BUTTONCLASS, + size: 'auto', + title: null, + selectedTextFormat: 'values', + width: false, + container: false, + hideDisabled: false, + showSubtext: false, + showIcon: true, + showContent: true, + dropupAuto: true, + header: false, + liveSearch: false, + liveSearchPlaceholder: null, + liveSearchNormalize: false, + liveSearchStyle: 'contains', + actionsBox: false, + iconBase: 'glyphicon', + tickIcon: 'glyphicon-ok', + showTick: false, + template: { + caret: '' + }, + maxOptions: false, + mobile: false, + selectOnTab: false, + dropdownAlignRight: false, + windowPadding: 0, + virtualScroll: 600, + display: false + }; - this.selectpicker.current = this.selectpicker.main; + if (version.major === '4') { + Selectpicker.DEFAULTS.style = 'btn-light'; + Selectpicker.DEFAULTS.iconBase = ''; + Selectpicker.DEFAULTS.tickIcon = 'bs-ok-default'; + } - this.selectpicker.view.widestOption = widestOption; - this.selectpicker.view.availableOptionsCount = availableOptionsCount; // faster way to get # of available options without filter - }, + Selectpicker.prototype = { - findLis: function () { - return this.$menuInner.find('.inner > li'); - }, + constructor: Selectpicker, - render: function () { + init: function () { var that = this, - $selectOptions = this.$element.find('option'), - selectedItems = [], - selectedItemsInTitle = []; + id = this.$element.attr('id'); - this.togglePlaceholder(); + this.selectId = selectId++; - this.tabIndex(); + this.$element.addClass('bs-select-hidden'); - for (var index = 0, len = $selectOptions.length; index < len; index++) { - var i = that.selectpicker.main.map.newIndex[index], - option = $selectOptions[index], - optionData = that.selectpicker.main.data[i] || that.selectpicker.main.hidden[index]; + this.multiple = this.$element.prop('multiple'); + this.autofocus = this.$element.prop('autofocus'); + this.$newElement = this.createDropdown(); + this.createLi(); + this.$element + .after(this.$newElement) + .prependTo(this.$newElement); + this.$button = this.$newElement.children('button'); + this.$menu = this.$newElement.children(Selector.MENU); + this.$menuInner = this.$menu.children('.inner'); + this.$searchbox = this.$menu.find('input'); - if (option && option.selected && optionData) { - selectedItems.push(option); + this.$element.removeClass('bs-select-hidden'); - if ((selectedItemsInTitle.length < 100 && that.options.selectedTextFormat !== 'count') || selectedItems.length === 1) { - var thisData = optionData.data, - icon = thisData.icon && that.options.showIcon ? ' ' : '', - subtext, - titleItem; + if (this.options.dropdownAlignRight === true) this.$menu.addClass(classNames.MENURIGHT); - if (that.options.showSubtext && thisData.subtext && !that.multiple) { - subtext = ' ' + thisData.subtext + ''; - } else { - subtext = ''; - } + if (typeof id !== 'undefined') { + this.$button.attr('data-id', id); + } - if (option.title) { - titleItem = option.title; - } else if (thisData.content && that.options.showContent) { - titleItem = thisData.content.toString(); - } else { - titleItem = icon + option.innerHTML.trim() + subtext; - } + this.checkDisabled(); + this.clickListener(); + if (this.options.liveSearch) this.liveSearchListener(); + this.render(); + this.setStyle(); + this.setWidth(); + if (this.options.container) { + this.selectPosition(); + } else { + this.$element.on('hide' + EVENT_KEY, function () { + if (that.isVirtual()) { + // empty menu on close + var menuInner = that.$menuInner[0], + emptyMenu = menuInner.firstChild.cloneNode(false); - selectedItemsInTitle.push(titleItem); + // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = '' + menuInner.replaceChild(emptyMenu, menuInner.firstChild); + menuInner.scrollTop = 0; } - } + }); } + this.$menu.data('this', this); + this.$newElement.data('this', this); + if (this.options.mobile) this.mobile(); - // Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled - // Convert all the values into a comma delimited string - var title = !this.multiple ? selectedItemsInTitle[0] : selectedItemsInTitle.join(this.options.multipleSeparator); + this.$newElement.on({ + 'hide.bs.dropdown': function (e) { + that.$menuInner.attr('aria-expanded', false); + that.$element.trigger('hide' + EVENT_KEY, e); + }, + 'hidden.bs.dropdown': function (e) { + that.$element.trigger('hidden' + EVENT_KEY, e); + }, + 'show.bs.dropdown': function (e) { + that.$menuInner.attr('aria-expanded', true); + that.$element.trigger('show' + EVENT_KEY, e); + }, + 'shown.bs.dropdown': function (e) { + that.$element.trigger('shown' + EVENT_KEY, e); + } + }); - // add ellipsis - if (selectedItems.length > 50) title += '...'; + if (that.$element[0].hasAttribute('required')) { + this.$element.on('invalid', function () { + that.$button.addClass('bs-invalid'); - // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected etc.. - if (this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1) { - var max = this.options.selectedTextFormat.split('>'); + that.$element + .on('shown' + EVENT_KEY + '.invalid', function () { + that.$element + .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened + .off('shown' + EVENT_KEY + '.invalid'); + }) + .on('rendered' + EVENT_KEY, function () { + // if select is no longer invalid, remove the bs-invalid class + if (this.validity.valid) that.$button.removeClass('bs-invalid'); + that.$element.off('rendered' + EVENT_KEY); + }); - if ((max.length > 1 && selectedItems.length > max[1]) || (max.length === 1 && selectedItems.length >= 2)) { - var totalCount = this.selectpicker.view.availableOptionsCount, - tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText; + that.$button.on('blur' + EVENT_KEY, function () { + that.$element.focus().blur(); + that.$button.off('blur' + EVENT_KEY); + }); + }); + } - title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString()); - } + setTimeout(function () { + that.$element.trigger('loaded' + EVENT_KEY); + }); + }, + + createDropdown: function () { + // Options + // If we are multiple or showTick option is set, then add the show-tick class + var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '', + autofocus = this.autofocus ? ' autofocus' : ''; + + // Elements + var drop, + header = '', + searchbox = '', + actionsbox = '', + donebutton = ''; + + if (this.options.header) { + header = + '
    ' + + '' + + this.options.header + + '
    '; } - if (this.options.title == undefined) { - // use .attr to ensure undefined is returned if title attribute is not set - this.options.title = this.$element.attr('title'); + if (this.options.liveSearch) { + searchbox = + ''; } - if (this.options.selectedTextFormat == 'static') { - title = this.options.title; + if (this.multiple && this.options.actionsBox) { + actionsbox = + '
    ' + + '
    ' + + '' + + '' + + '
    ' + + '
    '; } - // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText - if (!title) { - title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText; + if (this.multiple && this.options.doneButton) { + donebutton = + '
    ' + + '
    ' + + '' + + '
    ' + + '
    '; } - // strip all HTML tags and trim the result, then unescape any escaped tags - this.$button[0].title = htmlUnescape(title.replace(/<[^>]*>?/g, '').trim()); - this.$button.find('.filter-option-inner-inner')[0].innerHTML = title; + drop = + ''; - this.$element.trigger('rendered' + EVENT_KEY); + return $(drop); }, - /** - * @param [style] - * @param [status] - */ - setStyle: function (style, status) { - if (this.$element.attr('class')) { - this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, '')); - } + setPositionData: function () { + this.selectpicker.view.canHighlight = []; - var buttonClass = style || this.options.style; + for (var i = 0; i < this.selectpicker.current.data.length; i++) { + var li = this.selectpicker.current.data[i], + canHighlight = true; - if (status == 'add') { - this.$button.addClass(buttonClass); - } else if (status == 'remove') { - this.$button.removeClass(buttonClass); - } else { - this.$button.removeClass(this.options.style); - this.$button.addClass(buttonClass); + if (li.type === 'divider') { + canHighlight = false; + li.height = this.sizeInfo.dividerHeight; + } else if (li.type === 'optgroup-label') { + canHighlight = false; + li.height = this.sizeInfo.dropdownHeaderHeight; + } else { + li.height = this.sizeInfo.liHeight; + } + + if (li.disabled) canHighlight = false; + + this.selectpicker.view.canHighlight.push(canHighlight); + + li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height; } }, - liHeight: function (refresh) { - if (!refresh && (this.options.size === false || this.sizeInfo)) return; + isVirtual: function () { + return (this.options.virtualScroll !== false) && (this.selectpicker.main.elements.length >= this.options.virtualScroll) || this.options.virtualScroll === true; + }, - if (!this.sizeInfo) this.sizeInfo = {}; + createView: function (isSearching, scrollTop) { + scrollTop = scrollTop || 0; - var newElement = document.createElement('div'), - menu = document.createElement('div'), - menuInner = document.createElement('div'), - menuInnerInner = document.createElement('ul'), - divider = document.createElement('li'), - dropdownHeader = document.createElement('li'), - li = document.createElement('li'), - a = document.createElement('a'), - text = document.createElement('span'), - header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null, - search = this.options.liveSearch ? document.createElement('div') : null, - actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null, - doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null, - firstOption = this.$element.find('option')[0]; + var that = this; - this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth; + this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main; - text.className = 'text'; - a.className = 'dropdown-item ' + (firstOption ? firstOption.className : ''); - newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW; - newElement.style.width = this.sizeInfo.selectWidth + 'px'; - if (this.options.width === 'auto') menu.style.minWidth = 0; - menu.className = classNames.MENU + ' ' + classNames.SHOW; - menuInner.className = 'inner ' + classNames.SHOW; - menuInnerInner.className = classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : ''); - divider.className = classNames.DIVIDER; - dropdownHeader.className = 'dropdown-header'; + var active = []; + var selected; + var prevActive; - text.appendChild(document.createTextNode('\u200b')); - a.appendChild(text); - li.appendChild(a); - dropdownHeader.appendChild(text.cloneNode(true)); + this.setPositionData(); - if (this.selectpicker.view.widestOption) { - menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true)); - } + scroll(scrollTop, true); - menuInnerInner.appendChild(li); - menuInnerInner.appendChild(divider); - menuInnerInner.appendChild(dropdownHeader); - if (header) menu.appendChild(header); - if (search) { - var input = document.createElement('input'); - search.className = 'bs-searchbox'; - input.className = 'form-control'; - search.appendChild(input); - menu.appendChild(search); - } - if (actions) menu.appendChild(actions); - menuInner.appendChild(menuInnerInner); - menu.appendChild(menuInner); - if (doneButton) menu.appendChild(doneButton); - newElement.appendChild(menu); + this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) { + if (!that.noScroll) scroll(this.scrollTop, updateValue); + that.noScroll = false; + }); - document.body.appendChild(newElement); + function scroll (scrollTop, init) { + var size = that.selectpicker.current.elements.length, + chunks = [], + chunkSize, + chunkCount, + firstChunk, + lastChunk, + currentChunk, + prevPositions, + positionIsDifferent, + previousElements, + menuIsDifferent = true, + isVirtual = that.isVirtual(); - var liHeight = a.offsetHeight, - dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0, - headerHeight = header ? header.offsetHeight : 0, - searchHeight = search ? search.offsetHeight : 0, - actionsHeight = actions ? actions.offsetHeight : 0, - doneButtonHeight = doneButton ? doneButton.offsetHeight : 0, - dividerHeight = $(divider).outerHeight(true), - // fall back to jQuery if getComputedStyle is not supported - menuStyle = window.getComputedStyle ? window.getComputedStyle(menu) : false, - menuWidth = menu.offsetWidth, - $menu = menuStyle ? null : $(menu), - menuPadding = { - vert: toInteger(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + - toInteger(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + - toInteger(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + - toInteger(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')), - horiz: toInteger(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) + - toInteger(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) + - toInteger(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) + - toInteger(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth')) - }, - menuExtras = { - vert: menuPadding.vert + - toInteger(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + - toInteger(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2, - horiz: menuPadding.horiz + - toInteger(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) + - toInteger(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2 - }, - scrollBarWidth; + that.selectpicker.view.scrollTop = scrollTop; - menuInner.style.overflowY = 'scroll'; + if (isVirtual === true) { + // if an option that is encountered that is wider than the current menu width, update the menu width accordingly + if (that.sizeInfo.hasScrollBar && that.$menu[0].offsetWidth > that.sizeInfo.totalMenuWidth) { + that.sizeInfo.menuWidth = that.$menu[0].offsetWidth; + that.sizeInfo.totalMenuWidth = that.sizeInfo.menuWidth + that.sizeInfo.scrollBarWidth; + that.$menu.css('min-width', that.sizeInfo.menuWidth); + } + } - scrollBarWidth = menu.offsetWidth - menuWidth; + chunkSize = Math.ceil(that.sizeInfo.menuInnerHeight / that.sizeInfo.liHeight * 1.5); // number of options in a chunk + chunkCount = Math.round(size / chunkSize) || 1; // number of chunks - document.body.removeChild(newElement); + for (var i = 0; i < chunkCount; i++) { + var endOfChunk = (i + 1) * chunkSize; - this.sizeInfo.liHeight = liHeight; - this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight; - this.sizeInfo.headerHeight = headerHeight; - this.sizeInfo.searchHeight = searchHeight; - this.sizeInfo.actionsHeight = actionsHeight; - this.sizeInfo.doneButtonHeight = doneButtonHeight; - this.sizeInfo.dividerHeight = dividerHeight; - this.sizeInfo.menuPadding = menuPadding; - this.sizeInfo.menuExtras = menuExtras; - this.sizeInfo.menuWidth = menuWidth; - this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth; - this.sizeInfo.scrollBarWidth = scrollBarWidth; - this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight; + if (i === chunkCount - 1) { + endOfChunk = size; + } - this.setPositionData(); - }, + chunks[i] = [ + (i) * chunkSize + (!i ? 0 : 1), + endOfChunk + ]; - getSelectPosition: function () { - var that = this, - $window = $(window), - pos = that.$newElement.offset(), - $container = $(that.options.container), - containerPos; + if (!size) break; - if (that.options.container && !$container.is('body')) { - containerPos = $container.offset(); - containerPos.top += parseInt($container.css('borderTopWidth')); - containerPos.left += parseInt($container.css('borderLeftWidth')); - } else { - containerPos = { top: 0, left: 0 }; - } + if (currentChunk === undefined && scrollTop <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) { + currentChunk = i; + } + } - var winPad = that.options.windowPadding; + if (currentChunk === undefined) currentChunk = 0; - this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop(); - this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2]; - this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft(); - this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1]; - this.sizeInfo.selectOffsetTop -= winPad[0]; - this.sizeInfo.selectOffsetLeft -= winPad[3]; - }, + prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1]; - setMenuSize: function (isAuto) { - this.getSelectPosition(); + // always display previous, current, and next chunks + firstChunk = Math.max(0, currentChunk - 1); + lastChunk = Math.min(chunkCount - 1, currentChunk + 1); - var selectWidth = this.sizeInfo.selectWidth, - liHeight = this.sizeInfo.liHeight, - headerHeight = this.sizeInfo.headerHeight, - searchHeight = this.sizeInfo.searchHeight, - actionsHeight = this.sizeInfo.actionsHeight, - doneButtonHeight = this.sizeInfo.doneButtonHeight, - divHeight = this.sizeInfo.dividerHeight, - menuPadding = this.sizeInfo.menuPadding, - menuInnerHeight, - menuHeight, - divLength = 0, - minHeight, - _minHeight, - maxHeight, - menuInnerMinHeight, - estimate; + that.selectpicker.view.position0 = Math.max(0, chunks[firstChunk][0]) || 0; + that.selectpicker.view.position1 = Math.min(size, chunks[lastChunk][1]) || 0; - if (this.options.dropupAuto) { - // Get the estimated height of the menu without scrollbars. - // This is useful for smaller menus, where there might be plenty of room - // below the button without setting dropup, but we can't know - // the exact height of the menu until createView is called later - estimate = liHeight * this.selectpicker.current.elements.length + menuPadding.vert; - this.$newElement.toggleClass(classNames.DROPUP, this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot); - } + positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1; - if (this.options.size === 'auto') { - _minHeight = this.selectpicker.current.elements.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0; - menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert; - minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight; - menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0); + if (that.activeIndex !== undefined) { + prevActive = that.selectpicker.current.elements[that.selectpicker.current.map.newIndex[that.prevActiveIndex]]; + active = that.selectpicker.current.elements[that.selectpicker.current.map.newIndex[that.activeIndex]]; + selected = that.selectpicker.current.elements[that.selectpicker.current.map.newIndex[that.selectedIndex]]; - if (this.$newElement.hasClass(classNames.DROPUP)) { - menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert; + if (init) { + if (that.activeIndex !== that.selectedIndex) { + active.classList.remove('active'); + if (active.firstChild) active.firstChild.classList.remove('active'); + } + that.activeIndex = undefined; + } + + if (that.activeIndex && that.activeIndex !== that.selectedIndex && selected && selected.length) { + selected.classList.remove('active'); + if (selected.firstChild) selected.firstChild.classList.remove('active'); + } } - maxHeight = menuHeight; - menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert; - } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) { - for (var i = 0; i < this.options.size; i++) { - if (this.selectpicker.current.data[i].type === 'divider') divLength++; + if (that.prevActiveIndex !== undefined && that.prevActiveIndex !== that.activeIndex && that.prevActiveIndex !== that.selectedIndex && prevActive && prevActive.length) { + prevActive.classList.remove('active'); + if (prevActive.firstChild) prevActive.firstChild.classList.remove('active'); } - menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert; - menuInnerHeight = menuHeight - menuPadding.vert; - maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight; - minHeight = menuInnerMinHeight = ''; - } + if (init || positionIsDifferent) { + previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : []; - if (this.options.dropdownAlignRight === 'auto') { - this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < (this.sizeInfo.totalMenuWidth - selectWidth)); - } + that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1); - this.$menu.css({ - 'max-height': maxHeight + 'px', - 'overflow': 'hidden', - 'min-height': minHeight + 'px' - }); + that.setOptionStatus(); - this.$menuInner.css({ - 'max-height': menuInnerHeight + 'px', - 'overflow-y': 'auto', - 'min-height': menuInnerMinHeight + 'px' - }); + // if searching, check to make sure the list has actually been updated before updating DOM + // this prevents unnecessary repaints + if (isSearching || (isVirtual === false && init)) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements); - this.sizeInfo.menuInnerHeight = menuInnerHeight; + // if virtual scroll is disabled and not searching, + // menu should never need to be updated more than once + if ((init || isVirtual === true) && menuIsDifferent) { + var menuInner = that.$menuInner[0], + menuFragment = document.createDocumentFragment(), + emptyMenu = menuInner.firstChild.cloneNode(false), + marginTop, + marginBottom, + elements = isVirtual === true ? that.selectpicker.view.visibleElements : that.selectpicker.current.elements; - if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) { - this.sizeInfo.hasScrollBar = true; - this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth; + // replace the existing UL with an empty one - this is faster than $.empty() + menuInner.replaceChild(emptyMenu, menuInner.firstChild); - this.$menu.css('min-width', this.sizeInfo.totalMenuWidth); - } + for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) { + menuFragment.appendChild(elements[i]); + } - if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update(); - }, + if (isVirtual === true) { + marginTop = (that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position); + marginBottom = (that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position); - setSize: function (refresh) { - this.liHeight(refresh); + menuInner.firstChild.style.marginTop = marginTop + 'px'; + menuInner.firstChild.style.marginBottom = marginBottom + 'px'; + } - if (this.options.header) this.$menu.css('padding-top', 0); - if (this.options.size === false) return; + menuInner.firstChild.appendChild(menuFragment); + } + } - var that = this, - $window = $(window), - selectedIndex, - offset = 0; + that.prevActiveIndex = that.activeIndex; - this.setMenuSize(); + if (!that.options.liveSearch) { + that.$menuInner.focus(); + } else if (isSearching && init) { + var index = 0, + newActive; - if (this.options.size === 'auto') { - this.$searchbox - .off('input.setMenuSize propertychange.setMenuSize') - .on('input.setMenuSize propertychange.setMenuSize', function () { - return that.setMenuSize(); - }); + if (!that.selectpicker.view.canHighlight[index]) { + index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true); + } - $window - .off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize') - .on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () { - return that.setMenuSize(); - }); - } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) { - this.$searchbox.off('input.setMenuSize propertychange.setMenuSize'); - $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize'); - } + newActive = that.selectpicker.view.visibleElements[index]; - if (refresh) { - offset = this.$menuInner[0].scrollTop; - } else if (!that.multiple) { - selectedIndex = that.selectpicker.main.map.newIndex[that.$element[0].selectedIndex]; + if (that.selectpicker.view.currentActive) { + that.selectpicker.view.currentActive.classList.remove('active'); + if (that.selectpicker.view.currentActive.firstChild) that.selectpicker.view.currentActive.firstChild.classList.remove('active'); + } - if (typeof selectedIndex === 'number' && that.options.size !== false) { - offset = that.sizeInfo.liHeight * selectedIndex; - offset = offset - (that.sizeInfo.menuInnerHeight / 2) + (that.sizeInfo.liHeight / 2); + if (newActive) { + newActive.classList.add('active'); + if (newActive.firstChild) newActive.firstChild.classList.add('active'); + } + + that.activeIndex = that.selectpicker.current.map.originalIndex[index]; } } - that.createView(false, offset); - }, - - setWidth: function () { - var that = this; - - if (this.options.width === 'auto') { - requestAnimationFrame(function () { - that.$menu.css('min-width', '0'); - that.liHeight(); - that.setMenuSize(); - - // Get correct width if element is hidden - var $selectClone = that.$newElement.clone().appendTo('body'), - btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth(); - - $selectClone.remove(); + $(window) + .off('resize' + EVENT_KEY + '.' + this.selectId + '.createView') + .on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () { + var isActive = that.$newElement.hasClass(classNames.SHOW); - // Set width to whatever's larger, button title or longest option - that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth); - that.$newElement.css('width', that.sizeInfo.selectWidth + 'px'); + if (isActive) scroll(that.$menuInner[0].scrollTop); }); - } else if (this.options.width === 'fit') { - // Remove inline min-width so width can be changed from 'auto' - this.$menu.css('min-width', ''); - this.$newElement.css('width', '').addClass('fit-width'); - } else if (this.options.width) { - // Remove inline min-width so width can be changed from 'auto' - this.$menu.css('min-width', ''); - this.$newElement.css('width', this.options.width); - } else { - // Remove inline min-width/width so width can be changed - this.$menu.css('min-width', ''); - this.$newElement.css('width', ''); - } - // Remove fit-width class if width is changed programmatically - if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') { - this.$newElement.removeClass('fit-width'); - } }, - selectPosition: function () { - this.$bsContainer = $('
    '); - + createLi: function () { var that = this, - $container = $(this.options.container), - pos, - containerPos, - actualHeight, - getPlacement = function ($element) { - var containerPosition = {}, - // fall back to dropdown's default display setting if display is not manually set - display = that.options.display || ( - // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default - $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display - : false - ); + mainElements = [], + hiddenOptions = {}, + widestOption, + availableOptionsCount = 0, + widestOptionLength = 0, + mainData = [], + optID = 0, + headerIndex = 0, + liIndex = -1; // increment liIndex whenever a new
  • element is created to ensure newIndex is correct - that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP)); - pos = $element.offset(); + if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option'); - if (!$container.is('body')) { - containerPos = $container.offset(); - containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop(); - containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft(); - } else { - containerPos = { top: 0, left: 0 }; - } + var elementTemplates = { + span: document.createElement('span'), + subtext: document.createElement('small'), + a: document.createElement('a'), + li: document.createElement('li'), + whitespace: document.createTextNode('\u00A0') + }, + checkMark, + fragment = document.createDocumentFragment(); - actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight; + if (that.options.showTick || that.multiple) { + checkMark = elementTemplates.span.cloneNode(false); + checkMark.className = that.options.iconBase + ' ' + that.options.tickIcon + ' check-mark'; + elementTemplates.a.appendChild(checkMark); + } - // Bootstrap 4+ uses Popper for menu positioning - if (version.major < 4 || display === 'static') { - containerPosition.top = pos.top - containerPos.top + actualHeight; - containerPosition.left = pos.left - containerPos.left; - } + elementTemplates.a.setAttribute('role', 'option'); - containerPosition.width = $element[0].offsetWidth; + elementTemplates.subtext.className = 'text-muted'; - that.$bsContainer.css(containerPosition); - }; + elementTemplates.text = elementTemplates.span.cloneNode(false); + elementTemplates.text.className = 'text'; - this.$button.on('click.bs.dropdown.data-api', function () { - if (that.isDisabled()) { - return; + // Helper functions + /** + * @param content + * @param [classes] + * @param [optgroup] + * @returns {HTMLElement} + */ + var generateLI = function (content, classes, optgroup) { + var li = elementTemplates.li.cloneNode(false); + + if (content) { + if (content.nodeType === 1 || content.nodeType === 11) { + li.appendChild(content); + } else { + li.innerHTML = content; + } } - getPlacement(that.$newElement); + if (typeof classes !== 'undefined' && classes !== '') li.className = classes; + if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup); - that.$bsContainer - .appendTo(that.options.container) - .toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW)) - .append(that.$menu); - }); + return li; + }; - $(window) - .off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId) - .on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () { - var isActive = that.$newElement.hasClass(classNames.SHOW); + /** + * @param text + * @param [classes] + * @param [inline] + * @returns {string} + */ + var generateA = function (text, classes, inline) { + var a = elementTemplates.a.cloneNode(true); - if (isActive) getPlacement(that.$newElement); - }); + if (text) { + if (text.nodeType === 11) { + a.appendChild(text); + } else { + a.insertAdjacentHTML('beforeend', text); + } + } - this.$element.on('hide' + EVENT_KEY, function () { - that.$menu.data('height', that.$menu.height()); - that.$bsContainer.detach(); - }); - }, + if (typeof classes !== 'undefined' && classes !== '') a.className = classes; + if (version.major === '4') a.classList.add('dropdown-item'); + if (inline) a.setAttribute('style', inline); - setOptionStatus: function () { - var that = this, - $selectOptions = this.$element.find('option'); + return a; + }; - that.noScroll = false; + var generateText = function (options) { + var textElement = elementTemplates.text.cloneNode(false), + optionSubtextElement, + optionIconElement; - if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) { - for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) { - var index = that.selectpicker.current.map.originalIndex[i + that.selectpicker.view.position0], // faster than $(li).data('originalIndex') - option = $selectOptions[index]; + if (options.optionContent) { + textElement.innerHTML = options.optionContent; + } else { + textElement.textContent = options.text; - if (option) { - var liIndex = this.selectpicker.main.map.newIndex[index], - li = this.selectpicker.main.elements[liIndex]; + if (options.optionIcon) { + var whitespace = elementTemplates.whitespace.cloneNode(false); - that.setDisabled( - index, - option.disabled || (option.parentNode.tagName === 'OPTGROUP' && option.parentNode.disabled), - liIndex, - li - ); + optionIconElement = elementTemplates.span.cloneNode(false); + optionIconElement.className = that.options.iconBase + ' ' + options.optionIcon; - that.setSelected( - index, - option.selected, - liIndex, - li - ); + fragment.appendChild(optionIconElement); + fragment.appendChild(whitespace); } - } - } - }, - /** - * @param {number} index - the index of the option that is being changed - * @param {boolean} selected - true if the option is being selected, false if being deselected - */ - setSelected: function (index, selected, liIndex, li) { - var activeIndexIsSet = this.activeIndex !== undefined, - thisIsActive = this.activeIndex === index, - prevActiveIndex, - prevActive, - a, - // if current option is already active - // OR - // if the current option is being selected, it's NOT multiple, and - // activeIndex is undefined: - // - when the menu is first being opened, OR - // - after a search has been performed, OR - // - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeIndex) - keepActive = thisIsActive || (selected && !this.multiple && !activeIndexIsSet); + if (options.optionSubtext) { + optionSubtextElement = elementTemplates.subtext.cloneNode(false); + optionSubtextElement.innerHTML = options.optionSubtext; + textElement.appendChild(optionSubtextElement); + } + } - if (!liIndex) liIndex = this.selectpicker.main.map.newIndex[index]; - if (!li) li = this.selectpicker.main.elements[liIndex]; + fragment.appendChild(textElement); - a = li.firstChild; + return fragment; + }; - if (selected) { - this.selectedIndex = index; - } + var generateLabel = function (options) { + var labelTextElement = elementTemplates.text.cloneNode(false), + labelSubtextElement, + labelIconElement; - li.classList.toggle('selected', selected); - li.classList.toggle('active', keepActive); + labelTextElement.innerHTML = options.labelEscaped; - if (keepActive) { - this.selectpicker.view.currentActive = li; - this.activeIndex = index; - } + if (options.labelIcon) { + var whitespace = elementTemplates.whitespace.cloneNode(false); - if (a) { - a.classList.toggle('selected', selected); - a.classList.toggle('active', keepActive); - a.setAttribute('aria-selected', selected); - } + labelIconElement = elementTemplates.span.cloneNode(false); + labelIconElement.className = that.options.iconBase + ' ' + options.labelIcon; - if (!keepActive) { - if (!activeIndexIsSet && selected && this.prevActiveIndex !== undefined) { - prevActiveIndex = this.selectpicker.main.map.newIndex[this.prevActiveIndex]; - prevActive = this.selectpicker.main.elements[prevActiveIndex]; + fragment.appendChild(labelIconElement); + fragment.appendChild(whitespace); + } - prevActive.classList.remove('active'); - if (prevActive.firstChild) { - prevActive.firstChild.classList.remove('active'); - } + if (options.labelSubtext) { + labelSubtextElement = elementTemplates.subtext.cloneNode(false); + labelSubtextElement.textContent = options.labelSubtext; + labelTextElement.appendChild(labelSubtextElement); } - } - }, - /** - * @param {number} index - the index of the option that is being disabled - * @param {boolean} disabled - true if the option is being disabled, false if being enabled - */ - setDisabled: function (index, disabled, liIndex, li) { - var a; + fragment.appendChild(labelTextElement); - if (!liIndex) liIndex = this.selectpicker.main.map.newIndex[index]; - if (!li) li = this.selectpicker.main.elements[liIndex]; + return fragment; + } - a = li.firstChild; + if (this.options.title && !this.multiple) { + // this option doesn't create a new
  • element, but does add a new option, so liIndex is decreased + // since newIndex is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended + liIndex--; - li.classList.toggle(classNames.DISABLED, disabled); + var element = this.$element[0], + isSelected = false, + titleNotAppended = !this.selectpicker.view.titleOption.parentNode; - if (a) { - if (version.major === '4') a.classList.toggle(classNames.DISABLED, disabled); + if (titleNotAppended) { + // Use native JS to prepend option (faster) + this.selectpicker.view.titleOption.className = 'bs-title-option'; + this.selectpicker.view.titleOption.value = ''; - a.setAttribute('aria-disabled', disabled); + // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option. + // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs, + // if so, the select will have the data-selected attribute + var $opt = $(element.options[element.selectedIndex]); + isSelected = $opt.attr('selected') === undefined && this.$element.data('selected') === undefined; + } - if (disabled) { - a.setAttribute('tabindex', -1); - } else { - a.setAttribute('tabindex', 0); + if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) { + element.insertBefore(this.selectpicker.view.titleOption, element.firstChild); } + + // Set selected *after* appending to select, + // otherwise the option doesn't get selected in IE + // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11 + if (isSelected) element.selectedIndex = 0; } - }, - isDisabled: function () { - return this.$element[0].disabled; - }, + var $selectOptions = this.$element.find('option'); - checkDisabled: function () { - var that = this; + $selectOptions.each(function (index) { + var $this = $(this); - if (this.isDisabled()) { - this.$newElement.addClass(classNames.DISABLED); - this.$button.addClass(classNames.DISABLED).attr('tabindex', -1).attr('aria-disabled', true); - } else { - if (this.$button.hasClass(classNames.DISABLED)) { - this.$newElement.removeClass(classNames.DISABLED); - this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false); - } + liIndex++; - if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) { - this.$button.removeAttr('tabindex'); - } - } + if ($this.hasClass('bs-title-option')) return; - this.$button.click(function () { - return !that.isDisabled(); - }); - }, + var thisData = $this.data(); - togglePlaceholder: function () { - // much faster than calling $.val() - var element = this.$element[0], - selectedIndex = element.selectedIndex, - nothingSelected = selectedIndex === -1; + // Get the class and text for the option + var optionClass = this.className || '', + inline = htmlEscape(this.style.cssText), + optionContent = thisData.content, + text = this.textContent, + tokens = thisData.tokens, + subtext = thisData.subtext, + icon = thisData.icon, + $parent = $this.parent(), + parent = $parent[0], + isOptgroup = parent.tagName === 'OPTGROUP', + isOptgroupDisabled = isOptgroup && parent.disabled, + isDisabled = this.disabled || isOptgroupDisabled, + prevHiddenIndex, + showDivider = this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP', + textElement, + labelElement, + prevHidden; - if (!nothingSelected && !element.options[selectedIndex].value) nothingSelected = true; + var parentData = $parent.data(); - this.$button.toggleClass('bs-placeholder', nothingSelected); - }, + if ((thisData.hidden === true || this.hidden) || (that.options.hideDisabled && (isDisabled || isOptgroupDisabled))) { + // set prevHiddenIndex - the index of the first hidden option in a group of hidden options + // used to determine whether or not a divider should be placed after an optgroup if there are + // hidden options between the optgroup and the first visible option + prevHiddenIndex = thisData.prevHiddenIndex; + $this.next().data('prevHiddenIndex', (prevHiddenIndex !== undefined ? prevHiddenIndex : index)); - tabIndex: function () { - if (this.$element.data('tabindex') !== this.$element.attr('tabindex') && - (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) { - this.$element.data('tabindex', this.$element.attr('tabindex')); - this.$button.attr('tabindex', this.$element.data('tabindex')); - } + liIndex--; - this.$element.attr('tabindex', -98); - }, + hiddenOptions[index] = { + type: 'hidden', + data: thisData + } - clickListener: function () { - var that = this, - $document = $(document); + // if previous element is not an optgroup + if (!showDivider) { + if (prevHiddenIndex !== undefined) { + // select the element **before** the first hidden element in the group + prevHidden = $selectOptions[prevHiddenIndex].previousElementSibling; - $document.data('spaceSelect', false); + if (prevHidden && prevHidden.tagName === 'OPTGROUP' && !prevHidden.disabled) { + showDivider = true; + } + } + } - this.$button.on('keyup', function (e) { - if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) { - e.preventDefault(); - $document.data('spaceSelect', false); - } - }); + if (showDivider && mainData[mainData.length - 1].type !== 'divider') { + liIndex++; + mainElements.push( + generateLI( + false, + classNames.DIVIDER, + optID + 'div' + ) + ); + mainData.push({ + type: 'divider', + optID: optID + }); + } - this.$newElement.on('show.bs.dropdown', function () { - if (version.major > 3 && !that.dropdown) { - that.dropdown = that.$button.data('bs.dropdown'); - that.dropdown._menu = that.$menu[0]; + return; } - }); - this.$button.on('click.bs.dropdown.data-api', function () { - if (!that.$newElement.hasClass(classNames.SHOW)) { - that.setSize(); - } - }); + if (isOptgroup && thisData.divider !== true) { + if (that.options.hideDisabled && isDisabled) { + if (parentData.allOptionsDisabled === undefined) { + var $options = $parent.children(); + $parent.data('allOptionsDisabled', $options.filter(':disabled').length === $options.length); + } - function setFocus () { - if (that.options.liveSearch) { - that.$searchbox.focus(); - } else { - that.$menuInner.focus(); - } - } + if ($parent.data('allOptionsDisabled')) { + liIndex--; + return; + } + } - function checkPopperExists () { - if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state.isCreated) { - setFocus(); - } else { - requestAnimationFrame(checkPopperExists); - } - } + var optGroupClass = ' ' + parent.className || false, + previousOption = this.previousElementSibling; - this.$element.on('shown' + EVENT_KEY, function () { - if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) { - that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop; - } + prevHiddenIndex = thisData.prevHiddenIndex; - if (version.major > 3) { - requestAnimationFrame(checkPopperExists); - } else { - setFocus(); - } - }); + if (prevHiddenIndex !== undefined) { + previousOption = $selectOptions[prevHiddenIndex].previousElementSibling; + } - this.$menuInner.on('click', 'li a', function (e, retainActive) { - var $this = $(this), - position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0, - clickedIndex = that.selectpicker.current.map.originalIndex[$this.parent().index() + position0], - prevValue = getSelectValues(that.$element[0]), - prevIndex = that.$element.prop('selectedIndex'), - triggerChange = true; + if (!previousOption) { // Is it the first option of the optgroup? + optID += 1; - // Don't close on multi choice menu - if (that.multiple && that.options.maxOptions !== 1) { - e.stopPropagation(); - } + // Get the opt group label + var label = parent.label, + labelEscaped = htmlEscape(label), + labelSubtext = parentData.subtext, + labelIcon = parentData.icon; - e.preventDefault(); + if (index !== 0 && mainElements.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown? + liIndex++; + mainElements.push( + generateLI( + false, + classNames.DIVIDER, + optID + 'div' + ) + ); + mainData.push({ + type: 'divider', + optID: optID + }); + } + liIndex++; - // Don't run if the select is disabled - if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) { - var $options = that.$element.find('option'), - $option = $options.eq(clickedIndex), - state = $option.prop('selected'), - $optgroup = $option.parent('optgroup'), - $optgroupOptions = $optgroup.find('option'), - maxOptions = that.options.maxOptions, - maxOptionsGrp = $optgroup.data('maxOptions') || false; + labelElement = generateLabel({ + labelEscaped: labelEscaped, + labelSubtext: labelSubtext, + labelIcon: labelIcon + }); - if (clickedIndex === that.activeIndex) retainActive = true; + mainElements.push(generateLI(labelElement, 'dropdown-header' + optGroupClass, optID)); + mainData.push({ + content: labelEscaped, + subtext: labelSubtext, + type: 'optgroup-label', + optID: optID + }); - if (!retainActive) { - that.prevActiveIndex = that.activeIndex; - that.activeIndex = undefined; + headerIndex = liIndex - 1; } - if (!that.multiple) { // Deselect all others if not multi select box - $options.prop('selected', false); - $option.prop('selected', true); - that.setSelected(clickedIndex, true); - } else { // Toggle the one we have chosen if we are multi select. - $option.prop('selected', !state); - - that.setSelected(clickedIndex, !state); - $this.blur(); - - if (maxOptions !== false || maxOptionsGrp !== false) { - var maxReached = maxOptions < $options.filter(':selected').length, - maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length; - - if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { - if (maxOptions && maxOptions == 1) { - $options.prop('selected', false); - $option.prop('selected', true); - - for (var i = 0; i < $options.length; i++) { - that.setSelected(i, false); - } - - that.setSelected(clickedIndex, true); - } else if (maxOptionsGrp && maxOptionsGrp == 1) { - $optgroup.find('option:selected').prop('selected', false); - $option.prop('selected', true); - - for (var i = 0; i < $optgroupOptions.length; i++) { - var option = $optgroupOptions[i]; - that.setSelected($options.index(option), false); - } - - that.setSelected(clickedIndex, true); - } else { - var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText, - maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText, - maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), - maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), - $notify = $('
    '); - // If {var} is set in array, replace it - /** @deprecated */ - if (maxOptionsArr[2]) { - maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]); - maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]); - } - - $option.prop('selected', false); - - that.$menu.append($notify); + textElement = generateText({ + text: text, + optionContent: optionContent, + optionSubtext: subtext, + optionIcon: icon + }); - if (maxOptions && maxReached) { - $notify.append($('
    ' + maxTxt + '
    ')); - triggerChange = false; - that.$element.trigger('maxReached' + EVENT_KEY); - } + mainElements.push(generateLI(generateA(textElement, 'opt ' + optionClass + optGroupClass, inline), '', optID)); + mainData.push({ + content: optionContent || text, + subtext: subtext, + tokens: tokens, + type: 'option', + optID: optID, + headerIndex: headerIndex, + lastIndex: headerIndex + parent.childElementCount, + originalIndex: index, + data: thisData + }); - if (maxOptionsGrp && maxReachedGrp) { - $notify.append($('
    ' + maxTxtGrp + '
    ')); - triggerChange = false; - that.$element.trigger('maxReachedGrp' + EVENT_KEY); - } + availableOptionsCount++; + } else if (thisData.divider === true) { + mainElements.push(generateLI(false, classNames.DIVIDER)); + mainData.push({ + type: 'divider', + originalIndex: index, + data: thisData + }); + } else { + // if previous element is not an optgroup and hideDisabled is true + if (!showDivider && that.options.hideDisabled) { + prevHiddenIndex = thisData.prevHiddenIndex; - setTimeout(function () { - that.setSelected(clickedIndex, false); - }, 10); + if (prevHiddenIndex !== undefined) { + // select the element **before** the first hidden element in the group + prevHidden = $selectOptions[prevHiddenIndex].previousElementSibling; - $notify.delay(750).fadeOut(300, function () { - $(this).remove(); - }); - } + if (prevHidden && prevHidden.tagName === 'OPTGROUP' && !prevHidden.disabled) { + showDivider = true; } } } - if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) { - that.$button.focus(); - } else if (that.options.liveSearch) { - that.$searchbox.focus(); + if (showDivider && mainData[mainData.length - 1].type !== 'divider') { + liIndex++; + mainElements.push( + generateLI( + false, + classNames.DIVIDER, + optID + 'div' + ) + ); + mainData.push({ + type: 'divider', + optID: optID + }); } - // Trigger select 'change' - if (triggerChange) { - if ((prevValue != getSelectValues(that.$element[0]) && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) { - // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed. - changedArguments = [clickedIndex, $option.prop('selected'), prevValue]; - that.$element - .triggerNative('change'); - } - } - } - }); + textElement = generateText({ + text: text, + optionContent: optionContent, + optionSubtext: subtext, + optionIcon: icon + }); - this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) { - if (e.currentTarget == this) { - e.preventDefault(); - e.stopPropagation(); - if (that.options.liveSearch && !$(e.target).hasClass('close')) { - that.$searchbox.focus(); - } else { - that.$button.focus(); - } - } - }); + mainElements.push(generateLI(generateA(textElement, optionClass, inline))); + mainData.push({ + content: optionContent || text, + subtext: subtext, + tokens: tokens, + type: 'option', + originalIndex: index, + data: thisData + }); - this.$menuInner.on('click', '.divider, .dropdown-header', function (e) { - e.preventDefault(); - e.stopPropagation(); - if (that.options.liveSearch) { - that.$searchbox.focus(); - } else { - that.$button.focus(); + availableOptionsCount++; } - }); - - this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () { - that.$button.click(); - }); - this.$searchbox.on('click', function (e) { - e.stopPropagation(); - }); + that.selectpicker.main.map.newIndex[index] = liIndex; + that.selectpicker.main.map.originalIndex[liIndex] = index; - this.$menu.on('click', '.actions-btn', function (e) { - if (that.options.liveSearch) { - that.$searchbox.focus(); - } else { - that.$button.focus(); - } + // get the most recent option info added to mainData + var _mainDataLast = mainData[mainData.length - 1]; - e.preventDefault(); - e.stopPropagation(); + _mainDataLast.disabled = isDisabled; - if ($(this).hasClass('bs-select-all')) { - that.selectAll(); - } else { - that.deselectAll(); - } - }); + var combinedLength = 0; - this.$element.on({ - 'change': function () { - that.render(); - that.$element.trigger('changed' + EVENT_KEY, changedArguments); - changedArguments = null; - }, - 'focus': function () { - if (!that.options.mobile) that.$button.focus(); - } - }); - }, + // count the number of characters in the option - not perfect, but should work in most cases + if (_mainDataLast.content) combinedLength += _mainDataLast.content.length; + if (_mainDataLast.subtext) combinedLength += _mainDataLast.subtext.length; + // if there is an icon, ensure this option's width is checked + if (icon) combinedLength += 1; - liveSearchListener: function () { - var that = this, - noResults = document.createElement('li'); + if (combinedLength > widestOptionLength) { + widestOptionLength = combinedLength; - this.$button.on('click.bs.dropdown.data-api', function () { - if (!!that.$searchbox.val()) { - that.$searchbox.val(''); + // guess which option is the widest + // use this when calculating menu width + // not perfect, but it's fast, and the width will be updating accordingly when scrolling + widestOption = mainElements[mainElements.length - 1]; } }); - this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) { - e.stopPropagation(); - }); + this.selectpicker.main.elements = mainElements; + this.selectpicker.main.data = mainData; + this.selectpicker.main.hidden = hiddenOptions; - this.$searchbox.on('input propertychange', function () { - var searchValue = that.$searchbox.val(); + this.selectpicker.current = this.selectpicker.main; - that.selectpicker.search.map.newIndex = {}; - that.selectpicker.search.map.originalIndex = {}; - that.selectpicker.search.elements = []; - that.selectpicker.search.data = []; + this.selectpicker.view.widestOption = widestOption; + this.selectpicker.view.availableOptionsCount = availableOptionsCount; // faster way to get # of available options without filter + }, - if (searchValue) { - var i, - searchMatch = [], - q = searchValue.toUpperCase(), - cache = {}, - cacheArr = [], - searchStyle = that._searchStyle(), - normalizeSearch = that.options.liveSearchNormalize; + findLis: function () { + return this.$menuInner.find('.inner > li'); + }, - if (normalizeSearch) q = normalizeToBase(q); + render: function () { + var that = this, + $selectOptions = this.$element.find('option'), + selectedItems = [], + selectedItemsInTitle = []; - that._$lisSelected = that.$menuInner.find('.selected'); + this.togglePlaceholder(); - for (var i = 0; i < that.selectpicker.main.data.length; i++) { - var li = that.selectpicker.main.data[i]; + this.tabIndex(); - if (!cache[i]) { - cache[i] = stringSearch(li, q, searchStyle, normalizeSearch); - } + for (var index = 0, len = $selectOptions.length; index < len; index++) { + var i = that.selectpicker.main.map.newIndex[index], + option = $selectOptions[index], + optionData = that.selectpicker.main.data[i] || that.selectpicker.main.hidden[index]; - if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) { - if (li.headerIndex > 0) { - cache[li.headerIndex - 1] = true; - cacheArr.push(li.headerIndex - 1); - } + if (option && option.selected && optionData) { + selectedItems.push(option); - cache[li.headerIndex] = true; - cacheArr.push(li.headerIndex); + if ((selectedItemsInTitle.length < 100 && that.options.selectedTextFormat !== 'count') || selectedItems.length === 1) { + var thisData = optionData.data, + icon = thisData.icon && that.options.showIcon ? ' ' : '', + subtext, + titleItem; - cache[li.lastIndex + 1] = true; + if (that.options.showSubtext && thisData.subtext && !that.multiple) { + subtext = ' ' + thisData.subtext + ''; + } else { + subtext = ''; } - if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i); - } - - for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) { - var index = cacheArr[i], - prevIndex = cacheArr[i - 1], - li = that.selectpicker.main.data[index], - liPrev = that.selectpicker.main.data[prevIndex]; - - if (li.type !== 'divider' || (li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i)) { - that.selectpicker.search.data.push(li); - searchMatch.push(that.selectpicker.main.elements[index]); - - if (li.hasOwnProperty('originalIndex')) { - that.selectpicker.search.map.newIndex[li.originalIndex] = searchMatch.length - 1; - that.selectpicker.search.map.originalIndex[searchMatch.length - 1] = li.originalIndex; - } + if (option.title) { + titleItem = option.title; + } else if (thisData.content && that.options.showContent) { + titleItem = thisData.content.toString(); + } else { + titleItem = icon + option.innerHTML.trim() + subtext; } - } - - that.activeIndex = undefined; - that.noScroll = true; - that.$menuInner.scrollTop(0); - that.selectpicker.search.elements = searchMatch; - that.createView(true); - if (!searchMatch.length) { - noResults.className = 'no-results'; - noResults.innerHTML = that.options.noneResultsText.replace('{0}', '"' + htmlEscape(searchValue) + '"'); - that.$menuInner[0].firstChild.appendChild(noResults); + selectedItemsInTitle.push(titleItem); } - } else { - that.$menuInner.scrollTop(0); - that.createView(false); } - }); - }, - - _searchStyle: function () { - return this.options.liveSearchStyle || 'contains'; - }, - - val: function (value) { - if (typeof value !== 'undefined') { - this.$element - .val(value) - .triggerNative('change'); - - return this.$element; - } else { - return this.$element.val(); } - }, - changeAll: function (status) { - if (!this.multiple) return; - if (typeof status === 'undefined') status = true; + // Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled + // Convert all the values into a comma delimited string + var title = !this.multiple ? selectedItemsInTitle[0] : selectedItemsInTitle.join(this.options.multipleSeparator); - var $selectOptions = this.$element.find('option'), - previousSelected = 0, - currentSelected = 0, - prevValue = getSelectValues(this.$element[0]); + // add ellipsis + if (selectedItems.length > 50) title += '...'; - this.$element.addClass('bs-select-hidden'); + // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected etc.. + if (this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1) { + var max = this.options.selectedTextFormat.split('>'); - for (var i = 0; i < this.selectpicker.current.elements.length; i++) { - var liData = this.selectpicker.current.data[i], - index = this.selectpicker.current.map.originalIndex[i], // faster than $(li).data('originalIndex') - option = $selectOptions[index]; + if ((max.length > 1 && selectedItems.length > max[1]) || (max.length === 1 && selectedItems.length >= 2)) { + var totalCount = this.selectpicker.view.availableOptionsCount, + tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText; - if (option && !option.disabled && liData.type !== 'divider') { - if (option.selected) previousSelected++; - option.selected = status; - if (option.selected) currentSelected++; + title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString()); } } - this.$element.removeClass('bs-select-hidden'); - - if (previousSelected === currentSelected) return; - - this.setOptionStatus(); - - this.togglePlaceholder(); + if (this.options.title == undefined) { + // use .attr to ensure undefined is returned if title attribute is not set + this.options.title = this.$element.attr('title'); + } - changedArguments = [null, null, prevValue]; + if (this.options.selectedTextFormat == 'static') { + title = this.options.title; + } - this.$element - .triggerNative('change'); - }, + // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText + if (!title) { + title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText; + } - selectAll: function () { - return this.changeAll(true); - }, + // strip all HTML tags and trim the result, then unescape any escaped tags + this.$button[0].title = htmlUnescape(title.replace(/<[^>]*>?/g, '').trim()); + this.$button.find('.filter-option-inner-inner')[0].innerHTML = title; - deselectAll: function () { - return this.changeAll(false); + this.$element.trigger('rendered' + EVENT_KEY); }, - toggle: function (e) { - e = e || window.event; + /** + * @param [style] + * @param [status] + */ + setStyle: function (style, status) { + if (this.$element.attr('class')) { + this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, '')); + } - if (e) e.stopPropagation(); + var buttonClass = style || this.options.style; - this.$button.trigger('click.bs.dropdown.data-api'); + if (status == 'add') { + this.$button.addClass(buttonClass); + } else if (status == 'remove') { + this.$button.removeClass(buttonClass); + } else { + this.$button.removeClass(this.options.style); + this.$button.addClass(buttonClass); + } }, - keydown: function (e) { - var $this = $(this), - isToggle = $this.hasClass('dropdown-toggle'), - $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU), - that = $parent.data('this'), - $items = that.findLis(), - index, - isActive, - liActive, - activeLi, - offset, - updateScroll = false, - downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab, - isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab, - scrollTop = that.$menuInner[0].scrollTop, - isVirtual = that.isVirtual(), - position0 = isVirtual === true ? that.selectpicker.view.position0 : 0; + liHeight: function (refresh) { + if (!refresh && (this.options.size === false || this.sizeInfo)) return; - isActive = that.$newElement.hasClass(classNames.SHOW); + if (!this.sizeInfo) this.sizeInfo = {}; - if ( - !isActive && - ( - isArrowKey || - (e.which >= 48 && e.which <= 57) || - (e.which >= 96 && e.which <= 105) || - (e.which >= 65 && e.which <= 90) - ) - ) { - that.$button.trigger('click.bs.dropdown.data-api'); - } + var newElement = document.createElement('div'), + menu = document.createElement('div'), + menuInner = document.createElement('div'), + menuInnerInner = document.createElement('ul'), + divider = document.createElement('li'), + dropdownHeader = document.createElement('li'), + li = document.createElement('li'), + a = document.createElement('a'), + text = document.createElement('span'), + header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null, + search = this.options.liveSearch ? document.createElement('div') : null, + actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null, + doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null, + firstOption = this.$element.find('option')[0]; - if (e.which === keyCodes.ESCAPE && isActive) { - e.preventDefault(); - that.$button.trigger('click.bs.dropdown.data-api').focus(); - } + this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth; - if (isArrowKey) { // if up or down - if (!$items.length) return; + text.className = 'text'; + a.className = 'dropdown-item ' + (firstOption ? firstOption.className : ''); + newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW; + newElement.style.width = this.sizeInfo.selectWidth + 'px'; + if (this.options.width === 'auto') menu.style.minWidth = 0; + menu.className = classNames.MENU + ' ' + classNames.SHOW; + menuInner.className = 'inner ' + classNames.SHOW; + menuInnerInner.className = classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : ''); + divider.className = classNames.DIVIDER; + dropdownHeader.className = 'dropdown-header'; - // $items.index/.filter is too slow with a large list and no virtual scroll - index = isVirtual === true ? $items.index($items.filter('.active')) : that.selectpicker.current.map.newIndex[that.activeIndex]; + text.appendChild(document.createTextNode('\u200b')); + a.appendChild(text); + li.appendChild(a); + dropdownHeader.appendChild(text.cloneNode(true)); - if (index === undefined) index = -1; + if (this.selectpicker.view.widestOption) { + menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true)); + } - if (index !== -1) { - liActive = that.selectpicker.current.elements[index + position0]; - liActive.classList.remove('active'); - if (liActive.firstChild) liActive.firstChild.classList.remove('active'); - } + menuInnerInner.appendChild(li); + menuInnerInner.appendChild(divider); + menuInnerInner.appendChild(dropdownHeader); + if (header) menu.appendChild(header); + if (search) { + var input = document.createElement('input'); + search.className = 'bs-searchbox'; + input.className = 'form-control'; + search.appendChild(input); + menu.appendChild(search); + } + if (actions) menu.appendChild(actions); + menuInner.appendChild(menuInnerInner); + menu.appendChild(menuInner); + if (doneButton) menu.appendChild(doneButton); + newElement.appendChild(menu); - if (e.which === keyCodes.ARROW_UP) { // up - if (index !== -1) index--; - if (index + position0 < 0) index += $items.length; + document.body.appendChild(newElement); - if (!that.selectpicker.view.canHighlight[index + position0]) { - index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0; - if (index === -1) index = $items.length - 1; - } - } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down - index++; - if (index + position0 >= that.selectpicker.view.canHighlight.length) index = 0; + var liHeight = a.offsetHeight, + dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0, + headerHeight = header ? header.offsetHeight : 0, + searchHeight = search ? search.offsetHeight : 0, + actionsHeight = actions ? actions.offsetHeight : 0, + doneButtonHeight = doneButton ? doneButton.offsetHeight : 0, + dividerHeight = $(divider).outerHeight(true), + // fall back to jQuery if getComputedStyle is not supported + menuStyle = window.getComputedStyle ? window.getComputedStyle(menu) : false, + menuWidth = menu.offsetWidth, + $menu = menuStyle ? null : $(menu), + menuPadding = { + vert: toInteger(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + + toInteger(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + + toInteger(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + + toInteger(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')), + horiz: toInteger(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) + + toInteger(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) + + toInteger(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) + + toInteger(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth')) + }, + menuExtras = { + vert: menuPadding.vert + + toInteger(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + + toInteger(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2, + horiz: menuPadding.horiz + + toInteger(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) + + toInteger(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2 + }, + scrollBarWidth; - if (!that.selectpicker.view.canHighlight[index + position0]) { - index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true); - } - } + menuInner.style.overflowY = 'scroll'; - e.preventDefault(); + scrollBarWidth = menu.offsetWidth - menuWidth; - var liActiveIndex = position0 + index; + document.body.removeChild(newElement); - if (e.which === keyCodes.ARROW_UP) { // up - // scroll to bottom and highlight last option - if (position0 === 0 && index === $items.length - 1) { - that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight; + this.sizeInfo.liHeight = liHeight; + this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight; + this.sizeInfo.headerHeight = headerHeight; + this.sizeInfo.searchHeight = searchHeight; + this.sizeInfo.actionsHeight = actionsHeight; + this.sizeInfo.doneButtonHeight = doneButtonHeight; + this.sizeInfo.dividerHeight = dividerHeight; + this.sizeInfo.menuPadding = menuPadding; + this.sizeInfo.menuExtras = menuExtras; + this.sizeInfo.menuWidth = menuWidth; + this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth; + this.sizeInfo.scrollBarWidth = scrollBarWidth; + this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight; - liActiveIndex = that.selectpicker.current.elements.length - 1; - } else { - activeLi = that.selectpicker.current.data[liActiveIndex]; - offset = activeLi.position - activeLi.height; + this.setPositionData(); + }, - updateScroll = offset < scrollTop; - } - } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down - // scroll to top and highlight first option - if (index === 0) { - that.$menuInner[0].scrollTop = 0; + getSelectPosition: function () { + var that = this, + $window = $(window), + pos = that.$newElement.offset(), + $container = $(that.options.container), + containerPos; - liActiveIndex = 0; - } else { - activeLi = that.selectpicker.current.data[liActiveIndex]; - offset = activeLi.position - that.sizeInfo.menuInnerHeight; + if (that.options.container && !$container.is('body')) { + containerPos = $container.offset(); + containerPos.top += parseInt($container.css('borderTopWidth')); + containerPos.left += parseInt($container.css('borderLeftWidth')); + } else { + containerPos = { top: 0, left: 0 }; + } - updateScroll = offset > scrollTop; - } - } + var winPad = that.options.windowPadding; - liActive = that.selectpicker.current.elements[liActiveIndex]; + this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop(); + this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2]; + this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft(); + this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1]; + this.sizeInfo.selectOffsetTop -= winPad[0]; + this.sizeInfo.selectOffsetLeft -= winPad[3]; + }, - if (liActive) { - liActive.classList.add('active'); - if (liActive.firstChild) liActive.firstChild.classList.add('active'); - } + setMenuSize: function (isAuto) { + this.getSelectPosition(); - that.activeIndex = that.selectpicker.current.map.originalIndex[liActiveIndex]; + var selectWidth = this.sizeInfo.selectWidth, + liHeight = this.sizeInfo.liHeight, + headerHeight = this.sizeInfo.headerHeight, + searchHeight = this.sizeInfo.searchHeight, + actionsHeight = this.sizeInfo.actionsHeight, + doneButtonHeight = this.sizeInfo.doneButtonHeight, + divHeight = this.sizeInfo.dividerHeight, + menuPadding = this.sizeInfo.menuPadding, + menuInnerHeight, + menuHeight, + divLength = 0, + minHeight, + _minHeight, + maxHeight, + menuInnerMinHeight, + estimate; - that.selectpicker.view.currentActive = liActive; + if (this.options.dropupAuto) { + // Get the estimated height of the menu without scrollbars. + // This is useful for smaller menus, where there might be plenty of room + // below the button without setting dropup, but we can't know + // the exact height of the menu until createView is called later + estimate = liHeight * this.selectpicker.current.elements.length + menuPadding.vert; + this.$newElement.toggleClass(classNames.DROPUP, this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot); + } - if (updateScroll) that.$menuInner[0].scrollTop = offset; + if (this.options.size === 'auto') { + _minHeight = this.selectpicker.current.elements.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0; + menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert; + minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight; + menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0); - if (that.options.liveSearch) { - that.$searchbox.focus(); - } else { - $this.focus(); + if (this.$newElement.hasClass(classNames.DROPUP)) { + menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert; } - } else if ( - (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which)) || - (e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory) - ) { - var searchMatch, - matches = [], - keyHistory; - - e.preventDefault(); - - that.selectpicker.keydown.keyHistory += keyCodeMap[e.which]; - - if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel); - that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start(); - keyHistory = that.selectpicker.keydown.keyHistory; - - // if all letters are the same, set keyHistory to just the first character when searching - if (/^(.)\1+$/.test(keyHistory)) { - keyHistory = keyHistory.charAt(0); + maxHeight = menuHeight; + menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert; + } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) { + for (var i = 0; i < this.options.size; i++) { + if (this.selectpicker.current.data[i].type === 'divider') divLength++; } - // find matches - for (var i = 0; i < that.selectpicker.current.data.length; i++) { - var li = that.selectpicker.current.data[i], - hasMatch; + menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert; + menuInnerHeight = menuHeight - menuPadding.vert; + maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight; + minHeight = menuInnerMinHeight = ''; + } - hasMatch = stringSearch(li, keyHistory, 'startsWith', true); + if (this.options.dropdownAlignRight === 'auto') { + this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < (this.sizeInfo.totalMenuWidth - selectWidth)); + } - if (hasMatch && that.selectpicker.view.canHighlight[i]) { - li.index = i; - matches.push(li.originalIndex); - } - } + this.$menu.css({ + 'max-height': maxHeight + 'px', + 'overflow': 'hidden', + 'min-height': minHeight + 'px' + }); - if (matches.length) { - var matchIndex = 0; + this.$menuInner.css({ + 'max-height': menuInnerHeight + 'px', + 'overflow-y': 'auto', + 'min-height': menuInnerMinHeight + 'px' + }); - $items.removeClass('active').find('a').removeClass('active'); + this.sizeInfo.menuInnerHeight = menuInnerHeight; - // either only one key has been pressed or they are all the same key - if (keyHistory.length === 1) { - matchIndex = matches.indexOf(that.activeIndex); + if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) { + this.sizeInfo.hasScrollBar = true; + this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth; - if (matchIndex === -1 || matchIndex === matches.length - 1) { - matchIndex = 0; - } else { - matchIndex++; - } - } + this.$menu.css('min-width', this.sizeInfo.totalMenuWidth); + } - searchMatch = that.selectpicker.current.map.newIndex[matches[matchIndex]]; + if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update(); + }, - activeLi = that.selectpicker.current.data[searchMatch]; + setSize: function (refresh) { + this.liHeight(refresh); - if (scrollTop - activeLi.position > 0) { - offset = activeLi.position - activeLi.height; - updateScroll = true; - } else { - offset = activeLi.position - that.sizeInfo.menuInnerHeight; - // if the option is already visible at the current scroll position, just keep it the same - updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight; - } + if (this.options.header) this.$menu.css('padding-top', 0); + if (this.options.size === false) return; - liActive = that.selectpicker.current.elements[searchMatch]; - liActive.classList.add('active'); - if (liActive.firstChild) liActive.firstChild.classList.add('active'); - that.activeIndex = matches[matchIndex]; + var that = this, + $window = $(window), + selectedIndex, + offset = 0; - liActive.firstChild.focus(); + this.setMenuSize(); - if (updateScroll) that.$menuInner[0].scrollTop = offset; + if (this.options.size === 'auto') { + this.$searchbox + .off('input.setMenuSize propertychange.setMenuSize') + .on('input.setMenuSize propertychange.setMenuSize', function () { + return that.setMenuSize(); + }); - $this.focus(); - } + $window + .off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize') + .on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () { + return that.setMenuSize(); + }); + } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) { + this.$searchbox.off('input.setMenuSize propertychange.setMenuSize'); + $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize'); } - // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu. - if ( - isActive && - ( - (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory) || - e.which === keyCodes.ENTER || - (e.which === keyCodes.TAB && that.options.selectOnTab) - ) - ) { - if (e.which !== keyCodes.SPACE) e.preventDefault(); - - if (!that.options.liveSearch || e.which !== keyCodes.SPACE) { - that.$menuInner.find('.active a').trigger('click', true); // retain active class - $this.focus(); + if (refresh) { + offset = this.$menuInner[0].scrollTop; + } else if (!that.multiple) { + selectedIndex = that.selectpicker.main.map.newIndex[that.$element[0].selectedIndex]; - if (!that.options.liveSearch) { - // Prevent screen from scrolling if the user hits the spacebar - e.preventDefault(); - // Fixes spacebar selection of dropdown items in FF & IE - $(document).data('spaceSelect', true); - } + if (typeof selectedIndex === 'number' && that.options.size !== false) { + offset = that.sizeInfo.liHeight * selectedIndex; + offset = offset - (that.sizeInfo.menuInnerHeight / 2) + (that.sizeInfo.liHeight / 2); } } - }, - - mobile: function () { - this.$element.addClass('mobile-device'); - }, - - refresh: function () { - // update options if data attributes have been changed - var config = $.extend({}, this.options, this.$element.data()); - this.options = config; - - this.selectpicker.main.map.newIndex = {}; - this.selectpicker.main.map.originalIndex = {}; - this.createLi(); - this.checkDisabled(); - this.render(); - this.setStyle(); - this.setWidth(); - this.setSize(true); - - this.$element.trigger('refreshed' + EVENT_KEY); + that.createView(false, offset); }, - hide: function () { - this.$newElement.hide(); - }, + setWidth: function () { + var that = this; - show: function () { - this.$newElement.show(); - }, + if (this.options.width === 'auto') { + requestAnimationFrame(function () { + that.$menu.css('min-width', '0'); + that.liHeight(); + that.setMenuSize(); - remove: function () { - this.$newElement.remove(); - this.$element.remove(); - }, + // Get correct width if element is hidden + var $selectClone = that.$newElement.clone().appendTo('body'), + btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth(); - destroy: function () { - this.$newElement.before(this.$element).remove(); + $selectClone.remove(); - if (this.$bsContainer) { - this.$bsContainer.remove(); + // Set width to whatever's larger, button title or longest option + that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth); + that.$newElement.css('width', that.sizeInfo.selectWidth + 'px'); + }); + } else if (this.options.width === 'fit') { + // Remove inline min-width so width can be changed from 'auto' + this.$menu.css('min-width', ''); + this.$newElement.css('width', '').addClass('fit-width'); + } else if (this.options.width) { + // Remove inline min-width so width can be changed from 'auto' + this.$menu.css('min-width', ''); + this.$newElement.css('width', this.options.width); } else { - this.$menu.remove(); + // Remove inline min-width/width so width can be changed + this.$menu.css('min-width', ''); + this.$newElement.css('width', ''); + } + // Remove fit-width class if width is changed programmatically + if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') { + this.$newElement.removeClass('fit-width'); } + }, - this.$element - .off(EVENT_KEY) - .removeData('selectpicker') - .removeClass('bs-select-hidden selectpicker'); + selectPosition: function () { + this.$bsContainer = $('
    '); - $(window).off(EVENT_KEY + '.' + this.selectId); - } - }; + var that = this, + $container = $(this.options.container), + pos, + containerPos, + actualHeight, + getPlacement = function ($element) { + var containerPosition = {}, + // fall back to dropdown's default display setting if display is not manually set + display = that.options.display || ( + // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default + $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display + : false + ); - // SELECTPICKER PLUGIN DEFINITION - // ============================== - function Plugin (option) { - // get the args of the outer function.. - var args = arguments; - // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them - // to get lost/corrupted in android 2.3 and IE9 #715 #775 - var _option = option; + that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP)); + pos = $element.offset(); - [].shift.apply(args); + if (!$container.is('body')) { + containerPos = $container.offset(); + containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop(); + containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft(); + } else { + containerPos = { top: 0, left: 0 }; + } - // if the version was not set successfully - if (!version.success) { - // try to retreive it again - try { - version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.'); - } catch (err) { - // fall back to use BootstrapVersion - version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.'); - } + actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight; - version.major = version.full[0]; - version.success = true; + // Bootstrap 4+ uses Popper for menu positioning + if (version.major < 4 || display === 'static') { + containerPosition.top = pos.top - containerPos.top + actualHeight; + containerPosition.left = pos.left - containerPos.left; + } - if (version.major === '4') { - classNames.DIVIDER = 'dropdown-divider'; - classNames.SHOW = 'show'; - classNames.BUTTONCLASS = 'btn-light'; - Selectpicker.DEFAULTS.style = classNames.BUTTONCLASS = 'btn-light'; - classNames.POPOVERHEADER = 'popover-header'; - } - } + containerPosition.width = $element[0].offsetWidth; - var value; - var chain = this.each(function () { - var $this = $(this); - if ($this.is('select')) { - var data = $this.data('selectpicker'), - options = typeof _option == 'object' && _option; + that.$bsContainer.css(containerPosition); + }; - if (!data) { - var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options); - config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template); - $this.data('selectpicker', (data = new Selectpicker(this, config))); - } else if (options) { - for (var i in options) { - if (options.hasOwnProperty(i)) { - data.options[i] = options[i]; - } - } + this.$button.on('click.bs.dropdown.data-api', function () { + if (that.isDisabled()) { + return; } - if (typeof _option == 'string') { - if (data[_option] instanceof Function) { - value = data[_option].apply(data, args); - } else { - value = data.options[_option]; - } - } - } - }); + getPlacement(that.$newElement); - if (typeof value !== 'undefined') { - // noinspection JSUnusedAssignment - return value; - } else { - return chain; - } - } + that.$bsContainer + .appendTo(that.options.container) + .toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW)) + .append(that.$menu); + }); - var old = $.fn.selectpicker; - $.fn.selectpicker = Plugin; - $.fn.selectpicker.Constructor = Selectpicker; - - // SELECTPICKER NO CONFLICT - // ======================== - $.fn.selectpicker.noConflict = function () { - $.fn.selectpicker = old; - return this; - }; - - $(document) - .off('keydown.bs.dropdown.data-api') - .on('keydown' + EVENT_KEY, '.bootstrap-select [data-toggle="dropdown"], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown) - .on('focusin.modal', '.bootstrap-select [data-toggle="dropdown"], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input', function (e) { - e.stopPropagation(); - }); + $(window) + .off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId) + .on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () { + var isActive = that.$newElement.hasClass(classNames.SHOW); - // SELECTPICKER DATA-API - // ===================== - $(window).on('load' + EVENT_KEY + '.data-api', function () { - $('.selectpicker').each(function () { - var $selectpicker = $(this); - Plugin.call($selectpicker, $selectpicker.data()); - }) - }); -})(jQuery); + if (isActive) getPlacement(that.$newElement); + }); + this.$element.on('hide' + EVENT_KEY, function () { + that.$menu.data('height', that.$menu.height()); + that.$bsContainer.detach(); + }); + }, -})); + setOptionStatus: function () { + var that = this, + $selectOptions = this.$element.find('option'); + that.noScroll = false; -/***/ }), + if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) { + for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) { + var index = that.selectpicker.current.map.originalIndex[i + that.selectpicker.view.position0], // faster than $(li).data('originalIndex') + option = $selectOptions[index]; -/***/ "./node_modules/bootstrap-v4-rtl/dist/js/bootstrap.js": -/*!************************************************************!*\ - !*** ./node_modules/bootstrap-v4-rtl/dist/js/bootstrap.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + if (option) { + var liIndex = this.selectpicker.main.map.newIndex[index], + li = this.selectpicker.main.elements[liIndex]; -/*! - * Bootstrap v4.1.1-0 (https://github.com/MahdiMajidzadeh/bootstrap-v4-rtl) - * Copyright 2011-2018 Mahdi Majidzadeh - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -(function (global, factory) { - true ? factory(exports, __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")) : - undefined; -}(this, (function (exports,$,Popper) { 'use strict'; + that.setDisabled( + index, + option.disabled || (option.parentNode.tagName === 'OPTGROUP' && option.parentNode.disabled), + liIndex, + li + ); - $ = $ && $.hasOwnProperty('default') ? $['default'] : $; - Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; + that.setSelected( + index, + option.selected, + liIndex, + li + ); + } + } + } + }, - 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); - } - } + /** + * @param {number} index - the index of the option that is being changed + * @param {boolean} selected - true if the option is being selected, false if being deselected + */ + setSelected: function (index, selected, liIndex, li) { + var activeIndexIsSet = this.activeIndex !== undefined, + thisIsActive = this.activeIndex === index, + prevActiveIndex, + prevActive, + a, + // if current option is already active + // OR + // if the current option is being selected, it's NOT multiple, and + // activeIndex is undefined: + // - when the menu is first being opened, OR + // - after a search has been performed, OR + // - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeIndex) + keepActive = thisIsActive || (selected && !this.multiple && !activeIndexIsSet); - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } + if (!liIndex) liIndex = this.selectpicker.main.map.newIndex[index]; + if (!li) li = this.selectpicker.main.elements[liIndex]; - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } + a = li.firstChild; - return obj; - } + if (selected) { + this.selectedIndex = index; + } - function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); + li.classList.toggle('selected', selected); + li.classList.toggle('active', keepActive); - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); + if (keepActive) { + this.selectpicker.view.currentActive = li; + this.activeIndex = index; } - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; - } + if (a) { + a.classList.toggle('selected', selected); + a.classList.toggle('active', keepActive); + a.setAttribute('aria-selected', selected); + } - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; - } + if (!keepActive) { + if (!activeIndexIsSet && selected && this.prevActiveIndex !== undefined) { + prevActiveIndex = this.selectpicker.main.map.newIndex[this.prevActiveIndex]; + prevActive = this.selectpicker.main.elements[prevActiveIndex]; - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): util.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ + prevActive.classList.remove('active'); + if (prevActive.firstChild) { + prevActive.firstChild.classList.remove('active'); + } + } + } + }, - var Util = function ($$$1) { /** - * ------------------------------------------------------------------------ - * Private TransitionEnd Helpers - * ------------------------------------------------------------------------ + * @param {number} index - the index of the option that is being disabled + * @param {boolean} disabled - true if the option is being disabled, false if being enabled */ - var TRANSITION_END = 'transitionend'; - var MAX_UID = 1000000; - var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) - - function toType(obj) { - return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); - } + setDisabled: function (index, disabled, liIndex, li) { + var a; - function getSpecialTransitionEndEvent() { - return { - bindType: TRANSITION_END, - delegateType: TRANSITION_END, - handle: function handle(event) { - if ($$$1(event.target).is(this)) { - return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params - } + if (!liIndex) liIndex = this.selectpicker.main.map.newIndex[index]; + if (!li) li = this.selectpicker.main.elements[liIndex]; - return undefined; // eslint-disable-line no-undefined - } - }; - } + a = li.firstChild; - function transitionEndEmulator(duration) { - var _this = this; + li.classList.toggle(classNames.DISABLED, disabled); - var called = false; - $$$1(this).one(Util.TRANSITION_END, function () { - called = true; - }); - setTimeout(function () { - if (!called) { - Util.triggerTransitionEnd(_this); - } - }, duration); - return this; - } + if (a) { + if (version.major === '4') a.classList.toggle(classNames.DISABLED, disabled); - function setTransitionEndSupport() { - $$$1.fn.emulateTransitionEnd = transitionEndEmulator; - $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); - } - /** - * -------------------------------------------------------------------------- - * Public Util Api - * -------------------------------------------------------------------------- - */ + a.setAttribute('aria-disabled', disabled); + if (disabled) { + a.setAttribute('tabindex', -1); + } else { + a.setAttribute('tabindex', 0); + } + } + }, - var Util = { - TRANSITION_END: 'bsTransitionEnd', - getUID: function getUID(prefix) { - do { - // eslint-disable-next-line no-bitwise - prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here - } while (document.getElementById(prefix)); + isDisabled: function () { + return this.$element[0].disabled; + }, - return prefix; - }, - getSelectorFromElement: function getSelectorFromElement(element) { - var selector = element.getAttribute('data-target'); + checkDisabled: function () { + var that = this; - if (!selector || selector === '#') { - selector = element.getAttribute('href') || ''; + if (this.isDisabled()) { + this.$newElement.addClass(classNames.DISABLED); + this.$button.addClass(classNames.DISABLED).attr('tabindex', -1).attr('aria-disabled', true); + } else { + if (this.$button.hasClass(classNames.DISABLED)) { + this.$newElement.removeClass(classNames.DISABLED); + this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false); } - try { - var $selector = $$$1(document).find(selector); - return $selector.length > 0 ? selector : null; - } catch (err) { - return null; + if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) { + this.$button.removeAttr('tabindex'); } - }, - getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { - if (!element) { - return 0; - } // Get transition-duration of the element - + } - var transitionDuration = $$$1(element).css('transition-duration'); - var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found + this.$button.click(function () { + return !that.isDisabled(); + }); + }, - if (!floatTransitionDuration) { - return 0; - } // If multiple durations are defined, take the first + togglePlaceholder: function () { + // much faster than calling $.val() + var element = this.$element[0], + selectedIndex = element.selectedIndex, + nothingSelected = selectedIndex === -1; + if (!nothingSelected && !element.options[selectedIndex].value) nothingSelected = true; - transitionDuration = transitionDuration.split(',')[0]; - return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER; - }, - reflow: function reflow(element) { - return element.offsetHeight; - }, - triggerTransitionEnd: function triggerTransitionEnd(element) { - $$$1(element).trigger(TRANSITION_END); - }, - // TODO: Remove in v5 - supportsTransitionEnd: function supportsTransitionEnd() { - return Boolean(TRANSITION_END); - }, - isElement: function isElement(obj) { - return (obj[0] || obj).nodeType; - }, - typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { - for (var property in configTypes) { - if (Object.prototype.hasOwnProperty.call(configTypes, property)) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = value && Util.isElement(value) ? 'element' : toType(value); + this.$button.toggleClass('bs-placeholder', nothingSelected); + }, - if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); - } - } - } + tabIndex: function () { + if (this.$element.data('tabindex') !== this.$element.attr('tabindex') && + (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) { + this.$element.data('tabindex', this.$element.attr('tabindex')); + this.$button.attr('tabindex', this.$element.data('tabindex')); } - }; - setTransitionEndSupport(); - return Util; - }($); - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): alert.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ + this.$element.attr('tabindex', -98); + }, - var Alert = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'alert'; - var VERSION = '4.1.1'; - var DATA_KEY = 'bs.alert'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var Selector = { - DISMISS: '[data-dismiss="alert"]' - }; - var Event = { - CLOSE: "close" + EVENT_KEY, - CLOSED: "closed" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - ALERT: 'alert', - FADE: 'fade', - SHOW: 'show' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ + clickListener: function () { + var that = this, + $document = $(document); - }; + $document.data('spaceSelect', false); - var Alert = - /*#__PURE__*/ - function () { - function Alert(element) { - this._element = element; - } // Getters + this.$button.on('keyup', function (e) { + if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) { + e.preventDefault(); + $document.data('spaceSelect', false); + } + }); + this.$newElement.on('show.bs.dropdown', function () { + if (version.major > 3 && !that.dropdown) { + that.dropdown = that.$button.data('bs.dropdown'); + that.dropdown._menu = that.$menu[0]; + } + }); - var _proto = Alert.prototype; + this.$button.on('click.bs.dropdown.data-api', function () { + if (!that.$newElement.hasClass(classNames.SHOW)) { + that.setSize(); + } + }); - // Public - _proto.close = function close(element) { - var rootElement = this._element; + function setFocus () { + if (that.options.liveSearch) { + that.$searchbox.focus(); + } else { + that.$menuInner.focus(); + } + } - if (element) { - rootElement = this._getRootElement(element); + function checkPopperExists () { + if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state.isCreated) { + setFocus(); + } else { + requestAnimationFrame(checkPopperExists); } + } - var customEvent = this._triggerCloseEvent(rootElement); + this.$element.on('shown' + EVENT_KEY, function () { + if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) { + that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop; + } - if (customEvent.isDefaultPrevented()) { - return; + if (version.major > 3) { + requestAnimationFrame(checkPopperExists); + } else { + setFocus(); } + }); - this._removeElement(rootElement); - }; + this.$menuInner.on('click', 'li a', function (e, retainActive) { + var $this = $(this), + position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0, + clickedIndex = that.selectpicker.current.map.originalIndex[$this.parent().index() + position0], + prevValue = getSelectValues(that.$element[0]), + prevIndex = that.$element.prop('selectedIndex'), + triggerChange = true; - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - this._element = null; - }; // Private + // Don't close on multi choice menu + if (that.multiple && that.options.maxOptions !== 1) { + e.stopPropagation(); + } + e.preventDefault(); - _proto._getRootElement = function _getRootElement(element) { - var selector = Util.getSelectorFromElement(element); - var parent = false; + // Don't run if the select is disabled + if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) { + var $options = that.$element.find('option'), + $option = $options.eq(clickedIndex), + state = $option.prop('selected'), + $optgroup = $option.parent('optgroup'), + $optgroupOptions = $optgroup.find('option'), + maxOptions = that.options.maxOptions, + maxOptionsGrp = $optgroup.data('maxOptions') || false; - if (selector) { - parent = $$$1(selector)[0]; - } + if (clickedIndex === that.activeIndex) retainActive = true; - if (!parent) { - parent = $$$1(element).closest("." + ClassName.ALERT)[0]; - } + if (!retainActive) { + that.prevActiveIndex = that.activeIndex; + that.activeIndex = undefined; + } - return parent; - }; + if (!that.multiple) { // Deselect all others if not multi select box + $options.prop('selected', false); + $option.prop('selected', true); + that.setSelected(clickedIndex, true); + } else { // Toggle the one we have chosen if we are multi select. + $option.prop('selected', !state); - _proto._triggerCloseEvent = function _triggerCloseEvent(element) { - var closeEvent = $$$1.Event(Event.CLOSE); - $$$1(element).trigger(closeEvent); - return closeEvent; - }; + that.setSelected(clickedIndex, !state); + $this.blur(); - _proto._removeElement = function _removeElement(element) { - var _this = this; + if (maxOptions !== false || maxOptionsGrp !== false) { + var maxReached = maxOptions < $options.filter(':selected').length, + maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length; - $$$1(element).removeClass(ClassName.SHOW); + if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { + if (maxOptions && maxOptions == 1) { + $options.prop('selected', false); + $option.prop('selected', true); - if (!$$$1(element).hasClass(ClassName.FADE)) { - this._destroyElement(element); + for (var i = 0; i < $options.length; i++) { + that.setSelected(i, false); + } - return; - } + that.setSelected(clickedIndex, true); + } else if (maxOptionsGrp && maxOptionsGrp == 1) { + $optgroup.find('option:selected').prop('selected', false); + $option.prop('selected', true); - var transitionDuration = Util.getTransitionDurationFromElement(element); - $$$1(element).one(Util.TRANSITION_END, function (event) { - return _this._destroyElement(element, event); - }).emulateTransitionEnd(transitionDuration); - }; + for (var i = 0; i < $optgroupOptions.length; i++) { + var option = $optgroupOptions[i]; + that.setSelected($options.index(option), false); + } - _proto._destroyElement = function _destroyElement(element) { - $$$1(element).detach().trigger(Event.CLOSED).remove(); - }; // Static + that.setSelected(clickedIndex, true); + } else { + var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText, + maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText, + maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), + maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), + $notify = $('
    '); + // If {var} is set in array, replace it + /** @deprecated */ + if (maxOptionsArr[2]) { + maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]); + maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]); + } + $option.prop('selected', false); - Alert._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $element = $$$1(this); - var data = $element.data(DATA_KEY); + that.$menu.append($notify); - if (!data) { - data = new Alert(this); - $element.data(DATA_KEY, data); + if (maxOptions && maxReached) { + $notify.append($('
    ' + maxTxt + '
    ')); + triggerChange = false; + that.$element.trigger('maxReached' + EVENT_KEY); + } + + if (maxOptionsGrp && maxReachedGrp) { + $notify.append($('
    ' + maxTxtGrp + '
    ')); + triggerChange = false; + that.$element.trigger('maxReachedGrp' + EVENT_KEY); + } + + setTimeout(function () { + that.setSelected(clickedIndex, false); + }, 10); + + $notify.delay(750).fadeOut(300, function () { + $(this).remove(); + }); + } + } + } } - if (config === 'close') { - data[config](this); + if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) { + that.$button.focus(); + } else if (that.options.liveSearch) { + that.$searchbox.focus(); } - }); - }; - Alert._handleDismiss = function _handleDismiss(alertInstance) { - return function (event) { - if (event) { - event.preventDefault(); + // Trigger select 'change' + if (triggerChange) { + if ((prevValue != getSelectValues(that.$element[0]) && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) { + // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed. + changedArguments = [clickedIndex, $option.prop('selected'), prevValue]; + that.$element + .triggerNative('change'); + } } + } + }); - alertInstance.close(this); - }; - }; + this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) { + if (e.currentTarget == this) { + e.preventDefault(); + e.stopPropagation(); + if (that.options.liveSearch && !$(e.target).hasClass('close')) { + that.$searchbox.focus(); + } else { + that.$button.focus(); + } + } + }); - _createClass(Alert, null, [{ - key: "VERSION", - get: function get() { - return VERSION; + this.$menuInner.on('click', '.divider, .dropdown-header', function (e) { + e.preventDefault(); + e.stopPropagation(); + if (that.options.liveSearch) { + that.$searchbox.focus(); + } else { + that.$button.focus(); } - }]); + }); - return Alert; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ + this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () { + that.$button.click(); + }); + this.$searchbox.on('click', function (e) { + e.stopPropagation(); + }); - $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ + this.$menu.on('click', '.actions-btn', function (e) { + if (that.options.liveSearch) { + that.$searchbox.focus(); + } else { + that.$button.focus(); + } - $$$1.fn[NAME] = Alert._jQueryInterface; - $$$1.fn[NAME].Constructor = Alert; + e.preventDefault(); + e.stopPropagation(); - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Alert._jQueryInterface; - }; + if ($(this).hasClass('bs-select-all')) { + that.selectAll(); + } else { + that.deselectAll(); + } + }); - return Alert; - }($); + this.$element.on({ + 'change': function () { + that.render(); + that.$element.trigger('changed' + EVENT_KEY, changedArguments); + changedArguments = null; + }, + 'focus': function () { + if (!that.options.mobile) that.$button.focus(); + } + }); + }, - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): button.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ + liveSearchListener: function () { + var that = this, + noResults = document.createElement('li'); - var Button = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'button'; - var VERSION = '4.1.1'; - var DATA_KEY = 'bs.button'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var ClassName = { - ACTIVE: 'active', - BUTTON: 'btn', - FOCUS: 'focus' - }; - var Selector = { - DATA_TOGGLE_CARROT: '[data-toggle^="button"]', - DATA_TOGGLE: '[data-toggle="buttons"]', - INPUT: 'input', - ACTIVE: '.active', - BUTTON: '.btn' - }; - var Event = { - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, - FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ + this.$button.on('click.bs.dropdown.data-api', function () { + if (!!that.$searchbox.val()) { + that.$searchbox.val(''); + } + }); - }; + this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) { + e.stopPropagation(); + }); - var Button = - /*#__PURE__*/ - function () { - function Button(element) { - this._element = element; - } // Getters + this.$searchbox.on('input propertychange', function () { + var searchValue = that.$searchbox.val(); + that.selectpicker.search.map.newIndex = {}; + that.selectpicker.search.map.originalIndex = {}; + that.selectpicker.search.elements = []; + that.selectpicker.search.data = []; - var _proto = Button.prototype; + if (searchValue) { + var i, + searchMatch = [], + q = searchValue.toUpperCase(), + cache = {}, + cacheArr = [], + searchStyle = that._searchStyle(), + normalizeSearch = that.options.liveSearchNormalize; - // Public - _proto.toggle = function toggle() { - var triggerChangeEvent = true; - var addAriaPressed = true; - var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; + if (normalizeSearch) q = normalizeToBase(q); - if (rootElement) { - var input = $$$1(this._element).find(Selector.INPUT)[0]; + that._$lisSelected = that.$menuInner.find('.selected'); - if (input) { - if (input.type === 'radio') { - if (input.checked && $$$1(this._element).hasClass(ClassName.ACTIVE)) { - triggerChangeEvent = false; - } else { - var activeElement = $$$1(rootElement).find(Selector.ACTIVE)[0]; + for (var i = 0; i < that.selectpicker.main.data.length; i++) { + var li = that.selectpicker.main.data[i]; - if (activeElement) { - $$$1(activeElement).removeClass(ClassName.ACTIVE); - } - } + if (!cache[i]) { + cache[i] = stringSearch(li, q, searchStyle, normalizeSearch); } - if (triggerChangeEvent) { - if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { - return; + if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) { + if (li.headerIndex > 0) { + cache[li.headerIndex - 1] = true; + cacheArr.push(li.headerIndex - 1); } - input.checked = !$$$1(this._element).hasClass(ClassName.ACTIVE); - $$$1(input).trigger('change'); + cache[li.headerIndex] = true; + cacheArr.push(li.headerIndex); + + cache[li.lastIndex + 1] = true; } - input.focus(); - addAriaPressed = false; + if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i); } - } - - if (addAriaPressed) { - this._element.setAttribute('aria-pressed', !$$$1(this._element).hasClass(ClassName.ACTIVE)); - } - - if (triggerChangeEvent) { - $$$1(this._element).toggleClass(ClassName.ACTIVE); - } - }; - - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - this._element = null; - }; // Static + for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) { + var index = cacheArr[i], + prevIndex = cacheArr[i - 1], + li = that.selectpicker.main.data[index], + liPrev = that.selectpicker.main.data[prevIndex]; - Button._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + if (li.type !== 'divider' || (li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i)) { + that.selectpicker.search.data.push(li); + searchMatch.push(that.selectpicker.main.elements[index]); - if (!data) { - data = new Button(this); - $$$1(this).data(DATA_KEY, data); + if (li.hasOwnProperty('originalIndex')) { + that.selectpicker.search.map.newIndex[li.originalIndex] = searchMatch.length - 1; + that.selectpicker.search.map.originalIndex[searchMatch.length - 1] = li.originalIndex; + } + } } - if (config === 'toggle') { - data[config](); - } - }); - }; + that.activeIndex = undefined; + that.noScroll = true; + that.$menuInner.scrollTop(0); + that.selectpicker.search.elements = searchMatch; + that.createView(true); - _createClass(Button, null, [{ - key: "VERSION", - get: function get() { - return VERSION; + if (!searchMatch.length) { + noResults.className = 'no-results'; + noResults.innerHTML = that.options.noneResultsText.replace('{0}', '"' + htmlEscape(searchValue) + '"'); + that.$menuInner[0].firstChild.appendChild(noResults); + } + } else { + that.$menuInner.scrollTop(0); + that.createView(false); } - }]); - - return Button; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ + }); + }, + _searchStyle: function () { + return this.options.liveSearchStyle || 'contains'; + }, - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { - event.preventDefault(); - var button = event.target; + val: function (value) { + if (typeof value !== 'undefined') { + this.$element + .val(value) + .triggerNative('change'); - if (!$$$1(button).hasClass(ClassName.BUTTON)) { - button = $$$1(button).closest(Selector.BUTTON); + return this.$element; + } else { + return this.$element.val(); } + }, - Button._jQueryInterface.call($$$1(button), 'toggle'); - }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { - var button = $$$1(event.target).closest(Selector.BUTTON)[0]; - $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $$$1.fn[NAME] = Button._jQueryInterface; - $$$1.fn[NAME].Constructor = Button; + changeAll: function (status) { + if (!this.multiple) return; + if (typeof status === 'undefined') status = true; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Button._jQueryInterface; - }; + var $selectOptions = this.$element.find('option'), + previousSelected = 0, + currentSelected = 0, + prevValue = getSelectValues(this.$element[0]); - return Button; - }($); + this.$element.addClass('bs-select-hidden'); - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): carousel.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ + for (var i = 0; i < this.selectpicker.current.elements.length; i++) { + var liData = this.selectpicker.current.data[i], + index = this.selectpicker.current.map.originalIndex[i], // faster than $(li).data('originalIndex') + option = $selectOptions[index]; - var Carousel = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'carousel'; - var VERSION = '4.1.1'; - var DATA_KEY = 'bs.carousel'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key + if (option && !option.disabled && liData.type !== 'divider') { + if (option.selected) previousSelected++; + option.selected = status; + if (option.selected) currentSelected++; + } + } - var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key + this.$element.removeClass('bs-select-hidden'); - var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch + if (previousSelected === currentSelected) return; - var Default = { - interval: 5000, - keyboard: true, - slide: false, - pause: 'hover', - wrap: true - }; - var DefaultType = { - interval: '(number|boolean)', - keyboard: 'boolean', - slide: '(boolean|string)', - pause: '(string|boolean)', - wrap: 'boolean' - }; - var Direction = { - NEXT: 'next', - PREV: 'prev', - LEFT: 'left', - RIGHT: 'right' - }; - var Event = { - SLIDE: "slide" + EVENT_KEY, - SLID: "slid" + EVENT_KEY, - KEYDOWN: "keydown" + EVENT_KEY, - MOUSEENTER: "mouseenter" + EVENT_KEY, - MOUSELEAVE: "mouseleave" + EVENT_KEY, - TOUCHEND: "touchend" + EVENT_KEY, - LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - CAROUSEL: 'carousel', - ACTIVE: 'active', - SLIDE: 'slide', - RIGHT: 'carousel-item-right', - LEFT: 'carousel-item-left', - NEXT: 'carousel-item-next', - PREV: 'carousel-item-prev', - ITEM: 'carousel-item' - }; - var Selector = { - ACTIVE: '.active', - ACTIVE_ITEM: '.active.carousel-item', - ITEM: '.carousel-item', - NEXT_PREV: '.carousel-item-next, .carousel-item-prev', - INDICATORS: '.carousel-indicators', - DATA_SLIDE: '[data-slide], [data-slide-to]', - DATA_RIDE: '[data-ride="carousel"]' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ + this.setOptionStatus(); - }; + this.togglePlaceholder(); - var Carousel = - /*#__PURE__*/ - function () { - function Carousel(element, config) { - this._items = null; - this._interval = null; - this._activeElement = null; - this._isPaused = false; - this._isSliding = false; - this.touchTimeout = null; - this._config = this._getConfig(config); - this._element = $$$1(element)[0]; - this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0]; + changedArguments = [null, null, prevValue]; - this._addEventListeners(); - } // Getters + this.$element + .triggerNative('change'); + }, + selectAll: function () { + return this.changeAll(true); + }, - var _proto = Carousel.prototype; + deselectAll: function () { + return this.changeAll(false); + }, - // Public - _proto.next = function next() { - if (!this._isSliding) { - this._slide(Direction.NEXT); - } - }; + toggle: function (e) { + e = e || window.event; - _proto.nextWhenVisible = function nextWhenVisible() { - // Don't call next when the page isn't visible - // or the carousel or its parent isn't visible - if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') { - this.next(); - } - }; + if (e) e.stopPropagation(); - _proto.prev = function prev() { - if (!this._isSliding) { - this._slide(Direction.PREV); - } - }; + this.$button.trigger('click.bs.dropdown.data-api'); + }, - _proto.pause = function pause(event) { - if (!event) { - this._isPaused = true; - } - - if ($$$1(this._element).find(Selector.NEXT_PREV)[0]) { - Util.triggerTransitionEnd(this._element); - this.cycle(true); - } - - clearInterval(this._interval); - this._interval = null; - }; + keydown: function (e) { + var $this = $(this), + isToggle = $this.hasClass('dropdown-toggle'), + $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU), + that = $parent.data('this'), + $items = that.findLis(), + index, + isActive, + liActive, + activeLi, + offset, + updateScroll = false, + downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab, + isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab, + scrollTop = that.$menuInner[0].scrollTop, + isVirtual = that.isVirtual(), + position0 = isVirtual === true ? that.selectpicker.view.position0 : 0; - _proto.cycle = function cycle(event) { - if (!event) { - this._isPaused = false; - } + isActive = that.$newElement.hasClass(classNames.SHOW); - if (this._interval) { - clearInterval(this._interval); - this._interval = null; - } + if ( + !isActive && + ( + isArrowKey || + (e.which >= 48 && e.which <= 57) || + (e.which >= 96 && e.which <= 105) || + (e.which >= 65 && e.which <= 90) + ) + ) { + that.$button.trigger('click.bs.dropdown.data-api'); + } - if (this._config.interval && !this._isPaused) { - this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); - } - }; + if (e.which === keyCodes.ESCAPE && isActive) { + e.preventDefault(); + that.$button.trigger('click.bs.dropdown.data-api').focus(); + } - _proto.to = function to(index) { - var _this = this; + if (isArrowKey) { // if up or down + if (!$items.length) return; - this._activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; + // $items.index/.filter is too slow with a large list and no virtual scroll + index = isVirtual === true ? $items.index($items.filter('.active')) : that.selectpicker.current.map.newIndex[that.activeIndex]; - var activeIndex = this._getItemIndex(this._activeElement); + if (index === undefined) index = -1; - if (index > this._items.length - 1 || index < 0) { - return; + if (index !== -1) { + liActive = that.selectpicker.current.elements[index + position0]; + liActive.classList.remove('active'); + if (liActive.firstChild) liActive.firstChild.classList.remove('active'); } - if (this._isSliding) { - $$$1(this._element).one(Event.SLID, function () { - return _this.to(index); - }); - return; - } + if (e.which === keyCodes.ARROW_UP) { // up + if (index !== -1) index--; + if (index + position0 < 0) index += $items.length; - if (activeIndex === index) { - this.pause(); - this.cycle(); - return; + if (!that.selectpicker.view.canHighlight[index + position0]) { + index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0; + if (index === -1) index = $items.length - 1; + } + } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down + index++; + if (index + position0 >= that.selectpicker.view.canHighlight.length) index = 0; + + if (!that.selectpicker.view.canHighlight[index + position0]) { + index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true); + } } - var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; + e.preventDefault(); - this._slide(direction, this._items[index]); - }; + var liActiveIndex = position0 + index; - _proto.dispose = function dispose() { - $$$1(this._element).off(EVENT_KEY); - $$$1.removeData(this._element, DATA_KEY); - this._items = null; - this._config = null; - this._element = null; - this._interval = null; - this._isPaused = null; - this._isSliding = null; - this._activeElement = null; - this._indicatorsElement = null; - }; // Private + if (e.which === keyCodes.ARROW_UP) { // up + // scroll to bottom and highlight last option + if (position0 === 0 && index === $items.length - 1) { + that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight; + liActiveIndex = that.selectpicker.current.elements.length - 1; + } else { + activeLi = that.selectpicker.current.data[liActiveIndex]; + offset = activeLi.position - activeLi.height; - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - Util.typeCheckConfig(NAME, config, DefaultType); - return config; - }; + updateScroll = offset < scrollTop; + } + } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down + // scroll to top and highlight first option + if (index === 0) { + that.$menuInner[0].scrollTop = 0; - _proto._addEventListeners = function _addEventListeners() { - var _this2 = this; + liActiveIndex = 0; + } else { + activeLi = that.selectpicker.current.data[liActiveIndex]; + offset = activeLi.position - that.sizeInfo.menuInnerHeight; - if (this._config.keyboard) { - $$$1(this._element).on(Event.KEYDOWN, function (event) { - return _this2._keydown(event); - }); + updateScroll = offset > scrollTop; + } } - if (this._config.pause === 'hover') { - $$$1(this._element).on(Event.MOUSEENTER, function (event) { - return _this2.pause(event); - }).on(Event.MOUSELEAVE, function (event) { - return _this2.cycle(event); - }); - - if ('ontouchstart' in document.documentElement) { - // If it's a touch-enabled device, mouseenter/leave are fired as - // part of the mouse compatibility events on first tap - the carousel - // would stop cycling until user tapped out of it; - // here, we listen for touchend, explicitly pause the carousel - // (as if it's the second time we tap on it, mouseenter compat event - // is NOT fired) and after a timeout (to allow for mouse compatibility - // events to fire) we explicitly restart cycling - $$$1(this._element).on(Event.TOUCHEND, function () { - _this2.pause(); - - if (_this2.touchTimeout) { - clearTimeout(_this2.touchTimeout); - } + liActive = that.selectpicker.current.elements[liActiveIndex]; - _this2.touchTimeout = setTimeout(function (event) { - return _this2.cycle(event); - }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); - }); - } + if (liActive) { + liActive.classList.add('active'); + if (liActive.firstChild) liActive.firstChild.classList.add('active'); } - }; - _proto._keydown = function _keydown(event) { - if (/input|textarea/i.test(event.target.tagName)) { - return; - } + that.activeIndex = that.selectpicker.current.map.originalIndex[liActiveIndex]; - switch (event.which) { - case ARROW_LEFT_KEYCODE: - event.preventDefault(); - this.prev(); - break; + that.selectpicker.view.currentActive = liActive; - case ARROW_RIGHT_KEYCODE: - event.preventDefault(); - this.next(); - break; + if (updateScroll) that.$menuInner[0].scrollTop = offset; - default: + if (that.options.liveSearch) { + that.$searchbox.focus(); + } else { + $this.focus(); } - }; + } else if ( + (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which)) || + (e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory) + ) { + var searchMatch, + matches = [], + keyHistory; - _proto._getItemIndex = function _getItemIndex(element) { - this._items = $$$1.makeArray($$$1(element).parent().find(Selector.ITEM)); - return this._items.indexOf(element); - }; + e.preventDefault(); - _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { - var isNextDirection = direction === Direction.NEXT; - var isPrevDirection = direction === Direction.PREV; + that.selectpicker.keydown.keyHistory += keyCodeMap[e.which]; - var activeIndex = this._getItemIndex(activeElement); + if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel); + that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start(); - var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; + keyHistory = that.selectpicker.keydown.keyHistory; - if (isGoingToWrap && !this._config.wrap) { - return activeElement; + // if all letters are the same, set keyHistory to just the first character when searching + if (/^(.)\1+$/.test(keyHistory)) { + keyHistory = keyHistory.charAt(0); } - var delta = direction === Direction.PREV ? -1 : 1; - var itemIndex = (activeIndex + delta) % this._items.length; - return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; - }; - - _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { - var targetIndex = this._getItemIndex(relatedTarget); - - var fromIndex = this._getItemIndex($$$1(this._element).find(Selector.ACTIVE_ITEM)[0]); - - var slideEvent = $$$1.Event(Event.SLIDE, { - relatedTarget: relatedTarget, - direction: eventDirectionName, - from: fromIndex, - to: targetIndex - }); - $$$1(this._element).trigger(slideEvent); - return slideEvent; - }; - - _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { - if (this._indicatorsElement) { - $$$1(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); + // find matches + for (var i = 0; i < that.selectpicker.current.data.length; i++) { + var li = that.selectpicker.current.data[i], + hasMatch; - var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; + hasMatch = stringSearch(li, keyHistory, 'startsWith', true); - if (nextIndicator) { - $$$1(nextIndicator).addClass(ClassName.ACTIVE); + if (hasMatch && that.selectpicker.view.canHighlight[i]) { + li.index = i; + matches.push(li.originalIndex); } } - }; - _proto._slide = function _slide(direction, element) { - var _this3 = this; + if (matches.length) { + var matchIndex = 0; - var activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; + $items.removeClass('active').find('a').removeClass('active'); - var activeElementIndex = this._getItemIndex(activeElement); + // either only one key has been pressed or they are all the same key + if (keyHistory.length === 1) { + matchIndex = matches.indexOf(that.activeIndex); - var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); + if (matchIndex === -1 || matchIndex === matches.length - 1) { + matchIndex = 0; + } else { + matchIndex++; + } + } - var nextElementIndex = this._getItemIndex(nextElement); + searchMatch = that.selectpicker.current.map.newIndex[matches[matchIndex]]; - var isCycling = Boolean(this._interval); - var directionalClassName; - var orderClassName; - var eventDirectionName; + activeLi = that.selectpicker.current.data[searchMatch]; - if (direction === Direction.NEXT) { - directionalClassName = ClassName.LEFT; - orderClassName = ClassName.NEXT; - eventDirectionName = Direction.LEFT; - } else { - directionalClassName = ClassName.RIGHT; - orderClassName = ClassName.PREV; - eventDirectionName = Direction.RIGHT; - } + if (scrollTop - activeLi.position > 0) { + offset = activeLi.position - activeLi.height; + updateScroll = true; + } else { + offset = activeLi.position - that.sizeInfo.menuInnerHeight; + // if the option is already visible at the current scroll position, just keep it the same + updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight; + } - if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { - this._isSliding = false; - return; - } + liActive = that.selectpicker.current.elements[searchMatch]; + liActive.classList.add('active'); + if (liActive.firstChild) liActive.firstChild.classList.add('active'); + that.activeIndex = matches[matchIndex]; - var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); + liActive.firstChild.focus(); - if (slideEvent.isDefaultPrevented()) { - return; - } + if (updateScroll) that.$menuInner[0].scrollTop = offset; - if (!activeElement || !nextElement) { - // Some weirdness is happening, so we bail - return; + $this.focus(); } + } - this._isSliding = true; + // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu. + if ( + isActive && + ( + (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory) || + e.which === keyCodes.ENTER || + (e.which === keyCodes.TAB && that.options.selectOnTab) + ) + ) { + if (e.which !== keyCodes.SPACE) e.preventDefault(); - if (isCycling) { - this.pause(); + if (!that.options.liveSearch || e.which !== keyCodes.SPACE) { + that.$menuInner.find('.active a').trigger('click', true); // retain active class + $this.focus(); + + if (!that.options.liveSearch) { + // Prevent screen from scrolling if the user hits the spacebar + e.preventDefault(); + // Fixes spacebar selection of dropdown items in FF & IE + $(document).data('spaceSelect', true); + } } + } + }, - this._setActiveIndicatorElement(nextElement); + mobile: function () { + this.$element.addClass('mobile-device'); + }, - var slidEvent = $$$1.Event(Event.SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }); + refresh: function () { + // update options if data attributes have been changed + var config = $.extend({}, this.options, this.$element.data()); + this.options = config; - if ($$$1(this._element).hasClass(ClassName.SLIDE)) { - $$$1(nextElement).addClass(orderClassName); - Util.reflow(nextElement); - $$$1(activeElement).addClass(directionalClassName); - $$$1(nextElement).addClass(directionalClassName); - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); - $$$1(activeElement).one(Util.TRANSITION_END, function () { - $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); - $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); - _this3._isSliding = false; - setTimeout(function () { - return $$$1(_this3._element).trigger(slidEvent); - }, 0); - }).emulateTransitionEnd(transitionDuration); - } else { - $$$1(activeElement).removeClass(ClassName.ACTIVE); - $$$1(nextElement).addClass(ClassName.ACTIVE); - this._isSliding = false; - $$$1(this._element).trigger(slidEvent); - } + this.selectpicker.main.map.newIndex = {}; + this.selectpicker.main.map.originalIndex = {}; + this.createLi(); + this.checkDisabled(); + this.render(); + this.setStyle(); + this.setWidth(); - if (isCycling) { - this.cycle(); - } - }; // Static + this.setSize(true); + this.$element.trigger('refreshed' + EVENT_KEY); + }, - Carousel._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + hide: function () { + this.$newElement.hide(); + }, - var _config = _objectSpread({}, Default, $$$1(this).data()); + show: function () { + this.$newElement.show(); + }, - if (typeof config === 'object') { - _config = _objectSpread({}, _config, config); - } + remove: function () { + this.$newElement.remove(); + this.$element.remove(); + }, - var action = typeof config === 'string' ? config : _config.slide; + destroy: function () { + this.$newElement.before(this.$element).remove(); - if (!data) { - data = new Carousel(this, _config); - $$$1(this).data(DATA_KEY, data); - } + if (this.$bsContainer) { + this.$bsContainer.remove(); + } else { + this.$menu.remove(); + } - if (typeof config === 'number') { - data.to(config); - } else if (typeof action === 'string') { - if (typeof data[action] === 'undefined') { - throw new TypeError("No method named \"" + action + "\""); - } + this.$element + .off(EVENT_KEY) + .removeData('selectpicker') + .removeClass('bs-select-hidden selectpicker'); - data[action](); - } else if (_config.interval) { - data.pause(); - data.cycle(); - } - }); - }; + $(window).off(EVENT_KEY + '.' + this.selectId); + } + }; - Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { - var selector = Util.getSelectorFromElement(this); + // SELECTPICKER PLUGIN DEFINITION + // ============================== + function Plugin (option) { + // get the args of the outer function.. + var args = arguments; + // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them + // to get lost/corrupted in android 2.3 and IE9 #715 #775 + var _option = option; - if (!selector) { - return; - } + [].shift.apply(args); - var target = $$$1(selector)[0]; + // if the version was not set successfully + if (!version.success) { + // try to retreive it again + try { + version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.'); + } catch (err) { + // fall back to use BootstrapVersion + version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.'); + } - if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { - return; - } + version.major = version.full[0]; + version.success = true; - var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data()); + if (version.major === '4') { + classNames.DIVIDER = 'dropdown-divider'; + classNames.SHOW = 'show'; + classNames.BUTTONCLASS = 'btn-light'; + Selectpicker.DEFAULTS.style = classNames.BUTTONCLASS = 'btn-light'; + classNames.POPOVERHEADER = 'popover-header'; + } + } - var slideIndex = this.getAttribute('data-slide-to'); + var value; + var chain = this.each(function () { + var $this = $(this); + if ($this.is('select')) { + var data = $this.data('selectpicker'), + options = typeof _option == 'object' && _option; - if (slideIndex) { - config.interval = false; + if (!data) { + var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options); + config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template); + $this.data('selectpicker', (data = new Selectpicker(this, config))); + } else if (options) { + for (var i in options) { + if (options.hasOwnProperty(i)) { + data.options[i] = options[i]; + } + } } - Carousel._jQueryInterface.call($$$1(target), config); - - if (slideIndex) { - $$$1(target).data(DATA_KEY).to(slideIndex); + if (typeof _option == 'string') { + if (data[_option] instanceof Function) { + value = data[_option].apply(data, args); + } else { + value = data.options[_option]; + } } + } + }); - event.preventDefault(); - }; + if (typeof value !== 'undefined') { + // noinspection JSUnusedAssignment + return value; + } else { + return chain; + } + } - _createClass(Carousel, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); + var old = $.fn.selectpicker; + $.fn.selectpicker = Plugin; + $.fn.selectpicker.Constructor = Selectpicker; - return Carousel; - }(); + // SELECTPICKER NO CONFLICT + // ======================== + $.fn.selectpicker.noConflict = function () { + $.fn.selectpicker = old; + return this; + }; + + $(document) + .off('keydown.bs.dropdown.data-api') + .on('keydown' + EVENT_KEY, '.bootstrap-select [data-toggle="dropdown"], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown) + .on('focusin.modal', '.bootstrap-select [data-toggle="dropdown"], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input', function (e) { + e.stopPropagation(); + }); + + // SELECTPICKER DATA-API + // ===================== + $(window).on('load' + EVENT_KEY + '.data-api', function () { + $('.selectpicker').each(function () { + var $selectpicker = $(this); + Plugin.call($selectpicker, $selectpicker.data()); + }) + }); +})(jQuery); + + +})); + + +/***/ }), + +/***/ "./node_modules/bootstrap-v4-rtl/dist/js/bootstrap.js": +/*!************************************************************!*\ + !*** ./node_modules/bootstrap-v4-rtl/dist/js/bootstrap.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/*! + * Bootstrap v4.1.1-0 (https://github.com/MahdiMajidzadeh/bootstrap-v4-rtl) + * Copyright 2011-2018 Mahdi Majidzadeh + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +(function (global, factory) { + true ? factory(exports, __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")) : + undefined; +}(this, (function (exports,$,Popper) { 'use strict'; + + $ = $ && $.hasOwnProperty('default') ? $['default'] : $; + Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; + + 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; + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; + } + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.1): util.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Util = function ($$$1) { /** * ------------------------------------------------------------------------ - * Data Api implementation + * Private TransitionEnd Helpers * ------------------------------------------------------------------------ */ + var TRANSITION_END = 'transitionend'; + var MAX_UID = 1000000; + var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) + function toType(obj) { + return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); + } - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); - $$$1(window).on(Event.LOAD_DATA_API, function () { - $$$1(Selector.DATA_RIDE).each(function () { - var $carousel = $$$1(this); + function getSpecialTransitionEndEvent() { + return { + bindType: TRANSITION_END, + delegateType: TRANSITION_END, + handle: function handle(event) { + if ($$$1(event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params + } - Carousel._jQueryInterface.call($carousel, $carousel.data()); + return undefined; // eslint-disable-line no-undefined + } + }; + } + + function transitionEndEmulator(duration) { + var _this = this; + + var called = false; + $$$1(this).one(Util.TRANSITION_END, function () { + called = true; }); - }); + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + return this; + } + + function setTransitionEndSupport() { + $$$1.fn.emulateTransitionEnd = transitionEndEmulator; + $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); + } /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ + * -------------------------------------------------------------------------- + * Public Util Api + * -------------------------------------------------------------------------- */ - $$$1.fn[NAME] = Carousel._jQueryInterface; - $$$1.fn[NAME].Constructor = Carousel; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Carousel._jQueryInterface; - }; + var Util = { + TRANSITION_END: 'bsTransitionEnd', + getUID: function getUID(prefix) { + do { + // eslint-disable-next-line no-bitwise + prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here + } while (document.getElementById(prefix)); - return Carousel; + return prefix; + }, + getSelectorFromElement: function getSelectorFromElement(element) { + var selector = element.getAttribute('data-target'); + + if (!selector || selector === '#') { + selector = element.getAttribute('href') || ''; + } + + try { + var $selector = $$$1(document).find(selector); + return $selector.length > 0 ? selector : null; + } catch (err) { + return null; + } + }, + getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { + if (!element) { + return 0; + } // Get transition-duration of the element + + + var transitionDuration = $$$1(element).css('transition-duration'); + var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found + + if (!floatTransitionDuration) { + return 0; + } // If multiple durations are defined, take the first + + + transitionDuration = transitionDuration.split(',')[0]; + return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER; + }, + reflow: function reflow(element) { + return element.offsetHeight; + }, + triggerTransitionEnd: function triggerTransitionEnd(element) { + $$$1(element).trigger(TRANSITION_END); + }, + // TODO: Remove in v5 + supportsTransitionEnd: function supportsTransitionEnd() { + return Boolean(TRANSITION_END); + }, + isElement: function isElement(obj) { + return (obj[0] || obj).nodeType; + }, + typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { + for (var property in configTypes) { + if (Object.prototype.hasOwnProperty.call(configTypes, property)) { + var expectedTypes = configTypes[property]; + var value = config[property]; + var valueType = value && Util.isElement(value) ? 'element' : toType(value); + + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); + } + } + } + } + }; + setTransitionEndSupport(); + return Util; }($); /** * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): collapse.js + * Bootstrap (v4.1.1): alert.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ - var Collapse = function ($$$1) { + var Alert = function ($$$1) { /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ - var NAME = 'collapse'; + var NAME = 'alert'; var VERSION = '4.1.1'; - var DATA_KEY = 'bs.collapse'; + var DATA_KEY = 'bs.alert'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var Default = { - toggle: true, - parent: '' - }; - var DefaultType = { - toggle: 'boolean', - parent: '(string|element)' + var Selector = { + DISMISS: '[data-dismiss="alert"]' }; var Event = { - SHOW: "show" + EVENT_KEY, - SHOWN: "shown" + EVENT_KEY, - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, + CLOSE: "close" + EVENT_KEY, + CLOSED: "closed" + EVENT_KEY, CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY }; var ClassName = { - SHOW: 'show', - COLLAPSE: 'collapse', - COLLAPSING: 'collapsing', - COLLAPSED: 'collapsed' - }; - var Dimension = { - WIDTH: 'width', - HEIGHT: 'height' - }; - var Selector = { - ACTIVES: '.show, .collapsing', - DATA_TOGGLE: '[data-toggle="collapse"]' + ALERT: 'alert', + FADE: 'fade', + SHOW: 'show' /** * ------------------------------------------------------------------------ * Class Definition @@ -5397,270 +5870,268 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! }; - var Collapse = + var Alert = /*#__PURE__*/ function () { - function Collapse(element, config) { - this._isTransitioning = false; + function Alert(element) { this._element = element; - this._config = this._getConfig(config); - this._triggerArray = $$$1.makeArray($$$1("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); - var tabToggles = $$$1(Selector.DATA_TOGGLE); - - for (var i = 0; i < tabToggles.length; i++) { - var elem = tabToggles[i]; - var selector = Util.getSelectorFromElement(elem); - - if (selector !== null && $$$1(selector).filter(element).length > 0) { - this._selector = selector; - - this._triggerArray.push(elem); - } - } - - this._parent = this._config.parent ? this._getParent() : null; - - if (!this._config.parent) { - this._addAriaAndCollapsedClass(this._element, this._triggerArray); - } - - if (this._config.toggle) { - this.toggle(); - } } // Getters - var _proto = Collapse.prototype; + var _proto = Alert.prototype; // Public - _proto.toggle = function toggle() { - if ($$$1(this._element).hasClass(ClassName.SHOW)) { - this.hide(); - } else { - this.show(); - } - }; - - _proto.show = function show() { - var _this = this; - - if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { - return; - } - - var actives; - var activesData; - - if (this._parent) { - actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]")); - - if (actives.length === 0) { - actives = null; - } - } - - if (actives) { - activesData = $$$1(actives).not(this._selector).data(DATA_KEY); + _proto.close = function close(element) { + var rootElement = this._element; - if (activesData && activesData._isTransitioning) { - return; - } + if (element) { + rootElement = this._getRootElement(element); } - var startEvent = $$$1.Event(Event.SHOW); - $$$1(this._element).trigger(startEvent); + var customEvent = this._triggerCloseEvent(rootElement); - if (startEvent.isDefaultPrevented()) { + if (customEvent.isDefaultPrevented()) { return; } - if (actives) { - Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); + this._removeElement(rootElement); + }; - if (!activesData) { - $$$1(actives).data(DATA_KEY, null); - } - } + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + this._element = null; + }; // Private - var dimension = this._getDimension(); - $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); - this._element.style[dimension] = 0; + _proto._getRootElement = function _getRootElement(element) { + var selector = Util.getSelectorFromElement(element); + var parent = false; - if (this._triggerArray.length > 0) { - $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); + if (selector) { + parent = $$$1(selector)[0]; } - this.setTransitioning(true); - - var complete = function complete() { - $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); - _this._element.style[dimension] = ''; - - _this.setTransitioning(false); + if (!parent) { + parent = $$$1(element).closest("." + ClassName.ALERT)[0]; + } - $$$1(_this._element).trigger(Event.SHOWN); - }; + return parent; + }; - var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); - var scrollSize = "scroll" + capitalizedDimension; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - this._element.style[dimension] = this._element[scrollSize] + "px"; + _proto._triggerCloseEvent = function _triggerCloseEvent(element) { + var closeEvent = $$$1.Event(Event.CLOSE); + $$$1(element).trigger(closeEvent); + return closeEvent; }; - _proto.hide = function hide() { - var _this2 = this; + _proto._removeElement = function _removeElement(element) { + var _this = this; - if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) { - return; - } + $$$1(element).removeClass(ClassName.SHOW); - var startEvent = $$$1.Event(Event.HIDE); - $$$1(this._element).trigger(startEvent); + if (!$$$1(element).hasClass(ClassName.FADE)) { + this._destroyElement(element); - if (startEvent.isDefaultPrevented()) { return; } - var dimension = this._getDimension(); + var transitionDuration = Util.getTransitionDurationFromElement(element); + $$$1(element).one(Util.TRANSITION_END, function (event) { + return _this._destroyElement(element, event); + }).emulateTransitionEnd(transitionDuration); + }; - this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; - Util.reflow(this._element); - $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); + _proto._destroyElement = function _destroyElement(element) { + $$$1(element).detach().trigger(Event.CLOSED).remove(); + }; // Static - if (this._triggerArray.length > 0) { - for (var i = 0; i < this._triggerArray.length; i++) { - var trigger = this._triggerArray[i]; - var selector = Util.getSelectorFromElement(trigger); - if (selector !== null) { - var $elem = $$$1(selector); + Alert._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var $element = $$$1(this); + var data = $element.data(DATA_KEY); - if (!$elem.hasClass(ClassName.SHOW)) { - $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); - } - } + if (!data) { + data = new Alert(this); + $element.data(DATA_KEY, data); } - } - this.setTransitioning(true); + if (config === 'close') { + data[config](this); + } + }); + }; - var complete = function complete() { - _this2.setTransitioning(false); + Alert._handleDismiss = function _handleDismiss(alertInstance) { + return function (event) { + if (event) { + event.preventDefault(); + } - $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); + alertInstance.close(this); }; - - this._element.style[dimension] = ''; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - }; - - _proto.setTransitioning = function setTransitioning(isTransitioning) { - this._isTransitioning = isTransitioning; }; - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - this._config = null; - this._parent = null; - this._element = null; - this._triggerArray = null; - this._isTransitioning = null; - }; // Private + _createClass(Alert, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }]); + return Alert; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - config.toggle = Boolean(config.toggle); // Coerce string values - Util.typeCheckConfig(NAME, config, DefaultType); - return config; - }; + $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ - _proto._getDimension = function _getDimension() { - var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); - return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; - }; + $$$1.fn[NAME] = Alert._jQueryInterface; + $$$1.fn[NAME].Constructor = Alert; - _proto._getParent = function _getParent() { - var _this3 = this; + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Alert._jQueryInterface; + }; - var parent = null; + return Alert; + }($); - if (Util.isElement(this._config.parent)) { - parent = this._config.parent; // It's a jQuery object + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.1): button.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ - if (typeof this._config.parent.jquery !== 'undefined') { - parent = this._config.parent[0]; - } - } else { - parent = $$$1(this._config.parent)[0]; - } + var Button = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'button'; + var VERSION = '4.1.1'; + var DATA_KEY = 'bs.button'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var ClassName = { + ACTIVE: 'active', + BUTTON: 'btn', + FOCUS: 'focus' + }; + var Selector = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: 'input', + ACTIVE: '.active', + BUTTON: '.btn' + }; + var Event = { + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, + FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ - var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; - $$$1(parent).find(selector).each(function (i, element) { - _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); - }); - return parent; - }; + }; - _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { - if (element) { - var isOpen = $$$1(element).hasClass(ClassName.SHOW); + var Button = + /*#__PURE__*/ + function () { + function Button(element) { + this._element = element; + } // Getters - if (triggerArray.length > 0) { - $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); + + var _proto = Button.prototype; + + // Public + _proto.toggle = function toggle() { + var triggerChangeEvent = true; + var addAriaPressed = true; + var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; + + if (rootElement) { + var input = $$$1(this._element).find(Selector.INPUT)[0]; + + if (input) { + if (input.type === 'radio') { + if (input.checked && $$$1(this._element).hasClass(ClassName.ACTIVE)) { + triggerChangeEvent = false; + } else { + var activeElement = $$$1(rootElement).find(Selector.ACTIVE)[0]; + + if (activeElement) { + $$$1(activeElement).removeClass(ClassName.ACTIVE); + } + } + } + + if (triggerChangeEvent) { + if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { + return; + } + + input.checked = !$$$1(this._element).hasClass(ClassName.ACTIVE); + $$$1(input).trigger('change'); + } + + input.focus(); + addAriaPressed = false; } } - }; // Static + if (addAriaPressed) { + this._element.setAttribute('aria-pressed', !$$$1(this._element).hasClass(ClassName.ACTIVE)); + } - Collapse._getTargetFromElement = function _getTargetFromElement(element) { - var selector = Util.getSelectorFromElement(element); - return selector ? $$$1(selector)[0] : null; + if (triggerChangeEvent) { + $$$1(this._element).toggleClass(ClassName.ACTIVE); + } }; - Collapse._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $this = $$$1(this); - var data = $this.data(DATA_KEY); + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + this._element = null; + }; // Static - var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); - if (!data && _config.toggle && /show|hide/.test(config)) { - _config.toggle = false; - } + Button._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); if (!data) { - data = new Collapse(this, _config); - $this.data(DATA_KEY, data); + data = new Button(this); + $$$1(this).data(DATA_KEY, data); } - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - + if (config === 'toggle') { data[config](); } }); }; - _createClass(Collapse, null, [{ + _createClass(Button, null, [{ key: "VERSION", get: function get() { return VERSION; } - }, { - key: "Default", - get: function get() { - return Default; - } }]); - return Collapse; + return Button; }(); /** * ------------------------------------------------------------------------ @@ -5669,21 +6140,18 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! */ - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { - // preventDefault only for elements (which change the URL) not inside the collapsible element - if (event.currentTarget.tagName === 'A') { - event.preventDefault(); - } + $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + event.preventDefault(); + var button = event.target; - var $trigger = $$$1(this); - var selector = Util.getSelectorFromElement(this); - $$$1(selector).each(function () { - var $target = $$$1(this); - var data = $target.data(DATA_KEY); - var config = data ? 'toggle' : $trigger.data(); + if (!$$$1(button).hasClass(ClassName.BUTTON)) { + button = $$$1(button).closest(Selector.BUTTON); + } - Collapse._jQueryInterface.call($target, config); - }); + Button._jQueryInterface.call($$$1(button), 'toggle'); + }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + var button = $$$1(event.target).closest(Selector.BUTTON)[0]; + $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); }); /** * ------------------------------------------------------------------------ @@ -5691,99 +6159,90 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Collapse._jQueryInterface; - $$$1.fn[NAME].Constructor = Collapse; + $$$1.fn[NAME] = Button._jQueryInterface; + $$$1.fn[NAME].Constructor = Button; $$$1.fn[NAME].noConflict = function () { $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Collapse._jQueryInterface; + return Button._jQueryInterface; }; - return Collapse; + return Button; }($); /** * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): dropdown.js + * Bootstrap (v4.1.1): carousel.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ - var Dropdown = function ($$$1) { + var Carousel = function ($$$1) { /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ - var NAME = 'dropdown'; + var NAME = 'carousel'; var VERSION = '4.1.1'; - var DATA_KEY = 'bs.dropdown'; + var DATA_KEY = 'bs.carousel'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - - var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key - - var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key - - var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key + var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key - var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key + var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key - var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) + var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch - var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); - var Event = { - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, - SHOW: "show" + EVENT_KEY, - SHOWN: "shown" + EVENT_KEY, - CLICK: "click" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, - KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, - KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY + var Default = { + interval: 5000, + keyboard: true, + slide: false, + pause: 'hover', + wrap: true }; - var ClassName = { - DISABLED: 'disabled', - SHOW: 'show', - DROPUP: 'dropup', - DROPRIGHT: 'dropright', - DROPLEFT: 'dropleft', - MENURIGHT: 'dropdown-menu-right', - MENULEFT: 'dropdown-menu-left', - POSITION_STATIC: 'position-static' + var DefaultType = { + interval: '(number|boolean)', + keyboard: 'boolean', + slide: '(boolean|string)', + pause: '(string|boolean)', + wrap: 'boolean' }; - var Selector = { - DATA_TOGGLE: '[data-toggle="dropdown"]', - FORM_CHILD: '.dropdown form', - MENU: '.dropdown-menu', - NAVBAR_NAV: '.navbar-nav', - VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' + var Direction = { + NEXT: 'next', + PREV: 'prev', + LEFT: 'left', + RIGHT: 'right' }; - var AttachmentMap = { - TOP: 'top-start', - TOPEND: 'top-end', - BOTTOM: 'bottom-start', - BOTTOMEND: 'bottom-end', - RIGHT: 'right-start', - RIGHTEND: 'right-end', - LEFT: 'left-start', - LEFTEND: 'left-end' + var Event = { + SLIDE: "slide" + EVENT_KEY, + SLID: "slid" + EVENT_KEY, + KEYDOWN: "keydown" + EVENT_KEY, + MOUSEENTER: "mouseenter" + EVENT_KEY, + MOUSELEAVE: "mouseleave" + EVENT_KEY, + TOUCHEND: "touchend" + EVENT_KEY, + LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY }; - var Default = { - offset: 0, - flip: true, - boundary: 'scrollParent', - reference: 'toggle', - display: 'dynamic' + var ClassName = { + CAROUSEL: 'carousel', + ACTIVE: 'active', + SLIDE: 'slide', + RIGHT: 'carousel-item-right', + LEFT: 'carousel-item-left', + NEXT: 'carousel-item-next', + PREV: 'carousel-item-prev', + ITEM: 'carousel-item' }; - var DefaultType = { - offset: '(number|string|function)', - flip: 'boolean', - boundary: '(string|element)', - reference: '(string|element)', - display: 'string' + var Selector = { + ACTIVE: '.active', + ACTIVE_ITEM: '.active.carousel-item', + ITEM: '.carousel-item', + NEXT_PREV: '.carousel-item-next, .carousel-item-prev', + INDICATORS: '.carousel-indicators', + DATA_SLIDE: '[data-slide], [data-slide-to]', + DATA_RIDE: '[data-ride="carousel"]' /** * ------------------------------------------------------------------------ * Class Definition @@ -5792,348 +6251,381 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! }; - var Dropdown = + var Carousel = /*#__PURE__*/ function () { - function Dropdown(element, config) { - this._element = element; - this._popper = null; + function Carousel(element, config) { + this._items = null; + this._interval = null; + this._activeElement = null; + this._isPaused = false; + this._isSliding = false; + this.touchTimeout = null; this._config = this._getConfig(config); - this._menu = this._getMenuElement(); - this._inNavbar = this._detectNavbar(); + this._element = $$$1(element)[0]; + this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0]; this._addEventListeners(); } // Getters - var _proto = Dropdown.prototype; + var _proto = Carousel.prototype; // Public - _proto.toggle = function toggle() { - if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { - return; + _proto.next = function next() { + if (!this._isSliding) { + this._slide(Direction.NEXT); } + }; - var parent = Dropdown._getParentFromElement(this._element); - - var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); - - Dropdown._clearMenus(); - - if (isActive) { - return; + _proto.nextWhenVisible = function nextWhenVisible() { + // Don't call next when the page isn't visible + // or the carousel or its parent isn't visible + if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') { + this.next(); } + }; - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $$$1.Event(Event.SHOW, relatedTarget); - $$$1(parent).trigger(showEvent); + _proto.prev = function prev() { + if (!this._isSliding) { + this._slide(Direction.PREV); + } + }; - if (showEvent.isDefaultPrevented()) { - return; - } // Disable totally Popper.js for Dropdown in Navbar + _proto.pause = function pause(event) { + if (!event) { + this._isPaused = true; + } + if ($$$1(this._element).find(Selector.NEXT_PREV)[0]) { + Util.triggerTransitionEnd(this._element); + this.cycle(true); + } - if (!this._inNavbar) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); - } + clearInterval(this._interval); + this._interval = null; + }; - var referenceElement = this._element; + _proto.cycle = function cycle(event) { + if (!event) { + this._isPaused = false; + } - if (this._config.reference === 'parent') { - referenceElement = parent; - } else if (Util.isElement(this._config.reference)) { - referenceElement = this._config.reference; // Check if it's jQuery element + if (this._interval) { + clearInterval(this._interval); + this._interval = null; + } - if (typeof this._config.reference.jquery !== 'undefined') { - referenceElement = this._config.reference[0]; - } - } // If boundary is not `scrollParent`, then set position to `static` - // to allow the menu to "escape" the scroll parent's boundaries - // https://github.com/twbs/bootstrap/issues/24251 + if (this._config.interval && !this._isPaused) { + this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); + } + }; + _proto.to = function to(index) { + var _this = this; - if (this._config.boundary !== 'scrollParent') { - $$$1(parent).addClass(ClassName.POSITION_STATIC); - } + this._activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; - this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); - } // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html + var activeIndex = this._getItemIndex(this._activeElement); + if (index > this._items.length - 1 || index < 0) { + return; + } - if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { - $$$1(document.body).children().on('mouseover', null, $$$1.noop); + if (this._isSliding) { + $$$1(this._element).one(Event.SLID, function () { + return _this.to(index); + }); + return; } - this._element.focus(); + if (activeIndex === index) { + this.pause(); + this.cycle(); + return; + } - this._element.setAttribute('aria-expanded', true); + var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; - $$$1(this._menu).toggleClass(ClassName.SHOW); - $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget)); + this._slide(direction, this._items[index]); }; _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); $$$1(this._element).off(EVENT_KEY); + $$$1.removeData(this._element, DATA_KEY); + this._items = null; + this._config = null; this._element = null; - this._menu = null; + this._interval = null; + this._isPaused = null; + this._isSliding = null; + this._activeElement = null; + this._indicatorsElement = null; + }; // Private - if (this._popper !== null) { - this._popper.destroy(); - this._popper = null; - } + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default, config); + Util.typeCheckConfig(NAME, config, DefaultType); + return config; }; - _proto.update = function update() { - this._inNavbar = this._detectNavbar(); + _proto._addEventListeners = function _addEventListeners() { + var _this2 = this; - if (this._popper !== null) { - this._popper.scheduleUpdate(); + if (this._config.keyboard) { + $$$1(this._element).on(Event.KEYDOWN, function (event) { + return _this2._keydown(event); + }); } - }; // Private + if (this._config.pause === 'hover') { + $$$1(this._element).on(Event.MOUSEENTER, function (event) { + return _this2.pause(event); + }).on(Event.MOUSELEAVE, function (event) { + return _this2.cycle(event); + }); - _proto._addEventListeners = function _addEventListeners() { - var _this = this; - - $$$1(this._element).on(Event.CLICK, function (event) { - event.preventDefault(); - event.stopPropagation(); + if ('ontouchstart' in document.documentElement) { + // If it's a touch-enabled device, mouseenter/leave are fired as + // part of the mouse compatibility events on first tap - the carousel + // would stop cycling until user tapped out of it; + // here, we listen for touchend, explicitly pause the carousel + // (as if it's the second time we tap on it, mouseenter compat event + // is NOT fired) and after a timeout (to allow for mouse compatibility + // events to fire) we explicitly restart cycling + $$$1(this._element).on(Event.TOUCHEND, function () { + _this2.pause(); - _this.toggle(); - }); - }; + if (_this2.touchTimeout) { + clearTimeout(_this2.touchTimeout); + } - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config); - Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); - return config; + _this2.touchTimeout = setTimeout(function (event) { + return _this2.cycle(event); + }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); + }); + } + } }; - _proto._getMenuElement = function _getMenuElement() { - if (!this._menu) { - var parent = Dropdown._getParentFromElement(this._element); - - this._menu = $$$1(parent).find(Selector.MENU)[0]; + _proto._keydown = function _keydown(event) { + if (/input|textarea/i.test(event.target.tagName)) { + return; } - return this._menu; - }; - - _proto._getPlacement = function _getPlacement() { - var $parentDropdown = $$$1(this._element).parent(); - var placement = AttachmentMap.BOTTOM; // Handle dropup + switch (event.which) { + case ARROW_LEFT_KEYCODE: + event.preventDefault(); + this.prev(); + break; - if ($parentDropdown.hasClass(ClassName.DROPUP)) { - placement = AttachmentMap.TOP; + case ARROW_RIGHT_KEYCODE: + event.preventDefault(); + this.next(); + break; - if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { - placement = AttachmentMap.TOPEND; - } - } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { - placement = AttachmentMap.RIGHT; - } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { - placement = AttachmentMap.LEFT; - } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { - placement = AttachmentMap.BOTTOMEND; + default: } - - return placement; }; - _proto._detectNavbar = function _detectNavbar() { - return $$$1(this._element).closest('.navbar').length > 0; + _proto._getItemIndex = function _getItemIndex(element) { + this._items = $$$1.makeArray($$$1(element).parent().find(Selector.ITEM)); + return this._items.indexOf(element); }; - _proto._getPopperConfig = function _getPopperConfig() { - var _this2 = this; - - var offsetConf = {}; - - if (typeof this._config.offset === 'function') { - offsetConf.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); - return data; - }; - } else { - offsetConf.offset = this._config.offset; - } + _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { + var isNextDirection = direction === Direction.NEXT; + var isPrevDirection = direction === Direction.PREV; - var popperConfig = { - placement: this._getPlacement(), - modifiers: { - offset: offsetConf, - flip: { - enabled: this._config.flip - }, - preventOverflow: { - boundariesElement: this._config.boundary - } - } // Disable Popper.js if we have a static display + var activeIndex = this._getItemIndex(activeElement); - }; + var lastItemIndex = this._items.length - 1; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; - if (this._config.display === 'static') { - popperConfig.modifiers.applyStyle = { - enabled: false - }; + if (isGoingToWrap && !this._config.wrap) { + return activeElement; } - return popperConfig; - }; // Static + var delta = direction === Direction.PREV ? -1 : 1; + var itemIndex = (activeIndex + delta) % this._items.length; + return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; + }; + _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { + var targetIndex = this._getItemIndex(relatedTarget); - Dropdown._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + var fromIndex = this._getItemIndex($$$1(this._element).find(Selector.ACTIVE_ITEM)[0]); - var _config = typeof config === 'object' ? config : null; + var slideEvent = $$$1.Event(Event.SLIDE, { + relatedTarget: relatedTarget, + direction: eventDirectionName, + from: fromIndex, + to: targetIndex + }); + $$$1(this._element).trigger(slideEvent); + return slideEvent; + }; - if (!data) { - data = new Dropdown(this, _config); - $$$1(this).data(DATA_KEY, data); - } + _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { + if (this._indicatorsElement) { + $$$1(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } + var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; - data[config](); + if (nextIndicator) { + $$$1(nextIndicator).addClass(ClassName.ACTIVE); } - }); + } }; - Dropdown._clearMenus = function _clearMenus(event) { - if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { - return; - } + _proto._slide = function _slide(direction, element) { + var _this3 = this; - var toggles = $$$1.makeArray($$$1(Selector.DATA_TOGGLE)); + var activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; - for (var i = 0; i < toggles.length; i++) { - var parent = Dropdown._getParentFromElement(toggles[i]); + var activeElementIndex = this._getItemIndex(activeElement); - var context = $$$1(toggles[i]).data(DATA_KEY); - var relatedTarget = { - relatedTarget: toggles[i] - }; + var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - if (!context) { - continue; - } + var nextElementIndex = this._getItemIndex(nextElement); - var dropdownMenu = context._menu; + var isCycling = Boolean(this._interval); + var directionalClassName; + var orderClassName; + var eventDirectionName; - if (!$$$1(parent).hasClass(ClassName.SHOW)) { - continue; - } + if (direction === Direction.NEXT) { + directionalClassName = ClassName.LEFT; + orderClassName = ClassName.NEXT; + eventDirectionName = Direction.LEFT; + } else { + directionalClassName = ClassName.RIGHT; + orderClassName = ClassName.PREV; + eventDirectionName = Direction.RIGHT; + } - if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) { - continue; - } + if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { + this._isSliding = false; + return; + } - var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); - $$$1(parent).trigger(hideEvent); + var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); - if (hideEvent.isDefaultPrevented()) { - continue; - } // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support + if (slideEvent.isDefaultPrevented()) { + return; + } + if (!activeElement || !nextElement) { + // Some weirdness is happening, so we bail + return; + } - if ('ontouchstart' in document.documentElement) { - $$$1(document.body).children().off('mouseover', null, $$$1.noop); - } + this._isSliding = true; - toggles[i].setAttribute('aria-expanded', 'false'); - $$$1(dropdownMenu).removeClass(ClassName.SHOW); - $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); + if (isCycling) { + this.pause(); } - }; - Dropdown._getParentFromElement = function _getParentFromElement(element) { - var parent; - var selector = Util.getSelectorFromElement(element); + this._setActiveIndicatorElement(nextElement); - if (selector) { - parent = $$$1(selector)[0]; + var slidEvent = $$$1.Event(Event.SLID, { + relatedTarget: nextElement, + direction: eventDirectionName, + from: activeElementIndex, + to: nextElementIndex + }); + + if ($$$1(this._element).hasClass(ClassName.SLIDE)) { + $$$1(nextElement).addClass(orderClassName); + Util.reflow(nextElement); + $$$1(activeElement).addClass(directionalClassName); + $$$1(nextElement).addClass(directionalClassName); + var transitionDuration = Util.getTransitionDurationFromElement(activeElement); + $$$1(activeElement).one(Util.TRANSITION_END, function () { + $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); + $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); + _this3._isSliding = false; + setTimeout(function () { + return $$$1(_this3._element).trigger(slidEvent); + }, 0); + }).emulateTransitionEnd(transitionDuration); + } else { + $$$1(activeElement).removeClass(ClassName.ACTIVE); + $$$1(nextElement).addClass(ClassName.ACTIVE); + this._isSliding = false; + $$$1(this._element).trigger(slidEvent); } - return parent || element.parentNode; - }; // eslint-disable-next-line complexity + if (isCycling) { + this.cycle(); + } + }; // Static - Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { - // If not input/textarea: - // - And not a key in REGEXP_KEYDOWN => not a dropdown command - // If input/textarea: - // - If space key => not a dropdown command - // - If key is other than escape - // - If key is not up or down => not a dropdown command - // - If trigger inside the menu => not a dropdown command - if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { - return; - } + Carousel._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); - event.preventDefault(); - event.stopPropagation(); + var _config = _objectSpread({}, Default, $$$1(this).data()); - if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { - return; - } + if (typeof config === 'object') { + _config = _objectSpread({}, _config, config); + } - var parent = Dropdown._getParentFromElement(this); + var action = typeof config === 'string' ? config : _config.slide; - var isActive = $$$1(parent).hasClass(ClassName.SHOW); + if (!data) { + data = new Carousel(this, _config); + $$$1(this).data(DATA_KEY, data); + } - if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { - if (event.which === ESCAPE_KEYCODE) { - var toggle = $$$1(parent).find(Selector.DATA_TOGGLE)[0]; - $$$1(toggle).trigger('focus'); + if (typeof config === 'number') { + data.to(config); + } else if (typeof action === 'string') { + if (typeof data[action] === 'undefined') { + throw new TypeError("No method named \"" + action + "\""); + } + + data[action](); + } else if (_config.interval) { + data.pause(); + data.cycle(); } + }); + }; - $$$1(this).trigger('click'); + Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { + var selector = Util.getSelectorFromElement(this); + + if (!selector) { return; } - var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get(); + var target = $$$1(selector)[0]; - if (items.length === 0) { + if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { return; } - var index = items.indexOf(event.target); + var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data()); - if (event.which === ARROW_UP_KEYCODE && index > 0) { - // Up - index--; - } + var slideIndex = this.getAttribute('data-slide-to'); - if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { - // Down - index++; + if (slideIndex) { + config.interval = false; } - if (index < 0) { - index = 0; + Carousel._jQueryInterface.call($$$1(target), config); + + if (slideIndex) { + $$$1(target).data(DATA_KEY).to(slideIndex); } - items[index].focus(); + event.preventDefault(); }; - _createClass(Dropdown, null, [{ + _createClass(Carousel, null, [{ key: "VERSION", get: function get() { return VERSION; @@ -6143,14 +6635,9 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! get: function get() { return Default; } - }, { - key: "DefaultType", - get: function get() { - return DefaultType; - } }]); - return Dropdown; + return Carousel; }(); /** * ------------------------------------------------------------------------ @@ -6159,13 +6646,13 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! */ - $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { - event.preventDefault(); - event.stopPropagation(); + $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); + $$$1(window).on(Event.LOAD_DATA_API, function () { + $$$1(Selector.DATA_RIDE).each(function () { + var $carousel = $$$1(this); - Dropdown._jQueryInterface.call($$$1(this), 'toggle'); - }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { - e.stopPropagation(); + Carousel._jQueryInterface.call($carousel, $carousel.data()); + }); }); /** * ------------------------------------------------------------------------ @@ -6173,77 +6660,64 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Dropdown._jQueryInterface; - $$$1.fn[NAME].Constructor = Dropdown; + $$$1.fn[NAME] = Carousel._jQueryInterface; + $$$1.fn[NAME].Constructor = Carousel; $$$1.fn[NAME].noConflict = function () { $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Dropdown._jQueryInterface; + return Carousel._jQueryInterface; }; - return Dropdown; - }($, Popper); + return Carousel; + }($); /** * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): modal.js + * Bootstrap (v4.1.1): collapse.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ - var Modal = function ($$$1) { + var Collapse = function ($$$1) { /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ - var NAME = 'modal'; + var NAME = 'collapse'; var VERSION = '4.1.1'; - var DATA_KEY = 'bs.modal'; + var DATA_KEY = 'bs.collapse'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - var Default = { - backdrop: true, - keyboard: true, - focus: true, - show: true + toggle: true, + parent: '' }; var DefaultType = { - backdrop: '(boolean|string)', - keyboard: 'boolean', - focus: 'boolean', - show: 'boolean' + toggle: 'boolean', + parent: '(string|element)' }; var Event = { - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, SHOW: "show" + EVENT_KEY, SHOWN: "shown" + EVENT_KEY, - FOCUSIN: "focusin" + EVENT_KEY, - RESIZE: "resize" + EVENT_KEY, - CLICK_DISMISS: "click.dismiss" + EVENT_KEY, - KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, - MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, - MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY }; var ClassName = { - SCROLLBAR_MEASURER: 'modal-scrollbar-measure', - BACKDROP: 'modal-backdrop', - OPEN: 'modal-open', - FADE: 'fade', - SHOW: 'show' + SHOW: 'show', + COLLAPSE: 'collapse', + COLLAPSING: 'collapsing', + COLLAPSED: 'collapsed' + }; + var Dimension = { + WIDTH: 'width', + HEIGHT: 'height' }; var Selector = { - DIALOG: '.modal-dialog', - DATA_TOGGLE: '[data-toggle="modal"]', - DATA_DISMISS: '[data-dismiss="modal"]', - FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', - STICKY_CONTENT: '.sticky-top', - NAVBAR_TOGGLER: '.navbar-toggler' + ACTIVES: '.show, .collapsing', + DATA_TOGGLE: '[data-toggle="collapse"]' /** * ------------------------------------------------------------------------ * Class Definition @@ -6252,433 +6726,245 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! }; - var Modal = + var Collapse = /*#__PURE__*/ function () { - function Modal(element, config) { - this._config = this._getConfig(config); + function Collapse(element, config) { + this._isTransitioning = false; this._element = element; - this._dialog = $$$1(element).find(Selector.DIALOG)[0]; - this._backdrop = null; - this._isShown = false; - this._isBodyOverflowing = false; - this._ignoreBackdropClick = false; - this._scrollbarWidth = 0; + this._config = this._getConfig(config); + this._triggerArray = $$$1.makeArray($$$1("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); + var tabToggles = $$$1(Selector.DATA_TOGGLE); + + for (var i = 0; i < tabToggles.length; i++) { + var elem = tabToggles[i]; + var selector = Util.getSelectorFromElement(elem); + + if (selector !== null && $$$1(selector).filter(element).length > 0) { + this._selector = selector; + + this._triggerArray.push(elem); + } + } + + this._parent = this._config.parent ? this._getParent() : null; + + if (!this._config.parent) { + this._addAriaAndCollapsedClass(this._element, this._triggerArray); + } + + if (this._config.toggle) { + this.toggle(); + } } // Getters - var _proto = Modal.prototype; + var _proto = Collapse.prototype; // Public - _proto.toggle = function toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget); + _proto.toggle = function toggle() { + if ($$$1(this._element).hasClass(ClassName.SHOW)) { + this.hide(); + } else { + this.show(); + } }; - _proto.show = function show(relatedTarget) { + _proto.show = function show() { var _this = this; - if (this._isTransitioning || this._isShown) { + if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { return; } - if ($$$1(this._element).hasClass(ClassName.FADE)) { - this._isTransitioning = true; + var actives; + var activesData; + + if (this._parent) { + actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]")); + + if (actives.length === 0) { + actives = null; + } } - var showEvent = $$$1.Event(Event.SHOW, { - relatedTarget: relatedTarget - }); - $$$1(this._element).trigger(showEvent); + if (actives) { + activesData = $$$1(actives).not(this._selector).data(DATA_KEY); - if (this._isShown || showEvent.isDefaultPrevented()) { + if (activesData && activesData._isTransitioning) { + return; + } + } + + var startEvent = $$$1.Event(Event.SHOW); + $$$1(this._element).trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { return; } - this._isShown = true; + if (actives) { + Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); - this._checkScrollbar(); + if (!activesData) { + $$$1(actives).data(DATA_KEY, null); + } + } - this._setScrollbar(); + var dimension = this._getDimension(); - this._adjustDialog(); + $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); + this._element.style[dimension] = 0; - $$$1(document.body).addClass(ClassName.OPEN); + if (this._triggerArray.length > 0) { + $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); + } - this._setEscapeEvent(); + this.setTransitioning(true); - this._setResizeEvent(); + var complete = function complete() { + $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); + _this._element.style[dimension] = ''; - $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { - return _this.hide(event); - }); - $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { - $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { - if ($$$1(event.target).is(_this._element)) { - _this._ignoreBackdropClick = true; - } - }); - }); + _this.setTransitioning(false); - this._showBackdrop(function () { - return _this._showElement(relatedTarget); - }); + $$$1(_this._element).trigger(Event.SHOWN); + }; + + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = "scroll" + capitalizedDimension; + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + this._element.style[dimension] = this._element[scrollSize] + "px"; }; - _proto.hide = function hide(event) { + _proto.hide = function hide() { var _this2 = this; - if (event) { - event.preventDefault(); - } - - if (this._isTransitioning || !this._isShown) { + if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) { return; } - var hideEvent = $$$1.Event(Event.HIDE); - $$$1(this._element).trigger(hideEvent); + var startEvent = $$$1.Event(Event.HIDE); + $$$1(this._element).trigger(startEvent); - if (!this._isShown || hideEvent.isDefaultPrevented()) { + if (startEvent.isDefaultPrevented()) { return; } - this._isShown = false; - var transition = $$$1(this._element).hasClass(ClassName.FADE); + var dimension = this._getDimension(); - if (transition) { - this._isTransitioning = true; + this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; + Util.reflow(this._element); + $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); + + if (this._triggerArray.length > 0) { + for (var i = 0; i < this._triggerArray.length; i++) { + var trigger = this._triggerArray[i]; + var selector = Util.getSelectorFromElement(trigger); + + if (selector !== null) { + var $elem = $$$1(selector); + + if (!$elem.hasClass(ClassName.SHOW)) { + $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); + } + } + } } - this._setEscapeEvent(); + this.setTransitioning(true); - this._setResizeEvent(); + var complete = function complete() { + _this2.setTransitioning(false); - $$$1(document).off(Event.FOCUSIN); - $$$1(this._element).removeClass(ClassName.SHOW); - $$$1(this._element).off(Event.CLICK_DISMISS); - $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); + $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); + }; - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $$$1(this._element).one(Util.TRANSITION_END, function (event) { - return _this2._hideModal(event); - }).emulateTransitionEnd(transitionDuration); - } else { - this._hideModal(); - } + this._element.style[dimension] = ''; + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + }; + + _proto.setTransitioning = function setTransitioning(isTransitioning) { + this._isTransitioning = isTransitioning; }; _proto.dispose = function dispose() { $$$1.removeData(this._element, DATA_KEY); - $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY); this._config = null; + this._parent = null; this._element = null; - this._dialog = null; - this._backdrop = null; - this._isShown = null; - this._isBodyOverflowing = null; - this._ignoreBackdropClick = null; - this._scrollbarWidth = null; - }; - - _proto.handleUpdate = function handleUpdate() { - this._adjustDialog(); + this._triggerArray = null; + this._isTransitioning = null; }; // Private _proto._getConfig = function _getConfig(config) { config = _objectSpread({}, Default, config); + config.toggle = Boolean(config.toggle); // Coerce string values + Util.typeCheckConfig(NAME, config, DefaultType); return config; }; - _proto._showElement = function _showElement(relatedTarget) { - var _this3 = this; - - var transition = $$$1(this._element).hasClass(ClassName.FADE); - - if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { - // Don't move modal's DOM position - document.body.appendChild(this._element); - } - - this._element.style.display = 'block'; - - this._element.removeAttribute('aria-hidden'); - - this._element.scrollTop = 0; - - if (transition) { - Util.reflow(this._element); - } - - $$$1(this._element).addClass(ClassName.SHOW); - - if (this._config.focus) { - this._enforceFocus(); - } - - var shownEvent = $$$1.Event(Event.SHOWN, { - relatedTarget: relatedTarget - }); - - var transitionComplete = function transitionComplete() { - if (_this3._config.focus) { - _this3._element.focus(); - } - - _this3._isTransitioning = false; - $$$1(_this3._element).trigger(shownEvent); - }; - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); - } else { - transitionComplete(); - } - }; - - _proto._enforceFocus = function _enforceFocus() { - var _this4 = this; - - $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop - .on(Event.FOCUSIN, function (event) { - if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) { - _this4._element.focus(); - } - }); + _proto._getDimension = function _getDimension() { + var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); + return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; }; - _proto._setEscapeEvent = function _setEscapeEvent() { - var _this5 = this; - - if (this._isShown && this._config.keyboard) { - $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { - if (event.which === ESCAPE_KEYCODE) { - event.preventDefault(); + _proto._getParent = function _getParent() { + var _this3 = this; - _this5.hide(); - } - }); - } else if (!this._isShown) { - $$$1(this._element).off(Event.KEYDOWN_DISMISS); - } - }; + var parent = null; - _proto._setResizeEvent = function _setResizeEvent() { - var _this6 = this; + if (Util.isElement(this._config.parent)) { + parent = this._config.parent; // It's a jQuery object - if (this._isShown) { - $$$1(window).on(Event.RESIZE, function (event) { - return _this6.handleUpdate(event); - }); + if (typeof this._config.parent.jquery !== 'undefined') { + parent = this._config.parent[0]; + } } else { - $$$1(window).off(Event.RESIZE); + parent = $$$1(this._config.parent)[0]; } - }; - - _proto._hideModal = function _hideModal() { - var _this7 = this; - - this._element.style.display = 'none'; - - this._element.setAttribute('aria-hidden', true); - - this._isTransitioning = false; - - this._showBackdrop(function () { - $$$1(document.body).removeClass(ClassName.OPEN); - - _this7._resetAdjustments(); - _this7._resetScrollbar(); - - $$$1(_this7._element).trigger(Event.HIDDEN); + var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; + $$$1(parent).find(selector).each(function (i, element) { + _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); }); + return parent; }; - _proto._removeBackdrop = function _removeBackdrop() { - if (this._backdrop) { - $$$1(this._backdrop).remove(); - this._backdrop = null; - } - }; - - _proto._showBackdrop = function _showBackdrop(callback) { - var _this8 = this; - - var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; - - if (this._isShown && this._config.backdrop) { - this._backdrop = document.createElement('div'); - this._backdrop.className = ClassName.BACKDROP; - - if (animate) { - $$$1(this._backdrop).addClass(animate); - } - - $$$1(this._backdrop).appendTo(document.body); - $$$1(this._element).on(Event.CLICK_DISMISS, function (event) { - if (_this8._ignoreBackdropClick) { - _this8._ignoreBackdropClick = false; - return; - } - - if (event.target !== event.currentTarget) { - return; - } - - if (_this8._config.backdrop === 'static') { - _this8._element.focus(); - } else { - _this8.hide(); - } - }); - - if (animate) { - Util.reflow(this._backdrop); - } - - $$$1(this._backdrop).addClass(ClassName.SHOW); - - if (!callback) { - return; - } - - if (!animate) { - callback(); - return; - } - - var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); - } else if (!this._isShown && this._backdrop) { - $$$1(this._backdrop).removeClass(ClassName.SHOW); - - var callbackRemove = function callbackRemove() { - _this8._removeBackdrop(); - - if (callback) { - callback(); - } - }; - - if ($$$1(this._element).hasClass(ClassName.FADE)) { - var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); + _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { + if (element) { + var isOpen = $$$1(element).hasClass(ClassName.SHOW); - $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); - } else { - callbackRemove(); + if (triggerArray.length > 0) { + $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); } - } else if (callback) { - callback(); - } - }; // ---------------------------------------------------------------------- - // the following methods are used to handle overflowing modals - // todo (fat): these should probably be refactored out of modal.js - // ---------------------------------------------------------------------- - - - _proto._adjustDialog = function _adjustDialog() { - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - - if (!this._isBodyOverflowing && isModalOverflowing) { - this._element.style.paddingLeft = this._scrollbarWidth + "px"; - } - - if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + "px"; } - }; - - _proto._resetAdjustments = function _resetAdjustments() { - this._element.style.paddingLeft = ''; - this._element.style.paddingRight = ''; - }; - - _proto._checkScrollbar = function _checkScrollbar() { - var rect = document.body.getBoundingClientRect(); - this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; - this._scrollbarWidth = this._getScrollbarWidth(); - }; - - _proto._setScrollbar = function _setScrollbar() { - var _this9 = this; - - if (this._isBodyOverflowing) { - // Note: DOMNode.style.paddingRight returns the actual value or '' if not set - // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set - // Adjust fixed content padding - $$$1(Selector.FIXED_CONTENT).each(function (index, element) { - var actualPadding = $$$1(element)[0].style.paddingRight; - var calculatedPadding = $$$1(element).css('padding-right'); - $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); - }); // Adjust sticky content margin - - $$$1(Selector.STICKY_CONTENT).each(function (index, element) { - var actualMargin = $$$1(element)[0].style.marginRight; - var calculatedMargin = $$$1(element).css('margin-right'); - $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); - }); // Adjust navbar-toggler margin + }; // Static - $$$1(Selector.NAVBAR_TOGGLER).each(function (index, element) { - var actualMargin = $$$1(element)[0].style.marginRight; - var calculatedMargin = $$$1(element).css('margin-right'); - $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + "px"); - }); // Adjust body padding - var actualPadding = document.body.style.paddingRight; - var calculatedPadding = $$$1(document.body).css('padding-right'); - $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); - } + Collapse._getTargetFromElement = function _getTargetFromElement(element) { + var selector = Util.getSelectorFromElement(element); + return selector ? $$$1(selector)[0] : null; }; - _proto._resetScrollbar = function _resetScrollbar() { - // Restore fixed content padding - $$$1(Selector.FIXED_CONTENT).each(function (index, element) { - var padding = $$$1(element).data('padding-right'); - - if (typeof padding !== 'undefined') { - $$$1(element).css('padding-right', padding).removeData('padding-right'); - } - }); // Restore sticky content and navbar-toggler margin + Collapse._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var $this = $$$1(this); + var data = $this.data(DATA_KEY); - $$$1(Selector.STICKY_CONTENT + ", " + Selector.NAVBAR_TOGGLER).each(function (index, element) { - var margin = $$$1(element).data('margin-right'); + var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); - if (typeof margin !== 'undefined') { - $$$1(element).css('margin-right', margin).removeData('margin-right'); + if (!data && _config.toggle && /show|hide/.test(config)) { + _config.toggle = false; } - }); // Restore body padding - - var padding = $$$1(document.body).data('padding-right'); - - if (typeof padding !== 'undefined') { - $$$1(document.body).css('padding-right', padding).removeData('padding-right'); - } - }; - - _proto._getScrollbarWidth = function _getScrollbarWidth() { - // thx d.walsh - var scrollDiv = document.createElement('div'); - scrollDiv.className = ClassName.SCROLLBAR_MEASURER; - document.body.appendChild(scrollDiv); - var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; - document.body.removeChild(scrollDiv); - return scrollbarWidth; - }; // Static - - - Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); - - var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {}); if (!data) { - data = new Modal(this, _config); - $$$1(this).data(DATA_KEY, data); + data = new Collapse(this, _config); + $this.data(DATA_KEY, data); } if (typeof config === 'string') { @@ -6686,14 +6972,12 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! throw new TypeError("No method named \"" + config + "\""); } - data[config](relatedTarget); - } else if (_config.show) { - data.show(relatedTarget); + data[config](); } }); }; - _createClass(Modal, null, [{ + _createClass(Collapse, null, [{ key: "VERSION", get: function get() { return VERSION; @@ -6705,7 +6989,7 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! } }]); - return Modal; + return Collapse; }(); /** * ------------------------------------------------------------------------ @@ -6715,35 +6999,20 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { - var _this10 = this; - - var target; - var selector = Util.getSelectorFromElement(this); - - if (selector) { - target = $$$1(selector)[0]; - } - - var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data()); - - if (this.tagName === 'A' || this.tagName === 'AREA') { + // preventDefault only for elements (which change the URL) not inside the collapsible element + if (event.currentTarget.tagName === 'A') { event.preventDefault(); } - var $target = $$$1(target).one(Event.SHOW, function (showEvent) { - if (showEvent.isDefaultPrevented()) { - // Only register focus restorer if modal will actually get shown - return; - } + var $trigger = $$$1(this); + var selector = Util.getSelectorFromElement(this); + $$$1(selector).each(function () { + var $target = $$$1(this); + var data = $target.data(DATA_KEY); + var config = data ? 'toggle' : $trigger.data(); - $target.one(Event.HIDDEN, function () { - if ($$$1(_this10).is(':visible')) { - _this10.focus(); - } - }); + Collapse._jQueryInterface.call($target, config); }); - - Modal._jQueryInterface.call($$$1(target), config, this); }); /** * ------------------------------------------------------------------------ @@ -6751,628 +7020,449 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Modal._jQueryInterface; - $$$1.fn[NAME].Constructor = Modal; + $$$1.fn[NAME] = Collapse._jQueryInterface; + $$$1.fn[NAME].Constructor = Collapse; $$$1.fn[NAME].noConflict = function () { $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Modal._jQueryInterface; + return Collapse._jQueryInterface; }; - return Modal; + return Collapse; }($); /** * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): tooltip.js + * Bootstrap (v4.1.1): dropdown.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ - var Tooltip = function ($$$1) { + var Dropdown = function ($$$1) { /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ - var NAME = 'tooltip'; + var NAME = 'dropdown'; var VERSION = '4.1.1'; - var DATA_KEY = 'bs.tooltip'; + var DATA_KEY = 'bs.dropdown'; var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var CLASS_PREFIX = 'bs-tooltip'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DefaultType = { - animation: 'boolean', - template: 'string', - title: '(string|element|function)', - trigger: 'string', - delay: '(number|object)', - html: 'boolean', - selector: '(string|boolean)', - placement: '(string|function)', - offset: '(number|string)', - container: '(string|element|boolean)', - fallbackPlacement: '(string|array)', - boundary: '(string|element)' - }; - var AttachmentMap = { - AUTO: 'auto', - TOP: 'top', - RIGHT: 'right', - BOTTOM: 'bottom', - LEFT: 'left' - }; - var Default = { - animation: true, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - selector: false, - placement: 'top', - offset: 0, - container: false, - fallbackPlacement: 'flip', - boundary: 'scrollParent' - }; - var HoverState = { - SHOW: 'show', - OUT: 'out' - }; + var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key + + var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key + + var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key + + var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key + + var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key + + var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) + + var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); var Event = { HIDE: "hide" + EVENT_KEY, HIDDEN: "hidden" + EVENT_KEY, SHOW: "show" + EVENT_KEY, SHOWN: "shown" + EVENT_KEY, - INSERTED: "inserted" + EVENT_KEY, CLICK: "click" + EVENT_KEY, - FOCUSIN: "focusin" + EVENT_KEY, - FOCUSOUT: "focusout" + EVENT_KEY, - MOUSEENTER: "mouseenter" + EVENT_KEY, - MOUSELEAVE: "mouseleave" + EVENT_KEY + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, + KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, + KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY }; var ClassName = { - FADE: 'fade', - SHOW: 'show' + DISABLED: 'disabled', + SHOW: 'show', + DROPUP: 'dropup', + DROPRIGHT: 'dropright', + DROPLEFT: 'dropleft', + MENURIGHT: 'dropdown-menu-right', + MENULEFT: 'dropdown-menu-left', + POSITION_STATIC: 'position-static' }; var Selector = { - TOOLTIP: '.tooltip', - TOOLTIP_INNER: '.tooltip-inner', - ARROW: '.arrow' - }; - var Trigger = { - HOVER: 'hover', - FOCUS: 'focus', - CLICK: 'click', - MANUAL: 'manual' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: '.dropdown form', + MENU: '.dropdown-menu', + NAVBAR_NAV: '.navbar-nav', + VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' }; + var AttachmentMap = { + TOP: 'top-start', + TOPEND: 'top-end', + BOTTOM: 'bottom-start', + BOTTOMEND: 'bottom-end', + RIGHT: 'right-start', + RIGHTEND: 'right-end', + LEFT: 'left-start', + LEFTEND: 'left-end' + }; + var Default = { + offset: 0, + flip: true, + boundary: 'scrollParent', + reference: 'toggle', + display: 'dynamic' + }; + var DefaultType = { + offset: '(number|string|function)', + flip: 'boolean', + boundary: '(string|element)', + reference: '(string|element)', + display: 'string' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ - var Tooltip = - /*#__PURE__*/ - function () { - function Tooltip(element, config) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)'); - } // private - - - this._isEnabled = true; - this._timeout = 0; - this._hoverState = ''; - this._activeTrigger = {}; - this._popper = null; // Protected + }; - this.element = element; - this.config = this._getConfig(config); - this.tip = null; + var Dropdown = + /*#__PURE__*/ + function () { + function Dropdown(element, config) { + this._element = element; + this._popper = null; + this._config = this._getConfig(config); + this._menu = this._getMenuElement(); + this._inNavbar = this._detectNavbar(); - this._setListeners(); + this._addEventListeners(); } // Getters - var _proto = Tooltip.prototype; + var _proto = Dropdown.prototype; // Public - _proto.enable = function enable() { - this._isEnabled = true; - }; + _proto.toggle = function toggle() { + if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { + return; + } - _proto.disable = function disable() { - this._isEnabled = false; - }; + var parent = Dropdown._getParentFromElement(this._element); - _proto.toggleEnabled = function toggleEnabled() { - this._isEnabled = !this._isEnabled; - }; + var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); - _proto.toggle = function toggle(event) { - if (!this._isEnabled) { + Dropdown._clearMenus(); + + if (isActive) { return; } - if (event) { - var dataKey = this.constructor.DATA_KEY; - var context = $$$1(event.currentTarget).data(dataKey); + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = $$$1.Event(Event.SHOW, relatedTarget); + $$$1(parent).trigger(showEvent); - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); - } + if (showEvent.isDefaultPrevented()) { + return; + } // Disable totally Popper.js for Dropdown in Navbar - context._activeTrigger.click = !context._activeTrigger.click; - if (context._isWithActiveTrigger()) { - context._enter(null, context); - } else { - context._leave(null, context); + if (!this._inNavbar) { + /** + * Check for Popper dependency + * Popper - https://popper.js.org + */ + if (typeof Popper === 'undefined') { + throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); } - } else { - if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) { - this._leave(null, this); - return; + var referenceElement = this._element; + + if (this._config.reference === 'parent') { + referenceElement = parent; + } else if (Util.isElement(this._config.reference)) { + referenceElement = this._config.reference; // Check if it's jQuery element + + if (typeof this._config.reference.jquery !== 'undefined') { + referenceElement = this._config.reference[0]; + } + } // If boundary is not `scrollParent`, then set position to `static` + // to allow the menu to "escape" the scroll parent's boundaries + // https://github.com/twbs/bootstrap/issues/24251 + + + if (this._config.boundary !== 'scrollParent') { + $$$1(parent).addClass(ClassName.POSITION_STATIC); } - this._enter(null, this); + this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); + } // If this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html + + + if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { + $$$1(document.body).children().on('mouseover', null, $$$1.noop); } + + this._element.focus(); + + this._element.setAttribute('aria-expanded', true); + + $$$1(this._menu).toggleClass(ClassName.SHOW); + $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget)); }; _proto.dispose = function dispose() { - clearTimeout(this._timeout); - $$$1.removeData(this.element, this.constructor.DATA_KEY); - $$$1(this.element).off(this.constructor.EVENT_KEY); - $$$1(this.element).closest('.modal').off('hide.bs.modal'); + $$$1.removeData(this._element, DATA_KEY); + $$$1(this._element).off(EVENT_KEY); + this._element = null; + this._menu = null; - if (this.tip) { - $$$1(this.tip).remove(); + if (this._popper !== null) { + this._popper.destroy(); + + this._popper = null; } + }; - this._isEnabled = null; - this._timeout = null; - this._hoverState = null; - this._activeTrigger = null; + _proto.update = function update() { + this._inNavbar = this._detectNavbar(); if (this._popper !== null) { - this._popper.destroy(); + this._popper.scheduleUpdate(); } + }; // Private - this._popper = null; - this.element = null; - this.config = null; - this.tip = null; - }; - _proto.show = function show() { + _proto._addEventListeners = function _addEventListeners() { var _this = this; - if ($$$1(this.element).css('display') === 'none') { - throw new Error('Please use show on visible elements'); - } - - var showEvent = $$$1.Event(this.constructor.Event.SHOW); + $$$1(this._element).on(Event.CLICK, function (event) { + event.preventDefault(); + event.stopPropagation(); - if (this.isWithContent() && this._isEnabled) { - $$$1(this.element).trigger(showEvent); - var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element); + _this.toggle(); + }); + }; - if (showEvent.isDefaultPrevented() || !isInTheDom) { - return; - } + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config); + Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + return config; + }; - var tip = this.getTipElement(); - var tipId = Util.getUID(this.constructor.NAME); - tip.setAttribute('id', tipId); - this.element.setAttribute('aria-describedby', tipId); - this.setContent(); + _proto._getMenuElement = function _getMenuElement() { + if (!this._menu) { + var parent = Dropdown._getParentFromElement(this._element); - if (this.config.animation) { - $$$1(tip).addClass(ClassName.FADE); - } + this._menu = $$$1(parent).find(Selector.MENU)[0]; + } - var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; + return this._menu; + }; - var attachment = this._getAttachment(placement); + _proto._getPlacement = function _getPlacement() { + var $parentDropdown = $$$1(this._element).parent(); + var placement = AttachmentMap.BOTTOM; // Handle dropup - this.addAttachmentClass(attachment); - var container = this.config.container === false ? document.body : $$$1(this.config.container); - $$$1(tip).data(this.constructor.DATA_KEY, this); + if ($parentDropdown.hasClass(ClassName.DROPUP)) { + placement = AttachmentMap.TOP; - if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) { - $$$1(tip).appendTo(container); + if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.TOPEND; } + } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { + placement = AttachmentMap.RIGHT; + } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { + placement = AttachmentMap.LEFT; + } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.BOTTOMEND; + } - $$$1(this.element).trigger(this.constructor.Event.INSERTED); - this._popper = new Popper(this.element, tip, { - placement: attachment, - modifiers: { - offset: { - offset: this.config.offset - }, - flip: { - behavior: this.config.fallbackPlacement - }, - arrow: { - element: Selector.ARROW - }, - preventOverflow: { - boundariesElement: this.config.boundary - } - }, - onCreate: function onCreate(data) { - if (data.originalPlacement !== data.placement) { - _this._handlePopperPlacementChange(data); - } - }, - onUpdate: function onUpdate(data) { - _this._handlePopperPlacementChange(data); - } - }); - $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html + return placement; + }; - if ('ontouchstart' in document.documentElement) { - $$$1(document.body).children().on('mouseover', null, $$$1.noop); - } + _proto._detectNavbar = function _detectNavbar() { + return $$$1(this._element).closest('.navbar').length > 0; + }; - var complete = function complete() { - if (_this.config.animation) { - _this._fixTransition(); - } + _proto._getPopperConfig = function _getPopperConfig() { + var _this2 = this; - var prevHoverState = _this._hoverState; - _this._hoverState = null; - $$$1(_this.element).trigger(_this.constructor.Event.SHOWN); + var offsetConf = {}; - if (prevHoverState === HoverState.OUT) { - _this._leave(null, _this); - } + if (typeof this._config.offset === 'function') { + offsetConf.fn = function (data) { + data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); + return data; }; - - if ($$$1(this.tip).hasClass(ClassName.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(this.tip); - $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } + } else { + offsetConf.offset = this._config.offset; } - }; - _proto.hide = function hide(callback) { - var _this2 = this; + var popperConfig = { + placement: this._getPlacement(), + modifiers: { + offset: offsetConf, + flip: { + enabled: this._config.flip + }, + preventOverflow: { + boundariesElement: this._config.boundary + } + } // Disable Popper.js if we have a static display - var tip = this.getTipElement(); - var hideEvent = $$$1.Event(this.constructor.Event.HIDE); + }; - var complete = function complete() { - if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { - tip.parentNode.removeChild(tip); - } + if (this._config.display === 'static') { + popperConfig.modifiers.applyStyle = { + enabled: false + }; + } - _this2._cleanTipClass(); + return popperConfig; + }; // Static - _this2.element.removeAttribute('aria-describedby'); - $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN); + Dropdown._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); - if (_this2._popper !== null) { - _this2._popper.destroy(); - } + var _config = typeof config === 'object' ? config : null; - if (callback) { - callback(); + if (!data) { + data = new Dropdown(this, _config); + $$$1(this).data(DATA_KEY, data); } - }; - $$$1(this.element).trigger(hideEvent); + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } - if (hideEvent.isDefaultPrevented()) { + data[config](); + } + }); + }; + + Dropdown._clearMenus = function _clearMenus(event) { + if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { return; } - $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support + var toggles = $$$1.makeArray($$$1(Selector.DATA_TOGGLE)); - if ('ontouchstart' in document.documentElement) { - $$$1(document.body).children().off('mouseover', null, $$$1.noop); - } + for (var i = 0; i < toggles.length; i++) { + var parent = Dropdown._getParentFromElement(toggles[i]); - this._activeTrigger[Trigger.CLICK] = false; - this._activeTrigger[Trigger.FOCUS] = false; - this._activeTrigger[Trigger.HOVER] = false; + var context = $$$1(toggles[i]).data(DATA_KEY); + var relatedTarget = { + relatedTarget: toggles[i] + }; - if ($$$1(this.tip).hasClass(ClassName.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(tip); - $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } + if (!context) { + continue; + } - this._hoverState = ''; - }; + var dropdownMenu = context._menu; - _proto.update = function update() { - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - }; // Protected + if (!$$$1(parent).hasClass(ClassName.SHOW)) { + continue; + } + if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) { + continue; + } - _proto.isWithContent = function isWithContent() { - return Boolean(this.getTitle()); - }; + var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); + $$$1(parent).trigger(hideEvent); - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; + if (hideEvent.isDefaultPrevented()) { + continue; + } // If this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $$$1(this.config.template)[0]; - return this.tip; - }; - _proto.setContent = function setContent() { - var $tip = $$$1(this.getTipElement()); - this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle()); - $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); + if ('ontouchstart' in document.documentElement) { + $$$1(document.body).children().off('mouseover', null, $$$1.noop); + } + + toggles[i].setAttribute('aria-expanded', 'false'); + $$$1(dropdownMenu).removeClass(ClassName.SHOW); + $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); + } }; - _proto.setElementContent = function setElementContent($element, content) { - var html = this.config.html; + Dropdown._getParentFromElement = function _getParentFromElement(element) { + var parent; + var selector = Util.getSelectorFromElement(element); - if (typeof content === 'object' && (content.nodeType || content.jquery)) { - // Content is a DOM node or a jQuery - if (html) { - if (!$$$1(content).parent().is($element)) { - $element.empty().append(content); - } - } else { - $element.text($$$1(content).text()); - } - } else { - $element[html ? 'html' : 'text'](content); + if (selector) { + parent = $$$1(selector)[0]; } - }; - _proto.getTitle = function getTitle() { - var title = this.element.getAttribute('data-original-title'); + return parent || element.parentNode; + }; // eslint-disable-next-line complexity - if (!title) { - title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; + + Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { + // If not input/textarea: + // - And not a key in REGEXP_KEYDOWN => not a dropdown command + // If input/textarea: + // - If space key => not a dropdown command + // - If key is other than escape + // - If key is not up or down => not a dropdown command + // - If trigger inside the menu => not a dropdown command + if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { + return; } - return title; - }; // Private + event.preventDefault(); + event.stopPropagation(); + if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { + return; + } - _proto._getAttachment = function _getAttachment(placement) { - return AttachmentMap[placement.toUpperCase()]; - }; + var parent = Dropdown._getParentFromElement(this); - _proto._setListeners = function _setListeners() { - var _this3 = this; + var isActive = $$$1(parent).hasClass(ClassName.SHOW); - var triggers = this.config.trigger.split(' '); - triggers.forEach(function (trigger) { - if (trigger === 'click') { - $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { - return _this3.toggle(event); - }); - } else if (trigger !== Trigger.MANUAL) { - var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; - var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; - $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) { - return _this3._enter(event); - }).on(eventOut, _this3.config.selector, function (event) { - return _this3._leave(event); - }); + if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { + if (event.which === ESCAPE_KEYCODE) { + var toggle = $$$1(parent).find(Selector.DATA_TOGGLE)[0]; + $$$1(toggle).trigger('focus'); } - $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () { - return _this3.hide(); - }); - }); - - if (this.config.selector) { - this.config = _objectSpread({}, this.config, { - trigger: 'manual', - selector: '' - }); - } else { - this._fixTitle(); + $$$1(this).trigger('click'); + return; } - }; - _proto._fixTitle = function _fixTitle() { - var titleType = typeof this.element.getAttribute('data-original-title'); + var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get(); - if (this.element.getAttribute('title') || titleType !== 'string') { - this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); - this.element.setAttribute('title', ''); + if (items.length === 0) { + return; } - }; - _proto._enter = function _enter(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $$$1(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; - } - - if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { - context._hoverState = HoverState.SHOW; - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.SHOW; - - if (!context.config.delay || !context.config.delay.show) { - context.show(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.SHOW) { - context.show(); - } - }, context.config.delay.show); - }; - - _proto._leave = function _leave(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $$$1(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; - } - - if (context._isWithActiveTrigger()) { - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.OUT; - - if (!context.config.delay || !context.config.delay.hide) { - context.hide(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.OUT) { - context.hide(); - } - }, context.config.delay.hide); - }; - - _proto._isWithActiveTrigger = function _isWithActiveTrigger() { - for (var trigger in this._activeTrigger) { - if (this._activeTrigger[trigger]) { - return true; - } - } - - return false; - }; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {}); - - if (typeof config.delay === 'number') { - config.delay = { - show: config.delay, - hide: config.delay - }; - } - - if (typeof config.title === 'number') { - config.title = config.title.toString(); - } - - if (typeof config.content === 'number') { - config.content = config.content.toString(); - } - - Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); - return config; - }; - - _proto._getDelegateConfig = function _getDelegateConfig() { - var config = {}; + var index = items.indexOf(event.target); - if (this.config) { - for (var key in this.config) { - if (this.constructor.Default[key] !== this.config[key]) { - config[key] = this.config[key]; - } - } + if (event.which === ARROW_UP_KEYCODE && index > 0) { + // Up + index--; } - return config; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $$$1(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); - - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')); + if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { + // Down + index++; } - }; - - _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) { - this._cleanTipClass(); - - this.addAttachmentClass(this._getAttachment(data.placement)); - }; - _proto._fixTransition = function _fixTransition() { - var tip = this.getTipElement(); - var initConfigAnimation = this.config.animation; - - if (tip.getAttribute('x-placement') !== null) { - return; + if (index < 0) { + index = 0; } - $$$1(tip).removeClass(ClassName.FADE); - this.config.animation = false; - this.hide(); - this.show(); - this.config.animation = initConfigAnimation; - }; // Static - - - Tooltip._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); - - var _config = typeof config === 'object' && config; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Tooltip(this, _config); - $$$1(this).data(DATA_KEY, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); + items[index].focus(); }; - _createClass(Tooltip, null, [{ + _createClass(Dropdown, null, [{ key: "VERSION", get: function get() { return VERSION; @@ -7382,26 +7472,6 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! get: function get() { return Default; } - }, { - key: "NAME", - get: function get() { - return NAME; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY; - } - }, { - key: "Event", - get: function get() { - return Event; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY; - } }, { key: "DefaultType", get: function get() { @@ -7409,77 +7479,100 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! } }]); - return Tooltip; + return Dropdown; }(); /** * ------------------------------------------------------------------------ - * jQuery + * Data Api implementation * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Tooltip._jQueryInterface; - $$$1.fn[NAME].Constructor = Tooltip; + $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + event.preventDefault(); + event.stopPropagation(); + + Dropdown._jQueryInterface.call($$$1(this), 'toggle'); + }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { + e.stopPropagation(); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $$$1.fn[NAME] = Dropdown._jQueryInterface; + $$$1.fn[NAME].Constructor = Dropdown; $$$1.fn[NAME].noConflict = function () { $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Tooltip._jQueryInterface; + return Dropdown._jQueryInterface; }; - return Tooltip; + return Dropdown; }($, Popper); /** * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): popover.js + * Bootstrap (v4.1.1): modal.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ - var Popover = function ($$$1) { + var Modal = function ($$$1) { /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ - var NAME = 'popover'; + var NAME = 'modal'; var VERSION = '4.1.1'; - var DATA_KEY = 'bs.popover'; + var DATA_KEY = 'bs.modal'; var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var CLASS_PREFIX = 'bs-popover'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - - var Default = _objectSpread({}, Tooltip.Default, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }); - - var DefaultType = _objectSpread({}, Tooltip.DefaultType, { - content: '(string|element|function)' - }); + var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - var ClassName = { - FADE: 'fade', - SHOW: 'show' + var Default = { + backdrop: true, + keyboard: true, + focus: true, + show: true }; - var Selector = { - TITLE: '.popover-header', - CONTENT: '.popover-body' + var DefaultType = { + backdrop: '(boolean|string)', + keyboard: 'boolean', + focus: 'boolean', + show: 'boolean' }; var Event = { HIDE: "hide" + EVENT_KEY, HIDDEN: "hidden" + EVENT_KEY, SHOW: "show" + EVENT_KEY, SHOWN: "shown" + EVENT_KEY, - INSERTED: "inserted" + EVENT_KEY, - CLICK: "click" + EVENT_KEY, FOCUSIN: "focusin" + EVENT_KEY, - FOCUSOUT: "focusout" + EVENT_KEY, - MOUSEENTER: "mouseenter" + EVENT_KEY, - MOUSELEAVE: "mouseleave" + EVENT_KEY + RESIZE: "resize" + EVENT_KEY, + CLICK_DISMISS: "click.dismiss" + EVENT_KEY, + KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, + MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, + MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + SCROLLBAR_MEASURER: 'modal-scrollbar-measure', + BACKDROP: 'modal-backdrop', + OPEN: 'modal-open', + FADE: 'fade', + SHOW: 'show' + }; + var Selector = { + DIALOG: '.modal-dialog', + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', + STICKY_CONTENT: '.sticky-top', + NAVBAR_TOGGLER: '.navbar-toggler' /** * ------------------------------------------------------------------------ * Class Definition @@ -7488,396 +7581,432 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! }; - var Popover = + var Modal = /*#__PURE__*/ - function (_Tooltip) { - _inheritsLoose(Popover, _Tooltip); - - function Popover() { - return _Tooltip.apply(this, arguments) || this; - } - - var _proto = Popover.prototype; + function () { + function Modal(element, config) { + this._config = this._getConfig(config); + this._element = element; + this._dialog = $$$1(element).find(Selector.DIALOG)[0]; + this._backdrop = null; + this._isShown = false; + this._isBodyOverflowing = false; + this._ignoreBackdropClick = false; + this._scrollbarWidth = 0; + } // Getters - // Overrides - _proto.isWithContent = function isWithContent() { - return this.getTitle() || this._getContent(); - }; - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; + var _proto = Modal.prototype; - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $$$1(this.config.template)[0]; - return this.tip; + // Public + _proto.toggle = function toggle(relatedTarget) { + return this._isShown ? this.hide() : this.show(relatedTarget); }; - _proto.setContent = function setContent() { - var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events - - this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); - - var content = this._getContent(); + _proto.show = function show(relatedTarget) { + var _this = this; - if (typeof content === 'function') { - content = content.call(this.element); + if (this._isTransitioning || this._isShown) { + return; } - this.setElementContent($tip.find(Selector.CONTENT), content); - $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); - }; // Private + if ($$$1(this._element).hasClass(ClassName.FADE)) { + this._isTransitioning = true; + } + var showEvent = $$$1.Event(Event.SHOW, { + relatedTarget: relatedTarget + }); + $$$1(this._element).trigger(showEvent); - _proto._getContent = function _getContent() { - return this.element.getAttribute('data-content') || this.config.content; - }; + if (this._isShown || showEvent.isDefaultPrevented()) { + return; + } - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $$$1(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); + this._isShown = true; - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')); - } - }; // Static + this._checkScrollbar(); + this._setScrollbar(); - Popover._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + this._adjustDialog(); - var _config = typeof config === 'object' ? config : null; + $$$1(document.body).addClass(ClassName.OPEN); - if (!data && /destroy|hide/.test(config)) { - return; - } + this._setEscapeEvent(); - if (!data) { - data = new Popover(this, _config); - $$$1(this).data(DATA_KEY, data); - } + this._setResizeEvent(); - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); + $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { + return _this.hide(event); + }); + $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { + $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { + if ($$$1(event.target).is(_this._element)) { + _this._ignoreBackdropClick = true; } + }); + }); - data[config](); - } + this._showBackdrop(function () { + return _this._showElement(relatedTarget); }); }; - _createClass(Popover, null, [{ - key: "VERSION", - // Getters - get: function get() { - return VERSION; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }, { - key: "NAME", - get: function get() { - return NAME; + _proto.hide = function hide(event) { + var _this2 = this; + + if (event) { + event.preventDefault(); } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY; + + if (this._isTransitioning || !this._isShown) { + return; } - }, { - key: "Event", - get: function get() { - return Event; + + var hideEvent = $$$1.Event(Event.HIDE); + $$$1(this._element).trigger(hideEvent); + + if (!this._isShown || hideEvent.isDefaultPrevented()) { + return; } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY; + + this._isShown = false; + var transition = $$$1(this._element).hasClass(ClassName.FADE); + + if (transition) { + this._isTransitioning = true; } - }, { - key: "DefaultType", - get: function get() { - return DefaultType; + + this._setEscapeEvent(); + + this._setResizeEvent(); + + $$$1(document).off(Event.FOCUSIN); + $$$1(this._element).removeClass(ClassName.SHOW); + $$$1(this._element).off(Event.CLICK_DISMISS); + $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); + + if (transition) { + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $$$1(this._element).one(Util.TRANSITION_END, function (event) { + return _this2._hideModal(event); + }).emulateTransitionEnd(transitionDuration); + } else { + this._hideModal(); } - }]); + }; - return Popover; - }(Tooltip); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY); + this._config = null; + this._element = null; + this._dialog = null; + this._backdrop = null; + this._isShown = null; + this._isBodyOverflowing = null; + this._ignoreBackdropClick = null; + this._scrollbarWidth = null; + }; + _proto.handleUpdate = function handleUpdate() { + this._adjustDialog(); + }; // Private - $$$1.fn[NAME] = Popover._jQueryInterface; - $$$1.fn[NAME].Constructor = Popover; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; - return Popover._jQueryInterface; - }; + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default, config); + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + }; - return Popover; - }($); + _proto._showElement = function _showElement(relatedTarget) { + var _this3 = this; - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.1.1): scrollspy.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ + var transition = $$$1(this._element).hasClass(ClassName.FADE); - var ScrollSpy = function ($$$1) { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - var NAME = 'scrollspy'; - var VERSION = '4.1.1'; - var DATA_KEY = 'bs.scrollspy'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var Default = { - offset: 10, - method: 'auto', - target: '' - }; - var DefaultType = { - offset: 'number', - method: 'string', - target: '(string|element)' - }; - var Event = { - ACTIVATE: "activate" + EVENT_KEY, - SCROLL: "scroll" + EVENT_KEY, - LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - DROPDOWN_ITEM: 'dropdown-item', - DROPDOWN_MENU: 'dropdown-menu', - ACTIVE: 'active' - }; - var Selector = { - DATA_SPY: '[data-spy="scroll"]', - ACTIVE: '.active', - NAV_LIST_GROUP: '.nav, .list-group', - NAV_LINKS: '.nav-link', - NAV_ITEMS: '.nav-item', - LIST_ITEMS: '.list-group-item', - DROPDOWN: '.dropdown', - DROPDOWN_ITEMS: '.dropdown-item', - DROPDOWN_TOGGLE: '.dropdown-toggle' - }; - var OffsetMethod = { - OFFSET: 'offset', - POSITION: 'position' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ + if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { + // Don't move modal's DOM position + document.body.appendChild(this._element); + } - }; + this._element.style.display = 'block'; - var ScrollSpy = - /*#__PURE__*/ - function () { - function ScrollSpy(element, config) { - var _this = this; + this._element.removeAttribute('aria-hidden'); - this._element = element; - this._scrollElement = element.tagName === 'BODY' ? window : element; - this._config = this._getConfig(config); - this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS); - this._offsets = []; - this._targets = []; - this._activeTarget = null; - this._scrollHeight = 0; - $$$1(this._scrollElement).on(Event.SCROLL, function (event) { - return _this._process(event); - }); - this.refresh(); + this._element.scrollTop = 0; - this._process(); - } // Getters + if (transition) { + Util.reflow(this._element); + } + $$$1(this._element).addClass(ClassName.SHOW); - var _proto = ScrollSpy.prototype; + if (this._config.focus) { + this._enforceFocus(); + } - // Public - _proto.refresh = function refresh() { - var _this2 = this; + var shownEvent = $$$1.Event(Event.SHOWN, { + relatedTarget: relatedTarget + }); - var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; - var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; - var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; - this._offsets = []; - this._targets = []; - this._scrollHeight = this._getScrollHeight(); - var targets = $$$1.makeArray($$$1(this._selector)); - targets.map(function (element) { - var target; - var targetSelector = Util.getSelectorFromElement(element); + var transitionComplete = function transitionComplete() { + if (_this3._config.focus) { + _this3._element.focus(); + } - if (targetSelector) { - target = $$$1(targetSelector)[0]; + _this3._isTransitioning = false; + $$$1(_this3._element).trigger(shownEvent); + }; + + if (transition) { + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); + } else { + transitionComplete(); + } + }; + + _proto._enforceFocus = function _enforceFocus() { + var _this4 = this; + + $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop + .on(Event.FOCUSIN, function (event) { + if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) { + _this4._element.focus(); } + }); + }; - if (target) { - var targetBCR = target.getBoundingClientRect(); + _proto._setEscapeEvent = function _setEscapeEvent() { + var _this5 = this; - if (targetBCR.width || targetBCR.height) { - // TODO (fat): remove sketch reliance on jQuery position/offset - return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; + if (this._isShown && this._config.keyboard) { + $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { + if (event.which === ESCAPE_KEYCODE) { + event.preventDefault(); + + _this5.hide(); } - } + }); + } else if (!this._isShown) { + $$$1(this._element).off(Event.KEYDOWN_DISMISS); + } + }; - return null; - }).filter(function (item) { - return item; - }).sort(function (a, b) { - return a[0] - b[0]; - }).forEach(function (item) { - _this2._offsets.push(item[0]); + _proto._setResizeEvent = function _setResizeEvent() { + var _this6 = this; - _this2._targets.push(item[1]); - }); + if (this._isShown) { + $$$1(window).on(Event.RESIZE, function (event) { + return _this6.handleUpdate(event); + }); + } else { + $$$1(window).off(Event.RESIZE); + } }; - _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - $$$1(this._scrollElement).off(EVENT_KEY); - this._element = null; - this._scrollElement = null; - this._config = null; - this._selector = null; - this._offsets = null; - this._targets = null; - this._activeTarget = null; - this._scrollHeight = null; - }; // Private + _proto._hideModal = function _hideModal() { + var _this7 = this; + this._element.style.display = 'none'; - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {}); + this._element.setAttribute('aria-hidden', true); - if (typeof config.target !== 'string') { - var id = $$$1(config.target).attr('id'); + this._isTransitioning = false; - if (!id) { - id = Util.getUID(NAME); - $$$1(config.target).attr('id', id); - } + this._showBackdrop(function () { + $$$1(document.body).removeClass(ClassName.OPEN); - config.target = "#" + id; - } + _this7._resetAdjustments(); - Util.typeCheckConfig(NAME, config, DefaultType); - return config; - }; + _this7._resetScrollbar(); - _proto._getScrollTop = function _getScrollTop() { - return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; + $$$1(_this7._element).trigger(Event.HIDDEN); + }); }; - _proto._getScrollHeight = function _getScrollHeight() { - return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); + _proto._removeBackdrop = function _removeBackdrop() { + if (this._backdrop) { + $$$1(this._backdrop).remove(); + this._backdrop = null; + } }; - _proto._getOffsetHeight = function _getOffsetHeight() { - return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; - }; + _proto._showBackdrop = function _showBackdrop(callback) { + var _this8 = this; - _proto._process = function _process() { - var scrollTop = this._getScrollTop() + this._config.offset; + var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; - var scrollHeight = this._getScrollHeight(); + if (this._isShown && this._config.backdrop) { + this._backdrop = document.createElement('div'); + this._backdrop.className = ClassName.BACKDROP; - var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); + if (animate) { + $$$1(this._backdrop).addClass(animate); + } - if (this._scrollHeight !== scrollHeight) { - this.refresh(); - } + $$$1(this._backdrop).appendTo(document.body); + $$$1(this._element).on(Event.CLICK_DISMISS, function (event) { + if (_this8._ignoreBackdropClick) { + _this8._ignoreBackdropClick = false; + return; + } - if (scrollTop >= maxScroll) { - var target = this._targets[this._targets.length - 1]; + if (event.target !== event.currentTarget) { + return; + } - if (this._activeTarget !== target) { - this._activate(target); + if (_this8._config.backdrop === 'static') { + _this8._element.focus(); + } else { + _this8.hide(); + } + }); + + if (animate) { + Util.reflow(this._backdrop); } - return; - } + $$$1(this._backdrop).addClass(ClassName.SHOW); - if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { - this._activeTarget = null; + if (!callback) { + return; + } - this._clear(); + if (!animate) { + callback(); + return; + } - return; - } + var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); + $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); + } else if (!this._isShown && this._backdrop) { + $$$1(this._backdrop).removeClass(ClassName.SHOW); - for (var i = this._offsets.length; i--;) { - var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); + var callbackRemove = function callbackRemove() { + _this8._removeBackdrop(); - if (isActiveTarget) { - this._activate(this._targets[i]); + if (callback) { + callback(); + } + }; + + if ($$$1(this._element).hasClass(ClassName.FADE)) { + var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); + + $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); + } else { + callbackRemove(); } + } else if (callback) { + callback(); } - }; + }; // ---------------------------------------------------------------------- + // the following methods are used to handle overflowing modals + // todo (fat): these should probably be refactored out of modal.js + // ---------------------------------------------------------------------- - _proto._activate = function _activate(target) { - this._activeTarget = target; - this._clear(); + _proto._adjustDialog = function _adjustDialog() { + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style + if (!this._isBodyOverflowing && isModalOverflowing) { + this._element.style.paddingLeft = this._scrollbarWidth + "px"; + } + if (this._isBodyOverflowing && !isModalOverflowing) { + this._element.style.paddingRight = this._scrollbarWidth + "px"; + } + }; - queries = queries.map(function (selector) { - return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]"); - }); - var $link = $$$1(queries.join(',')); + _proto._resetAdjustments = function _resetAdjustments() { + this._element.style.paddingLeft = ''; + this._element.style.paddingRight = ''; + }; - if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { - $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); - $link.addClass(ClassName.ACTIVE); - } else { - // Set triggered link as active - $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active - // With both
      and