-
@@ -53,4 +53,3 @@
@RenderBody()
@await Html.PartialAsync("Footer")
-@RenderSection("modal", false)
\ No newline at end of file
diff --git a/src/client/Bootstrap.Client/appsettings.Development.json b/src/client/Bootstrap.Client/appsettings.Development.json
index 1d3c6e03..ad711c70 100644
--- a/src/client/Bootstrap.Client/appsettings.Development.json
+++ b/src/client/Bootstrap.Client/appsettings.Development.json
@@ -15,9 +15,15 @@
"MaxFileCount": 1
}
},
+ "AllowOrigins": "http://localhost:50852",
+ "SimulateUserName": "Admin",
+ "BootstrapAdminAuthenticationOptions": {
+ "AuthHost": "http://localhost:50852",
+ "KeyPath": "..\\..\\admin\\keys"
+ },
"ConnectionStrings": {
"ba": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa",
- "client": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa"
+ "client": "Data Source=Client.db;"
},
"DB": [
{
@@ -48,11 +54,6 @@
}
}
],
- "SimulateUserName": "Admin",
- "BootstrapAdminAuthenticationOptions": {
- "AuthHost": "http://localhost:50852",
- "KeyPath": "..\\..\\admin\\keys"
- },
"SmtpClient": {
"Host": "smtp.163.com",
"Port": 587,
@@ -61,7 +62,6 @@
"From": "honeywell_mes@163.com",
"To": "argo@163.com"
},
- "AllowOrigins": "http://localhost:50852",
"LongbowCache": {
"Enabled": true,
"CacheItems": [
diff --git a/src/client/Bootstrap.Client/appsettings.json b/src/client/Bootstrap.Client/appsettings.json
index da1b812c..26ecb2e5 100644
--- a/src/client/Bootstrap.Client/appsettings.json
+++ b/src/client/Bootstrap.Client/appsettings.json
@@ -14,7 +14,7 @@
},
"ConnectionStrings": {
"ba": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa",
- "client": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa"
+ "client": "Data Source=Client.db;"
},
"DB": [
{
diff --git a/src/client/Bootstrap.Client/wwwroot/css/site.css b/src/client/Bootstrap.Client/wwwroot/css/site.css
index 58ff7379..232a8d21 100644
--- a/src/client/Bootstrap.Client/wwwroot/css/site.css
+++ b/src/client/Bootstrap.Client/wwwroot/css/site.css
@@ -61,3 +61,13 @@ aside {
color: #fff;
border: 1px solid #fff;
}
+
+.tooltip-inner .search-input-tooltip {
+ font-size: 0.75rem;
+}
+
+ .tooltip-inner .search-input-tooltip kbd {
+ display: inline-block;
+ background: #17a2b8;
+ padding: 1px 6px;
+ }
diff --git a/src/client/Bootstrap.Client/wwwroot/css/theme-responsive.css b/src/client/Bootstrap.Client/wwwroot/css/theme-responsive.css
index 15208e0b..ae653867 100644
--- a/src/client/Bootstrap.Client/wwwroot/css/theme-responsive.css
+++ b/src/client/Bootstrap.Client/wwwroot/css/theme-responsive.css
@@ -130,6 +130,12 @@
}
}
+@media (min-width: 1120px) {
+ .bootstrap-table .fixed-table-toolbar .columns button i + span, .bootstrap-table .fixed-table-toolbar .search button i + span {
+ display: inline-block;
+ }
+}
+
@media (min-width: 1200px) {
.modal-xl {
max-width: 1100px;
diff --git a/src/client/Bootstrap.Client/wwwroot/css/theme.css b/src/client/Bootstrap.Client/wwwroot/css/theme.css
index 214096c5..c8b7faed 100644
--- a/src/client/Bootstrap.Client/wwwroot/css/theme.css
+++ b/src/client/Bootstrap.Client/wwwroot/css/theme.css
@@ -6,7 +6,6 @@
body {
color: #797979;
background: #f1f2f7;
- -webkit-font-smoothing: antialiased;
-webkit-overflow-scrolling: touch;
}
@@ -121,6 +120,10 @@ aside .bg, aside .nav-brand, aside .nav-header, .header .nav, .userinfo .dropdow
flex: 1 1 33.333%;
}
+ .userinfo .dropdown-item a:hover {
+ color: #333;
+ }
+
.userinfo .dropdown-item a i {
font-size: 1.025rem;
display: block;
@@ -167,6 +170,15 @@ aside .bg, aside .nav-brand, aside .nav-header, .header .nav, .userinfo .dropdow
transition: all .25s linear;
}
+.header .nav .dropdown .dropdown-blazor {
+ padding: 2px 4px;
+}
+
+ .header .nav .dropdown-blazor img {
+ width: 28px;
+ margin-top: 1px;
+ }
+
.nav .dropdown-menu {
width: 235px;
border: none;
@@ -432,7 +444,7 @@ footer {
outline: none;
}
-.dropdown-select + .dropdown-menu a:hover {
+.dropdown-select + .dropdown-menu a:hover, .dropdown-select + .dropdown-menu .dropdown-item:hover {
background: #007AC0;
color: #fff;
}
@@ -441,12 +453,16 @@ footer {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.176);
}
- .dropdown-menu a {
+ .dropdown-menu a, .dropdown-select + .dropdown-menu .dropdown-item {
transition: all .25s linear;
padding: 6px 20px;
display: block;
}
+.dropdown-select + .dropdown-menu .dropdown-item {
+ color: #007bff;
+}
+
.dropdown-divider {
margin: 0.125rem 0;
}
@@ -519,10 +535,6 @@ input.pending {
white-space: nowrap;
}
-.modal-body, .card-body {
- padding: 15px 15px 0 15px;
-}
-
.modal-body-fixed {
max-height: calc(54vh);
overflow-y: auto;
@@ -552,7 +564,7 @@ input.pending {
padding: 0.5rem 1rem;
}
-.card .card-header a {
+.card .card-header a:not([data-toggle="popover"]) {
color: #797979;
}
@@ -580,8 +592,8 @@ input.pending {
margin-left: 6px;
}
-.card-body .bootstrap-table {
- margin-top: -10px;
+.card .modal-footer {
+ padding: 0.5rem 0rem;
}
.no-card-header .card-header {
@@ -715,22 +727,18 @@ input.pending {
background-color: rgba(0,0,0,.05);
}
- .bootstrap-table .fixed-table-container .fixed-table-body {
- border-radius: 4px;
+ .bootstrap-table .fixed-table-container .fixed-table-body .table .bs-checkbox label {
+ margin-bottom: 0;
}
- .bootstrap-table .fixed-table-container .fixed-table-body .table .bs-checkbox label {
- margin-bottom: 0;
+ .bootstrap-table .fixed-table-container .fixed-table-body .table .bs-checkbox label input[type='checkbox'] {
+ cursor: pointer;
}
- .bootstrap-table .fixed-table-container .fixed-table-body .table .bs-checkbox label input[type='checkbox'] {
- cursor: pointer;
- }
-
- .bootstrap-table .fixed-table-container .fixed-table-body .table td .btn:not(.btn-lg) {
- font-size: 0.75rem;
- padding: 1px 5px;
- }
+ .bootstrap-table .fixed-table-container .fixed-table-body .table td .btn:not(.btn-lg) {
+ font-size: 0.75rem;
+ padding: 1px 5px;
+ }
.bootstrap-table .fixed-table-container .table tbody tr.selected td {
background-color: rgba(0, 0, 0, 0.03);
@@ -750,6 +758,10 @@ input.pending {
padding: 6px 20px;
}
+.bootstrap-table .fixed-table-toolbar .columns button i + span, .bootstrap-table .fixed-table-toolbar .search button i + span {
+ display: none;
+}
+
.fixed-table-toolbar .dropdown-menu {
min-width: unset;
}
diff --git a/src/client/Bootstrap.Client/wwwroot/js/dummy.js b/src/client/Bootstrap.Client/wwwroot/js/dummy.js
new file mode 100644
index 00000000..3193cf4b
--- /dev/null
+++ b/src/client/Bootstrap.Client/wwwroot/js/dummy.js
@@ -0,0 +1,32 @@
+$(function () {
+ $('table').lgbTable({
+ url: 'api/Dummy',
+ dataBinder: {
+ map: {
+ Id: "#dummyID",
+ Item1: "#item1",
+ Item2: "#item2",
+ Item3: "#item3"
+ }
+ },
+ smartTable: {
+ sortName: 'item1',
+ queryParams: function (params) {
+ return $.extend(params, {
+ item1: $('#item_query_1').val(),
+ item2: $("#item_query_2").val(),
+ item3: $("#item_query_3").val()
+ });
+ },
+ columns: [
+ { title: "示例属性1", field: "Item1", sortable: true },
+ { title: "示例属性2", field: "Item2", sortable: true },
+ { title: "示例属性3", field: "Item3", sortable: true, formatter: function (value) { return value === 0 ? "系统使用" : "自定义"; } }
+ ],
+ exportOptions: {
+ fileName: "下载示例文件",
+ ignoreColumn: [0, 5]
+ }
+ }
+ });
+});
\ No newline at end of file
diff --git a/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.common.js b/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.common.js
index 4c422fbe..2ba5dd01 100644
--- a/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.common.js
+++ b/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.common.js
@@ -90,7 +90,7 @@
};
$.extend({
- "format": function (source, params) {
+ format: function (source, params) {
if (params === undefined || params === null) {
return null;
}
@@ -125,6 +125,19 @@
document.webkitIsFullScreen || window.fullscreen ||
false;
},
+ remoteValidate: function (url, method) {
+ if (method === undefined) method = 'get';
+ var check = false;
+ jQuery[method]({
+ url: $.formatUrl(url),
+ async: false,
+ cache: false,
+ success: function (result) {
+ check = result
+ }
+ });
+ return check;
+ },
bc: function (options) {
options = $.extend({
id: "",
@@ -298,7 +311,7 @@
return this;
},
lgbTable: function (options) {
- var bsa = new DataTable($.extend(options.dataBinder, { url: options.url }));
+ var bsa = new DataTable($.extend(options.dataBinder, { url: options.url, bootstrapTable: this }));
var settings = $.extend(true, {
url: options.url,
@@ -340,12 +353,34 @@
pageList: [20, 40, 80, 120], //可供选择的每页的行数(*)
showExport: true,
exportTypes: ['csv', 'txt', 'excel'],
+ advancedSearchModal: '#dialogAdvancedSearch',
+ minHeight: 400,
+ height: undefined,
+ calcHeight: undefined,
+ search: true,
+ tableContainer: '.main-content',
+ searchOnEnterKey: false,
+ searchTimeOut: 0,
+ showSearchClearButton: true,
+ showAdvancedSearchButton: true,
+ showButtonText: true,
+ showSearchButton: true, //是否显示搜索按钮
showColumns: true, //是否显示所有的列
showRefresh: true, //是否显示刷新按钮
showToggle: true, //是否显示详细视图和列表视图的切换按钮
cardView: $(window).width() < 768, //是否显示详细视图
queryButton: '#btn_query',
onLoadSuccess: function (data) {
+ // 设置 数据库 滚动条
+ if (settings.height !== undefined) {
+ $('.bootstrap-table .fixed-table-body').overlayScrollbars({
+ className: 'os-theme-dark',
+ scrollbars: {
+ autoHide: 'leave',
+ autoHideDelay: 100
+ }
+ });
+ }
$.footer();
if (data.IsSuccess === false) {
toastr.error(data.HttpResult.Message, data.HttpResult.Name);
@@ -370,7 +405,97 @@
}
}
});
+
+ if (settings.search) {
+ // 自动收集 SearchText
+ var queryParams = settings.queryParams || function (params) { };
+
+ settings.queryParams = function (params) {
+ return $.extend({}, queryParams(params), { search: $('.bootstrap-table .fixed-table-toolbar .search-input').val() });
+ }
+
+ // 支持键盘回车搜索
+ $(document).on('keyup', '.bootstrap-table .fixed-table-toolbar .search-input', this, function (event) {
+ if (event.keyCode === 13) {
+ // ENTER
+ var $buttons = $(this).next();
+ var $search = $buttons.find('[name="search"]');
+ if ($search.length === 1) {
+ $search.trigger('click');
+ }
+ else {
+ // 无搜索按钮是使用 refresh 方法
+ event.data.bootstrapTable('refresh');
+ }
+ }
+ else if (event.keyCode === 27) {
+ // ESC
+ event.data.bootstrapTable('resetSearch');
+ }
+ });
+ }
+
+ // 判断是否固定表头 小屏幕禁止固定表头功能
+ var fixHeader = this.attr('data-header') === 'fixed' && $(window).width() >= 768;
+ var $tabContainer = $(settings.tableContainer);
+ if (fixHeader && settings.height === undefined) {
+ var calcPrevHeight = function (element) {
+ var height = 0;
+ while (element.length === 1) {
+ if (element.is(":visible")) height += element.outerHeight(true);
+ element = element.prev();
+ }
+ return height;
+ }
+
+ var calcParentHeight = function (element) {
+ var height = 0;
+ while (element.length === 1) {
+ // 跳过 tableContainer
+ if (['SELECTION', 'BODY', settings.tableContainer].filter(function (v) {
+ return v === element.attr('nodeName') || element.hasClass(v) || element.attr('id');
+ }).length > 0) {
+ break;
+ }
+ height += calcPrevHeight(element.prev());
+ element = element.parent();
+ }
+ return height;
+ }
+
+ if (settings.calcHeight === undefined) {
+ settings.calcHeight = function (element) {
+ var marginHeight = 0;
+ if ($tabContainer.length === 1) {
+ marginHeight = ($tabContainer.outerHeight() - $tabContainer.height()) * 2;
+
+ // 计算 table 控件前元素高度
+ var $prev = element.prev();
+ marginHeight += calcPrevHeight($prev);
+ marginHeight += calcParentHeight(element.parent());
+ }
+ return Math.max(settings.minHeight, $(window).height() - $('header').outerHeight(true) - $('footer').outerHeight(true) - marginHeight - 15 - 10);
+ };
+ }
+
+ // 设置最小高度为
+ settings.height = settings.calcHeight(this);
+
+ // 设置 onresize 事件
+ $(window).on('resize', this, function (event) {
+ event.data.bootstrapTable('resetView', { height: settings.calcHeight(event.data.parents('.bootstrap-table')) });
+ });
+ }
+
+ // 加载数据
this.bootstrapTable(settings);
+
+ // 如果固定表头 禁止容器滚动条出现
+ if (fixHeader && $tabContainer.length > 0) {
+ $tabContainer.addClass('overflow-hidden');
+ }
+
+ // 格式化工具栏
$('.bootstrap-table .fixed-table-toolbar .columns .export .dropdown-menu').addClass("dropdown-menu-right");
var $gear = $(settings.toolbar).removeClass('d-none').find('.gear');
if ($gear.find('.dropdown-menu > a').length === 0) $gear.addClass('d-none');
@@ -380,9 +505,60 @@
});
if (settings.queryButton) {
$(settings.queryButton).on('click', this, function (e) {
+ // fix bug: 翻页后再更改查询条件导致页码未更改数据为空
+ // 更改页码为 1 即可
+ // https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I1A739
+ var options = e.data.data('bootstrap.table').options;
+ options.pageNumber = 1;
e.data.bootstrapTable('refresh');
});
}
+
+ // 增加 Tooltip
+ if (settings.search) {
+ $('.bootstrap-table .fixed-table-toolbar .search-input').tooltip({
+ sanitize: false,
+ title: '
输入任意字符串全局搜索 Enter 搜索 ESC 清除搜索
',
+ html: true
+ });
+
+ // 生成高级查询按钮
+ if (settings.showAdvancedSearchButton) {
+ // template
+ var $advancedSearchButtonHtml = $('');
+ $advancedSearchButtonHtml.insertAfter($('.bootstrap-table .fixed-table-toolbar .search [name="clearSearch"]')).on('click', function () {
+ // 弹出高级查询对话框
+ $(settings.advancedSearchModal).modal('show');
+ });
+
+ // 高级搜索有值时颜色为红色
+ $(settings.advancedSearchModal).on('hide.bs.modal', function () {
+ var $modal = $(this)
+ var hasValue = false;
+ $modal.find('[data-default-val]').each(function (index, element) {
+ var $ele = $(element);
+ var val = $ele.attr('data-default-val');
+ if ($ele.prop('nodeName') === 'INPUT') {
+ if ($ele.hasClass('form-select-input')) {
+ hasValue = $ele.prev().val() !== val;
+ }
+ else {
+ hasValue = $ele.val() !== val;
+ }
+ }
+ if (hasValue) return false;
+ });
+
+ if (hasValue) $advancedSearchButtonHtml.removeClass('btn-secondary').addClass('btn-primary');
+ else $advancedSearchButtonHtml.removeClass('btn-primary').addClass('btn-secondary');
+ });
+ }
+ }
+
+ // fix bug 移除 Toolbar 按钮 Title 中的 Html
+ $('.bootstrap-table .fixed-table-toolbar button[title]').each(function (index, element) {
+ element.title = element.title.replace('', '').replace('', '');
+ });
return this;
},
lgbPopover: function (options) {
@@ -451,15 +627,21 @@
lgbInfo: function (option) {
this.each(function () {
var $element = $(this);
- $element.append($.format(''));
+ $element.append($(''));
});
- var container = this.attr('data-container') || '#dialogNew';
- this.find('[data-toggle="popover"]').popover($.extend({
+ var container = this.attr('data-container') || 'body';
+ this.find('[data-toggle="popover"]').on('click', function (event) { event.preventDefault(); }).popover($.extend({
title: function () {
return $(this).parent().text();
- }, content: function () {
+ },
+ content: function () {
return $(this).parent().attr('data-content');
- }, trigger: 'focus', html: true, container: container, placement: function () {
+ },
+ trigger: 'focus',
+ html: false,
+ sanitize: true,
+ container: container,
+ placement: function () {
return $(this.element).parent().attr('data-placement') || 'auto';
}
}, option));
@@ -489,21 +671,23 @@
});
//extend dropdown method
- $.extend($.fn.dropdown.Constructor.prototype, {
- val: function () {
- var $element = $(this._element);
- var $op = $(this._menu).find('[data-val="' + $element.val() + '"]:first');
- $element.text($op.text());
- },
- select: function () {
- var $element = $(this._element);
- $(this._menu).on('click', 'a', function (event) {
- event.preventDefault();
- var $op = $(this);
- $element.text($op.text()).val($op.attr('data-val'));
- });
- }
- });
+ if ($.fn.dropdown) {
+ $.extend($.fn.dropdown.Constructor.prototype, {
+ val: function () {
+ var $element = $(this._element);
+ var $op = $(this._menu).find('[data-val="' + $element.val() + '"]:first');
+ $element.text($op.text());
+ },
+ select: function () {
+ var $element = $(this._element);
+ $(this._menu).on('click', 'a', function (event) {
+ event.preventDefault();
+ var $op = $(this);
+ $element.text($op.text()).val($op.attr('data-val'));
+ });
+ }
+ });
+ }
$(function () {
// fix bug bootstrap-table 1.14.2 showToggle
@@ -511,6 +695,68 @@
$.extend($.fn.bootstrapTable.defaults.icons, {
refresh: 'fa-refresh'
});
+
+ // fix bug bootstrap-table showButtonText support mobile
+ // argo at 2020-01-18
+ $.extend($.fn.bootstrapTable.defaults, {
+ formatClearSearch: function formatClearSearch() {
+ return '清空过滤';
+ },
+ formatSearch: function formatSearch() {
+ return '搜索';
+ },
+ formatNoMatches: function formatNoMatches() {
+ return '没有找到匹配的记录';
+ },
+ formatPaginationSwitch: function formatPaginationSwitch() {
+ return '隐藏/显示分页';
+ },
+ formatPaginationSwitchDown: function formatPaginationSwitchDown() {
+ return '显示分页';
+ },
+ formatPaginationSwitchUp: function formatPaginationSwitchUp() {
+ return '隐藏分页';
+ },
+ formatRefresh: function formatRefresh() {
+ return '刷新';
+ },
+ formatToggle: function formatToggle() {
+ return '切换';
+ },
+ formatToggleOn: function formatToggleOn() {
+ return '显示卡片视图';
+ },
+ formatToggleOff: function formatToggleOff() {
+ return '隐藏卡片视图';
+ },
+ formatColumns: function formatColumns() {
+ return '列';
+ },
+ formatColumnsToggleAll: function formatColumnsToggleAll() {
+ return '切换所有';
+ },
+ formatFullscreen: function formatFullscreen() {
+ return '全屏';
+ },
+ formatAllRows: function formatAllRows() {
+ return '所有';
+ },
+ formatAutoRefresh: function formatAutoRefresh() {
+ return '自动刷新';
+ },
+ formatExport: function formatExport() {
+ return '导出数据';
+ },
+ formatJumpTo: function formatJumpTo() {
+ return '跳转';
+ },
+ formatAdvancedSearch: function formatAdvancedSearch() {
+ return '高级搜索';
+ },
+ formatAdvancedCloseButton: function formatAdvancedCloseButton() {
+ return '关闭';
+ }
+ });
}
// extend bootstrap-toggle
@@ -519,13 +765,13 @@
var oldFunc = toggle.prototype.render;
toggle.prototype.render = function () {
var defaultVal = this.$element.attr('data-default-val') || '';
- if (defaultVal === '') this.$element.prop('checked', true);
+ if (defaultVal === "True") this.$element.prop('checked', true);
oldFunc.call(this);
this.$toggle.on('touchend', function (e) {
$(this).trigger('click.bs.toggle');
e.preventDefault();
});
- }
+ };
}
if (window.NProgress) {
diff --git a/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.dataentity.js b/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.dataentity.js
index f8d2193e..a78e2cb0 100644
--- a/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.dataentity.js
+++ b/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.dataentity.js
@@ -1,6 +1,6 @@
(function ($) {
var findIdField = function (tableName) {
- var idField = $(tableName).bootstrapTable("getOptions").idField;
+ var idField = tableName.bootstrapTable("getOptions").idField;
if (idField === undefined) idField = "Id";
return idField;
};
@@ -68,8 +68,12 @@
}
else if (dv !== undefined && ctl.val() === "") target[name] = dv;
else target[name] = ctl.val();
- if (target[name] === "true" || target[name] === "True") target[name] = true;
- if (target[name] === "false" || target[name] === "False") target[name] = false;
+
+ // check boolean value
+ if (ctl.attr('data-bool') === 'true') {
+ if (target[name] === "true" || target[name] === "True") target[name] = true;
+ if (target[name] === "false" || target[name] === "False") target[name] = false;
+ }
}
return target;
}
@@ -93,8 +97,8 @@
$(cId).on('click', { handler: this.options.events[cId] }, function (e) {
var options = that.options;
var row = {};
- if (options.bootstrapTable && options.bootstrapTable.constructor === String) {
- var arrselections = $(options.bootstrapTable).bootstrapTable('getSelections');
+ if (options.bootstrapTable !== null) {
+ var arrselections = options.bootstrapTable.bootstrapTable('getSelections');
if (arrselections.length === 0) {
lgbSwal({ title: '请选择要编辑的数据', type: "warning" });
return;
@@ -114,25 +118,55 @@
DataTable.settings = {
url: undefined,
- bootstrapTable: 'table',
+ bootstrapTable: null,
treegridParentId: 'ParentId',
modal: '#dialogNew',
click: {
'#btn_query': function (element) {
- if (this.options.bootstrapTable.constructor === String) $(this.options.bootstrapTable).bootstrapTable('refresh');
+ if (this.options.bootstrapTable !== null) {
+ var options = this.options.bootstrapTable.bootstrapTable('getOptions');
+ if (options.advancedSearchModal) {
+ $(options.advancedSearchModal).modal('hide');
+ }
+ // fix bug: 翻页后再更改查询条件导致页码未更改数据为空
+ // 更改页码为 1 即可
+ // https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I1A739
+ var options = this.options.bootstrapTable.data('bootstrap.table').options;
+ options.pageNumber = 1;
+ this.options.bootstrapTable.bootstrapTable('refresh');
+ }
handlerCallback.call(this, null, element, { oper: 'query' });
},
+ '#btn_reset': function () {
+ if (this.options.bootstrapTable !== null) {
+ var options = this.options.bootstrapTable.bootstrapTable('getOptions');
+ if (options.advancedSearchModal) {
+ $(options.advancedSearchModal).find('[data-default-val]').each(function (index, element) {
+ var $ele = $(element);
+ var val = $ele.attr('data-default-val');
+ if ($ele.prop('nodeName') === 'INPUT') {
+ if ($ele.hasClass('form-select-input')) {
+ $ele.prev().lgbSelect('val', val);
+ }
+ else {
+ $ele.val(val);
+ }
+ }
+ });
+ }
+ }
+ },
'#btn_add': function (element) {
this.dataEntity.reset();
if (this.options.modal.constructor === String) $(this.options.modal).modal("show");
- if (this.options.bootstrapTable.constructor === String) $(this.options.bootstrapTable).bootstrapTable('uncheckAll');
+ if (this.options.bootstrapTable !== null) this.options.bootstrapTable.bootstrapTable('uncheckAll');
handlerCallback.call(this, null, element, { oper: 'create' });
},
'#btn_edit': function (element) {
var options = this.options;
var data = {};
- if (options.bootstrapTable.constructor === String) {
- var arrselections = $(options.bootstrapTable).bootstrapTable('getSelections');
+ if (options.bootstrapTable !== null) {
+ var arrselections = options.bootstrapTable.bootstrapTable('getSelections');
if (arrselections.length === 0) {
lgbSwal({ title: '请选择要编辑的数据', type: "warning" });
return;
@@ -152,8 +186,8 @@
'#btn_delete': function (element) {
var that = this;
var options = this.options;
- if (options.bootstrapTable.constructor === String) {
- var arrselections = $(options.bootstrapTable).bootstrapTable('getSelections');
+ if (options.bootstrapTable !== null) {
+ var arrselections = options.bootstrapTable.bootstrapTable('getSelections');
if (arrselections.length === 0) {
lgbSwal({ title: '请选择要删除的数据', type: "warning" });
return;
@@ -166,7 +200,7 @@
$.bc({
url: options.url, data: iDs, method: 'delete', title: options.delTitle, logData: arrselections,
callback: function (result) {
- if (result) $(options.bootstrapTable).bootstrapTable('refresh');
+ if (result) options.bootstrapTable.bootstrapTable('refresh');
handlerCallback.call(that, null, element, { oper: 'del', success: result, data: arrselections });
}
});
@@ -182,8 +216,8 @@
url: options.url, data: options.data, title: options.saveTitle, modal: options.modal, method: "post",
callback: function (result) {
if (result) {
- $(options.bootstrapTable).bootstrapTable('refresh');
- handlerCallback.call(that, null, element, { oper: 'save', success: result, data: options.data });
+ options.bootstrapTable.bootstrapTable('refresh');
+ handlerCallback.call(that, null, element, { oper: 'save', success: result, data: [options.data] });
}
}
});
@@ -205,8 +239,8 @@
return {
'click .edit': function (e, value, row, index) {
op.dataEntity.load(row);
- $(op.table).bootstrapTable('uncheckAll');
- $(op.table).bootstrapTable('check', index);
+ op.table.bootstrapTable('uncheckAll');
+ op.table.bootstrapTable('check', index);
handlerCallback.call(op.src, null, e, { oper: 'edit', data: row });
$(op.modal).modal("show");
},
@@ -221,14 +255,16 @@
var idField = findIdField(op.table);
var idValue = row[idField];
- var nodes = $(op.table).bootstrapTable('getData').filter(function (row, index, data) {
- return idValue == row[op.treegridParentId];
- });
- if ($.isArray(nodes) && nodes.length > 0) {
- $.each(nodes, function (index, element) {
- data.push($.extend({}, element));
+ if (idValue != undefined) {
+ var nodes = op.table.bootstrapTable('getData').filter(function (row, index, data) {
+ return idValue == row[op.treegridParentId];
});
- text = "本删除项含有级联子项目您确定要删除 " + row.Name + " 以及子项目吗?";
+ if ($.isArray(nodes) && nodes.length > 0) {
+ $.each(nodes, function (index, element) {
+ data.push($.extend({}, element));
+ });
+ text = "本删除项含有级联子项目您确定要删除 " + row.Name + " 以及子项目吗?";
+ }
}
swal($.extend({}, swalDeleteOptions, { html: text })).then(function (result) {
if (result.value) {
@@ -239,7 +275,7 @@
$.bc({
url: op.url, data: iDs, method: 'delete', title: '删除数据', logData: data,
callback: function (result) {
- if (result) $(op.table).bootstrapTable('refresh');
+ if (result) op.table.bootstrapTable('refresh');
handlerCallback.call(op.src, null, e, { oper: 'del', success: result, data: data });
}
});
diff --git a/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.validate.js b/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.validate.js
index 53cd8557..47459b0f 100644
--- a/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.validate.js
+++ b/src/client/Bootstrap.Client/wwwroot/lib/longbow/longbow.validate.js
@@ -104,9 +104,32 @@
}
});
if (this.options.modal) {
+ // 关闭 modal 时移除所有验证信息
$(this.options.modal).on('show.bs.modal', function (e) {
that.reset();
});
+
+ // bs bug 弹窗内控件值更改后再次点击关闭按钮是 hide.bs.modal 事件不被触发
+ // 兼容 键盘事件 ESC
+ var dismissTooltip = function (e) {
+ // 移除残留 tooltip
+ var $modal = $(that.options.modal)
+ $modal.find('[aria-describedby]').each(function (index, ele) {
+ var tooltipId = $(ele).attr('aria-describedby');
+ var $tooltip = $('#' + tooltipId);
+ if ($tooltip.length === 1) {
+ $tooltip.tooltip('dispose');
+ }
+ });
+ };
+ $(this.options.modal).on('click', '[data-dismiss="modal"]', dismissTooltip);
+ $(this.options.modal).on('keydown', function (event) {
+ // ESC
+ if (event.which === 27) {
+ event.preventDefault();
+ dismissTooltip(event);
+ }
+ });
}
};
@@ -278,6 +301,17 @@
$(function () {
if ($.isFunction($.validator)) {
+ $.validator.addMethod("equalTo", function (value, element, param) {
+ var target = $(param);
+ if (this.settings.onfocusout && target.not(".validate-equalTo-blur").length) {
+ target.addClass("validate-equalTo-blur").on("blur.validate-equalTo", function () {
+ var validator = $(element).parents('[data-toggle="LgbValidate"]').data('lgb.Validate');
+ validator.validElement(element);
+ });
+ }
+ return value === target.val();
+ });
+
$.validator.addMethod("ip", function (value, element) {
return this.optional(element) || /^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/.test(value);
}, "请填写正确的IP地址");
diff --git a/src/client/Bootstrap.Client/wwwroot/lib/signalr/dist/browser/signalr.js b/src/client/Bootstrap.Client/wwwroot/lib/signalr/dist/browser/signalr.js
index 116e313e..5761b7a7 100644
--- a/src/client/Bootstrap.Client/wwwroot/lib/signalr/dist/browser/signalr.js
+++ b/src/client/Bootstrap.Client/wwwroot/lib/signalr/dist/browser/signalr.js
@@ -7,7 +7,7 @@
exports["signalR"] = factory();
else
root["signalR"] = factory();
-})(window, function() {
+})(self, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
@@ -105,18 +105,22 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VERSION", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["VERSION"]; });
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AbortError", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["AbortError"]; });
+
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HttpError", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["HttpError"]; });
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["TimeoutError"]; });
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DefaultHttpClient", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["DefaultHttpClient"]; });
-
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HttpClient", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["HttpClient"]; });
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HttpResponse", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["HttpResponse"]; });
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DefaultHttpClient", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["DefaultHttpClient"]; });
+
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HubConnection", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["HubConnection"]; });
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HubConnectionState", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["HubConnectionState"]; });
+
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HubConnectionBuilder", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["HubConnectionBuilder"]; });
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MessageType", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["MessageType"]; });
@@ -131,6 +135,8 @@ __webpack_require__.r(__webpack_exports__);
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "JsonHubProtocol", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["JsonHubProtocol"]; });
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return _index__WEBPACK_IMPORTED_MODULE_1__["Subject"]; });
+
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// This is where we add any polyfills we'll need for the browser. It is the entry module for browser-specific builds.
@@ -146,7 +152,9 @@ if (!Uint8Array.prototype.indexOf) {
}
if (!Uint8Array.prototype.slice) {
Object.defineProperty(Uint8Array.prototype, "slice", {
- value: Array.prototype.slice,
+ // wrap the slice in Uint8Array so it looks like a Uint8Array.slice call
+ // tslint:disable-next-line:object-literal-shorthand
+ value: function (start, end) { return new Uint8Array(Array.prototype.slice.call(this, start, end)); },
writable: true,
});
}
@@ -1370,7 +1378,7 @@ g = (function() {
try {
// This works if eval is allowed (see CSP)
- g = g || Function("return this")() || (1, eval)("this");
+ g = g || new Function("return this")();
} catch (e) {
// This works if the window reference is available
if (typeof window === "object") g = window;
@@ -1391,45 +1399,55 @@ module.exports = g;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VERSION", function() { return VERSION; });
/* harmony import */ var _Errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AbortError", function() { return _Errors__WEBPACK_IMPORTED_MODULE_0__["AbortError"]; });
+
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HttpError", function() { return _Errors__WEBPACK_IMPORTED_MODULE_0__["HttpError"]; });
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return _Errors__WEBPACK_IMPORTED_MODULE_0__["TimeoutError"]; });
/* harmony import */ var _HttpClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DefaultHttpClient", function() { return _HttpClient__WEBPACK_IMPORTED_MODULE_1__["DefaultHttpClient"]; });
-
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HttpClient", function() { return _HttpClient__WEBPACK_IMPORTED_MODULE_1__["HttpClient"]; });
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HttpResponse", function() { return _HttpClient__WEBPACK_IMPORTED_MODULE_1__["HttpResponse"]; });
-/* harmony import */ var _HubConnection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HubConnection", function() { return _HubConnection__WEBPACK_IMPORTED_MODULE_2__["HubConnection"]; });
+/* harmony import */ var _DefaultHttpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DefaultHttpClient", function() { return _DefaultHttpClient__WEBPACK_IMPORTED_MODULE_2__["DefaultHttpClient"]; });
-/* harmony import */ var _HubConnectionBuilder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(13);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HubConnectionBuilder", function() { return _HubConnectionBuilder__WEBPACK_IMPORTED_MODULE_3__["HubConnectionBuilder"]; });
+/* harmony import */ var _HubConnection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HubConnection", function() { return _HubConnection__WEBPACK_IMPORTED_MODULE_3__["HubConnection"]; });
-/* harmony import */ var _IHubProtocol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(10);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MessageType", function() { return _IHubProtocol__WEBPACK_IMPORTED_MODULE_4__["MessageType"]; });
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HubConnectionState", function() { return _HubConnection__WEBPACK_IMPORTED_MODULE_3__["HubConnectionState"]; });
-/* harmony import */ var _ILogger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LogLevel", function() { return _ILogger__WEBPACK_IMPORTED_MODULE_5__["LogLevel"]; });
+/* harmony import */ var _HubConnectionBuilder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HubConnectionBuilder", function() { return _HubConnectionBuilder__WEBPACK_IMPORTED_MODULE_4__["HubConnectionBuilder"]; });
-/* harmony import */ var _ITransport__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(15);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HttpTransportType", function() { return _ITransport__WEBPACK_IMPORTED_MODULE_6__["HttpTransportType"]; });
+/* harmony import */ var _IHubProtocol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(15);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MessageType", function() { return _IHubProtocol__WEBPACK_IMPORTED_MODULE_5__["MessageType"]; });
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TransferFormat", function() { return _ITransport__WEBPACK_IMPORTED_MODULE_6__["TransferFormat"]; });
+/* harmony import */ var _ILogger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(9);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LogLevel", function() { return _ILogger__WEBPACK_IMPORTED_MODULE_6__["LogLevel"]; });
-/* harmony import */ var _Loggers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(12);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NullLogger", function() { return _Loggers__WEBPACK_IMPORTED_MODULE_7__["NullLogger"]; });
+/* harmony import */ var _ITransport__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(20);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HttpTransportType", function() { return _ITransport__WEBPACK_IMPORTED_MODULE_7__["HttpTransportType"]; });
-/* harmony import */ var _JsonHubProtocol__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(20);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "JsonHubProtocol", function() { return _JsonHubProtocol__WEBPACK_IMPORTED_MODULE_8__["JsonHubProtocol"]; });
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TransferFormat", function() { return _ITransport__WEBPACK_IMPORTED_MODULE_7__["TransferFormat"]; });
+
+/* harmony import */ var _Loggers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(14);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NullLogger", function() { return _Loggers__WEBPACK_IMPORTED_MODULE_8__["NullLogger"]; });
+
+/* harmony import */ var _JsonHubProtocol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(25);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "JsonHubProtocol", function() { return _JsonHubProtocol__WEBPACK_IMPORTED_MODULE_9__["JsonHubProtocol"]; });
+
+/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(16);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return _Subject__WEBPACK_IMPORTED_MODULE_10__["Subject"]; });
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// Version token that will be replaced by the prepack command
/** The version of the SignalR client. */
-var VERSION = "1.0.4";
+var VERSION = "3.1.0";
+
+
@@ -1449,6 +1467,7 @@ var VERSION = "1.0.4";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpError", function() { return HttpError; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return TimeoutError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AbortError", function() { return AbortError; });
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
var __extends = (undefined && undefined.__extends) || (function () {
@@ -1464,7 +1483,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
/** Error thrown when an HTTP request fails. */
var HttpError = /** @class */ (function (_super) {
__extends(HttpError, _super);
- /** Constructs a new instance of {@link @aspnet/signalr.HttpError}.
+ /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.
*
* @param {string} errorMessage A descriptive error message.
* @param {number} statusCode The HTTP status code represented by this error.
@@ -1486,7 +1505,7 @@ var HttpError = /** @class */ (function (_super) {
/** Error thrown when a timeout elapses. */
var TimeoutError = /** @class */ (function (_super) {
__extends(TimeoutError, _super);
- /** Constructs a new instance of {@link @aspnet/signalr.TimeoutError}.
+ /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.
*
* @param {string} errorMessage A descriptive error message.
*/
@@ -1504,6 +1523,27 @@ var TimeoutError = /** @class */ (function (_super) {
return TimeoutError;
}(Error));
+/** Error thrown when an action is aborted. */
+var AbortError = /** @class */ (function (_super) {
+ __extends(AbortError, _super);
+ /** Constructs a new instance of {@link AbortError}.
+ *
+ * @param {string} errorMessage A descriptive error message.
+ */
+ function AbortError(errorMessage) {
+ var _newTarget = this.constructor;
+ if (errorMessage === void 0) { errorMessage = "An abort occurred."; }
+ var _this = this;
+ var trueProto = _newTarget.prototype;
+ _this = _super.call(this, errorMessage) || this;
+ // Workaround issue in Typescript compiler
+ // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200
+ _this.__proto__ = trueProto;
+ return _this;
+ }
+ return AbortError;
+}(Error));
+
/***/ }),
@@ -1514,21 +1554,8 @@ var TimeoutError = /** @class */ (function (_super) {
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpResponse", function() { return HttpResponse; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpClient", function() { return HttpClient; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultHttpClient", function() { return DefaultHttpClient; });
-/* harmony import */ var _Errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
-/* harmony import */ var _ILogger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6);
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-var __extends = (undefined && undefined.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
-})();
var __assign = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
@@ -1537,8 +1564,6 @@ var __assign = (undefined && undefined.__assign) || Object.assign || function(t)
}
return t;
};
-
-
/** Represents an HTTP response. */
var HttpResponse = /** @class */ (function () {
function HttpResponse(statusCode, statusText, content) {
@@ -1565,21 +1590,165 @@ var HttpClient = /** @class */ (function () {
HttpClient.prototype.delete = function (url, options) {
return this.send(__assign({}, options, { method: "DELETE", url: url }));
};
+ /** Gets all cookies that apply to the specified URL.
+ *
+ * @param url The URL that the cookies are valid for.
+ * @returns {string} A string containing all the key-value cookie pairs for the specified URL.
+ */
+ // @ts-ignore
+ HttpClient.prototype.getCookieString = function (url) {
+ return "";
+ };
return HttpClient;
}());
-/** Default implementation of {@link @aspnet/signalr.HttpClient}. */
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultHttpClient", function() { return DefaultHttpClient; });
+/* harmony import */ var _Errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
+/* harmony import */ var _HttpClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
+/* harmony import */ var _NodeHttpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7);
+/* harmony import */ var _XhrHttpClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8);
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+var __extends = (undefined && undefined.__extends) || (function () {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+
+
+
+
+/** Default implementation of {@link @microsoft/signalr.HttpClient}. */
var DefaultHttpClient = /** @class */ (function (_super) {
__extends(DefaultHttpClient, _super);
- /** Creates a new instance of the {@link @aspnet/signalr.DefaultHttpClient}, using the provided {@link @aspnet/signalr.ILogger} to log messages. */
+ /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */
function DefaultHttpClient(logger) {
+ var _this = _super.call(this) || this;
+ if (typeof XMLHttpRequest !== "undefined") {
+ _this.httpClient = new _XhrHttpClient__WEBPACK_IMPORTED_MODULE_3__["XhrHttpClient"](logger);
+ }
+ else {
+ _this.httpClient = new _NodeHttpClient__WEBPACK_IMPORTED_MODULE_2__["NodeHttpClient"](logger);
+ }
+ return _this;
+ }
+ /** @inheritDoc */
+ DefaultHttpClient.prototype.send = function (request) {
+ // Check that abort was not signaled before calling send
+ if (request.abortSignal && request.abortSignal.aborted) {
+ return Promise.reject(new _Errors__WEBPACK_IMPORTED_MODULE_0__["AbortError"]());
+ }
+ if (!request.method) {
+ return Promise.reject(new Error("No method defined."));
+ }
+ if (!request.url) {
+ return Promise.reject(new Error("No url defined."));
+ }
+ return this.httpClient.send(request);
+ };
+ DefaultHttpClient.prototype.getCookieString = function (url) {
+ return this.httpClient.getCookieString(url);
+ };
+ return DefaultHttpClient;
+}(_HttpClient__WEBPACK_IMPORTED_MODULE_1__["HttpClient"]));
+
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NodeHttpClient", function() { return NodeHttpClient; });
+/* harmony import */ var _HttpClient__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+var __extends = (undefined && undefined.__extends) || (function () {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+// This is an empty implementation of the NodeHttpClient that will be included in browser builds so the output file will be smaller
+
+/** @private */
+var NodeHttpClient = /** @class */ (function (_super) {
+ __extends(NodeHttpClient, _super);
+ // @ts-ignore: Need ILogger to compile, but unused variables generate errors
+ function NodeHttpClient(logger) {
+ return _super.call(this) || this;
+ }
+ NodeHttpClient.prototype.send = function () {
+ return Promise.reject(new Error("If using Node either provide an XmlHttpRequest polyfill or consume the cjs or esm script instead of the browser/signalr.js one."));
+ };
+ return NodeHttpClient;
+}(_HttpClient__WEBPACK_IMPORTED_MODULE_0__["HttpClient"]));
+
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "XhrHttpClient", function() { return XhrHttpClient; });
+/* harmony import */ var _Errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
+/* harmony import */ var _HttpClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
+/* harmony import */ var _ILogger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9);
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+var __extends = (undefined && undefined.__extends) || (function () {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+
+
+
+var XhrHttpClient = /** @class */ (function (_super) {
+ __extends(XhrHttpClient, _super);
+ function XhrHttpClient(logger) {
var _this = _super.call(this) || this;
_this.logger = logger;
return _this;
}
/** @inheritDoc */
- DefaultHttpClient.prototype.send = function (request) {
+ XhrHttpClient.prototype.send = function (request) {
var _this = this;
+ // Check that abort was not signaled before calling send
+ if (request.abortSignal && request.abortSignal.aborted) {
+ return Promise.reject(new _Errors__WEBPACK_IMPORTED_MODULE_0__["AbortError"]());
+ }
+ if (!request.method) {
+ return Promise.reject(new Error("No method defined."));
+ }
+ if (!request.url) {
+ return Promise.reject(new Error("No url defined."));
+ }
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open(request.method, request.url, true);
@@ -1587,9 +1756,12 @@ var DefaultHttpClient = /** @class */ (function (_super) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
// Explicitly setting the Content-Type header for React Native on Android platform.
xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
- if (request.headers) {
- Object.keys(request.headers)
- .forEach(function (header) { return xhr.setRequestHeader(header, request.headers[header]); });
+ var headers = request.headers;
+ if (headers) {
+ Object.keys(headers)
+ .forEach(function (header) {
+ xhr.setRequestHeader(header, headers[header]);
+ });
}
if (request.responseType) {
xhr.responseType = request.responseType;
@@ -1597,6 +1769,7 @@ var DefaultHttpClient = /** @class */ (function (_super) {
if (request.abortSignal) {
request.abortSignal.onabort = function () {
xhr.abort();
+ reject(new _Errors__WEBPACK_IMPORTED_MODULE_0__["AbortError"]());
};
}
if (request.timeout) {
@@ -1607,30 +1780,30 @@ var DefaultHttpClient = /** @class */ (function (_super) {
request.abortSignal.onabort = null;
}
if (xhr.status >= 200 && xhr.status < 300) {
- resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));
+ resolve(new _HttpClient__WEBPACK_IMPORTED_MODULE_1__["HttpResponse"](xhr.status, xhr.statusText, xhr.response || xhr.responseText));
}
else {
reject(new _Errors__WEBPACK_IMPORTED_MODULE_0__["HttpError"](xhr.statusText, xhr.status));
}
};
xhr.onerror = function () {
- _this.logger.log(_ILogger__WEBPACK_IMPORTED_MODULE_1__["LogLevel"].Warning, "Error from HTTP request. " + xhr.status + ": " + xhr.statusText);
+ _this.logger.log(_ILogger__WEBPACK_IMPORTED_MODULE_2__["LogLevel"].Warning, "Error from HTTP request. " + xhr.status + ": " + xhr.statusText + ".");
reject(new _Errors__WEBPACK_IMPORTED_MODULE_0__["HttpError"](xhr.statusText, xhr.status));
};
xhr.ontimeout = function () {
- _this.logger.log(_ILogger__WEBPACK_IMPORTED_MODULE_1__["LogLevel"].Warning, "Timeout from HTTP request.");
+ _this.logger.log(_ILogger__WEBPACK_IMPORTED_MODULE_2__["LogLevel"].Warning, "Timeout from HTTP request.");
reject(new _Errors__WEBPACK_IMPORTED_MODULE_0__["TimeoutError"]());
};
xhr.send(request.content || "");
});
};
- return DefaultHttpClient;
-}(HttpClient));
+ return XhrHttpClient;
+}(_HttpClient__WEBPACK_IMPORTED_MODULE_1__["HttpClient"]));
/***/ }),
-/* 6 */
+/* 9 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -1663,16 +1836,18 @@ var LogLevel;
/***/ }),
-/* 7 */
+/* 10 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HubConnectionState", function() { return HubConnectionState; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HubConnection", function() { return HubConnection; });
-/* harmony import */ var _HandshakeProtocol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8);
-/* harmony import */ var _IHubProtocol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);
-/* harmony import */ var _ILogger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6);
-/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11);
+/* harmony import */ var _HandshakeProtocol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(11);
+/* harmony import */ var _IHubProtocol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(15);
+/* harmony import */ var _ILogger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9);
+/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16);
+/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(13);
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -1714,62 +1889,196 @@ var __generator = (undefined && undefined.__generator) || function (thisArg, bod
+
var DEFAULT_TIMEOUT_IN_MS = 30 * 1000;
+var DEFAULT_PING_INTERVAL_IN_MS = 15 * 1000;
+/** Describes the current state of the {@link HubConnection} to the server. */
+var HubConnectionState;
+(function (HubConnectionState) {
+ /** The hub connection is disconnected. */
+ HubConnectionState["Disconnected"] = "Disconnected";
+ /** The hub connection is connecting. */
+ HubConnectionState["Connecting"] = "Connecting";
+ /** The hub connection is connected. */
+ HubConnectionState["Connected"] = "Connected";
+ /** The hub connection is disconnecting. */
+ HubConnectionState["Disconnecting"] = "Disconnecting";
+ /** The hub connection is reconnecting. */
+ HubConnectionState["Reconnecting"] = "Reconnecting";
+})(HubConnectionState || (HubConnectionState = {}));
/** Represents a connection to a SignalR Hub. */
var HubConnection = /** @class */ (function () {
- function HubConnection(connection, logger, protocol) {
+ function HubConnection(connection, logger, protocol, reconnectPolicy) {
var _this = this;
- _Utils__WEBPACK_IMPORTED_MODULE_3__["Arg"].isRequired(connection, "connection");
- _Utils__WEBPACK_IMPORTED_MODULE_3__["Arg"].isRequired(logger, "logger");
- _Utils__WEBPACK_IMPORTED_MODULE_3__["Arg"].isRequired(protocol, "protocol");
+ _Utils__WEBPACK_IMPORTED_MODULE_4__["Arg"].isRequired(connection, "connection");
+ _Utils__WEBPACK_IMPORTED_MODULE_4__["Arg"].isRequired(logger, "logger");
+ _Utils__WEBPACK_IMPORTED_MODULE_4__["Arg"].isRequired(protocol, "protocol");
this.serverTimeoutInMilliseconds = DEFAULT_TIMEOUT_IN_MS;
+ this.keepAliveIntervalInMilliseconds = DEFAULT_PING_INTERVAL_IN_MS;
this.logger = logger;
this.protocol = protocol;
this.connection = connection;
+ this.reconnectPolicy = reconnectPolicy;
this.handshakeProtocol = new _HandshakeProtocol__WEBPACK_IMPORTED_MODULE_0__["HandshakeProtocol"]();
this.connection.onreceive = function (data) { return _this.processIncomingData(data); };
this.connection.onclose = function (error) { return _this.connectionClosed(error); };
this.callbacks = {};
this.methods = {};
this.closedCallbacks = [];
- this.id = 0;
+ this.reconnectingCallbacks = [];
+ this.reconnectedCallbacks = [];
+ this.invocationId = 0;
+ this.receivedHandshakeResponse = false;
+ this.connectionState = HubConnectionState.Disconnected;
+ this.connectionStarted = false;
+ this.cachedPingMessage = this.protocol.writeMessage({ type: _IHubProtocol__WEBPACK_IMPORTED_MODULE_1__["MessageType"].Ping });
}
/** @internal */
// Using a public static factory method means we can have a private constructor and an _internal_
// create method that can be used by HubConnectionBuilder. An "internal" constructor would just
// be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a
// public parameter-less constructor.
- HubConnection.create = function (connection, logger, protocol) {
- return new HubConnection(connection, logger, protocol);
+ HubConnection.create = function (connection, logger, protocol, reconnectPolicy) {
+ return new HubConnection(connection, logger, protocol, reconnectPolicy);
};
+ Object.defineProperty(HubConnection.prototype, "state", {
+ /** Indicates the state of the {@link HubConnection} to the server. */
+ get: function () {
+ return this.connectionState;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(HubConnection.prototype, "connectionId", {
+ /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either
+ * in the disconnected state or if the negotiation step was skipped.
+ */
+ get: function () {
+ return this.connection ? (this.connection.connectionId || null) : null;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(HubConnection.prototype, "baseUrl", {
+ /** Indicates the url of the {@link HubConnection} to the server. */
+ get: function () {
+ return this.connection.baseUrl || "";
+ },
+ /**
+ * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or
+ * Reconnecting states.
+ * @param {string} url The url to connect to.
+ */
+ set: function (url) {
+ if (this.connectionState !== HubConnectionState.Disconnected && this.connectionState !== HubConnectionState.Reconnecting) {
+ throw new Error("The HubConnection must be in the Disconnected or Reconnecting state to change the url.");
+ }
+ if (!url) {
+ throw new Error("The HubConnection url must be a valid url.");
+ }
+ this.connection.baseUrl = url;
+ },
+ enumerable: true,
+ configurable: true
+ });
/** Starts the connection.
*
* @returns {Promise\n
\n").replace(/(^|\n)\s*/g, '');
+/*
+ * Add modal + backdrop to DOM
+ */
+
+var init = function init(params) {
+ // Clean up the old popup if it exists
+ var c = getContainer();
+
+ if (c) {
+ c.parentNode.removeChild(c);
+ removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);
+ }
+ /* istanbul ignore if */
+
+
+ if (isNodeEnv()) {
+ error('SweetAlert2 requires document to initialize');
+ return;
+ }
+
+ var container = document.createElement('div');
+ container.className = swalClasses.container;
+ container.innerHTML = sweetHTML;
+ var targetElement = typeof params.target === 'string' ? document.querySelector(params.target) : params.target;
+ targetElement.appendChild(container);
+ var popup = getPopup();
+ var content = getContent();
+ var input = getChildByClass(content, swalClasses.input);
+ var file = getChildByClass(content, swalClasses.file);
+ var range = content.querySelector(".".concat(swalClasses.range, " input"));
+ var rangeOutput = content.querySelector(".".concat(swalClasses.range, " output"));
+ var select = getChildByClass(content, swalClasses.select);
+ var checkbox = content.querySelector(".".concat(swalClasses.checkbox, " input"));
+ var textarea = getChildByClass(content, swalClasses.textarea); // a11y
+
+ popup.setAttribute('role', params.toast ? 'alert' : 'dialog');
+ popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');
+
+ if (!params.toast) {
+ popup.setAttribute('aria-modal', 'true');
+ } // RTL
+
+
+ if (window.getComputedStyle(targetElement).direction === 'rtl') {
+ addClass(getContainer(), swalClasses.rtl);
+ }
+
+ var oldInputVal; // IE11 workaround, see #1109 for details
+
+ var resetValidationMessage = function resetValidationMessage(e) {
+ if (Swal.isVisible() && oldInputVal !== e.target.value) {
+ Swal.resetValidationMessage();
+ }
+
+ oldInputVal = e.target.value;
+ };
+
+ input.oninput = resetValidationMessage;
+ file.onchange = resetValidationMessage;
+ select.onchange = resetValidationMessage;
+ checkbox.onchange = resetValidationMessage;
+ textarea.oninput = resetValidationMessage;
+
+ range.oninput = function (e) {
+ resetValidationMessage(e);
+ rangeOutput.value = range.value;
+ };
+
+ range.onchange = function (e) {
+ resetValidationMessage(e);
+ range.nextSibling.value = range.value;
+ };
+
+ return popup;
+};
+
+var parseHtmlToContainer = function parseHtmlToContainer(param, target) {
+ if (!param) {
+ return hide(target);
+ } // DOM element
+
+
+ if (param instanceof HTMLElement) {
+ target.appendChild(param); // JQuery element(s)
+ } else if (_typeof(param) === 'object') {
+ target.innerHTML = '';
+
+ if (0 in param) {
+ for (var i = 0; i in param; i++) {
+ target.appendChild(param[i].cloneNode(true));
+ }
+ } else {
+ target.appendChild(param.cloneNode(true));
+ }
+ } else if (param) {
+ target.innerHTML = param;
+ }
+
+ show(target);
+};
+
+var animationEndEvent = function () {
+ // Prevent run in Node env
+
+ /* istanbul ignore if */
+ if (isNodeEnv()) {
+ return false;
+ }
+
+ var testEl = document.createElement('div');
+ var transEndEventNames = {
+ 'WebkitAnimation': 'webkitAnimationEnd',
+ 'OAnimation': 'oAnimationEnd oanimationend',
+ 'animation': 'animationend'
+ };
+
+ for (var i in transEndEventNames) {
+ if (transEndEventNames.hasOwnProperty(i) && typeof testEl.style[i] !== 'undefined') {
+ return transEndEventNames[i];
+ }
+ }
+
+ return false;
+}();
+
+// Measure width of scrollbar
+// https://github.com/twbs/bootstrap/blob/master/js/modal.js#L279-L286
+var measureScrollbar = function measureScrollbar() {
+ var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;
+
+ if (supportsTouch) {
+ return 0;
+ }
+
+ var scrollDiv = document.createElement('div');
+ scrollDiv.style.width = '50px';
+ scrollDiv.style.height = '50px';
+ scrollDiv.style.overflow = 'scroll';
+ document.body.appendChild(scrollDiv);
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+ document.body.removeChild(scrollDiv);
+ return scrollbarWidth;
+};
+
+var renderActions = function renderActions(params) {
+ var actions = getActions();
+ var confirmButton = getConfirmButton();
+ var cancelButton = getCancelButton(); // Actions (buttons) wrapper
+
+ if (!params.showConfirmButton && !params.showCancelButton) {
+ hide(actions);
+ } else {
+ show(actions);
+ } // Cancel button
+
+
+ if (params.showCancelButton) {
+ cancelButton.style.display = 'inline-block';
+ } else {
+ hide(cancelButton);
+ } // Confirm button
+
+
+ if (params.showConfirmButton) {
+ confirmButton.style.removeProperty('display');
+ } else {
+ hide(confirmButton);
+ } // Edit text on confirm and cancel buttons
+
+
+ confirmButton.innerHTML = params.confirmButtonText;
+ cancelButton.innerHTML = params.cancelButtonText; // ARIA labels for confirm and cancel buttons
+
+ confirmButton.setAttribute('aria-label', params.confirmButtonAriaLabel);
+ cancelButton.setAttribute('aria-label', params.cancelButtonAriaLabel); // Add buttons custom classes
+
+ confirmButton.className = swalClasses.confirm;
+ addClass(confirmButton, params.confirmButtonClass);
+ cancelButton.className = swalClasses.cancel;
+ addClass(cancelButton, params.cancelButtonClass); // Buttons styling
+
+ if (params.buttonsStyling) {
+ addClass([confirmButton, cancelButton], swalClasses.styled); // Buttons background colors
+
+ if (params.confirmButtonColor) {
+ confirmButton.style.backgroundColor = params.confirmButtonColor;
+ }
+
+ if (params.cancelButtonColor) {
+ cancelButton.style.backgroundColor = params.cancelButtonColor;
+ } // Loading state
+
+
+ var confirmButtonBackgroundColor = window.getComputedStyle(confirmButton).getPropertyValue('background-color');
+ confirmButton.style.borderLeftColor = confirmButtonBackgroundColor;
+ confirmButton.style.borderRightColor = confirmButtonBackgroundColor;
+ } else {
+ removeClass([confirmButton, cancelButton], swalClasses.styled);
+ confirmButton.style.backgroundColor = confirmButton.style.borderLeftColor = confirmButton.style.borderRightColor = '';
+ cancelButton.style.backgroundColor = cancelButton.style.borderLeftColor = cancelButton.style.borderRightColor = '';
+ }
+};
+
+var renderContent = function renderContent(params) {
+ var content = getContent().querySelector('#' + swalClasses.content); // Content as HTML
+
+ if (params.html) {
+ parseHtmlToContainer(params.html, content); // Content as plain text
+ } else if (params.text) {
+ content.textContent = params.text;
+ show(content);
+ } else {
+ hide(content);
+ }
+};
+
+var renderIcon = function renderIcon(params) {
+ var icons = getIcons();
+
+ for (var i = 0; i < icons.length; i++) {
+ hide(icons[i]);
+ }
+
+ if (params.type) {
+ if (Object.keys(iconTypes).indexOf(params.type) !== -1) {
+ var icon = Swal.getPopup().querySelector(".".concat(swalClasses.icon, ".").concat(iconTypes[params.type]));
+ show(icon); // Animate icon
+
+ if (params.animation) {
+ addClass(icon, "swal2-animate-".concat(params.type, "-icon"));
+ }
+ } else {
+ error("Unknown type! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.type, "\""));
+ }
+ }
+};
+
+var renderImage = function renderImage(params) {
+ var image = getImage();
+
+ if (params.imageUrl) {
+ image.setAttribute('src', params.imageUrl);
+ image.setAttribute('alt', params.imageAlt);
+ show(image);
+
+ if (params.imageWidth) {
+ image.setAttribute('width', params.imageWidth);
+ } else {
+ image.removeAttribute('width');
+ }
+
+ if (params.imageHeight) {
+ image.setAttribute('height', params.imageHeight);
+ } else {
+ image.removeAttribute('height');
+ }
+
+ image.className = swalClasses.image;
+
+ if (params.imageClass) {
+ addClass(image, params.imageClass);
+ }
+ } else {
+ hide(image);
+ }
+};
+
+var renderProgressSteps = function renderProgressSteps(params) {
+ var progressStepsContainer = getProgressSteps();
+ var currentProgressStep = parseInt(params.currentProgressStep === null ? Swal.getQueueStep() : params.currentProgressStep, 10);
+
+ if (params.progressSteps && params.progressSteps.length) {
+ show(progressStepsContainer);
+ progressStepsContainer.innerHTML = '';
+
+ if (currentProgressStep >= params.progressSteps.length) {
+ warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');
+ }
+
+ params.progressSteps.forEach(function (step, index) {
+ var circle = document.createElement('li');
+ addClass(circle, swalClasses.progresscircle);
+ circle.innerHTML = step;
+
+ if (index === currentProgressStep) {
+ addClass(circle, swalClasses.activeprogressstep);
+ }
+
+ progressStepsContainer.appendChild(circle);
+
+ if (index !== params.progressSteps.length - 1) {
+ var line = document.createElement('li');
+ addClass(line, swalClasses.progressline);
+
+ if (params.progressStepsDistance) {
+ line.style.width = params.progressStepsDistance;
+ }
+
+ progressStepsContainer.appendChild(line);
+ }
+ });
+ } else {
+ hide(progressStepsContainer);
+ }
+};
+
+var renderTitle = function renderTitle(params) {
+ var title = getTitle();
+
+ if (params.titleText) {
+ title.innerText = params.titleText;
+ } else if (params.title) {
+ if (typeof params.title === 'string') {
+ params.title = params.title.split('\n').join('\n
\n \n \n
\n \n \n
\n \n ?\n
\n \n !\n
\n \n i\n
\n \n \n \n \n \n
\n \n \n \n \n
\n \n \n \n
\n \n \n \n \n \n \n \n \n
\n \n
\n '); + } + + parseHtmlToContainer(params.title, title); + } +}; + +var fixScrollbar = function fixScrollbar() { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = states.previousBodyPadding + measureScrollbar() + 'px'; + } +}; +var undoScrollbar = function undoScrollbar() { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = states.previousBodyPadding; + states.previousBodyPadding = null; + } +}; + +/* istanbul ignore next */ + +var iOSfix = function iOSfix() { + var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + var offset = document.body.scrollTop; + document.body.style.top = offset * -1 + 'px'; + addClass(document.body, swalClasses.iosfix); + } +}; +/* istanbul ignore next */ + +var undoIOSfix = function undoIOSfix() { + if (hasClass(document.body, swalClasses.iosfix)) { + var offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } +}; + +var isIE11 = function isIE11() { + return !!window.MSInputMethodContext && !!document.documentMode; +}; // Fix IE11 centering sweetalert2/issues/933 + +/* istanbul ignore next */ + + +var fixVerticalPositionIE = function fixVerticalPositionIE() { + var container = getContainer(); + var popup = getPopup(); + container.style.removeProperty('align-items'); + + if (popup.offsetTop < 0) { + container.style.alignItems = 'flex-start'; + } +}; +/* istanbul ignore next */ + + +var IEfix = function IEfix() { + if (typeof window !== 'undefined' && isIE11()) { + fixVerticalPositionIE(); + window.addEventListener('resize', fixVerticalPositionIE); + } +}; +/* istanbul ignore next */ + +var undoIEfix = function undoIEfix() { + if (typeof window !== 'undefined' && isIE11()) { + window.removeEventListener('resize', fixVerticalPositionIE); + } +}; + +// Adding aria-hidden="true" to elements outside of the active modal dialog ensures that +// elements not within the active modal dialog will not be surfaced if a user opens a screen +// reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + +var setAriaHidden = function setAriaHidden() { + var bodyChildren = toArray(document.body.children); + bodyChildren.forEach(function (el) { + if (el === getContainer() || contains(el, getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); +}; +var unsetAriaHidden = function unsetAriaHidden() { + var bodyChildren = toArray(document.body.children); + bodyChildren.forEach(function (el) { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); +}; + +var RESTORE_FOCUS_TIMEOUT = 100; + +var globalState = {}; +var restoreActiveElement = function restoreActiveElement() { + return new Promise(function (resolve) { + var x = window.scrollX; + var y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(function () { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + if (typeof x !== 'undefined' && typeof y !== 'undefined') { + // IE doesn't have scrollX/scrollY support + window.scrollTo(x, y); + } + }); +}; + +/* + * Global function to close sweetAlert + */ + +var close = function close(onClose, onAfterClose) { + var container = getContainer(); + var popup = getPopup(); + + if (!popup) { + return; + } + + if (onClose !== null && typeof onClose === 'function') { + onClose(popup); + } + + removeClass(popup, swalClasses.show); + addClass(popup, swalClasses.hide); + + var removePopupAndResetState = function removePopupAndResetState() { + if (!isToast()) { + restoreActiveElement().then(function () { + return triggerOnAfterClose(onAfterClose); + }); + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } else { + triggerOnAfterClose(onAfterClose); + } + + if (container.parentNode) { + container.parentNode.removeChild(container); + } + + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['toast-column']]); + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + undoIEfix(); + unsetAriaHidden(); + } + }; // If animation is supported, animate + + + if (animationEndEvent && !hasClass(popup, swalClasses.noanimation)) { + popup.addEventListener(animationEndEvent, function swalCloseEventFinished() { + popup.removeEventListener(animationEndEvent, swalCloseEventFinished); + + if (hasClass(popup, swalClasses.hide)) { + removePopupAndResetState(); + } + }); + } else { + // Otherwise, remove immediately + removePopupAndResetState(); + } +}; + +var triggerOnAfterClose = function triggerOnAfterClose(onAfterClose) { + if (onAfterClose !== null && typeof onAfterClose === 'function') { + setTimeout(function () { + onAfterClose(); + }); + } +}; + +/* + * Global function to determine if swal2 popup is shown + */ + +var isVisible$1 = function isVisible() { + return !!getPopup(); +}; +/* + * Global function to click 'Confirm' button + */ + +var clickConfirm = function clickConfirm() { + return getConfirmButton().click(); +}; +/* + * Global function to click 'Cancel' button + */ + +var clickCancel = function clickCancel() { + return getCancelButton().click(); +}; + +function fire() { + var Swal = this; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _construct(Swal, args); +} + +/** + * Extends a Swal class making it able to be instantiated without the `new` keyword (and thus without `Swal.fire`) + * @param ParentSwal + * @returns {NoNewKeywordSwal} + */ +function withNoNewKeyword(ParentSwal) { + var NoNewKeywordSwal = function NoNewKeywordSwal() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + if (!(this instanceof NoNewKeywordSwal)) { + return _construct(NoNewKeywordSwal, args); + } + + Object.getPrototypeOf(NoNewKeywordSwal).apply(this, args); + }; + + NoNewKeywordSwal.prototype = _extends(Object.create(ParentSwal.prototype), { + constructor: NoNewKeywordSwal + }); + + if (typeof Object.setPrototypeOf === 'function') { + Object.setPrototypeOf(NoNewKeywordSwal, ParentSwal); + } else { + // Android 4.4 + + /* istanbul ignore next */ + // eslint-disable-next-line + NoNewKeywordSwal.__proto__ = ParentSwal; + } + + return NoNewKeywordSwal; +} + +var defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + type: null, + toast: false, + customClass: '', + customContainerClass: '', + target: 'body', + backdrop: true, + animation: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showCancelButton: false, + preConfirm: null, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: null, + confirmButtonClass: null, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: null, + cancelButtonClass: null, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusCancel: false, + showCloseButton: false, + closeButtonAriaLabel: 'Close this dialog', + showLoaderOnConfirm: false, + imageUrl: null, + imageWidth: null, + imageHeight: null, + imageAlt: '', + imageClass: null, + timer: null, + width: null, + padding: null, + background: null, + input: null, + inputPlaceholder: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputClass: null, + inputAttributes: {}, + inputValidator: null, + validationMessage: null, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: null, + progressStepsDistance: null, + onBeforeOpen: null, + onAfterClose: null, + onOpen: null, + onClose: null, + useRejections: false, + expectRejections: false +}; +var deprecatedParams = ['useRejections', 'expectRejections', 'extraParams']; +var toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusCancel', 'heightAuto', 'keydownListenerCapture']; +/** + * Is valid parameter + * @param {String} paramName + */ + +var isValidParameter = function isValidParameter(paramName) { + return defaultParams.hasOwnProperty(paramName) || paramName === 'extraParams'; +}; +/** + * Is deprecated parameter + * @param {String} paramName + */ + +var isDeprecatedParameter = function isDeprecatedParameter(paramName) { + return deprecatedParams.indexOf(paramName) !== -1; +}; +/** + * Show relevant warnings for given params + * + * @param params + */ + +var showWarningsForParams = function showWarningsForParams(params) { + for (var param in params) { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + + if (params.toast && toastIncompatibleParams.indexOf(param) !== -1) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + + if (isDeprecatedParameter(param)) { + warnOnce("The parameter \"".concat(param, "\" is deprecated and will be removed in the next major release.")); + } + } +}; + +var deprecationWarning = "\"setDefaults\" & \"resetDefaults\" methods are deprecated in favor of \"mixin\" method and will be removed in the next major release. For new projects, use \"mixin\". For past projects already using \"setDefaults\", support will be provided through an additional package."; +var defaults = {}; +function withGlobalDefaults(ParentSwal) { + var SwalWithGlobalDefaults = + /*#__PURE__*/ + function (_ParentSwal) { + _inherits(SwalWithGlobalDefaults, _ParentSwal); + + function SwalWithGlobalDefaults() { + _classCallCheck(this, SwalWithGlobalDefaults); + + return _possibleConstructorReturn(this, _getPrototypeOf(SwalWithGlobalDefaults).apply(this, arguments)); + } + + _createClass(SwalWithGlobalDefaults, [{ + key: "_main", + value: function _main(params) { + return _get(_getPrototypeOf(SwalWithGlobalDefaults.prototype), "_main", this).call(this, _extends({}, defaults, params)); + } + }], [{ + key: "setDefaults", + value: function setDefaults(params) { + warnOnce(deprecationWarning); + + if (!params || _typeof(params) !== 'object') { + throw new TypeError('SweetAlert2: The argument for setDefaults() is required and has to be a object'); + } + + showWarningsForParams(params); // assign valid params from `params` to `defaults` + + Object.keys(params).forEach(function (param) { + if (ParentSwal.isValidParameter(param)) { + defaults[param] = params[param]; + } + }); + } + }, { + key: "resetDefaults", + value: function resetDefaults() { + warnOnce(deprecationWarning); + defaults = {}; + } + }]); + + return SwalWithGlobalDefaults; + }(ParentSwal); // Set default params if `window._swalDefaults` is an object + + + if (typeof window !== 'undefined' && _typeof(window._swalDefaults) === 'object') { + SwalWithGlobalDefaults.setDefaults(window._swalDefaults); + } + + return SwalWithGlobalDefaults; +} + +/** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + +function mixin(mixinParams) { + return withNoNewKeyword( + /*#__PURE__*/ + function (_this) { + _inherits(MixinSwal, _this); + + function MixinSwal() { + _classCallCheck(this, MixinSwal); + + return _possibleConstructorReturn(this, _getPrototypeOf(MixinSwal).apply(this, arguments)); + } + + _createClass(MixinSwal, [{ + key: "_main", + value: function _main(params) { + return _get(_getPrototypeOf(MixinSwal.prototype), "_main", this).call(this, _extends({}, mixinParams, params)); + } + }]); + + return MixinSwal; + }(this)); +} + +// private global state for the queue feature +var currentSteps = []; +/* + * Global function for chaining sweetAlert popups + */ + +var queue = function queue(steps) { + var swal = this; + currentSteps = steps; + + var resetQueue = function resetQueue() { + currentSteps = []; + document.body.removeAttribute('data-swal2-queue-step'); + }; + + var queueResult = []; + return new Promise(function (resolve) { + (function step(i, callback) { + if (i < currentSteps.length) { + document.body.setAttribute('data-swal2-queue-step', i); + swal(currentSteps[i]).then(function (result) { + if (typeof result.value !== 'undefined') { + queueResult.push(result.value); + step(i + 1, callback); + } else { + resetQueue(); + resolve({ + dismiss: result.dismiss + }); + } + }); + } else { + resetQueue(); + resolve({ + value: queueResult + }); + } + })(0); + }); +}; +/* + * Global function for getting the index of current popup in queue + */ + +var getQueueStep = function getQueueStep() { + return document.body.getAttribute('data-swal2-queue-step'); +}; +/* + * Global function for inserting a popup to the queue + */ + +var insertQueueStep = function insertQueueStep(step, index) { + if (index && index < currentSteps.length) { + return currentSteps.splice(index, 0, step); + } + + return currentSteps.push(step); +}; +/* + * Global function for deleting a popup from the queue + */ + +var deleteQueueStep = function deleteQueueStep(index) { + if (typeof currentSteps[index] !== 'undefined') { + currentSteps.splice(index, 1); + } +}; + +/** + * Show spinner instead of Confirm button and disable Cancel button + */ + +var showLoading = function showLoading() { + var popup = getPopup(); + + if (!popup) { + Swal(''); + } + + popup = getPopup(); + var actions = getActions(); + var confirmButton = getConfirmButton(); + var cancelButton = getCancelButton(); + show(actions); + show(confirmButton); + addClass([popup, actions], swalClasses.loading); + confirmButton.disabled = true; + cancelButton.disabled = true; + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); +}; + +/** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + +var getTimerLeft = function getTimerLeft() { + return globalState.timeout && globalState.timeout.getTimerLeft(); +}; +/** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + +var stopTimer = function stopTimer() { + return globalState.timeout && globalState.timeout.stop(); +}; +/** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + +var resumeTimer = function resumeTimer() { + return globalState.timeout && globalState.timeout.start(); +}; +/** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + +var toggleTimer = function toggleTimer() { + var timer = globalState.timeout; + return timer && (timer.running ? timer.stop() : timer.start()); +}; +/** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + +var increaseTimer = function increaseTimer(n) { + return globalState.timeout && globalState.timeout.increase(n); +}; +/** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + +var isTimerRunning = function isTimerRunning() { + return globalState.timeout && globalState.timeout.isRunning(); +}; + + + +var staticMethods = Object.freeze({ + isValidParameter: isValidParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + adaptInputValidator: adaptInputValidator, + close: close, + closePopup: close, + closeModal: close, + closeToast: close, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getContent: getContent, + getImage: getImage, + getIcons: getIcons, + getCloseButton: getCloseButton, + getButtonsWrapper: getButtonsWrapper, + getActions: getActions, + getConfirmButton: getConfirmButton, + getCancelButton: getCancelButton, + getFooter: getFooter, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + queue: queue, + getQueueStep: getQueueStep, + insertQueueStep: insertQueueStep, + deleteQueueStep: deleteQueueStep, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning +}); + +// https://github.com/Riim/symbol-polyfill/blob/master/index.js + +/* istanbul ignore next */ +var _Symbol = typeof Symbol === 'function' ? Symbol : function () { + var idCounter = 0; + + function _Symbol(key) { + return '__' + key + '_' + Math.floor(Math.random() * 1e9) + '_' + ++idCounter + '__'; + } + + _Symbol.iterator = _Symbol('Symbol.iterator'); + return _Symbol; +}(); + +// WeakMap polyfill, needed for Android 4.4 +// Related issue: https://github.com/sweetalert2/sweetalert2/issues/1071 +// http://webreflection.blogspot.fi/2015/04/a-weakmap-polyfill-in-20-lines-of-code.html +/* istanbul ignore next */ + +var WeakMap$1 = typeof WeakMap === 'function' ? WeakMap : function (s, dP, hOP) { + function WeakMap() { + dP(this, s, { + value: _Symbol('WeakMap') + }); + } + + WeakMap.prototype = { + 'delete': function del(o) { + delete o[this[s]]; + }, + get: function get(o) { + return o[this[s]]; + }, + has: function has(o) { + return hOP.call(o, this[s]); + }, + set: function set(o, v) { + dP(o, this[s], { + configurable: true, + value: v + }); + } + }; + return WeakMap; +}(_Symbol('WeakMap'), Object.defineProperty, {}.hasOwnProperty); + +/** + * This module containts `WeakMap`s for each effectively-"private property" that a `swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ +var privateProps = { + promise: new WeakMap$1(), + innerParams: new WeakMap$1(), + domCache: new WeakMap$1() +}; + +/** + * Enables buttons and hide loader. + */ + +function hideLoading() { + var innerParams = privateProps.innerParams.get(this); + var domCache = privateProps.domCache.get(this); + + if (!innerParams.showConfirmButton) { + hide(domCache.confirmButton); + + if (!innerParams.showCancelButton) { + hide(domCache.actions); + } + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.cancelButton.disabled = false; +} + +function getInput(inputType) { + var innerParams = privateProps.innerParams.get(this); + var domCache = privateProps.domCache.get(this); + inputType = inputType || innerParams.input; + + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return getChildByClass(domCache.content, swalClasses[inputType]); + + case 'checkbox': + return domCache.popup.querySelector(".".concat(swalClasses.checkbox, " input")); + + case 'radio': + return domCache.popup.querySelector(".".concat(swalClasses.radio, " input:checked")) || domCache.popup.querySelector(".".concat(swalClasses.radio, " input:first-child")); + + case 'range': + return domCache.popup.querySelector(".".concat(swalClasses.range, " input")); + + default: + return getChildByClass(domCache.content, swalClasses.input); + } +} + +function enableButtons() { + var domCache = privateProps.domCache.get(this); + domCache.confirmButton.disabled = false; + domCache.cancelButton.disabled = false; +} +function disableButtons() { + var domCache = privateProps.domCache.get(this); + domCache.confirmButton.disabled = true; + domCache.cancelButton.disabled = true; +} +function enableConfirmButton() { + var domCache = privateProps.domCache.get(this); + domCache.confirmButton.disabled = false; +} +function disableConfirmButton() { + var domCache = privateProps.domCache.get(this); + domCache.confirmButton.disabled = true; +} +function enableInput() { + var input = this.getInput(); + + if (!input) { + return false; + } + + if (input.type === 'radio') { + var radiosContainer = input.parentNode.parentNode; + var radios = radiosContainer.querySelectorAll('input'); + + for (var i = 0; i < radios.length; i++) { + radios[i].disabled = false; + } + } else { + input.disabled = false; + } +} +function disableInput() { + var input = this.getInput(); + + if (!input) { + return false; + } + + if (input && input.type === 'radio') { + var radiosContainer = input.parentNode.parentNode; + var radios = radiosContainer.querySelectorAll('input'); + + for (var i = 0; i < radios.length; i++) { + radios[i].disabled = true; + } + } else { + input.disabled = true; + } +} + +function showValidationMessage(error$$1) { + var domCache = privateProps.domCache.get(this); + domCache.validationMessage.innerHTML = error$$1; + var popupComputedStyle = window.getComputedStyle(domCache.popup); + domCache.validationMessage.style.marginLeft = "-".concat(popupComputedStyle.getPropertyValue('padding-left')); + domCache.validationMessage.style.marginRight = "-".concat(popupComputedStyle.getPropertyValue('padding-right')); + show(domCache.validationMessage); + var input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedBy', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } +} // Hide block with validation message + +function resetValidationMessage() { + var domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + var input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedBy'); + removeClass(input, swalClasses.inputerror); + } +} // @deprecated + +/* istanbul ignore next */ + +function resetValidationError() { + warnOnce("Swal.resetValidationError() is deprecated and will be removed in the next major release, use Swal.resetValidationMessage() instead"); + resetValidationMessage.bind(this)(); +} // @deprecated + +/* istanbul ignore next */ + +function showValidationError(error$$1) { + warnOnce("Swal.showValidationError() is deprecated and will be removed in the next major release, use Swal.showValidationMessage() instead"); + showValidationMessage.bind(this)(error$$1); +} + +function getProgressSteps$1() { + var innerParams = privateProps.innerParams.get(this); + return innerParams.progressSteps; +} +function setProgressSteps(progressSteps) { + var innerParams = privateProps.innerParams.get(this); + + var updatedParams = _extends({}, innerParams, { + progressSteps: progressSteps + }); + + privateProps.innerParams.set(this, updatedParams); + renderProgressSteps(updatedParams); +} +function showProgressSteps() { + var domCache = privateProps.domCache.get(this); + show(domCache.progressSteps); +} +function hideProgressSteps() { + var domCache = privateProps.domCache.get(this); + hide(domCache.progressSteps); +} + +var Timer = function Timer(callback, delay) { + _classCallCheck(this, Timer); + + var id, + started, + remaining = delay; + this.running = false; + + this.start = function () { + if (!this.running) { + this.running = true; + started = new Date(); + id = setTimeout(callback, remaining); + } + + return remaining; + }; + + this.stop = function () { + if (this.running) { + this.running = false; + clearTimeout(id); + remaining -= new Date() - started; + } + + return remaining; + }; + + this.increase = function (n) { + var running = this.running; + + if (running) { + this.stop(); + } + + remaining += n; + + if (running) { + this.start(); + } + + return remaining; + }; + + this.getTimerLeft = function () { + if (this.running) { + this.stop(); + this.start(); + } + + return remaining; + }; + + this.isRunning = function () { + return this.running; + }; + + this.start(); +}; + +var defaultInputValidators = { + email: function email(string, extraParams) { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.reject(extraParams && extraParams.validationMessage ? extraParams.validationMessage : 'Invalid email address'); + }, + url: function url(string, extraParams) { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)$/.test(string) ? Promise.resolve() : Promise.reject(extraParams && extraParams.validationMessage ? extraParams.validationMessage : 'Invalid URL'); + } +}; + +/** + * Set type, text and actions on popup + * + * @param params + * @returns {boolean} + */ + +function setParameters(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(function (key) { + if (params.input === key) { + params.inputValidator = params.expectRejections ? defaultInputValidators[key] : Swal.adaptInputValidator(defaultInputValidators[key]); + } + }); + } // params.extraParams is @deprecated + + + if (params.validationMessage) { + if (_typeof(params.extraParams) !== 'object') { + params.extraParams = {}; + } + + params.extraParams.validationMessage = params.validationMessage; + } // Determine if the custom target element is valid + + + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } // Animation + + + if (typeof params.animation === 'function') { + params.animation = params.animation.call(); + } + + var popup; + var oldPopup = getPopup(); + var targetElement = typeof params.target === 'string' ? document.querySelector(params.target) : params.target; // If the model target has changed, refresh the popup + + if (oldPopup && targetElement && oldPopup.parentNode !== targetElement.parentNode) { + popup = init(params); + } else { + popup = oldPopup || init(params); + } // Set popup width + + + if (params.width) { + popup.style.width = typeof params.width === 'number' ? params.width + 'px' : params.width; + } // Set popup padding + + + if (params.padding) { + popup.style.padding = typeof params.padding === 'number' ? params.padding + 'px' : params.padding; + } // Set popup background + + + if (params.background) { + popup.style.background = params.background; + } + + var popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + var successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (var i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + + var container = getContainer(); + var closeButton = getCloseButton(); + var footer = getFooter(); // Title + + renderTitle(params); // Content + + renderContent(params); // Backdrop + + if (typeof params.backdrop === 'string') { + getContainer().style.background = params.backdrop; + } else if (!params.backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } // Position + + + if (params.position in swalClasses) { + addClass(container, swalClasses[params.position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } // Grow + + + if (params.grow && typeof params.grow === 'string') { + var growClass = 'grow-' + params.grow; + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } // Close button + + + if (params.showCloseButton) { + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + show(closeButton); + } else { + hide(closeButton); + } // Default Class + + + popup.className = swalClasses.popup; + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom Class + + + if (params.customClass) { + addClass(popup, params.customClass); + } + + if (params.customContainerClass) { + addClass(container, params.customContainerClass); + } // Progress steps + + + renderProgressSteps(params); // Icon + + renderIcon(params); // Image + + renderImage(params); // Actions (buttons) + + renderActions(params); // Footer + + parseHtmlToContainer(params.footer, footer); // CSS animation + + if (params.animation === true) { + removeClass(popup, swalClasses.noanimation); + } else { + addClass(popup, swalClasses.noanimation); + } // showLoaderOnConfirm && preConfirm + + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } +} + +/** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param {Array} params + */ + +var openPopup = function openPopup(params) { + var container = getContainer(); + var popup = getPopup(); + + if (params.onBeforeOpen !== null && typeof params.onBeforeOpen === 'function') { + params.onBeforeOpen(popup); + } + + if (params.animation) { + addClass(popup, swalClasses.show); + addClass(container, swalClasses.fade); + removeClass(popup, swalClasses.hide); + } else { + removeClass(popup, swalClasses.fade); + } + + show(popup); // scrolling is 'hidden' until animation is done, after that 'auto' + + container.style.overflowY = 'hidden'; + + if (animationEndEvent && !hasClass(popup, swalClasses.noanimation)) { + popup.addEventListener(animationEndEvent, function swalCloseEventFinished() { + popup.removeEventListener(animationEndEvent, swalCloseEventFinished); + container.style.overflowY = 'auto'; + }); + } else { + container.style.overflowY = 'auto'; + } + + addClass([document.documentElement, document.body, container], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + + if (isModal()) { + fixScrollbar(); + iOSfix(); + IEfix(); + setAriaHidden(); // sweetalert2/issues/1247 + + setTimeout(function () { + container.scrollTop = 0; + }); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (params.onOpen !== null && typeof params.onOpen === 'function') { + setTimeout(function () { + params.onOpen(popup); + }); + } +}; + +function _main(userParams) { + var _this = this; + + showWarningsForParams(userParams); + + var innerParams = _extends({}, defaultParams, userParams); + + setParameters(innerParams); + Object.freeze(innerParams); + privateProps.innerParams.set(this, innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + var domCache = { + popup: getPopup(), + container: getContainer(), + content: getContent(), + actions: getActions(), + confirmButton: getConfirmButton(), + cancelButton: getCancelButton(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(this, domCache); + var constructor = this.constructor; + return new Promise(function (resolve, reject) { + // functions to handle all resolving/rejecting/settling + var succeedWith = function succeedWith(value) { + constructor.closePopup(innerParams.onClose, innerParams.onAfterClose); // TODO: make closePopup an *instance* method + + if (innerParams.useRejections) { + resolve(value); + } else { + resolve({ + value: value + }); + } + }; + + var dismissWith = function dismissWith(dismiss) { + constructor.closePopup(innerParams.onClose, innerParams.onAfterClose); + + if (innerParams.useRejections) { + reject(dismiss); + } else { + resolve({ + dismiss: dismiss + }); + } + }; + + var errorWith = function errorWith(error$$1) { + constructor.closePopup(innerParams.onClose, innerParams.onAfterClose); + reject(error$$1); + }; // Close on timer + + + if (innerParams.timer) { + globalState.timeout = new Timer(function () { + dismissWith('timer'); + delete globalState.timeout; + }, innerParams.timer); + } // Get the value of the popup input + + + var getInputValue = function getInputValue() { + var input = _this.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return input.checked ? 1 : 0; + + case 'radio': + return input.checked ? input.value : null; + + case 'file': + return input.files.length ? input.files[0] : null; + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; // input autofocus + + + if (innerParams.input) { + setTimeout(function () { + var input = _this.getInput(); + + if (input) { + focusInput(input); + } + }, 0); + } + + var confirm = function confirm(value) { + if (innerParams.showLoaderOnConfirm) { + constructor.showLoading(); // TODO: make showLoading an *instance* method + } + + if (innerParams.preConfirm) { + _this.resetValidationMessage(); + + var preConfirmPromise = Promise.resolve().then(function () { + return innerParams.preConfirm(value, innerParams.extraParams); + }); + + if (innerParams.expectRejections) { + preConfirmPromise.then(function (preConfirmValue) { + return succeedWith(preConfirmValue || value); + }, function (validationMessage) { + _this.hideLoading(); + + if (validationMessage) { + _this.showValidationMessage(validationMessage); + } + }); + } else { + preConfirmPromise.then(function (preConfirmValue) { + if (isVisible(domCache.validationMessage) || preConfirmValue === false) { + _this.hideLoading(); + } else { + succeedWith(preConfirmValue || value); + } + }, function (error$$1) { + return errorWith(error$$1); + }); + } + } else { + succeedWith(value); + } + }; // Mouse interactions + + + var onButtonEvent = function onButtonEvent(e) { + var target = e.target; + var confirmButton = domCache.confirmButton, + cancelButton = domCache.cancelButton; + var targetedConfirm = confirmButton && (confirmButton === target || confirmButton.contains(target)); + var targetedCancel = cancelButton && (cancelButton === target || cancelButton.contains(target)); + + switch (e.type) { + case 'click': + // Clicked 'confirm' + if (targetedConfirm && constructor.isVisible()) { + _this.disableButtons(); + + if (innerParams.input) { + var inputValue = getInputValue(); + + if (innerParams.inputValidator) { + _this.disableInput(); + + var validationPromise = Promise.resolve().then(function () { + return innerParams.inputValidator(inputValue, innerParams.extraParams); + }); + + if (innerParams.expectRejections) { + validationPromise.then(function () { + _this.enableButtons(); + + _this.enableInput(); + + confirm(inputValue); + }, function (validationMessage) { + _this.enableButtons(); + + _this.enableInput(); + + if (validationMessage) { + _this.showValidationMessage(validationMessage); + } + }); + } else { + validationPromise.then(function (validationMessage) { + _this.enableButtons(); + + _this.enableInput(); + + if (validationMessage) { + _this.showValidationMessage(validationMessage); + } else { + confirm(inputValue); + } + }, function (error$$1) { + return errorWith(error$$1); + }); + } + } else if (!_this.getInput().checkValidity()) { + _this.enableButtons(); + + _this.showValidationMessage(innerParams.validationMessage); + } else { + confirm(inputValue); + } + } else { + confirm(true); + } // Clicked 'cancel' + + } else if (targetedCancel && constructor.isVisible()) { + _this.disableButtons(); + + dismissWith(constructor.DismissReason.cancel); + } + + break; + + default: + } + }; + + var buttons = domCache.popup.querySelectorAll('button'); + + for (var i = 0; i < buttons.length; i++) { + buttons[i].onclick = onButtonEvent; + buttons[i].onmouseover = onButtonEvent; + buttons[i].onmouseout = onButtonEvent; + buttons[i].onmousedown = onButtonEvent; + } // Closing popup by close button + + + domCache.closeButton.onclick = function () { + dismissWith(constructor.DismissReason.close); + }; + + if (innerParams.toast) { + // Closing popup by internal click + domCache.popup.onclick = function () { + if (innerParams.showConfirmButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.input) { + return; + } + + dismissWith(constructor.DismissReason.close); + }; + } else { + var ignoreOutsideClick = false; // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + + domCache.popup.onmousedown = function () { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; // Ignore click events that had mousedown on the container but mouseup on the popup + + + domCache.container.onmousedown = function () { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + + domCache.container.onclick = function (e) { + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target !== domCache.container) { + return; + } + + if (callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(constructor.DismissReason.backdrop); + } + }; + } // Reverse buttons (Confirm on the right side) + + + if (innerParams.reverseButtons) { + domCache.confirmButton.parentNode.insertBefore(domCache.cancelButton, domCache.confirmButton); + } else { + domCache.confirmButton.parentNode.insertBefore(domCache.confirmButton, domCache.cancelButton); + } // Focus handling + + + var setFocus = function setFocus(index, increment) { + var focusableElements = getFocusableElements(innerParams.focusCancel); // search for visible elements and select the next possible match + + for (var _i = 0; _i < focusableElements.length; _i++) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + domCache.popup.focus(); + }; + + var keydownHandler = function keydownHandler(e, innerParams) { + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } + + var arrowKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Left', 'Right', 'Up', 'Down' // IE11 + ]; + + if (e.key === 'Enter' && !e.isComposing) { + if (e.target && _this.getInput() && e.target.outerHTML === _this.getInput().outerHTML) { + if (['textarea', 'file'].indexOf(innerParams.input) !== -1) { + return; // do not submit + } + + constructor.clickConfirm(); + e.preventDefault(); + } // TAB + + } else if (e.key === 'Tab') { + var targetElement = e.target; + var focusableElements = getFocusableElements(innerParams.focusCancel); + var btnIndex = -1; + + for (var _i2 = 0; _i2 < focusableElements.length; _i2++) { + if (targetElement === focusableElements[_i2]) { + btnIndex = _i2; + break; + } + } + + if (!e.shiftKey) { + // Cycle to the next button + setFocus(btnIndex, 1); + } else { + // Cycle to the prev button + setFocus(btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); // ARROWS - switch focus between buttons + } else if (arrowKeys.indexOf(e.key) !== -1) { + // focus Cancel button if Confirm button is currently focused + if (document.activeElement === domCache.confirmButton && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); // and vice versa + } else if (document.activeElement === domCache.cancelButton && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + } // ESC + + } else if ((e.key === 'Escape' || e.key === 'Esc') && callIfFunction(innerParams.allowEscapeKey) === true) { + e.preventDefault(); + dismissWith(constructor.DismissReason.esc); + } + }; + + if (globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + + if (!innerParams.toast) { + globalState.keydownHandler = function (e) { + return keydownHandler(e, innerParams); + }; + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : domCache.popup; + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + + _this.enableButtons(); + + _this.hideLoading(); + + _this.resetValidationMessage(); + + if (innerParams.toast && (innerParams.input || innerParams.footer || innerParams.showCloseButton)) { + addClass(document.body, swalClasses['toast-column']); + } else { + removeClass(document.body, swalClasses['toast-column']); + } // inputs + + + var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + + var setInputPlaceholder = function setInputPlaceholder(input) { + if (!input.placeholder || innerParams.inputPlaceholder) { + input.placeholder = innerParams.inputPlaceholder; + } + }; + + var input; + + for (var _i3 = 0; _i3 < inputTypes.length; _i3++) { + var inputClass = swalClasses[inputTypes[_i3]]; + var inputContainer = getChildByClass(domCache.content, inputClass); + input = _this.getInput(inputTypes[_i3]); // set attributes + + if (input) { + for (var j in input.attributes) { + if (input.attributes.hasOwnProperty(j)) { + var attrName = input.attributes[j].name; + + if (attrName !== 'type' && attrName !== 'value') { + input.removeAttribute(attrName); + } + } + } + + for (var attr in innerParams.inputAttributes) { + // Do not set a placeholder for + // it'll crash Edge, #1298 + if (inputTypes[_i3] === 'range' && attr === 'placeholder') { + continue; + } + + input.setAttribute(attr, innerParams.inputAttributes[attr]); + } + } // set class + + + inputContainer.className = inputClass; + + if (innerParams.inputClass) { + addClass(inputContainer, innerParams.inputClass); + } + + hide(inputContainer); + } + + var populateInputOptions; + + switch (innerParams.input) { + case 'text': + case 'email': + case 'password': + case 'number': + case 'tel': + case 'url': + { + input = getChildByClass(domCache.content, swalClasses.input); + + if (typeof innerParams.inputValue === 'string' || typeof innerParams.inputValue === 'number') { + input.value = innerParams.inputValue; + } else if (!isPromise(innerParams.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(_typeof(innerParams.inputValue), "\"")); + } + + setInputPlaceholder(input); + input.type = innerParams.input; + show(input); + break; + } + + case 'file': + { + input = getChildByClass(domCache.content, swalClasses.file); + setInputPlaceholder(input); + input.type = innerParams.input; + show(input); + break; + } + + case 'range': + { + var range = getChildByClass(domCache.content, swalClasses.range); + var rangeInput = range.querySelector('input'); + var rangeOutput = range.querySelector('output'); + rangeInput.value = innerParams.inputValue; + rangeInput.type = innerParams.input; + rangeOutput.value = innerParams.inputValue; + show(range); + break; + } + + case 'select': + { + var select = getChildByClass(domCache.content, swalClasses.select); + select.innerHTML = ''; + + if (innerParams.inputPlaceholder) { + var placeholder = document.createElement('option'); + placeholder.innerHTML = innerParams.inputPlaceholder; + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + populateInputOptions = function populateInputOptions(inputOptions) { + inputOptions.forEach(function (inputOption) { + var optionValue = inputOption[0]; + var optionLabel = inputOption[1]; + var option = document.createElement('option'); + option.value = optionValue; + option.innerHTML = optionLabel; + + if (innerParams.inputValue.toString() === optionValue.toString()) { + option.selected = true; + } + + select.appendChild(option); + }); + show(select); + select.focus(); + }; + + break; + } + + case 'radio': + { + var radio = getChildByClass(domCache.content, swalClasses.radio); + radio.innerHTML = ''; + + populateInputOptions = function populateInputOptions(inputOptions) { + inputOptions.forEach(function (inputOption) { + var radioValue = inputOption[0]; + var radioLabel = inputOption[1]; + var radioInput = document.createElement('input'); + var radioLabelElement = document.createElement('label'); + radioInput.type = 'radio'; + radioInput.name = swalClasses.radio; + radioInput.value = radioValue; + + if (innerParams.inputValue.toString() === radioValue.toString()) { + radioInput.checked = true; + } + + var label = document.createElement('span'); + label.innerHTML = radioLabel; + label.className = swalClasses.label; + radioLabelElement.appendChild(radioInput); + radioLabelElement.appendChild(label); + radio.appendChild(radioLabelElement); + }); + show(radio); + var radios = radio.querySelectorAll('input'); + + if (radios.length) { + radios[0].focus(); + } + }; + + break; + } + + case 'checkbox': + { + var checkbox = getChildByClass(domCache.content, swalClasses.checkbox); + + var checkboxInput = _this.getInput('checkbox'); + + checkboxInput.type = 'checkbox'; + checkboxInput.value = 1; + checkboxInput.id = swalClasses.checkbox; + checkboxInput.checked = Boolean(innerParams.inputValue); + var label = checkbox.querySelector('span'); + label.innerHTML = innerParams.inputPlaceholder; + show(checkbox); + break; + } + + case 'textarea': + { + var textarea = getChildByClass(domCache.content, swalClasses.textarea); + textarea.value = innerParams.inputValue; + setInputPlaceholder(textarea); + show(textarea); + break; + } + + case null: + { + break; + } + + default: + error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(innerParams.input, "\"")); + break; + } + + if (innerParams.input === 'select' || innerParams.input === 'radio') { + var processInputOptions = function processInputOptions(inputOptions) { + return populateInputOptions(formatInputOptions(inputOptions)); + }; + + if (isPromise(innerParams.inputOptions)) { + constructor.showLoading(); + innerParams.inputOptions.then(function (inputOptions) { + _this.hideLoading(); + + processInputOptions(inputOptions); + }); + } else if (_typeof(innerParams.inputOptions) === 'object') { + processInputOptions(innerParams.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(_typeof(innerParams.inputOptions))); + } + } else if (['text', 'email', 'number', 'tel', 'textarea'].indexOf(innerParams.input) !== -1 && isPromise(innerParams.inputValue)) { + constructor.showLoading(); + hide(input); + innerParams.inputValue.then(function (inputValue) { + input.value = innerParams.input === 'number' ? parseFloat(inputValue) || 0 : inputValue + ''; + show(input); + input.focus(); + + _this.hideLoading(); + }).catch(function (err) { + error('Error in inputValue promise: ' + err); + input.value = ''; + show(input); + input.focus(); + + _this.hideLoading(); + }); + } + + openPopup(innerParams); + + if (!innerParams.toast) { + if (!callIfFunction(innerParams.allowEnterKey)) { + if (document.activeElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + } else if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + } else if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + } else { + setFocus(-1, 1); + } + } // fix scroll + + + domCache.container.scrollTop = 0; + }); +} + + + +var instanceMethods = Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableConfirmButton: enableConfirmButton, + disableConfirmButton: disableConfirmButton, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage, + resetValidationError: resetValidationError, + showValidationError: showValidationError, + getProgressSteps: getProgressSteps$1, + setProgressSteps: setProgressSteps, + showProgressSteps: showProgressSteps, + hideProgressSteps: hideProgressSteps, + _main: _main +}); + +var currentInstance; // SweetAlert constructor + +function SweetAlert() { + // Prevent run in Node env + + /* istanbul ignore if */ + if (typeof window === 'undefined') { + return; + } // Check for the existence of Promise + + /* istanbul ignore if */ + + + if (typeof Promise === 'undefined') { + error('This package requires a Promise library, please include a shim to enable it in this browser (See: https://github.com/sweetalert2/sweetalert2/wiki/Migration-from-SweetAlert-to-SweetAlert2#1-ie-support)'); + } + + currentInstance = this; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true + } + }); + + var promise = this._main(this.params); + + privateProps.promise.set(this, promise); +} // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + +SweetAlert.prototype.then = function (onFulfilled, onRejected) { + var promise = privateProps.promise.get(this); + return promise.then(onFulfilled, onRejected); +}; + +SweetAlert.prototype.catch = function (onRejected) { + var promise = privateProps.promise.get(this); + return promise.catch(onRejected); +}; + +SweetAlert.prototype.finally = function (onFinally) { + var promise = privateProps.promise.get(this); + return promise.finally(onFinally); +}; // Assign instance methods from src/instanceMethods/*.js to prototype + + +_extends(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + +_extends(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + +Object.keys(instanceMethods).forEach(function (key) { + SweetAlert[key] = function () { + if (currentInstance) { + var _currentInstance; + + return (_currentInstance = currentInstance)[key].apply(_currentInstance, arguments); + } + }; +}); +SweetAlert.DismissReason = DismissReason; +/* istanbul ignore next */ + +SweetAlert.noop = function () {}; + +var Swal = withNoNewKeyword(withGlobalDefaults(SweetAlert)); +Swal.default = Swal; + +return Swal; + +}))); +if (typeof window !== 'undefined' && window.Sweetalert2){ window.Sweetalert2.version = '7.33.1'; window.swal = window.sweetAlert = window.Swal = window.SweetAlert = window.Sweetalert2} diff --git a/src/client/Bootstrap.Client/wwwroot/lib/sweetalert/sweetalert2.min.css b/src/client/Bootstrap.Client/wwwroot/lib/sweetalert/sweetalert2.min.css new file mode 100644 index 00000000..2efe5028 --- /dev/null +++ b/src/client/Bootstrap.Client/wwwroot/lib/sweetalert/sweetalert2.min.css @@ -0,0 +1 @@ +@-webkit-keyframes swal2-show{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes swal2-show{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}100%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}100%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;-webkit-transform:scale(.4);transform:scale(.4);opacity:0}50%{margin-top:1.625em;-webkit-transform:scale(.4);transform:scale(.4);opacity:0}80%{margin-top:-.375em;-webkit-transform:scale(1.15);transform:scale(1.15)}100%{margin-top:0;-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;-webkit-transform:scale(.4);transform:scale(.4);opacity:0}50%{margin-top:1.625em;-webkit-transform:scale(.4);transform:scale(.4);opacity:0}80%{margin-top:-.375em;-webkit-transform:scale(1.15);transform:scale(1.15)}100%{margin-top:0;-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-shown{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;-webkit-transform:translateY(-50%);transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;box-shadow:0 0 .625em #d9d9d9;overflow-y:hidden}.swal2-popup.swal2-toast .swal2-header{flex-direction:row}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:initial;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon-text{font-size:2em;font-weight:700;line-height:1em}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{height:auto;margin:0 .3125em}.swal2-popup.swal2-toast .swal2-styled{margin:0 .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 .0625em #fff,0 0 0 .125em rgba(50,100,150,.4)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:2em;height:2.8125em;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.25em;left:-.9375em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:2em 2em;transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;-webkit-transform-origin:0 2em;transform-origin:0 2em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:showSweetToast .5s;animation:showSweetToast .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:hideSweetToast .2s forwards;animation:hideSweetToast .2s forwards}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:animate-toast-success-tip .75s;animation:animate-toast-success-tip .75s}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:animate-toast-success-long .75s;animation:animate-toast-success-long .75s}@-webkit-keyframes showSweetToast{0%{-webkit-transform:translateY(-.625em) rotateZ(2deg);transform:translateY(-.625em) rotateZ(2deg);opacity:0}33%{-webkit-transform:translateY(0) rotateZ(-2deg);transform:translateY(0) rotateZ(-2deg);opacity:.5}66%{-webkit-transform:translateY(.3125em) rotateZ(2deg);transform:translateY(.3125em) rotateZ(2deg);opacity:.7}100%{-webkit-transform:translateY(0) rotateZ(0);transform:translateY(0) rotateZ(0);opacity:1}}@keyframes showSweetToast{0%{-webkit-transform:translateY(-.625em) rotateZ(2deg);transform:translateY(-.625em) rotateZ(2deg);opacity:0}33%{-webkit-transform:translateY(0) rotateZ(-2deg);transform:translateY(0) rotateZ(-2deg);opacity:.5}66%{-webkit-transform:translateY(.3125em) rotateZ(2deg);transform:translateY(.3125em) rotateZ(2deg);opacity:.7}100%{-webkit-transform:translateY(0) rotateZ(0);transform:translateY(0) rotateZ(0);opacity:1}}@-webkit-keyframes hideSweetToast{0%{opacity:1}33%{opacity:.5}100%{-webkit-transform:rotateZ(1deg);transform:rotateZ(1deg);opacity:0}}@keyframes hideSweetToast{0%{opacity:1}33%{opacity:.5}100%{-webkit-transform:rotateZ(1deg);transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes animate-toast-success-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes animate-toast-success-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes animate-toast-success-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes animate-toast-success-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-shown{top:auto;right:auto;bottom:auto;left:auto;background-color:transparent}body.swal2-no-backdrop .swal2-shown>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-shown.swal2-top{top:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-top-left,body.swal2-no-backdrop .swal2-shown.swal2-top-start{top:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-top-end,body.swal2-no-backdrop .swal2-shown.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-shown.swal2-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-left,body.swal2-no-backdrop .swal2-shown.swal2-center-start{top:50%;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-end,body.swal2-no-backdrop .swal2-shown.swal2-center-right{top:50%;right:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom-left,body.swal2-no-backdrop .swal2-shown.swal2-bottom-start{bottom:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-bottom-end,body.swal2-no-backdrop .swal2-shown.swal2-bottom-right{right:0;bottom:0}.swal2-container{display:flex;position:fixed;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:10px;background-color:transparent;z-index:1060;overflow-x:hidden;-webkit-overflow-scrolling:touch}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-left,.swal2-container.swal2-top-start{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-left,.swal2-container.swal2-center-start{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-left,.swal2-container.swal2-bottom-start{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex!important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-bottom,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-top{align-items:center}.swal2-container.swal2-grow-column.swal2-bottom-left,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-top-start{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-bottom-right,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-top-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-container .swal2-modal{margin:0!important}}.swal2-container.swal2-fade{transition:background-color .1s}.swal2-container.swal2-shown{background-color:rgba(0,0,0,.4)}.swal2-popup{display:none;position:relative;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border-radius:.3125em;background:#fff;font-family:inherit;font-size:1rem;box-sizing:border-box}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-popup .swal2-header{display:flex;flex-direction:column;align-items:center}.swal2-popup .swal2-title{display:block;position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-popup .swal2-actions{flex-wrap:wrap;align-items:center;justify-content:center;margin:1.25em auto 0;z-index:1}.swal2-popup .swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-popup .swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-popup .swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-popup .swal2-actions.swal2-loading .swal2-styled.swal2-confirm{width:2.5em;height:2.5em;margin:.46875em;padding:0;border:.25em solid transparent;border-radius:100%;border-color:transparent;background-color:transparent!important;color:transparent;cursor:default;box-sizing:border-box;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-popup .swal2-actions.swal2-loading .swal2-styled.swal2-cancel{margin-right:30px;margin-left:30px}.swal2-popup .swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after{display:inline-block;width:15px;height:15px;margin-left:5px;border:3px solid #999;border-radius:50%;border-right-color:transparent;box-shadow:1px 1px 1px #fff;content:'';-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal}.swal2-popup .swal2-styled{margin:.3125em;padding:.625em 2em;font-weight:500;box-shadow:none}.swal2-popup .swal2-styled:not([disabled]){cursor:pointer}.swal2-popup .swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#3085d6;color:#fff;font-size:1.0625em}.swal2-popup .swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#aaa;color:#fff;font-size:1.0625em}.swal2-popup .swal2-styled:focus{outline:0;box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(50,100,150,.4)}.swal2-popup .swal2-styled::-moz-focus-inner{border:0}.swal2-popup .swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-popup .swal2-image{max-width:100%;margin:1.25em auto}.swal2-popup .swal2-close{position:absolute;top:0;right:0;justify-content:center;width:1.2em;height:1.2em;padding:0;transition:color .1s ease-out;border:none;border-radius:0;outline:initial;background:0 0;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer;overflow:hidden}.swal2-popup .swal2-close:hover{-webkit-transform:none;transform:none;color:#f27474}.swal2-popup>.swal2-checkbox,.swal2-popup>.swal2-file,.swal2-popup>.swal2-input,.swal2-popup>.swal2-radio,.swal2-popup>.swal2-select,.swal2-popup>.swal2-textarea{display:none}.swal2-popup .swal2-content{justify-content:center;margin:0;padding:0;color:#545454;font-size:1.125em;font-weight:300;line-height:normal;z-index:1;word-wrap:break-word}.swal2-popup #swal2-content{text-align:center}.swal2-popup .swal2-checkbox,.swal2-popup .swal2-file,.swal2-popup .swal2-input,.swal2-popup .swal2-radio,.swal2-popup .swal2-select,.swal2-popup .swal2-textarea{margin:1em auto}.swal2-popup .swal2-file,.swal2-popup .swal2-input,.swal2-popup .swal2-textarea{width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;font-size:1.125em;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);box-sizing:border-box}.swal2-popup .swal2-file.swal2-inputerror,.swal2-popup .swal2-input.swal2-inputerror,.swal2-popup .swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-popup .swal2-file:focus,.swal2-popup .swal2-input:focus,.swal2-popup .swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:0 0 3px #c4e6f5}.swal2-popup .swal2-file::-webkit-input-placeholder,.swal2-popup .swal2-input::-webkit-input-placeholder,.swal2-popup .swal2-textarea::-webkit-input-placeholder{color:#ccc}.swal2-popup .swal2-file:-ms-input-placeholder,.swal2-popup .swal2-input:-ms-input-placeholder,.swal2-popup .swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-popup .swal2-file::-ms-input-placeholder,.swal2-popup .swal2-input::-ms-input-placeholder,.swal2-popup .swal2-textarea::-ms-input-placeholder{color:#ccc}.swal2-popup .swal2-file::placeholder,.swal2-popup .swal2-input::placeholder,.swal2-popup .swal2-textarea::placeholder{color:#ccc}.swal2-popup .swal2-range input{width:80%}.swal2-popup .swal2-range output{width:20%;font-weight:600;text-align:center}.swal2-popup .swal2-range input,.swal2-popup .swal2-range output{height:2.625em;margin:1em auto;padding:0;font-size:1.125em;line-height:2.625em}.swal2-popup .swal2-input{height:2.625em;padding:0 .75em}.swal2-popup .swal2-input[type=number]{max-width:10em}.swal2-popup .swal2-file{font-size:1.125em}.swal2-popup .swal2-textarea{height:6.75em;padding:.75em}.swal2-popup .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;color:#545454;font-size:1.125em}.swal2-popup .swal2-checkbox,.swal2-popup .swal2-radio{align-items:center;justify-content:center}.swal2-popup .swal2-checkbox label,.swal2-popup .swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-popup .swal2-checkbox input,.swal2-popup .swal2-radio input{margin:0 .4em}.swal2-popup .swal2-validation-message{display:none;align-items:center;justify-content:center;padding:.625em;background:#f0f0f0;color:#666;font-size:1em;font-weight:300;overflow:hidden}.swal2-popup .swal2-validation-message::before{display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center;content:'!';zoom:normal}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@-moz-document url-prefix(){.swal2-close:focus{outline:2px solid rgba(50,100,150,.4)}}.swal2-icon{position:relative;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:.25em solid transparent;border-radius:50%;line-height:5em;cursor:default;box-sizing:content-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;zoom:normal}.swal2-icon-text{font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:3.75em 3.75em;transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 3.75em;transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;top:-.25em;left:-.25em;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%;z-index:2;box-sizing:content-box}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;top:.5em;left:1.625em;width:.4375em;height:5.625em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);z-index:1}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;height:.3125em;border-radius:.125em;background-color:#a5dc86;z-index:2}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.875em;width:1.5625em;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-progresssteps{align-items:center;margin:0 0 1.25em;padding:0;font-weight:600}.swal2-progresssteps li{display:inline-block;position:relative}.swal2-progresssteps .swal2-progresscircle{width:2em;height:2em;border-radius:2em;background:#3085d6;color:#fff;line-height:2em;text-align:center;z-index:20}.swal2-progresssteps .swal2-progresscircle:first-child{margin-left:0}.swal2-progresssteps .swal2-progresscircle:last-child{margin-right:0}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep{background:#3085d6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progresscircle{background:#add8e6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progressline{background:#add8e6}.swal2-progresssteps .swal2-progressline{width:2.5em;height:.4em;margin:0 -1px;background:#3085d6;z-index:10}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-animate-error-icon{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-animate-error-icon .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}@-webkit-keyframes swal2-rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:initial!important}} \ No newline at end of file diff --git a/src/client/Bootstrap.Client/wwwroot/lib/sweetalert/sweetalert2.min.js b/src/client/Bootstrap.Client/wwwroot/lib/sweetalert/sweetalert2.min.js new file mode 100644 index 00000000..d0112efa --- /dev/null +++ b/src/client/Bootstrap.Client/wwwroot/lib/sweetalert/sweetalert2.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Sweetalert2=t()}(this,function(){"use strict";function q(e){return(q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var n=0;n
\n
\n \n \n
\n \n \n
\n \n ?\n
\n \n !\n
\n \n i\n
\n \n \n \n \n \n
\n \n \n \n \n
\n \n \n \n
\n \n \n \n \n \n \n \n \n
\n \n
\n