/**
* bootbox.js 5.5.2
*
* http://bootboxjs.com/license.txt
*/
!function (t, e) { 'use strict'; 'function' == typeof define && define.amd ? define(['jquery'], e) : 'object' == typeof exports ? module.exports = e(require('jquery')) : t.bootbox = e(t.jQuery) }(this, function e(p, u) { 'use strict'; var r, n, i, l; Object.keys || (Object.keys = (r = Object.prototype.hasOwnProperty, n = !{ toString: null }.propertyIsEnumerable('toString'), l = (i = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']).length, function (t) { if ('function' != typeof t && ('object' != typeof t || null === t)) throw new TypeError('Object.keys called on non-object'); var e, o, a = []; for (e in t) r.call(t, e) && a.push(e); if (n) for (o = 0; o < l; o++)r.call(t, i[o]) && a.push(i[o]); return a })); var d = {}; d.VERSION = '5.5.2'; var b = { en: { OK: 'OK', CANCEL: 'Cancel', CONFIRM: 'OK' } }, f = { dialog: "
", header: "
", footer: '', closeButton: '', form: '', button: '', option: '', promptMessage: '', inputs: { text: '', textarea: '', email: '', select: '', checkbox: '', radio: '', date: '', time: '', number: '', password: '', range: '' } }, m = { locale: 'en', backdrop: 'static', animate: !0, className: null, closeButton: !0, show: !0, container: 'body', value: '', inputType: 'text', swapButtonOrder: !1, centerVertical: !1, multiple: !1, scrollable: !1, reusable: !1 }; function c(t, e, o) { return p.extend(!0, {}, t, function (t, e) { var o = t.length, a = {}; if (o < 1 || 2 < o) throw new Error('Invalid argument length'); return 2 === o || 'string' == typeof t[0] ? (a[e[0]] = t[0], a[e[1]] = t[1]) : a = t[0], a }(e, o)) } function h(t, e, o, a) { var r; a && a[0] && (r = a[0].locale || m.locale, (a[0].swapButtonOrder || m.swapButtonOrder) && (e = e.reverse())); var n, i, l, s = { className: 'bootbox-' + t, buttons: function (t, e) { for (var o = {}, a = 0, r = t.length; a < r; a++) { var n = t[a], i = n.toLowerCase(), l = n.toUpperCase(); o[i] = { label: (s = l, c = e, p = b[c], p ? p[s] : b.en[s]) } } var s, c, p; return o }(e, r) }; return n = c(s, a, o), l = {}, g(i = e, function (t, e) { l[e] = !0 }), g(n.buttons, function (t) { if (l[t] === u) throw new Error('button key "' + t + '" is not allowed (options are ' + i.join(' ') + ')') }), n } function w(t) { return Object.keys(t).length } function g(t, o) { var a = 0; p.each(t, function (t, e) { o(t, e, a++) }) } function v(t) { t.data.dialog.find('.bootbox-accept').first().trigger('focus') } function y(t) { t.target === t.data.dialog[0] && t.data.dialog.remove() } function x(t) { t.target === t.data.dialog[0] && (t.data.dialog.off('escape.close.bb'), t.data.dialog.off('click')) } function k(t, e, o) { t.stopPropagation(), t.preventDefault(), p.isFunction(o) && !1 === o.call(e, t) || e.modal('hide') } function E(t) { return /([01][0-9]|2[0-3]):[0-5][0-9]?:[0-5][0-9]/.test(t) } function O(t) { return /(\d{4})-(\d{2})-(\d{2})/.test(t) } return d.locales = function (t) { return t ? b[t] : b }, d.addLocale = function (t, o) { return p.each(['OK', 'CANCEL', 'CONFIRM'], function (t, e) { if (!o[e]) throw new Error('Please supply a translation for "' + e + '"') }), b[t] = { OK: o.OK, CANCEL: o.CANCEL, CONFIRM: o.CONFIRM }, d }, d.removeLocale = function (t) { if ('en' === t) throw new Error('"en" is used as the default and fallback locale and cannot be removed.'); return delete b[t], d }, d.setLocale = function (t) { return d.setDefaults('locale', t) }, d.setDefaults = function () { var t = {}; return 2 === arguments.length ? t[arguments[0]] = arguments[1] : t = arguments[0], p.extend(m, t), d }, d.hideAll = function () { return p('.bootbox').modal('hide'), d }, d.init = function (t) { return e(t || p) }, d.dialog = function (t) { if (p.fn.modal === u) throw new Error("\"$.fn.modal\" is not defined; please double check you have included the Bootstrap JavaScript library. See https://getbootstrap.com/docs/4.4/getting-started/javascript/ for more details."); if (t = function (r) { var n, i; if ('object' != typeof r) throw new Error('Please supply an object of options'); if (!r.message) throw new Error('"message" option must not be null or an empty string.'); (r = p.extend({}, m, r)).backdrop ? r.backdrop = 'string' != typeof r.backdrop || 'static' !== r.backdrop.toLowerCase() || 'static' : r.backdrop = !1 !== r.backdrop && 0 !== r.backdrop && 'static'; r.buttons || (r.buttons = {}); return n = r.buttons, i = w(n), g(n, function (t, e, o) { if (p.isFunction(e) && (e = n[t] = { callback: e }), 'object' !== p.type(e)) throw new Error('button with key "' + t + '" must be an object'); if (e.label || (e.label = t), !e.className) { var a = !1; a = r.swapButtonOrder ? 0 === o : o === i - 1, e.className = i <= 2 && a ? 'btn-primary' : 'btn-secondary btn-default' } }), r }(t), p.fn.modal.Constructor.VERSION) { t.fullBootstrapVersion = p.fn.modal.Constructor.VERSION; var e = t.fullBootstrapVersion.indexOf('.'); t.bootstrap = t.fullBootstrapVersion.substring(0, e) } else t.bootstrap = '2', t.fullBootstrapVersion = '2.3.2', console.warn('Bootbox will *mostly* work with Bootstrap 2, but we do not officially support it. Please upgrade, if possible.'); var o = p(f.dialog), a = o.find('.modal-dialog'), r = o.find('.modal-body'), n = p(f.header), i = p(f.footer), l = t.buttons, s = { onEscape: t.onEscape }; if (r.find('.bootbox-body').html(t.message), 0 < w(t.buttons) && (g(l, function (t, e) { var o = p(f.button); switch (o.data('bb-handler', t), o.addClass(e.className), t) { case 'ok': case 'confirm': o.addClass('bootbox-accept'); break; case 'cancel': o.addClass('bootbox-cancel') }o.html(e.label), i.append(o), s[t] = e.callback }), r.after(i)), !0 === t.animate && o.addClass('fade'), t.className && o.addClass(t.className), t.size) switch (t.fullBootstrapVersion.substring(0, 3) < '3.1' && console.warn('"size" requires Bootstrap 3.1.0 or higher. You appear to be using ' + t.fullBootstrapVersion + '. Please upgrade to use this option.'), t.size) { case 'small': case 'sm': a.addClass('modal-sm'); break; case 'large': case 'lg': a.addClass('modal-lg'); break; case 'extra-large': case 'xl': a.addClass('modal-xl'), t.fullBootstrapVersion.substring(0, 3) < '4.2' && console.warn('Using size "xl"/"extra-large" requires Bootstrap 4.2.0 or higher. You appear to be using ' + t.fullBootstrapVersion + '. Please upgrade to use this option.') }if (t.scrollable && (a.addClass('modal-dialog-scrollable'), t.fullBootstrapVersion.substring(0, 3) < '4.3' && console.warn('Using "scrollable" requires Bootstrap 4.3.0 or higher. You appear to be using ' + t.fullBootstrapVersion + '. Please upgrade to use this option.')), t.title && (r.before(n), o.find('.modal-title').html(t.title)), t.closeButton) { var c = p(f.closeButton); t.title ? 3 < t.bootstrap ? o.find('.modal-header').append(c) : o.find('.modal-header').prepend(c) : c.prependTo(r) } if (t.centerVertical && (a.addClass('modal-dialog-centered'), t.fullBootstrapVersion < '4.0.0' && console.warn('"centerVertical" requires Bootstrap 4.0.0-beta.3 or higher. You appear to be using ' + t.fullBootstrapVersion + '. Please upgrade to use this option.')), t.reusable || o.one('hide.bs.modal', { dialog: o }, x), t.onHide) { if (!p.isFunction(t.onHide)) throw new Error('Argument supplied to "onHide" must be a function'); o.on('hide.bs.modal', t.onHide) } if (t.reusable || o.one('hidden.bs.modal', { dialog: o }, y), t.onHidden) { if (!p.isFunction(t.onHidden)) throw new Error('Argument supplied to "onHidden" must be a function'); o.on('hidden.bs.modal', t.onHidden) } if (t.onShow) { if (!p.isFunction(t.onShow)) throw new Error('Argument supplied to "onShow" must be a function'); o.on('show.bs.modal', t.onShow) } if (o.one('shown.bs.modal', { dialog: o }, v), t.onShown) { if (!p.isFunction(t.onShown)) throw new Error('Argument supplied to "onShown" must be a function'); o.on('shown.bs.modal', t.onShown) } return !0 === t.backdrop && o.on('click.dismiss.bs.modal', function (t) { o.children('.modal-backdrop').length && (t.currentTarget = o.children('.modal-backdrop').get(0)), t.target === t.currentTarget && o.trigger('escape.close.bb') }), o.on('escape.close.bb', function (t) { s.onEscape && k(t, o, s.onEscape) }), o.on('click', '.modal-footer button:not(.disabled)', function (t) { var e = p(this).data('bb-handler'); e !== u && k(t, o, s[e]) }), o.on('click', '.bootbox-close-button', function (t) { k(t, o, s.onEscape) }), o.on('keyup', function (t) { 27 === t.which && o.trigger('escape.close.bb') }), p(t.container).append(o), o.modal({ backdrop: t.backdrop, keyboard: !1, show: !1 }), t.show && o.modal('show'), o }, d.alert = function () { var t; if ((t = h('alert', ['ok'], ['message', 'callback'], arguments)).callback && !p.isFunction(t.callback)) throw new Error('alert requires the "callback" property to be a function when provided'); return t.buttons.ok.callback = t.onEscape = function () { return !p.isFunction(t.callback) || t.callback.call(this) }, d.dialog(t) }, d.confirm = function () { var t; if (t = h('confirm', ['cancel', 'confirm'], ['message', 'callback'], arguments), !p.isFunction(t.callback)) throw new Error('confirm requires a callback'); return t.buttons.cancel.callback = t.onEscape = function () { return t.callback.call(this, !1) }, t.buttons.confirm.callback = function () { return t.callback.call(this, !0) }, d.dialog(t) }, d.prompt = function () { var r, e, t, n, o, a; if (t = p(f.form), (r = h('prompt', ['cancel', 'confirm'], ['title', 'callback'], arguments)).value || (r.value = m.value), r.inputType || (r.inputType = m.inputType), o = r.show === u ? m.show : r.show, r.show = !1, r.buttons.cancel.callback = r.onEscape = function () { return r.callback.call(this, null) }, r.buttons.confirm.callback = function () { var t; if ('checkbox' === r.inputType) t = n.find('input:checked').map(function () { return p(this).val() }).get(); else if ('radio' === r.inputType) t = n.find('input:checked').val(); else { if (n[0].checkValidity && !n[0].checkValidity()) return !1; t = 'select' === r.inputType && !0 === r.multiple ? n.find('option:selected').map(function () { return p(this).val() }).get() : n.val() } return r.callback.call(this, t) }, !r.title) throw new Error('prompt requires a title'); if (!p.isFunction(r.callback)) throw new Error('prompt requires a callback'); if (!f.inputs[r.inputType]) throw new Error('Invalid prompt type'); switch (n = p(f.inputs[r.inputType]), r.inputType) { case 'text': case 'textarea': case 'email': case 'password': n.val(r.value), r.placeholder && n.attr('placeholder', r.placeholder), r.pattern && n.attr('pattern', r.pattern), r.maxlength && n.attr('maxlength', r.maxlength), r.required && n.prop({ required: !0 }), r.rows && !isNaN(parseInt(r.rows)) && 'textarea' === r.inputType && n.attr({ rows: r.rows }); break; case 'date': case 'time': case 'number': case 'range': if (n.val(r.value), r.placeholder && n.attr('placeholder', r.placeholder), r.pattern && n.attr('pattern', r.pattern), r.required && n.prop({ required: !0 }), 'date' !== r.inputType && r.step) { if (!('any' === r.step || !isNaN(r.step) && 0 < parseFloat(r.step))) throw new Error('"step" must be a valid positive number or the value "any". See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-step for more information.'); n.attr('step', r.step) } !function (t, e, o) { var a = !1, r = !0, n = !0; if ('date' === t) e === u || (r = O(e)) ? o === u || (n = O(o)) || console.warn('Browsers which natively support the "date" input type expect date values to be of the form "YYYY-MM-DD" (see ISO-8601 https://www.iso.org/iso-8601-date-and-time-format.html). Bootbox does not enforce this rule, but your max value may not be enforced by this browser.') : console.warn('Browsers which natively support the "date" input type expect date values to be of the form "YYYY-MM-DD" (see ISO-8601 https://www.iso.org/iso-8601-date-and-time-format.html). Bootbox does not enforce this rule, but your min value may not be enforced by this browser.'); else if ('time' === t) { if (e !== u && !(r = E(e))) throw new Error('"min" is not a valid time. See https://www.w3.org/TR/2012/WD-html-markup-20120315/datatypes.html#form.data.time for more information.'); if (o !== u && !(n = E(o))) throw new Error('"max" is not a valid time. See https://www.w3.org/TR/2012/WD-html-markup-20120315/datatypes.html#form.data.time for more information.') } else { if (e !== u && isNaN(e)) throw r = !1, new Error('"min" must be a valid number. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-min for more information.'); if (o !== u && isNaN(o)) throw n = !1, new Error('"max" must be a valid number. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-max for more information.') } if (r && n) { if (o <= e) throw new Error('"max" must be greater than "min". See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-max for more information.'); a = !0 } return a }(r.inputType, r.min, r.max) || (r.min !== u && n.attr('min', r.min), r.max !== u && n.attr('max', r.max)); break; case 'select': var i = {}; if (a = r.inputOptions || [], !p.isArray(a)) throw new Error('Please pass an array of input options'); if (!a.length) throw new Error('prompt with "inputType" set to "select" requires at least one option'); r.placeholder && n.attr('placeholder', r.placeholder), r.required && n.prop({ required: !0 }), r.multiple && n.prop({ multiple: !0 }), g(a, function (t, e) { var o = n; if (e.value === u || e.text === u) throw new Error('each option needs a "value" property and a "text" property'); e.group && (i[e.group] || (i[e.group] = p('').attr('label', e.group)), o = i[e.group]); var a = p(f.option); a.attr('value', e.value).text(e.text), o.append(a) }), g(i, function (t, e) { n.append(e) }), n.val(r.value); break; case 'checkbox': var l = p.isArray(r.value) ? r.value : [r.value]; if (!(a = r.inputOptions || []).length) throw new Error('prompt with "inputType" set to "checkbox" requires at least one option'); n = p(''), g(a, function (t, o) { if (o.value === u || o.text === u) throw new Error('each option needs a "value" property and a "text" property'); var a = p(f.inputs[r.inputType]); a.find('input').attr('value', o.value), a.find('label').append('\n' + o.text), g(l, function (t, e) { e === o.value && a.find('input').prop('checked', !0) }), n.append(a) }); break; case 'radio': if (r.value !== u && p.isArray(r.value)) throw new Error('prompt with "inputType" set to "radio" requires a single, non-array value for "value"'); if (!(a = r.inputOptions || []).length) throw new Error('prompt with "inputType" set to "radio" requires at least one option'); n = p(''); var s = !0; g(a, function (t, e) { if (e.value === u || e.text === u) throw new Error('each option needs a "value" property and a "text" property'); var o = p(f.inputs[r.inputType]); o.find('input').attr('value', e.value), o.find('label').append('\n' + e.text), r.value !== u && e.value === r.value && (o.find('input').prop('checked', !0), s = !1), n.append(o) }), s && n.find('input[type="radio"]').first().prop('checked', !0) }if (t.append(n), t.on('submit', function (t) { t.preventDefault(), t.stopPropagation(), e.find('.bootbox-accept').trigger('click') }), '' !== p.trim(r.message)) { var c = p(f.promptMessage).html(r.message); t.prepend(c), r.message = t } else r.message = t; return (e = d.dialog(r)).off('shown.bs.modal', v), e.on('shown.bs.modal', function () { n.focus() }), !0 === o && e.modal('show'), e }, d });