From 9cace3337bbe06b186237031918937eb81c11b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B0=E4=BA=AE?= Date: Wed, 5 May 2021 17:20:48 +0800 Subject: [PATCH] upgrade --- README.md | 6 +- .../js/bootstrap-select/bootstrap-select.css | 453 ++ .../bootstrap-select/bootstrap-select.min.css | 6 + .../bootstrap-select/bootstrap-select.min.js | 9 + .../i18n/defaults-zh_CN.min.js | 8 + .../i18n/defaults-zh_TW.min.js | 8 + .../js/bootstrap-table/bootstrap-table.css | 361 + .../js/bootstrap-table/bootstrap-table.js | 7217 +++++++++++++++++ .../bootstrap-table/bootstrap-table.min.css | 10 + .../js/bootstrap-table/bootstrap-table.min.js | 10 + .../bootstrap-table-accent-neutralise.min.js | 10 + .../addrbar/bootstrap-table-addrbar.min.js | 1 + .../bootstrap-table-auto-refresh.min.js | 10 + .../bootstrap-table-cell-input.min.css | 10 + .../bootstrap-table-cell-input.min.js | 10 + .../cookie/bootstrap-table-cookie.min.js | 10 + .../bootstrap-table-copy-rows.min.js | 10 + .../bootstrap-table-defer-url.min.js | 10 + .../editable/bootstrap-table-editable.min.js | 1 + .../export/bootstrap-table-export.min.js | 1 + .../bootstrap-table-filter-control.min.css | 10 + .../bootstrap-table-filter-control.min.js | 10 + .../bootstrap-table-fixed-columns.js | 395 + .../bootstrap-table-fixed-columns.scss | 25 + .../group-by-v2/bootstrap-table-group-by.js | 277 + .../group-by-v2/bootstrap-table-group-by.scss | 7 + .../extensions/group-by-v2/extension.json | 12 + .../bootstrap-table-i18n-enhance.js | 31 + .../extensions/i18n-enhance/extension.json | 17 + .../key-events/bootstrap-table-key-events.js | 74 + .../extensions/key-events/extension.json | 17 + .../mobile/bootstrap-table-mobile.js | 123 + .../extensions/mobile/extension.json | 17 + .../bootstrap-table-multiple-sort.js | 728 ++ .../extensions/multiple-sort/extension.json | 17 + .../bootstrap-table-page-jump-to.js | 43 + .../bootstrap-table-page-jump-to.scss | 11 + .../extensions/pipeline/LICENSE | 21 + .../extensions/pipeline/README.md | 92 + .../pipeline/bootstrap-table-pipeline.js | 320 + .../extensions/pipeline/extension.json | 18 + .../extensions/print/bootstrap-table-print.js | 181 + .../bootstrap-table-reorder-columns.js | 199 + .../extensions/reorder-columns/extension.json | 17 + .../bootstrap-table-reorder-rows.js | 95 + .../bootstrap-table-reorder-rows.scss | 14 + .../extensions/reorder-rows/extension.json | 17 + .../resizable/bootstrap-table-resizable.js | 68 + .../extensions/resizable/extension.json | 17 + .../bootstrap-table-sticky-header.js | 119 + .../bootstrap-table-sticky-header.scss | 22 + .../extensions/sticky-header/extension.json | 17 + .../toolbar/bootstrap-table-toolbar.js | 360 + .../extensions/toolbar/extension.json | 17 + .../treegrid/bootstrap-table-treegrid.min.js | 10 + .../locale/bootstrap-table-zh-CN.min.js | 10 + .../locale/bootstrap-table-zh-TW.min.js | 10 + assets/bootstrap/js/httpclient/httpclient.js | 20 + .../jquery-treegrid/jquery.treegrid.min.css | 1 + .../js/jquery-treegrid/jquery.treegrid.min.js | 1 + assets/bootstrap/js/vkbeautify.js | 357 + assets/templates/admin/admin_login.html | 14 +- assets/templates/configinfo/config_code.html | 26 +- assets/templates/index/index.html | 10 +- assets/templates/install/install_view.html | 22 +- assets/templates/menu/menu_view.html | 414 + assets/templates/tool/tool_cache.html | 185 + assets/templates/tool/tool_data.html | 292 + cmd/mfmt/main.go | 3 +- docs/docs.go | 625 +- docs/swagger.json | 625 +- docs/swagger.yaml | 424 +- go.mod | 26 +- go.sum | 227 +- internal/api/code/code.go | 26 + .../controller/menu_handler/func_create.go | 112 + .../controller/menu_handler/func_delete.go | 67 + .../controller/menu_handler/func_detail.go | 77 + .../api/controller/menu_handler/func_list.go | 74 + .../menu_handler/func_updateused.go | 69 + .../api/controller/menu_handler/handler.go | 61 + .../tool_handler/func_clearcache.go | 65 + .../api/controller/tool_handler/func_dbs.go | 37 + .../tool_handler/func_searchcache.go | 77 + .../tool_handler/func_searchmysql.go | 223 + .../controller/tool_handler/func_tables.go | 76 + .../api/controller/tool_handler/handler.go | 27 + .../repository/db_repo/menu_repo/gen_menu.go | 626 ++ .../repository/db_repo/menu_repo/gen_model.go | 20 + .../repository/db_repo/menu_repo/gen_table.md | 17 + .../authorized_service/service_detailbykey.go | 3 +- internal/api/service/menu_service/service.go | 45 + .../service/menu_service/service_create.go | 32 + .../service/menu_service/service_delete.go | 23 + .../service/menu_service/service_detail.go | 33 + .../api/service/menu_service/service_list.go | 30 + .../service/menu_service/service_modify.go | 31 + .../menu_service/service_updateused.go | 23 + .../router/middleware/middle_signature.go | 2 +- internal/router/router_api.go | 14 + internal/router/router_web.go | 3 + .../controller/admin_handler/func_menuview.go | 9 + .../web/controller/admin_handler/handler.go | 1 + .../config_handler/func_codeview.go | 42 +- .../gencode_handler/func_gormview.go | 2 +- .../install_handler/func_execute.go | 22 + .../controller/install_handler/func_view.go | 12 +- .../install_handler/mysql_table/table_menu.go | 37 + .../mysql_table/table_user_demo.go | 27 - .../controller/tool_handler/func_cacheview.go | 11 + .../controller/tool_handler/func_dataview.go | 11 + .../web/controller/tool_handler/handler.go | 2 + pkg/errors/err.go | 100 + pkg/errors/err_test.go | 34 + pkg/urltable/urltable.go | 169 + pkg/urltable/urltable_test.go | 157 + 116 files changed, 17303 insertions(+), 97 deletions(-) create mode 100644 assets/bootstrap/js/bootstrap-select/bootstrap-select.css create mode 100644 assets/bootstrap/js/bootstrap-select/bootstrap-select.min.css create mode 100644 assets/bootstrap/js/bootstrap-select/bootstrap-select.min.js create mode 100644 assets/bootstrap/js/bootstrap-select/i18n/defaults-zh_CN.min.js create mode 100644 assets/bootstrap/js/bootstrap-select/i18n/defaults-zh_TW.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/bootstrap-table.css create mode 100644 assets/bootstrap/js/bootstrap-table/bootstrap-table.js create mode 100644 assets/bootstrap/js/bootstrap-table/bootstrap-table.min.css create mode 100644 assets/bootstrap/js/bootstrap-table/bootstrap-table.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/accent-neutralise/bootstrap-table-accent-neutralise.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/addrbar/bootstrap-table-addrbar.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/auto-refresh/bootstrap-table-auto-refresh.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/cell-input/bootstrap-table-cell-input.min.css create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/cell-input/bootstrap-table-cell-input.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/cookie/bootstrap-table-cookie.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/copy-rows/bootstrap-table-copy-rows.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/defer-url/bootstrap-table-defer-url.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/editable/bootstrap-table-editable.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/export/bootstrap-table-export.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/filter-control/bootstrap-table-filter-control.min.css create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/filter-control/bootstrap-table-filter-control.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/fixed-columns/bootstrap-table-fixed-columns.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/fixed-columns/bootstrap-table-fixed-columns.scss create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/group-by-v2/bootstrap-table-group-by.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/group-by-v2/bootstrap-table-group-by.scss create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/group-by-v2/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/i18n-enhance/bootstrap-table-i18n-enhance.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/i18n-enhance/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/key-events/bootstrap-table-key-events.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/key-events/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/mobile/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/multiple-sort/bootstrap-table-multiple-sort.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/multiple-sort/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/page-jump-to/bootstrap-table-page-jump-to.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/page-jump-to/bootstrap-table-page-jump-to.scss create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/pipeline/LICENSE create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/pipeline/README.md create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/pipeline/bootstrap-table-pipeline.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/pipeline/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/print/bootstrap-table-print.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/reorder-columns/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.scss create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/resizable/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.scss create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/sticky-header/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/toolbar/extension.json create mode 100644 assets/bootstrap/js/bootstrap-table/extensions/treegrid/bootstrap-table-treegrid.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/locale/bootstrap-table-zh-CN.min.js create mode 100644 assets/bootstrap/js/bootstrap-table/locale/bootstrap-table-zh-TW.min.js create mode 100644 assets/bootstrap/js/jquery-treegrid/jquery.treegrid.min.css create mode 100644 assets/bootstrap/js/jquery-treegrid/jquery.treegrid.min.js create mode 100644 assets/bootstrap/js/vkbeautify.js create mode 100644 assets/templates/menu/menu_view.html create mode 100644 assets/templates/tool/tool_cache.html create mode 100644 assets/templates/tool/tool_data.html create mode 100755 internal/api/controller/menu_handler/func_create.go create mode 100755 internal/api/controller/menu_handler/func_delete.go create mode 100755 internal/api/controller/menu_handler/func_detail.go create mode 100755 internal/api/controller/menu_handler/func_list.go create mode 100755 internal/api/controller/menu_handler/func_updateused.go create mode 100644 internal/api/controller/menu_handler/handler.go create mode 100644 internal/api/controller/tool_handler/func_clearcache.go create mode 100644 internal/api/controller/tool_handler/func_dbs.go create mode 100644 internal/api/controller/tool_handler/func_searchcache.go create mode 100644 internal/api/controller/tool_handler/func_searchmysql.go create mode 100644 internal/api/controller/tool_handler/func_tables.go create mode 100755 internal/api/repository/db_repo/menu_repo/gen_menu.go create mode 100755 internal/api/repository/db_repo/menu_repo/gen_model.go create mode 100755 internal/api/repository/db_repo/menu_repo/gen_table.md create mode 100644 internal/api/service/menu_service/service.go create mode 100644 internal/api/service/menu_service/service_create.go create mode 100644 internal/api/service/menu_service/service_delete.go create mode 100644 internal/api/service/menu_service/service_detail.go create mode 100644 internal/api/service/menu_service/service_list.go create mode 100644 internal/api/service/menu_service/service_modify.go create mode 100644 internal/api/service/menu_service/service_updateused.go create mode 100644 internal/web/controller/admin_handler/func_menuview.go create mode 100644 internal/web/controller/install_handler/mysql_table/table_menu.go delete mode 100644 internal/web/controller/install_handler/mysql_table/table_user_demo.go create mode 100644 internal/web/controller/tool_handler/func_cacheview.go create mode 100644 internal/web/controller/tool_handler/func_dataview.go create mode 100644 pkg/errors/err.go create mode 100644 pkg/errors/err_test.go create mode 100644 pkg/urltable/urltable.go create mode 100644 pkg/urltable/urltable_test.go diff --git a/README.md b/README.md index ad2db72..3aa2f3b 100644 --- a/README.md +++ b/README.md @@ -36,16 +36,12 @@ go-gin-api 文档由以下几个主要部分组成: - 组件指南 - 工具包 -**地址:[https://www.yuque.com/xinliangnote/go-gin-api/ngc3x5](https://www.yuque.com/xinliangnote/go-gin-api/ngc3x5)** +**详细文档:[https://www.yuque.com/xinliangnote/go-gin-api/ngc3x5](https://www.yuque.com/xinliangnote/go-gin-api/ngc3x5)** ## 其他 查看 Jaeger 链路追踪代码,请查看 [v1.0版](https://github.com/xinliangnote/go-gin-api/releases/tag/v1.0),文档点这里 [jaeger.md](https://github.com/xinliangnote/go-gin-api/blob/master/docs/jaeger.md) 。 -## Special Thanks - -[@koketama](https://github.com/koketama) - ## Learning together ![](https://github.com/xinliangnote/Go/blob/master/00-基础语法/images/qr.jpg) diff --git a/assets/bootstrap/js/bootstrap-select/bootstrap-select.css b/assets/bootstrap/js/bootstrap-select/bootstrap-select.css new file mode 100644 index 0000000..74befa3 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-select/bootstrap-select.css @@ -0,0 +1,453 @@ +/*! + * Bootstrap-select v1.13.17 (https://developer.snapappointments.com/bootstrap-select) + * + * Copyright 2012-2020 SnapAppointments, LLC + * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) + */ + +@-webkit-keyframes bs-notify-fadeOut { + 0% { + opacity: 0.9; + } + 100% { + opacity: 0; + } +} +@-o-keyframes bs-notify-fadeOut { + 0% { + opacity: 0.9; + } + 100% { + opacity: 0; + } +} +@keyframes bs-notify-fadeOut { + 0% { + opacity: 0.9; + } + 100% { + opacity: 0; + } +} +select.bs-select-hidden, +.bootstrap-select > select.bs-select-hidden, +select.selectpicker { + display: none !important; +} +.bootstrap-select { + width: 220px \0; + /*IE9 and below*/ + vertical-align: middle; +} +.bootstrap-select > .dropdown-toggle { + position: relative; + width: 100%; + text-align: right; + white-space: nowrap; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} +.bootstrap-select > .dropdown-toggle:after { + margin-top: -1px; +} +.bootstrap-select > .dropdown-toggle.bs-placeholder, +.bootstrap-select > .dropdown-toggle.bs-placeholder:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder:active { + color: #999; +} +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:active { + color: rgba(255, 255, 255, 0.5); +} +.bootstrap-select > select { + position: absolute !important; + bottom: 0; + left: 50%; + display: block !important; + width: 0.5px !important; + height: 100% !important; + padding: 0 !important; + opacity: 0 !important; + border: none; + z-index: 0 !important; +} +.bootstrap-select > select.mobile-device { + top: 0; + left: 0; + display: block !important; + width: 100% !important; + z-index: 2 !important; +} +.has-error .bootstrap-select .dropdown-toggle, +.error .bootstrap-select .dropdown-toggle, +.bootstrap-select.is-invalid .dropdown-toggle, +.was-validated .bootstrap-select select:invalid + .dropdown-toggle { + border-color: #b94a48; +} +.bootstrap-select.is-valid .dropdown-toggle, +.was-validated .bootstrap-select select:valid + .dropdown-toggle { + border-color: #28a745; +} +.bootstrap-select.fit-width { + width: auto !important; +} +.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { + width: 220px; +} +.bootstrap-select.form-control { + margin-bottom: 0; + padding: 0; + border: none; + height: auto; +} +:not(.input-group) > .bootstrap-select.form-control:not([class*="col-"]) { + width: 100%; +} +.bootstrap-select.form-control.input-group-btn { + float: none; + z-index: auto; +} +.form-inline .bootstrap-select, +.form-inline .bootstrap-select.form-control:not([class*="col-"]) { + width: auto; +} +.bootstrap-select:not(.input-group-btn), +.bootstrap-select[class*="col-"] { + float: none; + display: inline-block; + margin-left: 0; +} +.bootstrap-select.dropdown-menu-right, +.bootstrap-select[class*="col-"].dropdown-menu-right, +.row .bootstrap-select[class*="col-"].dropdown-menu-right { + float: right; +} +.form-inline .bootstrap-select, +.form-horizontal .bootstrap-select, +.form-group .bootstrap-select { + margin-bottom: 0; +} +.form-group-lg .bootstrap-select.form-control, +.form-group-sm .bootstrap-select.form-control { + padding: 0; +} +.form-group-lg .bootstrap-select.form-control .dropdown-toggle, +.form-group-sm .bootstrap-select.form-control .dropdown-toggle { + height: 100%; + font-size: inherit; + line-height: inherit; + border-radius: inherit; +} +.bootstrap-select.form-control-sm .dropdown-toggle, +.bootstrap-select.form-control-lg .dropdown-toggle { + font-size: inherit; + line-height: inherit; + border-radius: inherit; +} +.bootstrap-select.form-control-sm .dropdown-toggle { + padding: 0.25rem 0.5rem; +} +.bootstrap-select.form-control-lg .dropdown-toggle { + padding: 0.5rem 1rem; +} +.form-inline .bootstrap-select .form-control { + width: 100%; +} +.bootstrap-select.disabled, +.bootstrap-select > .disabled { + cursor: not-allowed; +} +.bootstrap-select.disabled:focus, +.bootstrap-select > .disabled:focus { + outline: none !important; +} +.bootstrap-select.bs-container { + position: absolute; + top: 0; + left: 0; + height: 0 !important; + padding: 0 !important; +} +.bootstrap-select.bs-container .dropdown-menu { + z-index: 1060; +} +.bootstrap-select .dropdown-toggle .filter-option { + position: static; + top: 0; + left: 0; + float: left; + height: 100%; + width: 100%; + text-align: left; + overflow: hidden; + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; +} +.bs3.bootstrap-select .dropdown-toggle .filter-option { + padding-right: inherit; +} +.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option { + position: absolute; + padding-top: inherit; + padding-bottom: inherit; + padding-left: inherit; + float: none; +} +.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner { + padding-right: inherit; +} +.bootstrap-select .dropdown-toggle .filter-option-inner-inner { + overflow: hidden; +} +.bootstrap-select .dropdown-toggle .filter-expand { + width: 0 !important; + float: left; + opacity: 0 !important; + overflow: hidden; +} +.bootstrap-select .dropdown-toggle .caret { + position: absolute; + top: 50%; + right: 12px; + margin-top: -2px; + vertical-align: middle; +} +.input-group .bootstrap-select.form-control .dropdown-toggle { + border-radius: inherit; +} +.bootstrap-select[class*="col-"] .dropdown-toggle { + width: 100%; +} +.bootstrap-select .dropdown-menu { + min-width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bootstrap-select .dropdown-menu > .inner:focus { + outline: none !important; +} +.bootstrap-select .dropdown-menu.inner { + position: static; + float: none; + border: 0; + padding: 0; + margin: 0; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.bootstrap-select .dropdown-menu li { + position: relative; +} +.bootstrap-select .dropdown-menu li.active small { + color: rgba(255, 255, 255, 0.5) !important; +} +.bootstrap-select .dropdown-menu li.disabled a { + cursor: not-allowed; +} +.bootstrap-select .dropdown-menu li a { + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.bootstrap-select .dropdown-menu li a.opt { + position: relative; + padding-left: 2.25em; +} +.bootstrap-select .dropdown-menu li a span.check-mark { + display: none; +} +.bootstrap-select .dropdown-menu li a span.text { + display: inline-block; +} +.bootstrap-select .dropdown-menu li small { + padding-left: 0.5em; +} +.bootstrap-select .dropdown-menu .notify { + position: absolute; + bottom: 5px; + width: 96%; + margin: 0 2%; + min-height: 26px; + padding: 3px 5px; + background: #f5f5f5; + border: 1px solid #f2f3f3; + pointer-events: none; + opacity: 0.9; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bootstrap-select .dropdown-menu .notify.fadeOut { + -webkit-animation: 300ms linear 750ms forwards bs-notify-fadeOut; + -o-animation: 300ms linear 750ms forwards bs-notify-fadeOut; + animation: 300ms linear 750ms forwards bs-notify-fadeOut; +} +.bootstrap-select .no-results { + padding: 3px; + background: #f5f5f5; + margin: 0 5px; + white-space: nowrap; +} +.bootstrap-select.fit-width .dropdown-toggle .filter-option { + position: static; + display: inline; + padding: 0; +} +.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner, +.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner { + display: inline; +} +.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before { + content: '\00a0'; +} +.bootstrap-select.fit-width .dropdown-toggle .caret { + position: static; + top: auto; + margin-top: -1px; +} +.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark { + position: absolute; + display: inline-block; + right: 15px; + top: 10px; +} +.bootstrap-select.show-tick .dropdown-menu li a span.text { + margin-right: 34px; +} +.bootstrap-select .bs-ok-default:after { + content: ''; + display: block; + width: 0.5em; + height: 1em; + border-style: solid; + border-width: 0 0.13em 0.13em 0; + border-color: #4d5259; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle, +.bootstrap-select.show-menu-arrow.show > .dropdown-toggle { + z-index: 1061; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before { + content: ''; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid rgba(204, 204, 204, 0.2); + position: absolute; + bottom: -4px; + left: 9px; + display: none; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after { + content: ''; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid white; + position: absolute; + bottom: -4px; + left: 10px; + display: none; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before { + bottom: auto; + top: -4px; + border-top: 7px solid rgba(204, 204, 204, 0.2); + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after { + bottom: auto; + top: -4px; + border-top: 6px solid white; + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before { + right: 12px; + left: auto; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after { + right: 13px; + left: auto; +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:before, +.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:before, +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:after, +.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:after { + display: block; +} +.bs-searchbox, +.bs-actionsbox, +.bs-donebutton { + padding: 4px 8px; +} +.bs-actionsbox { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-actionsbox .btn-group button { + width: 50%; +} +.bs-donebutton { + float: left; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-donebutton .btn-group button { + width: 100%; +} +.bs-searchbox + .bs-actionsbox { + padding: 0 8px 4px; +} +.bs-searchbox .form-control { + margin-bottom: 0; + width: 100%; + float: none; +} +/*# sourceMappingURL=bootstrap-select.css.map */ \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-select/bootstrap-select.min.css b/assets/bootstrap/js/bootstrap-select/bootstrap-select.min.css new file mode 100644 index 0000000..3c4f44b --- /dev/null +++ b/assets/bootstrap/js/bootstrap-select/bootstrap-select.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap-select v1.13.17 (https://developer.snapappointments.com/bootstrap-select) + * + * Copyright 2012-2020 SnapAppointments, LLC + * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) + */@-webkit-keyframes bs-notify-fadeOut{0%{opacity:.9}100%{opacity:0}}@-o-keyframes bs-notify-fadeOut{0%{opacity:.9}100%{opacity:0}}@keyframes bs-notify-fadeOut{0%{opacity:.9}100%{opacity:0}}.bootstrap-select>select.bs-select-hidden,select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\0;vertical-align:middle}.bootstrap-select>.dropdown-toggle{position:relative;width:100%;text-align:right;white-space:nowrap;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.bootstrap-select>.dropdown-toggle:after{margin-top:-1px}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:hover{color:rgba(255,255,255,.5)}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none;z-index:0!important}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2!important}.bootstrap-select.is-invalid .dropdown-toggle,.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle,.was-validated .bootstrap-select select:invalid+.dropdown-toggle{border-color:#b94a48}.bootstrap-select.is-valid .dropdown-toggle,.was-validated .bootstrap-select select:valid+.dropdown-toggle{border-color:#28a745}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none;height:auto}:not(.input-group)>.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{float:none;z-index:auto}.form-inline .bootstrap-select,.form-inline .bootstrap-select.form-control:not([class*=col-]){width:auto}.bootstrap-select:not(.input-group-btn),.bootstrap-select[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.dropdown-menu-right,.bootstrap-select[class*=col-].dropdown-menu-right,.row .bootstrap-select[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select,.form-horizontal .bootstrap-select,.form-inline .bootstrap-select{margin-bottom:0}.form-group-lg .bootstrap-select.form-control,.form-group-sm .bootstrap-select.form-control{padding:0}.form-group-lg .bootstrap-select.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-lg .dropdown-toggle,.bootstrap-select.form-control-sm .dropdown-toggle{font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-sm .dropdown-toggle{padding:.25rem .5rem}.bootstrap-select.form-control-lg .dropdown-toggle{padding:.5rem 1rem}.form-inline .bootstrap-select .form-control{width:100%}.bootstrap-select.disabled,.bootstrap-select>.disabled{cursor:not-allowed}.bootstrap-select.disabled:focus,.bootstrap-select>.disabled:focus{outline:0!important}.bootstrap-select.bs-container{position:absolute;top:0;left:0;height:0!important;padding:0!important}.bootstrap-select.bs-container .dropdown-menu{z-index:1060}.bootstrap-select .dropdown-toggle .filter-option{position:static;top:0;left:0;float:left;height:100%;width:100%;text-align:left;overflow:hidden;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.bs3.bootstrap-select .dropdown-toggle .filter-option{padding-right:inherit}.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option{position:absolute;padding-top:inherit;padding-bottom:inherit;padding-left:inherit;float:none}.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner{padding-right:inherit}.bootstrap-select .dropdown-toggle .filter-option-inner-inner{overflow:hidden}.bootstrap-select .dropdown-toggle .filter-expand{width:0!important;float:left;opacity:0!important;overflow:hidden}.bootstrap-select .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.input-group .bootstrap-select.form-control .dropdown-toggle{border-radius:inherit}.bootstrap-select[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .dropdown-menu>.inner:focus{outline:0!important}.bootstrap-select .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select .dropdown-menu li{position:relative}.bootstrap-select .dropdown-menu li.active small{color:rgba(255,255,255,.5)!important}.bootstrap-select .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select .dropdown-menu li a span.check-mark{display:none}.bootstrap-select .dropdown-menu li a span.text{display:inline-block}.bootstrap-select .dropdown-menu li small{padding-left:.5em}.bootstrap-select .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #f2f3f3;pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .dropdown-menu .notify.fadeOut{-webkit-animation:.3s linear 750ms forwards bs-notify-fadeOut;-o-animation:.3s linear 750ms forwards bs-notify-fadeOut;animation:.3s linear 750ms forwards bs-notify-fadeOut}.bootstrap-select .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.fit-width .dropdown-toggle .filter-option{position:static;display:inline;padding:0}.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner{display:inline}.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before{content:'\00a0'}.bootstrap-select.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark{position:absolute;display:inline-block;right:15px;top:10px}.bootstrap-select.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select .bs-ok-default:after{content:'';display:block;width:.5em;height:1em;border-style:solid;border-width:0 .13em .13em 0;border-color:#4d5259;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before{bottom:auto;top:-4px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after{bottom:auto;top:-4px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:before,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none} \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-select/bootstrap-select.min.js b/assets/bootstrap/js/bootstrap-select/bootstrap-select.min.js new file mode 100644 index 0000000..2dba959 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-select/bootstrap-select.min.js @@ -0,0 +1,9 @@ +/*! + * Bootstrap-select v1.13.17 (https://developer.snapappointments.com/bootstrap-select) + * + * Copyright 2012-2020 SnapAppointments, LLC + * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) + */ + +!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){!function(P){"use strict";var d=["sanitize","whiteList","sanitizeFn"],r=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],e={"*":["class","dir","id","lang","role","tabindex","style",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},l=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,a=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function v(e,t){var i=e.nodeName.toLowerCase();if(-1!==P.inArray(i,t))return-1===P.inArray(i,r)||Boolean(e.nodeValue.match(l)||e.nodeValue.match(a));for(var s=P(t).filter(function(e,t){return t instanceof RegExp}),n=0,o=s.length;n]+>/g,"")),s&&(a=w(a)),a=a.toUpperCase(),o="contains"===i?0<=a.indexOf(t):a.startsWith(t)))break}return o}function N(e){return parseInt(e,10)||0}P.fn.triggerNative=function(e){var t,i=this[0];i.dispatchEvent?(u?t=new Event(e,{bubbles:!0}):(t=document.createEvent("Event")).initEvent(e,!0,!1),i.dispatchEvent(t)):i.fireEvent?((t=document.createEventObject()).eventType=e,i.fireEvent("on"+e,t)):this.trigger(e)};var f={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"},m=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,g=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\u1ab0-\\u1aff\\u1dc0-\\u1dff]","g");function b(e){return f[e]}function w(e){return(e=e.toString())&&e.replace(m,b).replace(g,"")}var I,x,y,$,S=(I={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},x="(?:"+Object.keys(I).join("|")+")",y=RegExp(x),$=RegExp(x,"g"),function(e){return e=null==e?"":""+e,y.test(e)?e.replace($,E):e});function E(e){return I[e]}var C={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"A",66:"B",67:"C",68:"D",69:"E",70:"F",71:"G",72:"H",73:"I",74:"J",75:"K",76:"L",77:"M",78:"N",79:"O",80:"P",81:"Q",82:"R",83:"S",84:"T",85:"U",86:"V",87:"W",88:"X",89:"Y",90:"Z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"},A=27,L=13,D=32,H=9,B=38,R=40,M={success:!1,major:"3"};try{M.full=(P.fn.dropdown.Constructor.VERSION||"").split(" ")[0].split("."),M.major=M.full[0],M.success=!0}catch(e){}var U=0,j=".bs.select",V={DISABLED:"disabled",DIVIDER:"divider",SHOW:"open",DROPUP:"dropup",MENU:"dropdown-menu",MENURIGHT:"dropdown-menu-right",MENULEFT:"dropdown-menu-left",BUTTONCLASS:"btn-default",POPOVERHEADER:"popover-title",ICONBASE:"mdi",TICKICON:"mdi-check"},F={MENU:"."+V.MENU},_={div:document.createElement("div"),span:document.createElement("span"),i:document.createElement("i"),subtext:document.createElement("small"),a:document.createElement("a"),li:document.createElement("li"),whitespace:document.createTextNode("\xa0"),fragment:document.createDocumentFragment()};_.noResults=_.li.cloneNode(!1),_.noResults.className="no-results",_.a.setAttribute("role","option"),_.a.className="dropdown-item",_.subtext.className="text-muted",_.text=_.span.cloneNode(!1),_.text.className="text",_.checkMark=_.span.cloneNode(!1);var G=new RegExp(B+"|"+R),q=new RegExp("^"+H+"$|"+A),K={li:function(e,t,i){var s=_.li.cloneNode(!1);return e&&(1===e.nodeType||11===e.nodeType?s.appendChild(e):s.innerHTML=e),void 0!==t&&""!==t&&(s.className=t),null!=i&&s.classList.add("optgroup-"+i),s},a:function(e,t,i){var s=_.a.cloneNode(!0);return e&&(11===e.nodeType?s.appendChild(e):s.insertAdjacentHTML("beforeend",e)),void 0!==t&&""!==t&&s.classList.add.apply(s.classList,t.split(/\s+/)),i&&s.setAttribute("style",i),s},text:function(e,t){var i,s,n=_.text.cloneNode(!1);if(e.content)n.innerHTML=e.content;else{if(n.textContent=e.text,e.icon){var o=_.whitespace.cloneNode(!1);(s=(!0===t?_.i:_.span).cloneNode(!1)).className=this.options.iconBase+" "+e.icon,_.fragment.appendChild(s),_.fragment.appendChild(o)}e.subtext&&((i=_.subtext.cloneNode(!1)).textContent=e.subtext,n.appendChild(i))}if(!0===t)for(;0'},maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1,windowPadding:0,virtualScroll:600,display:!1,sanitize:!0,sanitizeFn:null,whiteList:e},Y.prototype={constructor:Y,init:function(){var i=this,e=this.$element.attr("id");U++,this.selectId="bs-select-"+U,this.$element[0].classList.add("bs-select-hidden"),this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$element[0].classList.contains("show-tick")&&(this.options.showTick=!0),this.$newElement=this.createDropdown(),this.buildData(),this.$element.after(this.$newElement).prependTo(this.$newElement),this.$button=this.$newElement.children("button"),this.$menu=this.$newElement.children(F.MENU),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.$element[0].classList.remove("bs-select-hidden"),!0===this.options.dropdownAlignRight&&this.$menu[0].classList.add(V.MENURIGHT),void 0!==e&&this.$button.attr("data-id",e),this.checkDisabled(),this.clickListener(),this.options.liveSearch?(this.liveSearchListener(),this.focusedParent=this.$searchbox[0]):this.focusedParent=this.$menuInner[0],this.setStyle(),this.render(),this.setWidth(),this.options.container?this.selectPosition():this.$element.on("hide"+j,function(){if(i.isVirtual()){var e=i.$menuInner[0],t=e.firstChild.cloneNode(!1);e.replaceChild(t,e.firstChild),e.scrollTop=0}}),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(e){i.$element.trigger("hide"+j,e)},"hidden.bs.dropdown":function(e){i.$element.trigger("hidden"+j,e)},"show.bs.dropdown":function(e){i.$element.trigger("show"+j,e)},"shown.bs.dropdown":function(e){i.$element.trigger("shown"+j,e)}}),i.$element[0].hasAttribute("required")&&this.$element.on("invalid"+j,function(){i.$button[0].classList.add("bs-invalid"),i.$element.on("shown"+j+".invalid",function(){i.$element.val(i.$element.val()).off("shown"+j+".invalid")}).on("rendered"+j,function(){this.validity.valid&&i.$button[0].classList.remove("bs-invalid"),i.$element.off("rendered"+j)}),i.$button.on("blur"+j,function(){i.$element.trigger("focus").trigger("blur"),i.$button.off("blur"+j)})}),setTimeout(function(){i.buildList(),i.$element.trigger("loaded"+j)})},createDropdown:function(){var e=this.multiple||this.options.showTick?" show-tick":"",t=this.multiple?' aria-multiselectable="true"':"",i="",s=this.autofocus?" autofocus":"";M.major<4&&this.$element.parent().hasClass("input-group")&&(i=" input-group-btn");var n,o="",r="",l="",a="";return this.options.header&&(o='
'+this.options.header+"
"),this.options.liveSearch&&(r=''),this.multiple&&this.options.actionsBox&&(l='
"),this.multiple&&this.options.doneButton&&(a='
"),n='",P(n)},setPositionData:function(){this.selectpicker.view.canHighlight=[];for(var e=this.selectpicker.view.size=0;e=this.options.virtualScroll||!0===this.options.virtualScroll},createView:function(N,e,t){var A,L,D=this,i=0,H=[];if(this.selectpicker.isSearching=N,this.selectpicker.current=N?this.selectpicker.search:this.selectpicker.main,this.setPositionData(),e)if(t)i=this.$menuInner[0].scrollTop;else if(!D.multiple){var s=D.$element[0],n=(s.options[s.selectedIndex]||{}).liIndex;if("number"==typeof n&&!1!==D.options.size){var o=D.selectpicker.main.data[n],r=o&&o.position;r&&(i=r-(D.sizeInfo.menuInnerHeight+D.sizeInfo.liHeight)/2)}}function l(e,t){var i,s,n,o,r,l,a,c,d=D.selectpicker.current.elements.length,h=[],p=!0,u=D.isVirtual();D.selectpicker.view.scrollTop=e,i=Math.ceil(D.sizeInfo.menuInnerHeight/D.sizeInfo.liHeight*1.5),s=Math.round(d/i)||1;for(var f=0;fd-1?0:D.selectpicker.current.data[d-1].position-D.selectpicker.current.data[D.selectpicker.view.position1-1].position,b.firstChild.style.marginTop=v+"px",b.firstChild.style.marginBottom=g+"px"):(b.firstChild.style.marginTop=0,b.firstChild.style.marginBottom=0),b.firstChild.appendChild(w),!0===u&&D.sizeInfo.hasScrollBar){var C=b.firstChild.offsetWidth;if(t&&CD.sizeInfo.selectWidth)b.firstChild.style.minWidth=D.sizeInfo.menuInnerInnerWidth+"px";else if(C>D.sizeInfo.menuInnerInnerWidth){D.$menu[0].style.minWidth=0;var O=b.firstChild.offsetWidth;O>D.sizeInfo.menuInnerInnerWidth&&(D.sizeInfo.menuInnerInnerWidth=O,b.firstChild.style.minWidth=D.sizeInfo.menuInnerInnerWidth+"px"),D.$menu[0].style.minWidth=""}}}if(D.prevActiveIndex=D.activeIndex,D.options.liveSearch){if(N&&t){var z,T=0;D.selectpicker.view.canHighlight[T]||(T=1+D.selectpicker.view.canHighlight.slice(1).indexOf(!0)),z=D.selectpicker.view.visibleElements[T],D.defocusItem(D.selectpicker.view.currentActive),D.activeIndex=(D.selectpicker.current.data[T]||{}).index,D.focusItem(z)}}else D.$menuInner.trigger("focus")}l(i,!0),this.$menuInner.off("scroll.createView").on("scroll.createView",function(e,t){D.noScroll||l(this.scrollTop,t),D.noScroll=!1}),P(window).off("resize"+j+"."+this.selectId+".createView").on("resize"+j+"."+this.selectId+".createView",function(){D.$newElement.hasClass(V.SHOW)&&l(D.$menuInner[0].scrollTop)})},focusItem:function(e,t,i){if(e){t=t||this.selectpicker.main.data[this.activeIndex];var s=e.firstChild;s&&(s.setAttribute("aria-setsize",this.selectpicker.view.size),s.setAttribute("aria-posinset",t.posinset),!0!==i&&(this.focusedParent.setAttribute("aria-activedescendant",s.id),e.classList.add("active"),s.classList.add("active")))}},defocusItem:function(e){e&&(e.classList.remove("active"),e.firstChild&&e.firstChild.classList.remove("active"))},setPlaceholder:function(){var e=this,t=!1;if(this.options.title&&!this.multiple){this.selectpicker.view.titleOption||(this.selectpicker.view.titleOption=document.createElement("option")),t=!0;var i=this.$element[0],s=!1,n=!this.selectpicker.view.titleOption.parentNode,o=i.selectedIndex,r=i.options[o],l=window.performance&&window.performance.getEntriesByType("navigation");n&&(this.selectpicker.view.titleOption.className="bs-title-option",this.selectpicker.view.titleOption.value="",s=!r||0===o&&!1===r.defaultSelected&&void 0===this.$element.data("selected")),!n&&0===this.selectpicker.view.titleOption.index||i.insertBefore(this.selectpicker.view.titleOption,i.firstChild),s&&l.length&&"back_forward"!==l[0].type?i.selectedIndex=0:"complete"!==document.readyState&&window.addEventListener("pageshow",function(){e.selectpicker.view.displayedValue!==i.value&&e.render()})}return t},buildData:function(){var p=':not([hidden]):not([data-hidden="true"])',u=[],f=0,m=this.setPlaceholder()?1:0;this.options.hideDisabled&&(p+=":not(:disabled)");var e=this.$element[0].querySelectorAll("select > *"+p);function v(e){var t=u[u.length-1];t&&"divider"===t.type&&(t.optID||e.optID)||((e=e||{}).type="divider",u.push(e))}function g(e,t){if((t=t||{}).divider="true"===e.getAttribute("data-divider"),t.divider)v({optID:t.optID});else{var i=u.length,s=e.style.cssText,n=s?S(s):"",o=(e.className||"")+(t.optgroupClass||"");t.optID&&(o="opt "+o),t.optionClass=o.trim(),t.inlineStyle=n,t.text=e.textContent,t.content=e.getAttribute("data-content"),t.tokens=e.getAttribute("data-tokens"),t.subtext=e.getAttribute("data-subtext"),t.icon=e.getAttribute("data-icon"),e.liIndex=i,t.display=t.content||t.text,t.type="option",t.index=i,t.option=e,t.selected=!!e.selected,t.disabled=t.disabled||!!e.disabled,u.push(t)}}function t(e,t){var i=t[e],s=!(e-1 li")},render:function(){var e,t=this,i=this.$element[0],s=this.setPlaceholder()&&0===i.selectedIndex,n=O(i,this.options.hideDisabled),o=n.length,r=this.$button[0],l=r.querySelector(".filter-option-inner-inner"),a=document.createTextNode(this.options.multipleSeparator),c=_.fragment.cloneNode(!1),d=!1;if(r.classList.toggle("bs-placeholder",t.multiple?!o:!z(i,n)),t.multiple||1!==n.length||(t.selectpicker.view.displayedValue=z(i,n)),"static"===this.options.selectedTextFormat)c=K.text.call(this,{text:this.options.title},!0);else if(!1===(this.multiple&&-1!==this.options.selectedTextFormat.indexOf("count")&&1")).length&&o>e[1]||1===e.length&&2<=o))){if(!s){for(var h=0;h option"+m+", optgroup"+m+" option"+m).length,g="function"==typeof this.options.countSelectedText?this.options.countSelectedText(o,v):this.options.countSelectedText;c=K.text.call(this,{text:g.replace("{0}",o.toString()).replace("{1}",v.toString())},!0)}if(null==this.options.title&&(this.options.title=this.$element.attr("title")),c.childNodes.length||(c=K.text.call(this,{text:void 0!==this.options.title?this.options.title:this.options.noneSelectedText},!0)),r.title=c.textContent.replace(/<[^>]*>?/g,"").trim(),this.options.sanitize&&d&&W([c],t.options.whiteList,t.options.sanitizeFn),l.innerHTML="",l.appendChild(c),M.major<4&&this.$newElement[0].classList.contains("bs3-has-addon")){var b=r.querySelector(".filter-expand"),w=l.cloneNode(!0);w.className="filter-expand",b?r.replaceChild(w,b):r.appendChild(w)}this.$element.trigger("rendered"+j)},setStyle:function(e,t){var i,s=this.$button[0],n=this.$newElement[0],o=this.options.style.trim();this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,"")),M.major<4&&(n.classList.add("bs3"),n.parentNode.classList&&n.parentNode.classList.contains("input-group")&&(n.previousElementSibling||n.nextElementSibling)&&(n.previousElementSibling||n.nextElementSibling).classList.contains("input-group-addon")&&n.classList.add("bs3-has-addon")),i=e?e.trim():o,"add"==t?i&&s.classList.add.apply(s.classList,i.split(" ")):"remove"==t?i&&s.classList.remove.apply(s.classList,i.split(" ")):(o&&s.classList.remove.apply(s.classList,o.split(" ")),i&&s.classList.add.apply(s.classList,i.split(" ")))},liHeight:function(e){if(e||!1!==this.options.size&&!Object.keys(this.sizeInfo).length){var t,i=_.div.cloneNode(!1),s=_.div.cloneNode(!1),n=_.div.cloneNode(!1),o=document.createElement("ul"),r=_.li.cloneNode(!1),l=_.li.cloneNode(!1),a=_.a.cloneNode(!1),c=_.span.cloneNode(!1),d=this.options.header&&0this.sizeInfo.menuExtras.vert&&l+this.sizeInfo.menuExtras.vert+50>this.sizeInfo.selectOffsetBot,!0===this.selectpicker.isSearching&&(a=this.selectpicker.dropup),this.$newElement.toggleClass(V.DROPUP,a),this.selectpicker.dropup=a),"auto"===this.options.size)n=3this.options.size){for(var b=0;bthis.sizeInfo.menuInnerHeight&&(this.sizeInfo.hasScrollBar=!0,this.sizeInfo.totalMenuWidth=this.sizeInfo.menuWidth+this.sizeInfo.scrollBarWidth),"auto"===this.options.dropdownAlignRight&&this.$menu.toggleClass(V.MENURIGHT,this.sizeInfo.selectOffsetLeft>this.sizeInfo.selectOffsetRight&&this.sizeInfo.selectOffsetRightthis.options.size&&i.off("resize"+j+"."+this.selectId+".setMenuSize scroll"+j+"."+this.selectId+".setMenuSize")}this.createView(!1,!0,e)},setWidth:function(){var i=this;"auto"===this.options.width?requestAnimationFrame(function(){i.$menu.css("min-width","0"),i.$element.on("loaded"+j,function(){i.liHeight(),i.setMenuSize();var e=i.$newElement.clone().appendTo("body"),t=e.css("width","auto").children("button").outerWidth();e.remove(),i.sizeInfo.selectWidth=Math.max(i.sizeInfo.totalMenuWidth,t),i.$newElement.css("width",i.sizeInfo.selectWidth+"px")})}):"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width","")),this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement[0].classList.remove("fit-width")},selectPosition:function(){this.$bsContainer=P('
');function e(e){var t={},i=r.options.display||!!P.fn.dropdown.Constructor.Default&&P.fn.dropdown.Constructor.Default.display;r.$bsContainer.addClass(e.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass(V.DROPUP,e.hasClass(V.DROPUP)),s=e.offset(),l.is("body")?n={top:0,left:0}:((n=l.offset()).top+=parseInt(l.css("borderTopWidth"))-l.scrollTop(),n.left+=parseInt(l.css("borderLeftWidth"))-l.scrollLeft()),o=e.hasClass(V.DROPUP)?0:e[0].offsetHeight,(M.major<4||"static"===i)&&(t.top=s.top-n.top+o,t.left=s.left-n.left),t.width=e[0].offsetWidth,r.$bsContainer.css(t)}var s,n,o,r=this,l=P(this.options.container);this.$button.on("click.bs.dropdown.data-api",function(){r.isDisabled()||(e(r.$newElement),r.$bsContainer.appendTo(r.options.container).toggleClass(V.SHOW,!r.$button.hasClass(V.SHOW)).append(r.$menu))}),P(window).off("resize"+j+"."+this.selectId+" scroll"+j+"."+this.selectId).on("resize"+j+"."+this.selectId+" scroll"+j+"."+this.selectId,function(){r.$newElement.hasClass(V.SHOW)&&e(r.$newElement)}),this.$element.on("hide"+j,function(){r.$menu.data("height",r.$menu.height()),r.$bsContainer.detach()})},setOptionStatus:function(e){var t=this;if(t.noScroll=!1,t.selectpicker.view.visibleElements&&t.selectpicker.view.visibleElements.length)for(var i=0;i
');y[2]&&($=$.replace("{var}",y[2][1"+$+"")),d=!1,C.$element.trigger("maxReached"+j)),g&&w&&(E.append(P("
"+S+"
")),d=!1,C.$element.trigger("maxReachedGrp"+j)),setTimeout(function(){C.setSelected(r,!1)},10),E[0].classList.add("fadeOut"),setTimeout(function(){E.remove()},1050)}}}else c&&(c.selected=!1),h.selected=!0,C.setSelected(r,!0);!C.multiple||C.multiple&&1===C.options.maxOptions?C.$button.trigger("focus"):C.options.liveSearch&&C.$searchbox.trigger("focus"),d&&(!C.multiple&&a===s.selectedIndex||(T=[h.index,p.prop("selected"),l],C.$element.triggerNative("change")))}}),this.$menu.on("click","li."+V.DISABLED+" a, ."+V.POPOVERHEADER+", ."+V.POPOVERHEADER+" :not(.close)",function(e){e.currentTarget==this&&(e.preventDefault(),e.stopPropagation(),C.options.liveSearch&&!P(e.target).hasClass("close")?C.$searchbox.trigger("focus"):C.$button.trigger("focus"))}),this.$menuInner.on("click",".divider, .dropdown-header",function(e){e.preventDefault(),e.stopPropagation(),C.options.liveSearch?C.$searchbox.trigger("focus"):C.$button.trigger("focus")}),this.$menu.on("click","."+V.POPOVERHEADER+" .close",function(){C.$button.trigger("click")}),this.$searchbox.on("click",function(e){e.stopPropagation()}),this.$menu.on("click",".actions-btn",function(e){C.options.liveSearch?C.$searchbox.trigger("focus"):C.$button.trigger("focus"),e.preventDefault(),e.stopPropagation(),P(this).hasClass("bs-select-all")?C.selectAll():C.deselectAll()}),this.$button.on("focus"+j,function(e){var t=C.$element[0].getAttribute("tabindex");void 0!==t&&e.originalEvent&&e.originalEvent.isTrusted&&(this.setAttribute("tabindex",t),C.$element[0].setAttribute("tabindex",-1),C.selectpicker.view.tabindex=t)}).on("blur"+j,function(e){void 0!==C.selectpicker.view.tabindex&&e.originalEvent&&e.originalEvent.isTrusted&&(C.$element[0].setAttribute("tabindex",C.selectpicker.view.tabindex),this.setAttribute("tabindex",-1),C.selectpicker.view.tabindex=void 0)}),this.$element.on("change"+j,function(){C.render(),C.$element.trigger("changed"+j,T),T=null}).on("focus"+j,function(){C.options.mobile||C.$button.trigger("focus")})},liveSearchListener:function(){var u=this;this.$button.on("click.bs.dropdown.data-api",function(){u.$searchbox.val()&&u.$searchbox.val("")}),this.$searchbox.on("click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api",function(e){e.stopPropagation()}),this.$searchbox.on("input propertychange",function(){var e=u.$searchbox.val();if(u.selectpicker.search.elements=[],u.selectpicker.search.data=[],e){var t=[],i=e.toUpperCase(),s={},n=[],o=u._searchStyle(),r=u.options.liveSearchNormalize;r&&(i=w(i));for(var l=0;l=a.selectpicker.view.canHighlight.length&&(t=0),a.selectpicker.view.canHighlight[t+f]||(t=t+1+a.selectpicker.view.canHighlight.slice(t+f+1).indexOf(!0))),e.preventDefault();var m=f+t;e.which===B?0===f&&t===c.length-1?(a.$menuInner[0].scrollTop=a.$menuInner[0].scrollHeight,m=a.selectpicker.current.elements.length-1):d=(o=(n=a.selectpicker.current.data[m]).position-n.height)u+a.sizeInfo.menuInnerHeight),s=a.selectpicker.main.elements[v],a.activeIndex=b[x],a.focusItem(s),s&&s.firstChild.focus(),d&&(a.$menuInner[0].scrollTop=o),r.trigger("focus")}}i&&(e.which===D&&!a.selectpicker.keydown.keyHistory||e.which===L||e.which===H&&a.options.selectOnTab)&&(e.which!==D&&e.preventDefault(),a.options.liveSearch&&e.which===D||(a.$menuInner.find(".active a").trigger("click",!0),r.trigger("focus"),a.options.liveSearch||(e.preventDefault(),P(document).data("spaceSelect",!0))))}},mobile:function(){this.options.mobile=!0,this.$element[0].classList.add("mobile-device")},refresh:function(){var e=P.extend({},this.options,this.$element.data());this.options=e,this.checkDisabled(),this.buildData(),this.setStyle(),this.render(),this.buildList(),this.setWidth(),this.setSize(!0),this.$element.trigger("refreshed"+j)},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()},destroy:function(){this.$newElement.before(this.$element).remove(),this.$bsContainer?this.$bsContainer.remove():this.$menu.remove(),this.$element.off(j).removeData("selectpicker").removeClass("bs-select-hidden selectpicker"),P(window).off(j+"."+this.selectId)}};var J=P.fn.selectpicker;function Q(){if(P.fn.dropdown)return(P.fn.dropdown.Constructor._dataApiKeydownHandler||P.fn.dropdown.Constructor.prototype.keydown).apply(this,arguments)}P.fn.selectpicker=Z,P.fn.selectpicker.Constructor=Y,P.fn.selectpicker.noConflict=function(){return P.fn.selectpicker=J,this},P(document).off("keydown.bs.dropdown.data-api").on("keydown.bs.dropdown.data-api",':not(.bootstrap-select) > [data-toggle="dropdown"]',Q).on("keydown.bs.dropdown.data-api",":not(.bootstrap-select) > .dropdown-menu",Q).on("keydown"+j,'.bootstrap-select [data-toggle="dropdown"], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input',Y.prototype.keydown).on("focusin.modal",'.bootstrap-select [data-toggle="dropdown"], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input',function(e){e.stopPropagation()}),P(window).on("load"+j+".data-api",function(){P(".selectpicker").each(function(){var e=P(this);Z.call(e,e.data())})})}(e)}); +//# sourceMappingURL=bootstrap-select.min.js.map \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-select/i18n/defaults-zh_CN.min.js b/assets/bootstrap/js/bootstrap-select/i18n/defaults-zh_CN.min.js new file mode 100644 index 0000000..40eab33 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-select/i18n/defaults-zh_CN.min.js @@ -0,0 +1,8 @@ +/*! + * Bootstrap-select v1.13.17 (https://developer.snapappointments.com/bootstrap-select) + * + * Copyright 2012-2020 SnapAppointments, LLC + * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) + */ + +!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"\u6ca1\u6709\u9009\u4e2d\u4efb\u4f55\u9879",noneResultsText:"\u6ca1\u6709\u627e\u5230\u5339\u914d\u9879",countSelectedText:"\u9009\u4e2d{1}\u4e2d\u7684{0}\u9879",maxOptionsText:["\u8d85\u51fa\u9650\u5236 (\u6700\u591a\u9009\u62e9{n}\u9879)","\u7ec4\u9009\u62e9\u8d85\u51fa\u9650\u5236(\u6700\u591a\u9009\u62e9{n}\u7ec4)"],multipleSeparator:", ",selectAllText:"\u5168\u9009",deselectAllText:"\u53d6\u6d88\u5168\u9009"}}); \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-select/i18n/defaults-zh_TW.min.js b/assets/bootstrap/js/bootstrap-select/i18n/defaults-zh_TW.min.js new file mode 100644 index 0000000..692ca47 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-select/i18n/defaults-zh_TW.min.js @@ -0,0 +1,8 @@ +/*! + * Bootstrap-select v1.13.17 (https://developer.snapappointments.com/bootstrap-select) + * + * Copyright 2012-2020 SnapAppointments, LLC + * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) + */ + +!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"\u6c92\u6709\u9078\u53d6\u4efb\u4f55\u9805\u76ee",noneResultsText:"\u6c92\u6709\u627e\u5230\u7b26\u5408\u7684\u7d50\u679c",countSelectedText:"\u5df2\u7d93\u9078\u53d6{0}\u500b\u9805\u76ee",maxOptionsText:["\u8d85\u904e\u9650\u5236 (\u6700\u591a\u9078\u64c7{n}\u9805)","\u8d85\u904e\u9650\u5236(\u6700\u591a\u9078\u64c7{n}\u7d44)"],selectAllText:"\u9078\u53d6\u5168\u90e8",deselectAllText:"\u5168\u90e8\u53d6\u6d88",multipleSeparator:", "}}); \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-table/bootstrap-table.css b/assets/bootstrap/js/bootstrap-table/bootstrap-table.css new file mode 100644 index 0000000..7ab327a --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/bootstrap-table.css @@ -0,0 +1,361 @@ +/** + * @author zhixin wen + * version: 1.16.0 + * https://github.com/wenzhixin/bootstrap-table/ + */ +.bootstrap-table .fixed-table-toolbar::after { + content: ""; + display: block; + clear: both; +} + +.bootstrap-table .fixed-table-toolbar .bs-bars, +.bootstrap-table .fixed-table-toolbar .search, +.bootstrap-table .fixed-table-toolbar .columns { + position: relative; + margin-top: 10px; + margin-bottom: 10px; +} + +.bootstrap-table .fixed-table-toolbar .columns .btn-group > .btn-group { + display: inline-block; + margin-left: -1px !important; +} + +.bootstrap-table .fixed-table-toolbar .columns .btn-group > .btn-group > .btn { + border-radius: 0; +} + +.bootstrap-table .fixed-table-toolbar .columns .btn-group > .btn-group:first-child > .btn { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.bootstrap-table .fixed-table-toolbar .columns .btn-group > .btn-group:last-child > .btn { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.bootstrap-table .fixed-table-toolbar .columns .dropdown-menu { + text-align: left; + max-height: 300px; + overflow: auto; + -ms-overflow-style: scrollbar; + z-index: 1001; +} + +.bootstrap-table .fixed-table-toolbar .columns label { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; +} + +.bootstrap-table .fixed-table-toolbar .columns-left { + margin-right: 5px; +} + +.bootstrap-table .fixed-table-toolbar .columns-right { + margin-left: 5px; +} + +.bootstrap-table .fixed-table-toolbar .pull-right .dropdown-menu { + right: 0; + left: auto; +} + +.bootstrap-table .fixed-table-container { + position: relative; + clear: both; +} + +.bootstrap-table .fixed-table-container .table { + width: 100%; + margin-bottom: 0 !important; +} + +.bootstrap-table .fixed-table-container .table th, +.bootstrap-table .fixed-table-container .table td { + vertical-align: middle; + box-sizing: border-box; +} + +.bootstrap-table .fixed-table-container .table thead th { + vertical-align: bottom; + padding: 0; + margin: 0; +} + +.bootstrap-table .fixed-table-container .table thead th:focus { + outline: 0 solid transparent; +} + +.bootstrap-table .fixed-table-container .table thead th.detail { + width: 30px; +} + +.bootstrap-table .fixed-table-container .table thead th .th-inner { + padding: 0.75rem; + vertical-align: bottom; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.bootstrap-table .fixed-table-container .table thead th .sortable { + cursor: pointer; + background-position: right; + background-repeat: no-repeat; + padding-right: 30px !important; +} + +.bootstrap-table .fixed-table-container .table thead th .both { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC"); +} + +.bootstrap-table .fixed-table-container .table thead th .asc { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=="); +} + +.bootstrap-table .fixed-table-container .table thead th .desc { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII= "); +} + +.bootstrap-table .fixed-table-container .table tbody tr.selected td { + background-color: rgba(0, 0, 0, 0.035); +} + +.bootstrap-table .fixed-table-container .table tbody tr.no-records-found td { + text-align: center; +} + +.bootstrap-table .fixed-table-container .table tbody tr .card-view { + display: flex; +} + +.bootstrap-table .fixed-table-container .table tbody tr .card-view .card-view-title { + font-weight: bold; + display: inline-block; + min-width: 30%; + text-align: left !important; +} + +.bootstrap-table .fixed-table-container .table .bs-checkbox { + text-align: center; +} + +.bootstrap-table .fixed-table-container .table .bs-checkbox label { + margin-bottom: 0; +} + +.bootstrap-table .fixed-table-container .table .bs-checkbox label input[type="radio"], +.bootstrap-table .fixed-table-container .table .bs-checkbox label input[type="checkbox"] { + margin: 0 auto !important; +} + +.bootstrap-table .fixed-table-container .table.table-sm .th-inner { + padding: 0.3rem; +} + +.bootstrap-table .fixed-table-container.fixed-height:not(.has-footer) { + border-bottom: 1px solid #dee2e6; +} + +.bootstrap-table .fixed-table-container.fixed-height.has-card-view { + border-top: 1px solid #dee2e6; + border-bottom: 1px solid #dee2e6; +} + +.bootstrap-table .fixed-table-container.fixed-height .fixed-table-border { + border-left: 1px solid #dee2e6; + border-right: 1px solid #dee2e6; +} + +.bootstrap-table .fixed-table-container.fixed-height .table thead th { + border-bottom: 1px solid #dee2e6; +} + +.bootstrap-table .fixed-table-container.fixed-height .table-dark thead th { + border-bottom: 1px solid #32383e; +} + +.bootstrap-table .fixed-table-container .fixed-table-header { + overflow: hidden; +} + +.bootstrap-table .fixed-table-container .fixed-table-body { + overflow-x: auto; + overflow-y: auto; + height: 100%; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading { + align-items: center; + background: #fff; + display: none; + justify-content: center; + position: absolute; + bottom: 0; + width: 100%; + z-index: 1000; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap { + align-items: baseline; + display: flex; + justify-content: center; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .loading-text { + font-size: 2rem; + margin-right: 6px; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap { + align-items: center; + display: flex; + justify-content: center; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-dot, +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::after, +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::before { + content: ""; + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-name: LOADING; + background: #212529; + border-radius: 50%; + display: block; + height: 5px; + margin: 0 4px; + opacity: 0; + width: 5px; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-dot { + animation-delay: 0.3s; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::after { + animation-delay: 0.6s; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark { + background: #212529; +} + +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-dot, +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-wrap::after, +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-wrap::before { + background: #fff; +} + +.bootstrap-table .fixed-table-container .fixed-table-footer { + overflow: hidden; +} + +.bootstrap-table .fixed-table-pagination::after { + content: ""; + display: block; + clear: both; +} + +.bootstrap-table .fixed-table-pagination > .pagination-detail, +.bootstrap-table .fixed-table-pagination > .pagination { + margin-top: 10px; + margin-bottom: 10px; +} + +.bootstrap-table .fixed-table-pagination > .pagination-detail .pagination-info { + line-height: 34px; + margin-right: 5px; +} + +.bootstrap-table .fixed-table-pagination > .pagination-detail .page-list { + display: inline-block; +} + +.bootstrap-table .fixed-table-pagination > .pagination-detail .page-list .btn-group { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.bootstrap-table .fixed-table-pagination > .pagination-detail .page-list .btn-group .dropdown-menu { + margin-bottom: 0; +} + +.bootstrap-table .fixed-table-pagination > .pagination ul.pagination { + margin: 0; +} + +.bootstrap-table .fixed-table-pagination > .pagination ul.pagination a { + /*padding: 6px 12px; + line-height: 1.428571429;*/ +} + +.bootstrap-table .fixed-table-pagination > .pagination ul.pagination li.page-intermediate a { + color: #c8c8c8; +} + +.bootstrap-table .fixed-table-pagination > .pagination ul.pagination li.page-intermediate a::before { + content: '\2B05'; +} + +.bootstrap-table .fixed-table-pagination > .pagination ul.pagination li.page-intermediate a::after { + content: '\27A1'; +} + +.bootstrap-table .fixed-table-pagination > .pagination ul.pagination li.disabled a { + pointer-events: none; + cursor: default; +} + +.bootstrap-table.fullscreen { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + width: 100% !important; + background: #fff; + height: calc(100vh); + overflow-y: scroll; +} + +.dropdown-item.dropdown-item-marker { + padding: .25rem 1.5rem; +} +.dropdown-item.dropdown-item-marker:focus, +.dropdown-item.dropdown-item:active { + background-color: #fff; + color: #4d5259; +} + +/* calculate scrollbar width */ +div.fixed-table-scroll-inner { + width: 100%; + height: 200px; +} + +div.fixed-table-scroll-outer { + top: 0; + left: 0; + visibility: hidden; + width: 200px; + height: 150px; + overflow: hidden; +} + +@keyframes LOADING { + 0% { + opacity: 0; + } + 50% { + opacity: 1; + } + to { + opacity: 0; + } +} \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-table/bootstrap-table.js b/assets/bootstrap/js/bootstrap-table/bootstrap-table.js new file mode 100644 index 0000000..f5d807a --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/bootstrap-table.js @@ -0,0 +1,7217 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) : + typeof define === 'function' && define.amd ? define(['jquery'], factory) : + (global = global || self, global.BootstrapTable = factory(global.jQuery)); +}(this, (function ($) { 'use strict'; + + $ = $ && $.hasOwnProperty('default') ? $['default'] : $; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var check = function (it) { + return it && it.Math == Math && it; + }; + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global_1 = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || + // eslint-disable-next-line no-new-func + Function('return this')(); + + var fails = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + + // Thank's IE8 for his funny defineProperty + var descriptors = !fails(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; + }); + + var nativePropertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // Nashorn ~ JDK8 bug + var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + + // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable + var f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : nativePropertyIsEnumerable; + + var objectPropertyIsEnumerable = { + f: f + }; + + var createPropertyDescriptor = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + var toString = {}.toString; + + var classofRaw = function (it) { + return toString.call(it).slice(8, -1); + }; + + var split = ''.split; + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + var indexedObject = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins + return !Object('z').propertyIsEnumerable(0); + }) ? function (it) { + return classofRaw(it) == 'String' ? split.call(it, '') : Object(it); + } : Object; + + // `RequireObjectCoercible` abstract operation + // https://tc39.github.io/ecma262/#sec-requireobjectcoercible + var requireObjectCoercible = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; + }; + + // toObject with fallback for non-array-like ES3 strings + + + + var toIndexedObject = function (it) { + return indexedObject(requireObjectCoercible(it)); + }; + + var isObject = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + + // `ToPrimitive` abstract operation + // https://tc39.github.io/ecma262/#sec-toprimitive + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + var toPrimitive = function (input, PREFERRED_STRING) { + if (!isObject(input)) return input; + var fn, val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + throw TypeError("Can't convert object to primitive value"); + }; + + var hasOwnProperty = {}.hasOwnProperty; + + var has = function (it, key) { + return hasOwnProperty.call(it, key); + }; + + var document$1 = global_1.document; + // typeof document.createElement is 'object' in old IE + var EXISTS = isObject(document$1) && isObject(document$1.createElement); + + var documentCreateElement = function (it) { + return EXISTS ? document$1.createElement(it) : {}; + }; + + // Thank's IE8 for his funny defineProperty + var ie8DomDefine = !descriptors && !fails(function () { + return Object.defineProperty(documentCreateElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; + }); + + var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor + var f$1 = descriptors ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (ie8DomDefine) try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (has(O, P)) return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O, P), O[P]); + }; + + var objectGetOwnPropertyDescriptor = { + f: f$1 + }; + + var anObject = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + ' is not an object'); + } return it; + }; + + var nativeDefineProperty = Object.defineProperty; + + // `Object.defineProperty` method + // https://tc39.github.io/ecma262/#sec-object.defineproperty + var f$2 = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (ie8DomDefine) try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; + }; + + var objectDefineProperty = { + f: f$2 + }; + + var createNonEnumerableProperty = descriptors ? function (object, key, value) { + return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + var setGlobal = function (key, value) { + try { + createNonEnumerableProperty(global_1, key, value); + } catch (error) { + global_1[key] = value; + } return value; + }; + + var SHARED = '__core-js_shared__'; + var store = global_1[SHARED] || setGlobal(SHARED, {}); + + var sharedStore = store; + + var functionToString = Function.toString; + + // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper + if (typeof sharedStore.inspectSource != 'function') { + sharedStore.inspectSource = function (it) { + return functionToString.call(it); + }; + } + + var inspectSource = sharedStore.inspectSource; + + var WeakMap = global_1.WeakMap; + + var nativeWeakMap = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); + + var shared = createCommonjsModule(function (module) { + (module.exports = function (key, value) { + return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {}); + })('versions', []).push({ + version: '3.6.0', + mode: 'global', + copyright: '© 2019 Denis Pushkarev (zloirock.ru)' + }); + }); + + var id = 0; + var postfix = Math.random(); + + var uid = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); + }; + + var keys = shared('keys'); + + var sharedKey = function (key) { + return keys[key] || (keys[key] = uid(key)); + }; + + var hiddenKeys = {}; + + var WeakMap$1 = global_1.WeakMap; + var set, get, has$1; + + var enforce = function (it) { + return has$1(it) ? get(it) : set(it, {}); + }; + + var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; + }; + + if (nativeWeakMap) { + var store$1 = new WeakMap$1(); + var wmget = store$1.get; + var wmhas = store$1.has; + var wmset = store$1.set; + set = function (it, metadata) { + wmset.call(store$1, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store$1, it) || {}; + }; + has$1 = function (it) { + return wmhas.call(store$1, it); + }; + } else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return has(it, STATE) ? it[STATE] : {}; + }; + has$1 = function (it) { + return has(it, STATE); + }; + } + + var internalState = { + set: set, + get: get, + has: has$1, + enforce: enforce, + getterFor: getterFor + }; + + var redefine = createCommonjsModule(function (module) { + var getInternalState = internalState.get; + var enforceInternalState = internalState.enforce; + var TEMPLATE = String(String).split('String'); + + (module.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + if (typeof value == 'function') { + if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); + enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); + } + if (O === global_1) { + if (simple) O[key] = value; + else setGlobal(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + if (simple) O[key] = value; + else createNonEnumerableProperty(O, key, value); + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, 'toString', function toString() { + return typeof this == 'function' && getInternalState(this).source || inspectSource(this); + }); + }); + + var path = global_1; + + var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; + }; + + var getBuiltIn = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global_1[namespace]) + : path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method]; + }; + + var ceil = Math.ceil; + var floor = Math.floor; + + // `ToInteger` abstract operation + // https://tc39.github.io/ecma262/#sec-tointeger + var toInteger = function (argument) { + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); + }; + + var min = Math.min; + + // `ToLength` abstract operation + // https://tc39.github.io/ecma262/#sec-tolength + var toLength = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 + }; + + var max = Math.max; + var min$1 = Math.min; + + // Helper for a popular repeating case of the spec: + // Let integer be ? ToInteger(index). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + var toAbsoluteIndex = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min$1(integer, length); + }; + + // `Array.prototype.{ indexOf, includes }` methods implementation + var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; + }; + + var arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + + var indexOf = arrayIncludes.indexOf; + + + var objectKeysInternal = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + return result; + }; + + // IE8- don't enum bug keys + var enumBugKeys = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' + ]; + + var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype'); + + // `Object.getOwnPropertyNames` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertynames + var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return objectKeysInternal(O, hiddenKeys$1); + }; + + var objectGetOwnPropertyNames = { + f: f$3 + }; + + var f$4 = Object.getOwnPropertySymbols; + + var objectGetOwnPropertySymbols = { + f: f$4 + }; + + // all object keys, includes non-enumerable and symbols + var ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = objectGetOwnPropertyNames.f(anObject(it)); + var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; + return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; + }; + + var copyConstructorProperties = function (target, source) { + var keys = ownKeys(source); + var defineProperty = objectDefineProperty.f; + var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + }; + + var replacement = /#|\.prototype\./; + + var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : typeof detection == 'function' ? fails(detection) + : !!detection; + }; + + var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); + }; + + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = 'N'; + var POLYFILL = isForced.POLYFILL = 'P'; + + var isForced_1 = isForced; + + var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + + + + + + + /* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target + */ + var _export = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global_1; + } else if (STATIC) { + target = global_1[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global_1[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor$1(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + // extend global + redefine(target, key, sourceProperty, options); + } + }; + + var nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); + }); + + var useSymbolAsUid = nativeSymbol + // eslint-disable-next-line no-undef + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol() == 'symbol'; + + // `IsArray` abstract operation + // https://tc39.github.io/ecma262/#sec-isarray + var isArray = Array.isArray || function isArray(arg) { + return classofRaw(arg) == 'Array'; + }; + + // `ToObject` abstract operation + // https://tc39.github.io/ecma262/#sec-toobject + var toObject = function (argument) { + return Object(requireObjectCoercible(argument)); + }; + + // `Object.keys` method + // https://tc39.github.io/ecma262/#sec-object.keys + var objectKeys = Object.keys || function keys(O) { + return objectKeysInternal(O, enumBugKeys); + }; + + // `Object.defineProperties` method + // https://tc39.github.io/ecma262/#sec-object.defineproperties + var objectDefineProperties = descriptors ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) objectDefineProperty.f(O, key = keys[index++], Properties[key]); + return O; + }; + + var html = getBuiltIn('document', 'documentElement'); + + var GT = '>'; + var LT = '<'; + var PROTOTYPE = 'prototype'; + var SCRIPT = 'script'; + var IE_PROTO = sharedKey('IE_PROTO'); + + var EmptyConstructor = function () { /* empty */ }; + + var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; + }; + + // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; + }; + + // Create object with fake `null` prototype: use iframe Object with cleared prototype + var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; + }; + + // Check for document.domain and active x support + // No need to use active x approach when document.domain is not set + // see https://github.com/es-shims/es5-shim/issues/150 + // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 + // avoid IE GC bug + var activeXDocument; + var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + + hiddenKeys[IE_PROTO] = true; + + // `Object.create` method + // https://tc39.github.io/ecma262/#sec-object.create + var objectCreate = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : objectDefineProperties(result, Properties); + }; + + var nativeGetOwnPropertyNames = objectGetOwnPropertyNames.f; + + var toString$1 = {}.toString; + + var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + + var getWindowNames = function (it) { + try { + return nativeGetOwnPropertyNames(it); + } catch (error) { + return windowNames.slice(); + } + }; + + // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window + var f$5 = function getOwnPropertyNames(it) { + return windowNames && toString$1.call(it) == '[object Window]' + ? getWindowNames(it) + : nativeGetOwnPropertyNames(toIndexedObject(it)); + }; + + var objectGetOwnPropertyNamesExternal = { + f: f$5 + }; + + var WellKnownSymbolsStore = shared('wks'); + var Symbol$1 = global_1.Symbol; + var createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : uid; + + var wellKnownSymbol = function (name) { + if (!has(WellKnownSymbolsStore, name)) { + if (nativeSymbol && has(Symbol$1, name)) WellKnownSymbolsStore[name] = Symbol$1[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; + }; + + var f$6 = wellKnownSymbol; + + var wrappedWellKnownSymbol = { + f: f$6 + }; + + var defineProperty = objectDefineProperty.f; + + var defineWellKnownSymbol = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, { + value: wrappedWellKnownSymbol.f(NAME) + }); + }; + + var defineProperty$1 = objectDefineProperty.f; + + + + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + + var setToStringTag = function (it, TAG, STATIC) { + if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { + defineProperty$1(it, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + + var aFunction$1 = function (it) { + if (typeof it != 'function') { + throw TypeError(String(it) + ' is not a function'); + } return it; + }; + + // optional / simple context binding + var bindContext = function (fn, that, length) { + aFunction$1(fn); + if (that === undefined) return fn; + switch (length) { + case 0: return function () { + return fn.call(that); + }; + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + var SPECIES = wellKnownSymbol('species'); + + // `ArraySpeciesCreate` abstract operation + // https://tc39.github.io/ecma262/#sec-arrayspeciescreate + var arraySpeciesCreate = function (originalArray, length) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); + }; + + var push = [].push; + + // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation + var createMethod$1 = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = indexedObject(O); + var boundFunction = bindContext(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push.call(target, value); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + + var arrayIteration = { + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + forEach: createMethod$1(0), + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + map: createMethod$1(1), + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + filter: createMethod$1(2), + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + some: createMethod$1(3), + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + every: createMethod$1(4), + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + find: createMethod$1(5), + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod$1(6) + }; + + var $forEach = arrayIteration.forEach; + + var HIDDEN = sharedKey('hidden'); + var SYMBOL = 'Symbol'; + var PROTOTYPE$1 = 'prototype'; + var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + var setInternalState = internalState.set; + var getInternalState = internalState.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE$1]; + var $Symbol = global_1.Symbol; + var $stringify = getBuiltIn('JSON', 'stringify'); + var nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + var nativeDefineProperty$1 = objectDefineProperty.f; + var nativeGetOwnPropertyNames$1 = objectGetOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable$1 = objectPropertyIsEnumerable.f; + var AllSymbols = shared('symbols'); + var ObjectPrototypeSymbols = shared('op-symbols'); + var StringToSymbolRegistry = shared('string-to-symbol-registry'); + var SymbolToStringRegistry = shared('symbol-to-string-registry'); + var WellKnownSymbolsStore$1 = shared('wks'); + var QObject = global_1.QObject; + // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 + var USE_SETTER = !QObject || !QObject[PROTOTYPE$1] || !QObject[PROTOTYPE$1].findChild; + + // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 + var setSymbolDescriptor = descriptors && fails(function () { + return objectCreate(nativeDefineProperty$1({}, 'a', { + get: function () { return nativeDefineProperty$1(this, 'a', { value: 7 }).a; } + })).a != 7; + }) ? function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$1(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype[P]; + nativeDefineProperty$1(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty$1(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + } : nativeDefineProperty$1; + + var wrap = function (tag, description) { + var symbol = AllSymbols[tag] = objectCreate($Symbol[PROTOTYPE$1]); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!descriptors) symbol.description = description; + return symbol; + }; + + var isSymbol = nativeSymbol && typeof $Symbol.iterator == 'symbol' ? function (it) { + return typeof it == 'symbol'; + } : function (it) { + return Object(it) instanceof $Symbol; + }; + + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPrimitive(P, true); + anObject(Attributes); + if (has(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!has(O, HIDDEN)) nativeDefineProperty$1(O, HIDDEN, createPropertyDescriptor(1, {})); + O[HIDDEN][key] = true; + } else { + if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = objectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } return setSymbolDescriptor(O, key, Attributes); + } return nativeDefineProperty$1(O, key, Attributes); + }; + + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function (key) { + if (!descriptors || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; + }; + + var $create = function create(O, Properties) { + return Properties === undefined ? objectCreate(O) : $defineProperties(objectCreate(O), Properties); + }; + + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPrimitive(V, true); + var enumerable = nativePropertyIsEnumerable$1.call(this, P); + if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false; + return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPrimitive(P, true); + if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor$1(it, key); + if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames$1(toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key); + }); + return result; + }; + + var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames$1(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) { + result.push(AllSymbols[key]); + } + }); + return result; + }; + + // `Symbol` constructor + // https://tc39.github.io/ecma262/#sec-symbol-constructor + if (!nativeSymbol) { + $Symbol = function Symbol() { + if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]); + var tag = uid(description); + var setter = function (value) { + if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value); + if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value)); + }; + if (descriptors && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + + redefine($Symbol[PROTOTYPE$1], 'toString', function toString() { + return getInternalState(this).tag; + }); + + objectPropertyIsEnumerable.f = $propertyIsEnumerable; + objectDefineProperty.f = $defineProperty; + objectGetOwnPropertyDescriptor.f = $getOwnPropertyDescriptor; + objectGetOwnPropertyNames.f = objectGetOwnPropertyNamesExternal.f = $getOwnPropertyNames; + objectGetOwnPropertySymbols.f = $getOwnPropertySymbols; + + if (descriptors) { + // https://github.com/tc39/proposal-Symbol-description + nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + { + redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); + } + } + } + + if (!useSymbolAsUid) { + wrappedWellKnownSymbol.f = function (name) { + return wrap(wellKnownSymbol(name), name); + }; + } + + _export({ global: true, wrap: true, forced: !nativeSymbol, sham: !nativeSymbol }, { + Symbol: $Symbol + }); + + $forEach(objectKeys(WellKnownSymbolsStore$1), function (name) { + defineWellKnownSymbol(name); + }); + + _export({ target: SYMBOL, stat: true, forced: !nativeSymbol }, { + // `Symbol.for` method + // https://tc39.github.io/ecma262/#sec-symbol.for + 'for': function (key) { + var string = String(key); + if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = $Symbol(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + }, + // `Symbol.keyFor` method + // https://tc39.github.io/ecma262/#sec-symbol.keyfor + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol'); + if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + }, + useSetter: function () { USE_SETTER = true; }, + useSimple: function () { USE_SETTER = false; } + }); + + _export({ target: 'Object', stat: true, forced: !nativeSymbol, sham: !descriptors }, { + // `Object.create` method + // https://tc39.github.io/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.github.io/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.github.io/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + + _export({ target: 'Object', stat: true, forced: !nativeSymbol }, { + // `Object.getOwnPropertyNames` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames, + // `Object.getOwnPropertySymbols` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols + getOwnPropertySymbols: $getOwnPropertySymbols + }); + + // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives + // https://bugs.chromium.org/p/v8/issues/detail?id=3443 + _export({ target: 'Object', stat: true, forced: fails(function () { objectGetOwnPropertySymbols.f(1); }) }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + return objectGetOwnPropertySymbols.f(toObject(it)); + } + }); + + // `JSON.stringify` method behavior with symbols + // https://tc39.github.io/ecma262/#sec-json.stringify + if ($stringify) { + var FORCED_JSON_STRINGIFY = !nativeSymbol || fails(function () { + var symbol = $Symbol(); + // MS Edge converts symbol values to JSON as {} + return $stringify([symbol]) != '[null]' + // WebKit converts symbol values to JSON as null + || $stringify({ a: symbol }) != '{}' + // V8 throws on boxed symbols + || $stringify(Object(symbol)) != '{}'; + }); + + _export({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, { + // eslint-disable-next-line no-unused-vars + stringify: function stringify(it, replacer, space) { + var args = [it]; + var index = 1; + var $replacer; + while (arguments.length > index) args.push(arguments[index++]); + $replacer = replacer; + if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined + if (!isArray(replacer)) replacer = function (key, value) { + if (typeof $replacer == 'function') value = $replacer.call(this, key, value); + if (!isSymbol(value)) return value; + }; + args[1] = replacer; + return $stringify.apply(null, args); + } + }); + } + + // `Symbol.prototype[@@toPrimitive]` method + // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive + if (!$Symbol[PROTOTYPE$1][TO_PRIMITIVE]) { + createNonEnumerableProperty($Symbol[PROTOTYPE$1], TO_PRIMITIVE, $Symbol[PROTOTYPE$1].valueOf); + } + // `Symbol.prototype[@@toStringTag]` property + // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag + setToStringTag($Symbol, SYMBOL); + + hiddenKeys[HIDDEN] = true; + + var defineProperty$2 = objectDefineProperty.f; + + + var NativeSymbol = global_1.Symbol; + + if (descriptors && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) || + // Safari 12 bug + NativeSymbol().description !== undefined + )) { + var EmptyStringDescriptionStore = {}; + // wrap Symbol constructor for correct work with undefined description + var SymbolWrapper = function Symbol() { + var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]); + var result = this instanceof SymbolWrapper + ? new NativeSymbol(description) + // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' + : description === undefined ? NativeSymbol() : NativeSymbol(description); + if (description === '') EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype; + symbolPrototype.constructor = SymbolWrapper; + + var symbolToString = symbolPrototype.toString; + var native = String(NativeSymbol('test')) == 'Symbol(test)'; + var regexp = /^Symbol\((.*)\)[^)]+$/; + defineProperty$2(symbolPrototype, 'description', { + configurable: true, + get: function description() { + var symbol = isObject(this) ? this.valueOf() : this; + var string = symbolToString.call(symbol); + if (has(EmptyStringDescriptionStore, symbol)) return ''; + var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1'); + return desc === '' ? undefined : desc; + } + }); + + _export({ global: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + + // `Symbol.iterator` well-known symbol + // https://tc39.github.io/ecma262/#sec-symbol.iterator + defineWellKnownSymbol('iterator'); + + var createProperty = function (object, key, value) { + var propertyKey = toPrimitive(key); + if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; + }; + + var userAgent = getBuiltIn('navigator', 'userAgent') || ''; + + var process = global_1.process; + var versions = process && process.versions; + var v8 = versions && versions.v8; + var match, version; + + if (v8) { + match = v8.split('.'); + version = match[0] + match[1]; + } else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } + } + + var v8Version = version && +version; + + var SPECIES$1 = wellKnownSymbol('species'); + + var arrayMethodHasSpeciesSupport = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return v8Version >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES$1] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + + var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); + var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; + + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/679 + var IS_CONCAT_SPREADABLE_SUPPORT = v8Version >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + + var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); + + var isConcatSpreadable = function (O) { + if (!isObject(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray(O); + }; + + var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; + + // `Array.prototype.concat` method + // https://tc39.github.io/ecma262/#sec-array.prototype.concat + // with adding support of @@isConcatSpreadable and @@species + _export({ target: 'Array', proto: true, forced: FORCED }, { + concat: function concat(arg) { // eslint-disable-line no-unused-vars + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = toLength(E.length); + if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } + }); + + var $filter = arrayIteration.filter; + + + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); + // Edge 14- issue + var USES_TO_LENGTH = HAS_SPECIES_SUPPORT && !fails(function () { + [].filter.call({ length: -1, 0: 1 }, function (it) { throw it; }); + }); + + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var UNSCOPABLES = wellKnownSymbol('unscopables'); + var ArrayPrototype = Array.prototype; + + // Array.prototype[@@unscopables] + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + if (ArrayPrototype[UNSCOPABLES] == undefined) { + objectDefineProperty.f(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: objectCreate(null) + }); + } + + // add a key to Array.prototype[@@unscopables] + var addToUnscopables = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + + var $find = arrayIteration.find; + + + var FIND = 'find'; + var SKIPS_HOLES = true; + + // Shouldn't skip holes + if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); + + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + _export({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables(FIND); + + var $findIndex = arrayIteration.findIndex; + + + var FIND_INDEX = 'findIndex'; + var SKIPS_HOLES$1 = true; + + // Shouldn't skip holes + if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES$1 = false; }); + + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findindex + _export({ target: 'Array', proto: true, forced: SKIPS_HOLES$1 }, { + findIndex: function findIndex(callbackfn /* , that = undefined */) { + return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables(FIND_INDEX); + + var $includes = arrayIncludes.includes; + + + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + _export({ target: 'Array', proto: true }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('includes'); + + var sloppyArrayMethod = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !method || !fails(function () { + // eslint-disable-next-line no-useless-call,no-throw-literal + method.call(null, argument || function () { throw 1; }, 1); + }); + }; + + var $indexOf = arrayIncludes.indexOf; + + + var nativeIndexOf = [].indexOf; + + var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; + var SLOPPY_METHOD = sloppyArrayMethod('indexOf'); + + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + _export({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, { + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + return NEGATIVE_ZERO + // convert -0 to +0 + ? nativeIndexOf.apply(this, arguments) || 0 + : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var correctPrototypeGetter = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + + var IE_PROTO$1 = sharedKey('IE_PROTO'); + var ObjectPrototype$1 = Object.prototype; + + // `Object.getPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.getprototypeof + var objectGetPrototypeOf = correctPrototypeGetter ? Object.getPrototypeOf : function (O) { + O = toObject(O); + if (has(O, IE_PROTO$1)) return O[IE_PROTO$1]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectPrototype$1 : null; + }; + + var ITERATOR = wellKnownSymbol('iterator'); + var BUGGY_SAFARI_ITERATORS = false; + + var returnThis = function () { return this; }; + + // `%IteratorPrototype%` object + // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object + var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + + if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + + if (IteratorPrototype == undefined) IteratorPrototype = {}; + + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() + if ( !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); + } + + var iteratorsCore = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + + var IteratorPrototype$1 = iteratorsCore.IteratorPrototype; + + var createIteratorConstructor = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = objectCreate(IteratorPrototype$1, { next: createPropertyDescriptor(1, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false); + return IteratorConstructor; + }; + + var aPossiblePrototype = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + ' as a prototype'); + } return it; + }; + + // `Object.setPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.setprototypeof + // Works with __proto__ only. Old v8 can't work with null proto objects. + /* eslint-disable no-proto */ + var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; + }() : undefined); + + var IteratorPrototype$2 = iteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS$1 = iteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR$1 = wellKnownSymbol('iterator'); + var KEYS = 'keys'; + var VALUES = 'values'; + var ENTRIES = 'entries'; + + var returnThis$1 = function () { return this; }; + + var defineIterator = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS$1 && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR$1] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS$1 && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = objectGetPrototypeOf(anyNativeIterator.call(new Iterable())); + if (IteratorPrototype$2 !== Object.prototype && CurrentIteratorPrototype.next) { + if ( objectGetPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype$2) { + if (objectSetPrototypeOf) { + objectSetPrototypeOf(CurrentIteratorPrototype, IteratorPrototype$2); + } else if (typeof CurrentIteratorPrototype[ITERATOR$1] != 'function') { + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR$1, returnThis$1); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true); + } + } + + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return nativeIterator.call(this); }; + } + + // define iterator + if ( IterablePrototype[ITERATOR$1] !== defaultIterator) { + createNonEnumerableProperty(IterablePrototype, ITERATOR$1, defaultIterator); + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } else _export({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME }, methods); + } + + return methods; + }; + + var ARRAY_ITERATOR = 'Array Iterator'; + var setInternalState$1 = internalState.set; + var getInternalState$1 = internalState.getterFor(ARRAY_ITERATOR); + + // `Array.prototype.entries` method + // https://tc39.github.io/ecma262/#sec-array.prototype.entries + // `Array.prototype.keys` method + // https://tc39.github.io/ecma262/#sec-array.prototype.keys + // `Array.prototype.values` method + // https://tc39.github.io/ecma262/#sec-array.prototype.values + // `Array.prototype[@@iterator]` method + // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator + // `CreateArrayIterator` internal method + // https://tc39.github.io/ecma262/#sec-createarrayiterator + var es_array_iterator = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState$1(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); + // `%ArrayIteratorPrototype%.next` method + // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next + }, function () { + var state = getInternalState$1(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == 'keys') return { value: index, done: false }; + if (kind == 'values') return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; + }, 'values'); + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('keys'); + addToUnscopables('values'); + addToUnscopables('entries'); + + var nativeJoin = [].join; + + var ES3_STRINGS = indexedObject != Object; + var SLOPPY_METHOD$1 = sloppyArrayMethod('join', ','); + + // `Array.prototype.join` method + // https://tc39.github.io/ecma262/#sec-array.prototype.join + _export({ target: 'Array', proto: true, forced: ES3_STRINGS || SLOPPY_METHOD$1 }, { + join: function join(separator) { + return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator); + } + }); + + var $map = arrayIteration.map; + + + + var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport('map'); + // FF49- issue + var USES_TO_LENGTH$1 = HAS_SPECIES_SUPPORT$1 && !fails(function () { + [].map.call({ length: -1, 0: 1 }, function (it) { throw it; }); + }); + + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 || !USES_TO_LENGTH$1 }, { + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var nativeReverse = [].reverse; + var test = [1, 2]; + + // `Array.prototype.reverse` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reverse + // fix for Safari 12.0 bug + // https://bugs.webkit.org/show_bug.cgi?id=188794 + _export({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, { + reverse: function reverse() { + // eslint-disable-next-line no-self-assign + if (isArray(this)) this.length = this.length; + return nativeReverse.call(this); + } + }); + + var SPECIES$2 = wellKnownSymbol('species'); + var nativeSlice = [].slice; + var max$1 = Math.max; + + // `Array.prototype.slice` method + // https://tc39.github.io/ecma262/#sec-array.prototype.slice + // fallback for not array-like ES3 strings and DOM objects + _export({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = toLength(O.length); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === undefined ? length : end, length); + // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + // cross-realm fallback + if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) { + Constructor = undefined; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES$2]; + if (Constructor === null) Constructor = undefined; + } + if (Constructor === Array || Constructor === undefined) { + return nativeSlice.call(O, k, fin); + } + } + result = new (Constructor === undefined ? Array : Constructor)(max$1(fin - k, 0)); + for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + + var test$1 = []; + var nativeSort = test$1.sort; + + // IE8- + var FAILS_ON_UNDEFINED = fails(function () { + test$1.sort(undefined); + }); + // V8 bug + var FAILS_ON_NULL = fails(function () { + test$1.sort(null); + }); + // Old WebKit + var SLOPPY_METHOD$2 = sloppyArrayMethod('sort'); + + var FORCED$1 = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || SLOPPY_METHOD$2; + + // `Array.prototype.sort` method + // https://tc39.github.io/ecma262/#sec-array.prototype.sort + _export({ target: 'Array', proto: true, forced: FORCED$1 }, { + sort: function sort(comparefn) { + return comparefn === undefined + ? nativeSort.call(toObject(this)) + : nativeSort.call(toObject(this), aFunction$1(comparefn)); + } + }); + + var max$2 = Math.max; + var min$2 = Math.min; + var MAX_SAFE_INTEGER$1 = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded'; + + // `Array.prototype.splice` method + // https://tc39.github.io/ecma262/#sec-array.prototype.splice + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('splice') }, { + splice: function splice(start, deleteCount /* , ...items */) { + var O = toObject(this); + var len = toLength(O.length); + var actualStart = toAbsoluteIndex(start, len); + var argumentsLength = arguments.length; + var insertCount, actualDeleteCount, A, k, from, to; + if (argumentsLength === 0) { + insertCount = actualDeleteCount = 0; + } else if (argumentsLength === 1) { + insertCount = 0; + actualDeleteCount = len - actualStart; + } else { + insertCount = argumentsLength - 2; + actualDeleteCount = min$2(max$2(toInteger(deleteCount), 0), len - actualStart); + } + if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) { + throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED); + } + A = arraySpeciesCreate(O, actualDeleteCount); + for (k = 0; k < actualDeleteCount; k++) { + from = actualStart + k; + if (from in O) createProperty(A, k, O[from]); + } + A.length = actualDeleteCount; + if (insertCount < actualDeleteCount) { + for (k = actualStart; k < len - actualDeleteCount; k++) { + from = k + actualDeleteCount; + to = k + insertCount; + if (from in O) O[to] = O[from]; + else delete O[to]; + } + for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1]; + } else if (insertCount > actualDeleteCount) { + for (k = len - actualDeleteCount; k > actualStart; k--) { + from = k + actualDeleteCount - 1; + to = k + insertCount - 1; + if (from in O) O[to] = O[from]; + else delete O[to]; + } + } + for (k = 0; k < insertCount; k++) { + O[k + actualStart] = arguments[k + 2]; + } + O.length = len - actualDeleteCount + insertCount; + return A; + } + }); + + // makes subclassing work correct for wrapped built-ins + var inheritIfRequired = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + objectSetPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + typeof (NewTarget = dummy.constructor) == 'function' && + NewTarget !== Wrapper && + isObject(NewTargetPrototype = NewTarget.prototype) && + NewTargetPrototype !== Wrapper.prototype + ) objectSetPrototypeOf($this, NewTargetPrototype); + return $this; + }; + + // a string of all valid unicode whitespaces + // eslint-disable-next-line max-len + var whitespaces = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + var whitespace = '[' + whitespaces + ']'; + var ltrim = RegExp('^' + whitespace + whitespace + '*'); + var rtrim = RegExp(whitespace + whitespace + '*$'); + + // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation + var createMethod$2 = function (TYPE) { + return function ($this) { + var string = String(requireObjectCoercible($this)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; + }; + }; + + var stringTrim = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart + start: createMethod$2(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimend + end: createMethod$2(2), + // `String.prototype.trim` method + // https://tc39.github.io/ecma262/#sec-string.prototype.trim + trim: createMethod$2(3) + }; + + var getOwnPropertyNames = objectGetOwnPropertyNames.f; + var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; + var defineProperty$3 = objectDefineProperty.f; + var trim = stringTrim.trim; + + var NUMBER = 'Number'; + var NativeNumber = global_1[NUMBER]; + var NumberPrototype = NativeNumber.prototype; + + // Opera ~12 has broken Object#toString + var BROKEN_CLASSOF = classofRaw(objectCreate(NumberPrototype)) == NUMBER; + + // `ToNumber` abstract operation + // https://tc39.github.io/ecma262/#sec-tonumber + var toNumber = function (argument) { + var it = toPrimitive(argument, false); + var first, third, radix, maxCode, digits, length, index, code; + if (typeof it == 'string' && it.length > 2) { + it = trim(it); + first = it.charCodeAt(0); + if (first === 43 || first === 45) { + third = it.charCodeAt(2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (it.charCodeAt(1)) { + case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i + case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i + default: return +it; + } + digits = it.slice(2); + length = digits.length; + for (index = 0; index < length; index++) { + code = digits.charCodeAt(index); + // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + if (code < 48 || code > maxCode) return NaN; + } return parseInt(digits, radix); + } + } return +it; + }; + + // `Number` constructor + // https://tc39.github.io/ecma262/#sec-number-constructor + if (isForced_1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) { + var NumberWrapper = function Number(value) { + var it = arguments.length < 1 ? 0 : value; + var dummy = this; + return dummy instanceof NumberWrapper + // check on 1..constructor(foo) case + && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classofRaw(dummy) != NUMBER) + ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it); + }; + for (var keys$1 = descriptors ? getOwnPropertyNames(NativeNumber) : ( + // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + + // ES2015 (in case, if modules with ES2015 Number statics required before): + 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' + ).split(','), j = 0, key; keys$1.length > j; j++) { + if (has(NativeNumber, key = keys$1[j]) && !has(NumberWrapper, key)) { + defineProperty$3(NumberWrapper, key, getOwnPropertyDescriptor$2(NativeNumber, key)); + } + } + NumberWrapper.prototype = NumberPrototype; + NumberPrototype.constructor = NumberWrapper; + redefine(global_1, NUMBER, NumberWrapper); + } + + var nativeAssign = Object.assign; + var defineProperty$4 = Object.defineProperty; + + // `Object.assign` method + // https://tc39.github.io/ecma262/#sec-object.assign + var objectAssign = !nativeAssign || fails(function () { + // should have correct order of operations (Edge bug) + if (descriptors && nativeAssign({ b: 1 }, nativeAssign(defineProperty$4({}, 'a', { + enumerable: true, + get: function () { + defineProperty$4(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line no-undef + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet; + }) ? function assign(target, source) { // eslint-disable-line no-unused-vars + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; + var propertyIsEnumerable = objectPropertyIsEnumerable.f; + while (argumentsLength > index) { + var S = indexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!descriptors || propertyIsEnumerable.call(S, key)) T[key] = S[key]; + } + } return T; + } : nativeAssign; + + // `Object.assign` method + // https://tc39.github.io/ecma262/#sec-object.assign + _export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, { + assign: objectAssign + }); + + var propertyIsEnumerable = objectPropertyIsEnumerable.f; + + // `Object.{ entries, values }` methods implementation + var createMethod$3 = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!descriptors || propertyIsEnumerable.call(O, key)) { + result.push(TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; + }; + + var objectToArray = { + // `Object.entries` method + // https://tc39.github.io/ecma262/#sec-object.entries + entries: createMethod$3(true), + // `Object.values` method + // https://tc39.github.io/ecma262/#sec-object.values + values: createMethod$3(false) + }; + + var $entries = objectToArray.entries; + + // `Object.entries` method + // https://tc39.github.io/ecma262/#sec-object.entries + _export({ target: 'Object', stat: true }, { + entries: function entries(O) { + return $entries(O); + } + }); + + var TO_STRING_TAG$1 = wellKnownSymbol('toStringTag'); + var test$2 = {}; + + test$2[TO_STRING_TAG$1] = 'z'; + + var toStringTagSupport = String(test$2) === '[object z]'; + + var TO_STRING_TAG$2 = wellKnownSymbol('toStringTag'); + // ES3 wrong here + var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + + // fallback for IE11 Script Access Denied error + var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } + }; + + // getting tag from ES6+ `Object.prototype.toString` + var classof = toStringTagSupport ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$2)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; + }; + + // `Object.prototype.toString` method implementation + // https://tc39.github.io/ecma262/#sec-object.prototype.tostring + var objectToString = toStringTagSupport ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; + }; + + // `Object.prototype.toString` method + // https://tc39.github.io/ecma262/#sec-object.prototype.tostring + if (!toStringTagSupport) { + redefine(Object.prototype, 'toString', objectToString, { unsafe: true }); + } + + var trim$1 = stringTrim.trim; + + + var nativeParseFloat = global_1.parseFloat; + var FORCED$2 = 1 / nativeParseFloat(whitespaces + '-0') !== -Infinity; + + // `parseFloat` method + // https://tc39.github.io/ecma262/#sec-parsefloat-string + var _parseFloat = FORCED$2 ? function parseFloat(string) { + var trimmedString = trim$1(String(string)); + var result = nativeParseFloat(trimmedString); + return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result; + } : nativeParseFloat; + + // `parseFloat` method + // https://tc39.github.io/ecma262/#sec-parsefloat-string + _export({ global: true, forced: parseFloat != _parseFloat }, { + parseFloat: _parseFloat + }); + + var trim$2 = stringTrim.trim; + + + var nativeParseInt = global_1.parseInt; + var hex = /^[+-]?0[Xx]/; + var FORCED$3 = nativeParseInt(whitespaces + '08') !== 8 || nativeParseInt(whitespaces + '0x16') !== 22; + + // `parseInt` method + // https://tc39.github.io/ecma262/#sec-parseint-string-radix + var _parseInt = FORCED$3 ? function parseInt(string, radix) { + var S = trim$2(String(string)); + return nativeParseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10)); + } : nativeParseInt; + + // `parseInt` method + // https://tc39.github.io/ecma262/#sec-parseint-string-radix + _export({ global: true, forced: parseInt != _parseInt }, { + parseInt: _parseInt + }); + + // `RegExp.prototype.flags` getter implementation + // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags + var regexpFlags = function () { + var that = anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; + }; + + // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError, + // so we use an intermediate function. + function RE(s, f) { + return RegExp(s, f); + } + + var UNSUPPORTED_Y = fails(function () { + // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError + var re = RE('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') != null; + }); + + var BROKEN_CARET = fails(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = RE('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') != null; + }); + + var regexpStickyHelpers = { + UNSUPPORTED_Y: UNSUPPORTED_Y, + BROKEN_CARET: BROKEN_CARET + }; + + var nativeExec = RegExp.prototype.exec; + // This always refers to the native implementation, because the + // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, + // which loads this file before patching the method. + var nativeReplace = String.prototype.replace; + + var patchedExec = nativeExec; + + var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + })(); + + var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y || regexpStickyHelpers.BROKEN_CARET; + + // nonparticipating capturing group, copied from es5-shim's String#split patch. + var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$1; + + if (PATCH) { + patchedExec = function exec(str) { + var re = this; + var lastIndex, reCopy, match, i; + var sticky = UNSUPPORTED_Y$1 && re.sticky; + var flags = regexpFlags.call(re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = flags.replace('y', ''); + if (flags.indexOf('g') === -1) { + flags += 'g'; + } + + strCopy = String(str).slice(re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = nativeExec.call(sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = match.input.slice(charsAdded); + match[0] = match[0].slice(charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + return match; + }; + } + + var regexpExec = patchedExec; + + _export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, { + exec: regexpExec + }); + + var TO_STRING = 'toString'; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + + var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); + // FF44- RegExp#toString has a wrong name + var INCORRECT_NAME = nativeToString.name != TO_STRING; + + // `RegExp.prototype.toString` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring + if (NOT_GENERIC || INCORRECT_NAME) { + redefine(RegExp.prototype, TO_STRING, function toString() { + var R = anObject(this); + var p = String(R.source); + var rf = R.flags; + var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? regexpFlags.call(R) : rf); + return '/' + p + '/' + f; + }, { unsafe: true }); + } + + var MATCH = wellKnownSymbol('match'); + + // `IsRegExp` abstract operation + // https://tc39.github.io/ecma262/#sec-isregexp + var isRegexp = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classofRaw(it) == 'RegExp'); + }; + + var notARegexp = function (it) { + if (isRegexp(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } return it; + }; + + var MATCH$1 = wellKnownSymbol('match'); + + var correctIsRegexpLogic = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (e) { + try { + regexp[MATCH$1] = false; + return '/./'[METHOD_NAME](regexp); + } catch (f) { /* empty */ } + } return false; + }; + + // `String.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-string.prototype.includes + _export({ target: 'String', proto: true, forced: !correctIsRegexpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~String(requireObjectCoercible(this)) + .indexOf(notARegexp(searchString), arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // `String.prototype.{ codePointAt, at }` methods implementation + var createMethod$4 = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = String(requireObjectCoercible($this)); + var position = toInteger(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING ? S.charAt(position) : first + : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; + }; + + var stringMultibyte = { + // `String.prototype.codePointAt` method + // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod$4(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod$4(true) + }; + + var charAt = stringMultibyte.charAt; + + + + var STRING_ITERATOR = 'String Iterator'; + var setInternalState$2 = internalState.set; + var getInternalState$2 = internalState.getterFor(STRING_ITERATOR); + + // `String.prototype[@@iterator]` method + // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator + defineIterator(String, 'String', function (iterated) { + setInternalState$2(this, { + type: STRING_ITERATOR, + string: String(iterated), + index: 0 + }); + // `%StringIteratorPrototype%.next` method + // https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next + }, function next() { + var state = getInternalState$2(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { value: undefined, done: true }; + point = charAt(string, index); + state.index += point.length; + return { value: point, done: false }; + }); + + var SPECIES$3 = wellKnownSymbol('species'); + + var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { + // #replace needs built-in support for named groups. + // #match works fine because it just return the exec results, even if it has + // a "grops" property. + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + return ''.replace(re, '$') !== '7'; + }); + + // IE <= 11 replaces $0 with the whole match, as if it was $& + // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 + var REPLACE_KEEPS_$0 = (function () { + return 'a'.replace(/./, '$0') === '$0'; + })(); + + // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec + // Weex JS has frozen built-in prototypes, so use try / catch wrapper + var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; + }); + + var fixRegexpWellKnownSymbolLogic = function (KEY, length, exec, sham) { + var SYMBOL = wellKnownSymbol(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES$3] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { execCalled = true; return null; }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + (KEY === 'replace' && !(REPLACE_SUPPORTS_NAMED_GROUPS && REPLACE_KEEPS_$0)) || + (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + if (regexp.exec === regexpExec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; + } + return { done: true, value: nativeMethod.call(str, regexp, arg2) }; + } + return { done: false }; + }, { REPLACE_KEEPS_$0: REPLACE_KEEPS_$0 }); + var stringMethod = methods[0]; + var regexMethod = methods[1]; + + redefine(String.prototype, KEY, stringMethod); + redefine(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function (string, arg) { return regexMethod.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function (string) { return regexMethod.call(string, this); } + ); + } + + if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); + }; + + var charAt$1 = stringMultibyte.charAt; + + // `AdvanceStringIndex` abstract operation + // https://tc39.github.io/ecma262/#sec-advancestringindex + var advanceStringIndex = function (S, index, unicode) { + return index + (unicode ? charAt$1(S, index).length : 1); + }; + + // `RegExpExec` abstract operation + // https://tc39.github.io/ecma262/#sec-regexpexec + var regexpExecAbstract = function (R, S) { + var exec = R.exec; + if (typeof exec === 'function') { + var result = exec.call(R, S); + if (typeof result !== 'object') { + throw TypeError('RegExp exec method returned something other than an Object or null'); + } + return result; + } + + if (classofRaw(R) !== 'RegExp') { + throw TypeError('RegExp#exec called on incompatible receiver'); + } + + return regexpExec.call(R, S); + }; + + var max$3 = Math.max; + var min$3 = Math.min; + var floor$1 = Math.floor; + var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g; + + var maybeToString = function (it) { + return it === undefined ? it : String(it); + }; + + // @@replace logic + fixRegexpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) { + return [ + // `String.prototype.replace` method + // https://tc39.github.io/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = searchValue == undefined ? undefined : searchValue[REPLACE]; + return replacer !== undefined + ? replacer.call(searchValue, O, replaceValue) + : nativeReplace.call(String(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace + function (regexp, replaceValue) { + if (reason.REPLACE_KEEPS_$0 || (typeof replaceValue === 'string' && replaceValue.indexOf('$0') === -1)) { + var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); + if (res.done) return res.value; + } + + var rx = anObject(regexp); + var S = String(this); + + var functionalReplace = typeof replaceValue === 'function'; + if (!functionalReplace) replaceValue = String(replaceValue); + + var global = rx.global; + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + while (true) { + var result = regexpExecAbstract(rx, S); + if (result === null) break; + + results.push(result); + if (!global) break; + + var matchStr = String(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + + var matched = String(result[0]); + var position = max$3(min$3(toInteger(result.index), S.length), 0); + var captures = []; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = [matched].concat(captures, position, S); + if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); + var replacement = String(replaceValue.apply(undefined, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += S.slice(nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + S.slice(nextSourcePosition); + } + ]; + + // https://tc39.github.io/ecma262/#sec-getsubstitution + function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return nativeReplace.call(replacement, symbols, function (match, ch) { + var capture; + switch (ch.charAt(0)) { + case '$': return '$'; + case '&': return matched; + case '`': return str.slice(0, position); + case "'": return str.slice(tailPos); + case '<': + capture = namedCaptures[ch.slice(1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return match; + if (n > m) { + var f = floor$1(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); + return match; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); + } + }); + + // `SameValue` abstract operation + // https://tc39.github.io/ecma262/#sec-samevalue + var sameValue = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; + }; + + // @@search logic + fixRegexpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) { + return [ + // `String.prototype.search` method + // https://tc39.github.io/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = requireObjectCoercible(this); + var searcher = regexp == undefined ? undefined : regexp[SEARCH]; + return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); + }, + // `RegExp.prototype[@@search]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search + function (regexp) { + var res = maybeCallNative(nativeSearch, regexp, this); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regexpExecAbstract(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + } + ]; + }); + + var SPECIES$4 = wellKnownSymbol('species'); + + // `SpeciesConstructor` abstract operation + // https://tc39.github.io/ecma262/#sec-speciesconstructor + var speciesConstructor = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES$4]) == undefined ? defaultConstructor : aFunction$1(S); + }; + + var arrayPush = [].push; + var min$4 = Math.min; + var MAX_UINT32 = 0xFFFFFFFF; + + // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError + var SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); }); + + // @@split logic + fixRegexpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) { + var internalSplit; + if ( + 'abbc'.split(/(b)*/)[1] == 'c' || + 'test'.split(/(?:)/, -1).length != 4 || + 'ab'.split(/(?:ab)*/).length != 2 || + '.'.split(/(.?)(.?)/).length != 4 || + '.'.split(/()()/).length > 1 || + ''.split(/.?/).length + ) { + // based on es5-shim implementation, need to rework it + internalSplit = function (separator, limit) { + var string = String(requireObjectCoercible(this)); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (separator === undefined) return [string]; + // If `separator` is not a regex, use native split + if (!isRegexp(separator)) { + return nativeSplit.call(string, separator, lim); + } + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.unicode ? 'u' : '') + + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; + // Make `global` and avoid `lastIndex` issues by working with a copy + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var match, lastIndex, lastLength; + while (match = regexpExec.call(separatorCopy, string)) { + lastIndex = separatorCopy.lastIndex; + if (lastIndex > lastLastIndex) { + output.push(string.slice(lastLastIndex, match.index)); + if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1)); + lastLength = match[0].length; + lastLastIndex = lastIndex; + if (output.length >= lim) break; + } + if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop + } + if (lastLastIndex === string.length) { + if (lastLength || !separatorCopy.test('')) output.push(''); + } else output.push(string.slice(lastLastIndex)); + return output.length > lim ? output.slice(0, lim) : output; + }; + // Chakra, V8 + } else if ('0'.split(undefined, 0).length) { + internalSplit = function (separator, limit) { + return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit); + }; + } else internalSplit = nativeSplit; + + return [ + // `String.prototype.split` method + // https://tc39.github.io/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = requireObjectCoercible(this); + var splitter = separator == undefined ? undefined : separator[SPLIT]; + return splitter !== undefined + ? splitter.call(separator, O, limit) + : internalSplit.call(String(O), separator, limit); + }, + // `RegExp.prototype[@@split]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (regexp, limit) { + var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + var C = speciesConstructor(rx, RegExp); + + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + + (rx.multiline ? 'm' : '') + + (rx.unicode ? 'u' : '') + + (SUPPORTS_Y ? 'y' : 'g'); + + // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return regexpExecAbstract(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + while (q < S.length) { + splitter.lastIndex = SUPPORTS_Y ? q : 0; + var z = regexpExecAbstract(splitter, SUPPORTS_Y ? S : S.slice(q)); + var e; + if ( + z === null || + (e = min$4(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p + ) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + A.push(S.slice(p, q)); + if (A.length === lim) return A; + for (var i = 1; i <= z.length - 1; i++) { + A.push(z[i]); + if (A.length === lim) return A; + } + q = p = e; + } + } + A.push(S.slice(p)); + return A; + } + ]; + }, !SUPPORTS_Y); + + var non = '\u200B\u0085\u180E'; + + // check that a method works with the correct list + // of whitespaces and has a correct name + var forcedStringTrimMethod = function (METHOD_NAME) { + return fails(function () { + return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME; + }); + }; + + var $trim = stringTrim.trim; + + + // `String.prototype.trim` method + // https://tc39.github.io/ecma262/#sec-string.prototype.trim + _export({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { + trim: function trim() { + return $trim(this); + } + }); + + // iterable DOM collections + // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods + var domIterables = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + var $forEach$1 = arrayIteration.forEach; + + + // `Array.prototype.forEach` method implementation + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + var arrayForEach = sloppyArrayMethod('forEach') ? function forEach(callbackfn /* , thisArg */) { + return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } : [].forEach; + + for (var COLLECTION_NAME in domIterables) { + var Collection = global_1[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== arrayForEach) try { + createNonEnumerableProperty(CollectionPrototype, 'forEach', arrayForEach); + } catch (error) { + CollectionPrototype.forEach = arrayForEach; + } + } + + var ITERATOR$2 = wellKnownSymbol('iterator'); + var TO_STRING_TAG$3 = wellKnownSymbol('toStringTag'); + var ArrayValues = es_array_iterator.values; + + for (var COLLECTION_NAME$1 in domIterables) { + var Collection$1 = global_1[COLLECTION_NAME$1]; + var CollectionPrototype$1 = Collection$1 && Collection$1.prototype; + if (CollectionPrototype$1) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype$1[ITERATOR$2] !== ArrayValues) try { + createNonEnumerableProperty(CollectionPrototype$1, ITERATOR$2, ArrayValues); + } catch (error) { + CollectionPrototype$1[ITERATOR$2] = ArrayValues; + } + if (!CollectionPrototype$1[TO_STRING_TAG$3]) { + createNonEnumerableProperty(CollectionPrototype$1, TO_STRING_TAG$3, COLLECTION_NAME$1); + } + if (domIterables[COLLECTION_NAME$1]) for (var METHOD_NAME in es_array_iterator) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype$1[METHOD_NAME] !== es_array_iterator[METHOD_NAME]) try { + createNonEnumerableProperty(CollectionPrototype$1, METHOD_NAME, es_array_iterator[METHOD_NAME]); + } catch (error) { + CollectionPrototype$1[METHOD_NAME] = es_array_iterator[METHOD_NAME]; + } + } + } + } + + function _typeof(obj) { + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + } + + function _iterableToArrayLimit(arr, i) { + if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { + return; + } + + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + + var VERSION = '1.16.0'; + var bootstrapVersion = 4; + + try { + var rawVersion = $.fn.dropdown.Constructor.VERSION; // Only try to parse VERSION if it is defined. + // It is undefined in older versions of Bootstrap (tested with 3.1.1). + + if (rawVersion !== undefined) { + bootstrapVersion = parseInt(rawVersion, 10); + } + } catch (e) {// ignore + } + + var CONSTANTS = { + 3: { + iconsPrefix: 'glyphicon', + icons: { + paginationSwitchDown: 'glyphicon-collapse-down icon-chevron-down', + paginationSwitchUp: 'glyphicon-collapse-up icon-chevron-up', + refresh: 'glyphicon-refresh icon-refresh', + toggleOff: 'glyphicon-list-alt icon-list-alt', + toggleOn: 'glyphicon-list-alt icon-list-alt', + columns: 'glyphicon-th icon-th', + detailOpen: 'glyphicon-plus icon-plus', + detailClose: 'glyphicon-minus icon-minus', + fullscreen: 'glyphicon-fullscreen', + search: 'glyphicon-search', + clearSearch: 'glyphicon-trash' + }, + classes: { + buttonsPrefix: 'btn', + buttons: 'default', + buttonsGroup: 'btn-group', + buttonsDropdown: 'btn-group', + pull: 'pull', + inputGroup: 'input-group', + inputPrefix: 'input-', + input: 'form-control', + paginationDropdown: 'btn-group dropdown', + dropup: 'dropup', + dropdownActive: 'active', + paginationActive: 'active', + buttonActive: 'active' + }, + html: { + toolbarDropdown: [''], + toolbarDropdownItem: '', + toolbarDropdownSeparator: '
  • ', + pageDropdown: [''], + pageDropdownItem: '
    ', + dropdownCaret: '', + pagination: ['
      ', '
    '], + paginationItem: '
  • %s
  • ', + icon: '', + inputGroup: '
    %s%s
    ', + searchInput: '', + searchButton: '', + searchClearButton: '' + } + }, + 4: { + iconsPrefix: 'mdi', + icons: { + paginationSwitchDown: 'mdi-arrow-down-drop-circle-outline', + paginationSwitchUp: 'mdi-arrow-up-drop-circle-outline', + refresh: 'mdi-refresh', + toggleOff: 'mdi-playlist-check', + toggleOn: 'mdi-playlist-remove', + columns: 'mdi-table-column-remove', + detailOpen: 'mdi-plus', + detailClose: 'mdi-minus', + fullscreen: 'mdi-fullscreen', + search: 'mdi-table-search', + clearSearch: 'mdi-trash-can-outline' + }, + classes: { + buttonsPrefix: 'btn', + buttons: 'default', + buttonsGroup: 'btn-group', + buttonsDropdown: 'btn-group', + pull: 'float', + inputGroup: 'btn-group', + inputPrefix: 'form-control-', + input: 'form-control', + paginationDropdown: 'btn-group dropdown', + dropup: 'dropup', + dropdownActive: 'active', + paginationActive: 'active', + buttonActive: 'active' + }, + html: { + toolbarDropdown: [''], + toolbarDropdownItem: '', + pageDropdown: [''], + pageDropdownItem: '%s', + toolbarDropdownSeparator: '', + dropdownCaret: '', + pagination: ['
      ', '
    '], + paginationItem: '
  • %s
  • ', + icon: '', + inputGroup: '
    %s
    %s
    ', + searchInput: '', + searchButton: '', + searchClearButton: '' + } + } + }[bootstrapVersion]; + var DEFAULTS = { + height: undefined, + classes: 'table table-bordered table-hover', + theadClasses: '', + headerStyle: function headerStyle(column) { + return {}; + }, + rowStyle: function rowStyle(row, index) { + return {}; + }, + rowAttributes: function rowAttributes(row, index) { + return {}; + }, + undefinedText: '-', + locale: undefined, + virtualScroll: false, + virtualScrollItemHeight: undefined, + sortable: true, + sortClass: undefined, + silentSort: true, + sortName: undefined, + sortOrder: 'asc', + sortStable: false, + rememberOrder: false, + serverSort: true, + customSort: undefined, + columns: [[]], + data: [], + url: undefined, + method: 'get', + cache: true, + contentType: 'application/json', + dataType: 'json', + ajax: undefined, + ajaxOptions: {}, + queryParams: function queryParams(params) { + return params; + }, + queryParamsType: 'limit', + // 'limit', undefined + responseHandler: function responseHandler(res) { + return res; + }, + totalField: 'total', + totalNotFilteredField: 'totalNotFiltered', + dataField: 'rows', + pagination: false, + onlyInfoPagination: false, + showExtendedPagination: false, + paginationLoop: true, + sidePagination: 'client', + // client or server + totalRows: 0, + totalNotFiltered: 0, + pageNumber: 1, + pageSize: 10, + pageList: [10, 25, 50, 100], + paginationHAlign: 'right', + // right, left + paginationVAlign: 'bottom', + // bottom, top, both + paginationDetailHAlign: 'left', + // right, left + paginationPreText: '‹', + paginationNextText: '›', + paginationSuccessivelySize: 5, + // Maximum successively number of pages in a row + paginationPagesBySide: 1, + // Number of pages on each side (right, left) of the current page. + paginationUseIntermediate: false, + // Calculate intermediate pages for quick access + search: false, + searchOnEnterKey: false, + strictSearch: false, + visibleSearch: false, + showButtonIcons: true, + showButtonText: false, + showSearchButton: false, + showSearchClearButton: false, + trimOnSearch: true, + searchAlign: 'right', + searchTimeOut: 500, + searchText: '', + customSearch: undefined, + showHeader: true, + showFooter: false, + footerStyle: function footerStyle(column) { + return {}; + }, + showColumns: false, + showColumnsToggleAll: false, + showColumnsSearch: false, + minimumCountColumns: 1, + showPaginationSwitch: false, + showRefresh: false, + showToggle: false, + showFullscreen: false, + smartDisplay: true, + escape: false, + filterOptions: { + filterAlgorithm: 'and' + }, + idField: undefined, + selectItemName: 'btSelectItem', + clickToSelect: false, + ignoreClickToSelectOn: function ignoreClickToSelectOn(_ref) { + var tagName = _ref.tagName; + return ['A', 'BUTTON'].includes(tagName); + }, + singleSelect: false, + checkboxHeader: true, + maintainMetaData: false, + multipleSelectRow: false, + uniqueId: undefined, + cardView: false, + detailView: false, + detailViewIcon: true, + detailViewByClick: false, + detailFormatter: function detailFormatter(index, row) { + return ''; + }, + detailFilter: function detailFilter(index, row) { + return true; + }, + toolbar: undefined, + toolbarAlign: 'left', + buttonsToolbar: undefined, + buttonsAlign: 'right', + buttonsOrder: ['paginationSwitch', 'refresh', 'toggle', 'fullscreen', 'columns'], + buttonsPrefix: CONSTANTS.classes.buttonsPrefix, + buttonsClass: CONSTANTS.classes.buttons, + icons: CONSTANTS.icons, + html: CONSTANTS.html, + iconSize: undefined, + iconsPrefix: CONSTANTS.iconsPrefix, + // glyphicon or fa(font-awesome) + onAll: function onAll(name, args) { + return false; + }, + onClickCell: function onClickCell(field, value, row, $element) { + return false; + }, + onDblClickCell: function onDblClickCell(field, value, row, $element) { + return false; + }, + onClickRow: function onClickRow(item, $element) { + return false; + }, + onDblClickRow: function onDblClickRow(item, $element) { + return false; + }, + onSort: function onSort(name, order) { + return false; + }, + onCheck: function onCheck(row) { + return false; + }, + onUncheck: function onUncheck(row) { + return false; + }, + onCheckAll: function onCheckAll(rows) { + return false; + }, + onUncheckAll: function onUncheckAll(rows) { + return false; + }, + onCheckSome: function onCheckSome(rows) { + return false; + }, + onUncheckSome: function onUncheckSome(rows) { + return false; + }, + onLoadSuccess: function onLoadSuccess(data) { + return false; + }, + onLoadError: function onLoadError(status) { + return false; + }, + onColumnSwitch: function onColumnSwitch(field, checked) { + return false; + }, + onPageChange: function onPageChange(number, size) { + return false; + }, + onSearch: function onSearch(text) { + return false; + }, + onToggle: function onToggle(cardView) { + return false; + }, + onPreBody: function onPreBody(data) { + return false; + }, + onPostBody: function onPostBody() { + return false; + }, + onPostHeader: function onPostHeader() { + return false; + }, + onPostFooter: function onPostFooter() { + return false; + }, + onExpandRow: function onExpandRow(index, row, $detail) { + return false; + }, + onCollapseRow: function onCollapseRow(index, row) { + return false; + }, + onRefreshOptions: function onRefreshOptions(options) { + return false; + }, + onRefresh: function onRefresh(params) { + return false; + }, + onResetView: function onResetView() { + return false; + }, + onScrollBody: function onScrollBody() { + return false; + } + }; + var EN = { + formatLoadingMessage: function formatLoadingMessage() { + return 'Loading, please wait'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " rows per page"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Showing ".concat(pageFrom, " to ").concat(pageTo, " of ").concat(totalRows, " rows (filtered from ").concat(totalNotFiltered, " total rows)"); + } + + return "Showing ".concat(pageFrom, " to ").concat(pageTo, " of ").concat(totalRows, " rows"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatSearch: function formatSearch() { + return 'Search'; + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatNoMatches: function formatNoMatches() { + return 'No matching records found'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Refresh'; + }, + formatToggle: function formatToggle() { + return 'Toggle'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Columns'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + } + }; + var COLUMN_DEFAULTS = { + field: undefined, + title: undefined, + titleTooltip: undefined, + 'class': undefined, + width: undefined, + widthUnit: 'px', + rowspan: undefined, + colspan: undefined, + align: undefined, + // left, right, center + halign: undefined, + // left, right, center + falign: undefined, + // left, right, center + valign: undefined, + // top, middle, bottom + cellStyle: undefined, + radio: false, + checkbox: false, + checkboxEnabled: true, + clickToSelect: true, + showSelectTitle: false, + sortable: false, + sortName: undefined, + order: 'asc', + // asc, desc + sorter: undefined, + visible: true, + switchable: true, + cardVisible: true, + searchable: true, + formatter: undefined, + footerFormatter: undefined, + detailFormatter: undefined, + searchFormatter: true, + escape: false, + events: undefined + }; + var METHODS = ['getOptions', 'refreshOptions', 'getData', 'getSelections', 'getAllSelections', 'load', 'append', 'prepend', 'remove', 'removeAll', 'insertRow', 'updateRow', 'getRowByUniqueId', 'updateByUniqueId', 'removeByUniqueId', 'updateCell', 'updateCellByUniqueId', 'showRow', 'hideRow', 'getHiddenRows', 'showColumn', 'hideColumn', 'getVisibleColumns', 'getHiddenColumns', 'showAllColumns', 'hideAllColumns', 'mergeCells', 'checkAll', 'uncheckAll', 'checkInvert', 'check', 'uncheck', 'checkBy', 'uncheckBy', 'refresh', 'destroy', 'resetView', 'showLoading', 'hideLoading', 'togglePagination', 'toggleFullscreen', 'toggleView', 'resetSearch', 'filterBy', 'scrollTo', 'getScrollPosition', 'selectPage', 'prevPage', 'nextPage', 'toggleDetailView', 'expandRow', 'collapseRow', 'expandAllRows', 'collapseAllRows', 'updateColumnTitle', 'updateFormatText']; + var EVENTS = { + 'all.bs.table': 'onAll', + 'click-row.bs.table': 'onClickRow', + 'dbl-click-row.bs.table': 'onDblClickRow', + 'click-cell.bs.table': 'onClickCell', + 'dbl-click-cell.bs.table': 'onDblClickCell', + 'sort.bs.table': 'onSort', + 'check.bs.table': 'onCheck', + 'uncheck.bs.table': 'onUncheck', + 'check-all.bs.table': 'onCheckAll', + 'uncheck-all.bs.table': 'onUncheckAll', + 'check-some.bs.table': 'onCheckSome', + 'uncheck-some.bs.table': 'onUncheckSome', + 'load-success.bs.table': 'onLoadSuccess', + 'load-error.bs.table': 'onLoadError', + 'column-switch.bs.table': 'onColumnSwitch', + 'page-change.bs.table': 'onPageChange', + 'search.bs.table': 'onSearch', + 'toggle.bs.table': 'onToggle', + 'pre-body.bs.table': 'onPreBody', + 'post-body.bs.table': 'onPostBody', + 'post-header.bs.table': 'onPostHeader', + 'post-footer.bs.table': 'onPostFooter', + 'expand-row.bs.table': 'onExpandRow', + 'collapse-row.bs.table': 'onCollapseRow', + 'refresh-options.bs.table': 'onRefreshOptions', + 'reset-view.bs.table': 'onResetView', + 'refresh.bs.table': 'onRefresh', + 'scroll-body.bs.table': 'onScrollBody' + }; + Object.assign(DEFAULTS, EN); + var Constants = { + VERSION: VERSION, + THEME: "bootstrap".concat(bootstrapVersion), + CONSTANTS: CONSTANTS, + DEFAULTS: DEFAULTS, + COLUMN_DEFAULTS: COLUMN_DEFAULTS, + METHODS: METHODS, + EVENTS: EVENTS, + LOCALES: { + en: EN, + 'en-US': EN + } + }; + + var FAILS_ON_PRIMITIVES = fails(function () { objectKeys(1); }); + + // `Object.keys` method + // https://tc39.github.io/ecma262/#sec-object.keys + _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys(it) { + return objectKeys(toObject(it)); + } + }); + + var Utils = { + // it only does '%s', and return '' when arguments are undefined + sprintf: function sprintf(_str) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var flag = true; + var i = 0; + + var str = _str.replace(/%s/g, function () { + var arg = args[i++]; + + if (typeof arg === 'undefined') { + flag = false; + return ''; + } + + return arg; + }); + + return flag ? str : ''; + }, + isEmptyObject: function isEmptyObject() { + var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return Object.entries(obj).length === 0 && obj.constructor === Object; + }, + isNumeric: function isNumeric(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + }, + getFieldTitle: function getFieldTitle(list, value) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = list[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var item = _step.value; + + if (item.field === value) { + return item.title; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return ''; + }, + setFieldIndex: function setFieldIndex(columns) { + var totalCol = 0; + var flag = []; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = columns[0][Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var column = _step2.value; + totalCol += column.colspan || 1; + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return != null) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + for (var i = 0; i < columns.length; i++) { + flag[i] = []; + + for (var j = 0; j < totalCol; j++) { + flag[i][j] = false; + } + } + + for (var _i = 0; _i < columns.length; _i++) { + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = columns[_i][Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var r = _step3.value; + var rowspan = r.rowspan || 1; + var colspan = r.colspan || 1; + + var index = flag[_i].indexOf(false); + + r.colspanIndex = index; + + if (colspan === 1) { + r.fieldIndex = index; // when field is undefined, use index instead + + if (typeof r.field === 'undefined') { + r.field = index; + } + } else { + r.colspanGroup = r.colspan; + } + + for (var k = 0; k < rowspan; k++) { + flag[_i + k][index] = true; + } + + for (var _k = 0; _k < colspan; _k++) { + flag[_i][index + _k] = true; + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return != null) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + } + }, + updateFieldGroup: function updateFieldGroup(columns) { + var _ref; + + var allColumns = (_ref = []).concat.apply(_ref, _toConsumableArray(columns)); + + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = columns[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var c = _step4.value; + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; + + try { + for (var _iterator5 = c[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var r = _step5.value; + + if (r.colspanGroup > 1) { + var colspan = 0; + + var _loop = function _loop(i) { + var column = allColumns.find(function (col) { + return col.fieldIndex === i; + }); + + if (column.visible) { + colspan++; + } + }; + + for (var i = r.colspanIndex; i < r.colspanIndex + r.colspanGroup; i++) { + _loop(i); + } + + r.colspan = colspan; + r.visible = colspan > 0; + } + } + } catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; + } finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5.return != null) { + _iterator5.return(); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } + } + } + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return != null) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + }, + getScrollBarWidth: function getScrollBarWidth() { + if (this.cachedWidth === undefined) { + var $inner = $('
    ').addClass('fixed-table-scroll-inner'); + var $outer = $('
    ').addClass('fixed-table-scroll-outer'); + $outer.append($inner); + $('body').append($outer); + var w1 = $inner[0].offsetWidth; + $outer.css('overflow', 'scroll'); + var w2 = $inner[0].offsetWidth; + + if (w1 === w2) { + w2 = $outer[0].clientWidth; + } + + $outer.remove(); + this.cachedWidth = w1 - w2; + } + + return this.cachedWidth; + }, + calculateObjectValue: function calculateObjectValue(self, name, args, defaultValue) { + var func = name; + + if (typeof name === 'string') { + // support obj.func1.func2 + var names = name.split('.'); + + if (names.length > 1) { + func = window; + var _iteratorNormalCompletion6 = true; + var _didIteratorError6 = false; + var _iteratorError6 = undefined; + + try { + for (var _iterator6 = names[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var f = _step6.value; + func = func[f]; + } + } catch (err) { + _didIteratorError6 = true; + _iteratorError6 = err; + } finally { + try { + if (!_iteratorNormalCompletion6 && _iterator6.return != null) { + _iterator6.return(); + } + } finally { + if (_didIteratorError6) { + throw _iteratorError6; + } + } + } + } else { + func = window[name]; + } + } + + if (func !== null && _typeof(func) === 'object') { + return func; + } + + if (typeof func === 'function') { + return func.apply(self, args || []); + } + + if (!func && typeof name === 'string' && this.sprintf.apply(this, [name].concat(_toConsumableArray(args)))) { + return this.sprintf.apply(this, [name].concat(_toConsumableArray(args))); + } + + return defaultValue; + }, + compareObjects: function compareObjects(objectA, objectB, compareLength) { + var aKeys = Object.keys(objectA); + var bKeys = Object.keys(objectB); + + if (compareLength && aKeys.length !== bKeys.length) { + return false; + } + + for (var _i2 = 0, _aKeys = aKeys; _i2 < _aKeys.length; _i2++) { + var key = _aKeys[_i2]; + + if (bKeys.includes(key) && objectA[key] !== objectB[key]) { + return false; + } + } + + return true; + }, + escapeHTML: function escapeHTML(text) { + if (typeof text === 'string') { + return text.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/`/g, '`'); + } + + return text; + }, + getRealDataAttr: function getRealDataAttr(dataAttr) { + for (var _i3 = 0, _Object$entries = Object.entries(dataAttr); _i3 < _Object$entries.length; _i3++) { + var _Object$entries$_i = _slicedToArray(_Object$entries[_i3], 2), + attr = _Object$entries$_i[0], + value = _Object$entries$_i[1]; + + var auxAttr = attr.split(/(?=[A-Z])/).join('-').toLowerCase(); + + if (auxAttr !== attr) { + dataAttr[auxAttr] = value; + delete dataAttr[attr]; + } + } + + return dataAttr; + }, + getItemField: function getItemField(item, field, escape) { + var value = item; + + if (typeof field !== 'string' || item.hasOwnProperty(field)) { + return escape ? this.escapeHTML(item[field]) : item[field]; + } + + var props = field.split('.'); + var _iteratorNormalCompletion7 = true; + var _didIteratorError7 = false; + var _iteratorError7 = undefined; + + try { + for (var _iterator7 = props[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var p = _step7.value; + value = value && value[p]; + } + } catch (err) { + _didIteratorError7 = true; + _iteratorError7 = err; + } finally { + try { + if (!_iteratorNormalCompletion7 && _iterator7.return != null) { + _iterator7.return(); + } + } finally { + if (_didIteratorError7) { + throw _iteratorError7; + } + } + } + + return escape ? this.escapeHTML(value) : value; + }, + isIEBrowser: function isIEBrowser() { + return navigator.userAgent.includes('MSIE ') || /Trident.*rv:11\./.test(navigator.userAgent); + }, + findIndex: function findIndex(items, item) { + var _iteratorNormalCompletion8 = true; + var _didIteratorError8 = false; + var _iteratorError8 = undefined; + + try { + for (var _iterator8 = items[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { + var it = _step8.value; + + if (JSON.stringify(it) === JSON.stringify(item)) { + return items.indexOf(it); + } + } + } catch (err) { + _didIteratorError8 = true; + _iteratorError8 = err; + } finally { + try { + if (!_iteratorNormalCompletion8 && _iterator8.return != null) { + _iterator8.return(); + } + } finally { + if (_didIteratorError8) { + throw _iteratorError8; + } + } + } + + return -1; + }, + trToData: function trToData(columns, $els) { + var _this = this; + + var data = []; + var m = []; + $els.each(function (y, el) { + var row = {}; // save tr's id, class and data-* attributes + + row._id = $(el).attr('id'); + row._class = $(el).attr('class'); + row._data = _this.getRealDataAttr($(el).data()); + $(el).find('>td,>th').each(function (_x, el) { + var cspan = +$(el).attr('colspan') || 1; + var rspan = +$(el).attr('rowspan') || 1; + var x = _x; // skip already occupied cells in current row + + for (; m[y] && m[y][x]; x++) {} // ignore + // mark matrix elements occupied by current cell with true + + + for (var tx = x; tx < x + cspan; tx++) { + for (var ty = y; ty < y + rspan; ty++) { + if (!m[ty]) { + // fill missing rows + m[ty] = []; + } + + m[ty][tx] = true; + } + } + + var field = columns[x].field; + row[field] = $(el).html().trim(); // save td's id, class and data-* attributes + + row["_".concat(field, "_id")] = $(el).attr('id'); + row["_".concat(field, "_class")] = $(el).attr('class'); + row["_".concat(field, "_rowspan")] = $(el).attr('rowspan'); + row["_".concat(field, "_colspan")] = $(el).attr('colspan'); + row["_".concat(field, "_title")] = $(el).attr('title'); + row["_".concat(field, "_data")] = _this.getRealDataAttr($(el).data()); + }); + data.push(row); + }); + return data; + }, + sort: function sort(a, b, order, sortStable, aPosition, bPosition) { + if (a === undefined || a === null) { + a = ''; + } + + if (b === undefined || b === null) { + b = ''; + } + + if (sortStable && a === b) { + a = aPosition; + b = bPosition; + } // If both values are numeric, do a numeric comparison + + + if (this.isNumeric(a) && this.isNumeric(b)) { + // Convert numerical values form string to float. + a = parseFloat(a); + b = parseFloat(b); + + if (a < b) { + return order * -1; + } + + if (a > b) { + return order; + } + + return 0; + } + + if (a === b) { + return 0; + } // If value is not a string, convert to string + + + if (typeof a !== 'string') { + a = a.toString(); + } + + if (a.localeCompare(b) === -1) { + return order * -1; + } + + return order; + }, + getResizeEventName: function getResizeEventName() { + var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + id = id || "".concat(+new Date()).concat(~~(Math.random() * 1000000)); + return "resize.bootstrap-table-".concat(id); + } + }; + + var BLOCK_ROWS = 50; + var CLUSTER_BLOCKS = 4; + + var VirtualScroll = + /*#__PURE__*/ + function () { + function VirtualScroll(options) { + var _this = this; + + _classCallCheck(this, VirtualScroll); + + this.rows = options.rows; + this.scrollEl = options.scrollEl; + this.contentEl = options.contentEl; + this.callback = options.callback; + this.itemHeight = options.itemHeight; + this.cache = {}; + this.scrollTop = this.scrollEl.scrollTop; + this.initDOM(this.rows, options.fixedScroll); + this.scrollEl.scrollTop = this.scrollTop; + this.lastCluster = 0; + + var onScroll = function onScroll() { + if (_this.lastCluster !== (_this.lastCluster = _this.getNum())) { + _this.initDOM(_this.rows); + + _this.callback(); + } + }; + + this.scrollEl.addEventListener('scroll', onScroll, false); + + this.destroy = function () { + _this.contentEl.innerHtml = ''; + + _this.scrollEl.removeEventListener('scroll', onScroll, false); + }; + } + + _createClass(VirtualScroll, [{ + key: "initDOM", + value: function initDOM(rows, fixedScroll) { + if (typeof this.clusterHeight === 'undefined') { + this.cache.scrollTop = this.scrollEl.scrollTop; + this.cache.data = this.contentEl.innerHTML = rows[0] + rows[0] + rows[0]; + this.getRowsHeight(rows); + } + + var data = this.initData(rows, this.getNum(fixedScroll)); + var thisRows = data.rows.join(''); + var dataChanged = this.checkChanges('data', thisRows); + var topOffsetChanged = this.checkChanges('top', data.topOffset); + var bottomOffsetChanged = this.checkChanges('bottom', data.bottomOffset); + var html = []; + + if (dataChanged && topOffsetChanged) { + if (data.topOffset) { + html.push(this.getExtra('top', data.topOffset)); + } + + html.push(thisRows); + + if (data.bottomOffset) { + html.push(this.getExtra('bottom', data.bottomOffset)); + } + + this.contentEl.innerHTML = html.join(''); + + if (fixedScroll) { + this.contentEl.scrollTop = this.cache.scrollTop; + } + } else if (bottomOffsetChanged) { + this.contentEl.lastChild.style.height = "".concat(data.bottomOffset, "px"); + } + } + }, { + key: "getRowsHeight", + value: function getRowsHeight() { + if (typeof this.itemHeight === 'undefined') { + var nodes = this.contentEl.children; + var node = nodes[Math.floor(nodes.length / 2)]; + this.itemHeight = node.offsetHeight; + } + + this.blockHeight = this.itemHeight * BLOCK_ROWS; + this.clusterRows = BLOCK_ROWS * CLUSTER_BLOCKS; + this.clusterHeight = this.blockHeight * CLUSTER_BLOCKS; + } + }, { + key: "getNum", + value: function getNum(fixedScroll) { + this.scrollTop = fixedScroll ? this.cache.scrollTop : this.scrollEl.scrollTop; + return Math.floor(this.scrollTop / (this.clusterHeight - this.blockHeight)) || 0; + } + }, { + key: "initData", + value: function initData(rows, num) { + if (rows.length < BLOCK_ROWS) { + return { + topOffset: 0, + bottomOffset: 0, + rowsAbove: 0, + rows: rows + }; + } + + var start = Math.max((this.clusterRows - BLOCK_ROWS) * num, 0); + var end = start + this.clusterRows; + var topOffset = Math.max(start * this.itemHeight, 0); + var bottomOffset = Math.max((rows.length - end) * this.itemHeight, 0); + var thisRows = []; + var rowsAbove = start; + + if (topOffset < 1) { + rowsAbove++; + } + + for (var i = start; i < end; i++) { + rows[i] && thisRows.push(rows[i]); + } + + return { + topOffset: topOffset, + bottomOffset: bottomOffset, + rowsAbove: rowsAbove, + rows: thisRows + }; + } + }, { + key: "checkChanges", + value: function checkChanges(type, value) { + var changed = value !== this.cache[type]; + this.cache[type] = value; + return changed; + } + }, { + key: "getExtra", + value: function getExtra(className, height) { + var tag = document.createElement('tr'); + tag.className = "virtual-scroll-".concat(className); + + if (height) { + tag.style.height = "".concat(height, "px"); + } + + return tag.outerHTML; + } + }]); + + return VirtualScroll; + }(); + + var BootstrapTable = + /*#__PURE__*/ + function () { + function BootstrapTable(el, options) { + _classCallCheck(this, BootstrapTable); + + this.options = options; + this.$el = $(el); + this.$el_ = this.$el.clone(); + this.timeoutId_ = 0; + this.timeoutFooter_ = 0; + this.init(); + } + + _createClass(BootstrapTable, [{ + key: "init", + value: function init() { + this.initConstants(); + this.initLocale(); + this.initContainer(); + this.initTable(); + this.initHeader(); + this.initData(); + this.initHiddenRows(); + this.initToolbar(); + this.initPagination(); + this.initBody(); + this.initSearchText(); + this.initServer(); + } + }, { + key: "initConstants", + value: function initConstants() { + var opts = this.options; + this.constants = Constants.CONSTANTS; + this.constants.theme = $.fn.bootstrapTable.theme; + var buttonsPrefix = opts.buttonsPrefix ? "".concat(opts.buttonsPrefix, "-") : ''; + this.constants.buttonsClass = [opts.buttonsPrefix, buttonsPrefix + opts.buttonsClass, Utils.sprintf("".concat(buttonsPrefix, "%s"), opts.iconSize)].join(' ').trim(); + } + }, { + key: "initLocale", + value: function initLocale() { + if (this.options.locale) { + var locales = $.fn.bootstrapTable.locales; + var parts = this.options.locale.split(/-|_/); + parts[0] = parts[0].toLowerCase(); + + if (parts[1]) { + parts[1] = parts[1].toUpperCase(); + } + + if (locales[this.options.locale]) { + $.extend(this.options, locales[this.options.locale]); + } else if (locales[parts.join('-')]) { + $.extend(this.options, locales[parts.join('-')]); + } else if (locales[parts[0]]) { + $.extend(this.options, locales[parts[0]]); + } + } + } + }, { + key: "initContainer", + value: function initContainer() { + var topPagination = ['top', 'both'].includes(this.options.paginationVAlign) ? '
    ' : ''; + var bottomPagination = ['bottom', 'both'].includes(this.options.paginationVAlign) ? '
    ' : ''; + this.$container = $("\n
    \n
    \n ").concat(topPagination, "\n
    \n
    \n
    \n
    \n \n ").concat(this.options.formatLoadingMessage(), "\n \n \n
    \n
    \n
    \n
    \n ").concat(bottomPagination, "\n
    \n ")); + this.$container.insertAfter(this.$el); + this.$tableContainer = this.$container.find('.fixed-table-container'); + this.$tableHeader = this.$container.find('.fixed-table-header'); + this.$tableBody = this.$container.find('.fixed-table-body'); + this.$tableLoading = this.$container.find('.fixed-table-loading'); + this.$tableFooter = this.$el.find('tfoot'); // checking if custom table-toolbar exists or not + + if (this.options.buttonsToolbar) { + this.$toolbar = $('body').find(this.options.buttonsToolbar); + } else { + this.$toolbar = this.$container.find('.fixed-table-toolbar'); + } + + this.$pagination = this.$container.find('.fixed-table-pagination'); + this.$tableBody.append(this.$el); + this.$container.after('
    '); + this.$el.addClass(this.options.classes); + this.$tableLoading.addClass(this.options.classes); + + if (this.options.height) { + this.$tableContainer.addClass('fixed-height'); + + if (this.options.showFooter) { + this.$tableContainer.addClass('has-footer'); + } + + if (this.options.classes.split(' ').includes('table-bordered')) { + this.$tableBody.append('
    '); + this.$tableBorder = this.$tableBody.find('.fixed-table-border'); + this.$tableLoading.addClass('fixed-table-border'); + } + + this.$tableFooter = this.$container.find('.fixed-table-footer'); + } + } + }, { + key: "initTable", + value: function initTable() { + var _this = this; + + var columns = []; + this.$header = this.$el.find('>thead'); + + if (!this.$header.length) { + this.$header = $("")).appendTo(this.$el); + } else if (this.options.theadClasses) { + this.$header.addClass(this.options.theadClasses); + } + + this.$header.find('tr').each(function (i, el) { + var column = []; + $(el).find('th').each(function (i, el) { + // #2014: getFieldIndex and elsewhere assume this is string, causes issues if not + if (typeof $(el).data('field') !== 'undefined') { + $(el).data('field', "".concat($(el).data('field'))); + } + + column.push($.extend({}, { + title: $(el).html(), + 'class': $(el).attr('class'), + titleTooltip: $(el).attr('title'), + rowspan: $(el).attr('rowspan') ? +$(el).attr('rowspan') : undefined, + colspan: $(el).attr('colspan') ? +$(el).attr('colspan') : undefined + }, $(el).data())); + }); + columns.push(column); + }); + + if (!Array.isArray(this.options.columns[0])) { + this.options.columns = [this.options.columns]; + } + + this.options.columns = $.extend(true, [], columns, this.options.columns); + this.columns = []; + this.fieldsColumnsIndex = []; + Utils.setFieldIndex(this.options.columns); + this.options.columns.forEach(function (columns, i) { + columns.forEach(function (_column, j) { + var column = $.extend({}, BootstrapTable.COLUMN_DEFAULTS, _column); + + if (typeof column.fieldIndex !== 'undefined') { + _this.columns[column.fieldIndex] = column; + _this.fieldsColumnsIndex[column.field] = column.fieldIndex; + } + + _this.options.columns[i][j] = column; + }); + }); // if options.data is setting, do not process tbody and tfoot data + + if (!this.options.data.length) { + this.options.data = Utils.trToData(this.columns, this.$el.find('>tbody>tr')); + + if (this.options.data.length) { + this.fromHtml = true; + } + } + + this.footerData = Utils.trToData(this.columns, this.$el.find('>tfoot>tr')); + + if (this.footerData) { + this.$el.find('tfoot').html(''); + } + + if (!this.options.showFooter || this.options.cardView) { + this.$tableFooter.hide(); + } else { + this.$tableFooter.show(); + } + } + }, { + key: "initHeader", + value: function initHeader() { + var _this2 = this; + + var visibleColumns = {}; + var html = []; + this.header = { + fields: [], + styles: [], + classes: [], + formatters: [], + detailFormatters: [], + events: [], + sorters: [], + sortNames: [], + cellStyles: [], + searchables: [] + }; + Utils.updateFieldGroup(this.options.columns); + this.options.columns.forEach(function (columns, i) { + html.push(''); + + if (i === 0 && !_this2.options.cardView && _this2.options.detailView && _this2.options.detailViewIcon) { + html.push("\n
    \n \n ")); + } + + columns.forEach(function (column, j) { + var class_ = Utils.sprintf(' class="%s"', column['class']); + var unitWidth = column.widthUnit; + var width = parseFloat(column.width); + var halign = Utils.sprintf('text-align: %s; ', column.halign ? column.halign : column.align); + var align = Utils.sprintf('text-align: %s; ', column.align); + var style = Utils.sprintf('vertical-align: %s; ', column.valign); + style += Utils.sprintf('width: %s; ', (column.checkbox || column.radio) && !width ? !column.showSelectTitle ? '36px' : undefined : width ? width + unitWidth : undefined); + + if (typeof column.fieldIndex === 'undefined' && !column.visible) { + return; + } + + var headerStyle = Utils.calculateObjectValue(null, _this2.options.headerStyle, [column]); + var csses = []; + var classes = ''; + + if (headerStyle && headerStyle.css) { + for (var _i = 0, _Object$entries = Object.entries(headerStyle.css); _i < _Object$entries.length; _i++) { + var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), + key = _Object$entries$_i[0], + value = _Object$entries$_i[1]; + + csses.push("".concat(key, ": ").concat(value)); + } + } + + if (headerStyle && headerStyle.classes) { + classes = Utils.sprintf(' class="%s"', column['class'] ? [column['class'], headerStyle.classes].join(' ') : headerStyle.classes); + } + + if (typeof column.fieldIndex !== 'undefined') { + _this2.header.fields[column.fieldIndex] = column.field; + _this2.header.styles[column.fieldIndex] = align + style; + _this2.header.classes[column.fieldIndex] = class_; + _this2.header.formatters[column.fieldIndex] = column.formatter; + _this2.header.detailFormatters[column.fieldIndex] = column.detailFormatter; + _this2.header.events[column.fieldIndex] = column.events; + _this2.header.sorters[column.fieldIndex] = column.sorter; + _this2.header.sortNames[column.fieldIndex] = column.sortName; + _this2.header.cellStyles[column.fieldIndex] = column.cellStyle; + _this2.header.searchables[column.fieldIndex] = column.searchable; + + if (!column.visible) { + return; + } + + if (_this2.options.cardView && !column.cardVisible) { + return; + } + + visibleColumns[column.field] = column; + } + + html.push(" 0 ? ' data-not-first-th' : '', '>'); + html.push(Utils.sprintf('
    ', _this2.options.sortable && column.sortable ? 'sortable both' : '')); + var text = _this2.options.escape ? Utils.escapeHTML(column.title) : column.title; + var title = text; + + if (column.checkbox) { + text = ''; + var cf = column.field ? column.field : 'btSelectAll'; + if (!_this2.options.singleSelect && _this2.options.checkboxHeader) { + text = '
    ' + + ' ' + + ' ' + + '
    '; + } + + _this2.header.stateField = column.field; + } + + if (column.radio) { + text = ''; + _this2.header.stateField = column.field; + } + + if (!text && column.showSelectTitle) { + text += title; + } + + html.push(text); + html.push('
    '); + html.push('
    '); + html.push('
    '); + html.push(''); + }); + html.push(''); + }); + this.$header.html(html.join('')); + this.$header.find('th[data-field]').each(function (i, el) { + $(el).data(visibleColumns[$(el).data('field')]); + }); + this.$container.off('click', '.th-inner').on('click', '.th-inner', function (e) { + var $this = $(e.currentTarget); + + if (_this2.options.detailView && !$this.parent().hasClass('bs-checkbox')) { + if ($this.closest('.bootstrap-table')[0] !== _this2.$container[0]) { + return false; + } + } + + if (_this2.options.sortable && $this.parent().data().sortable) { + _this2.onSort(e); + } + }); + this.$header.children().children().off('keypress').on('keypress', function (e) { + if (_this2.options.sortable && $(e.currentTarget).data().sortable) { + var code = e.keyCode || e.which; + + if (code === 13) { + // Enter keycode + _this2.onSort(e); + } + } + }); + var resizeEvent = Utils.getResizeEventName(this.$el.attr('id')); + $(window).off(resizeEvent); + + if (!this.options.showHeader || this.options.cardView) { + this.$header.hide(); + this.$tableHeader.hide(); + this.$tableLoading.css('top', 0); + } else { + this.$header.show(); + this.$tableHeader.show(); + this.$tableLoading.css('top', this.$header.outerHeight() + 1); // Assign the correct sortable arrow + + this.getCaret(); + $(window).on(resizeEvent, function () { + return _this2.resetView(); + }); + } + + this.$selectAll = this.$header.find('[name="btSelectAll"]'); + this.$selectAll.off('click').on('click', function (e) { + e.stopPropagation(); + var checked = $(e.currentTarget).prop('checked'); + + _this2[checked ? 'checkAll' : 'uncheckAll'](); + + _this2.updateSelected(); + }); + } + }, { + key: "initData", + value: function initData(data, type) { + if (type === 'append') { + this.options.data = this.options.data.concat(data); + } else if (type === 'prepend') { + this.options.data = [].concat(data).concat(this.options.data); + } else { + this.options.data = data || this.options.data; + } + + this.data = this.options.data; + + if (this.options.sidePagination === 'server') { + return; + } + + this.initSort(); + } + }, { + key: "initSort", + value: function initSort() { + var _this3 = this; + + var name = this.options.sortName; + var order = this.options.sortOrder === 'desc' ? -1 : 1; + var index = this.header.fields.indexOf(this.options.sortName); + var timeoutId = 0; + + if (index !== -1) { + if (this.options.sortStable) { + this.data.forEach(function (row, i) { + if (!row.hasOwnProperty('_position')) { + row._position = i; + } + }); + } + + if (this.options.customSort) { + Utils.calculateObjectValue(this.options, this.options.customSort, [this.options.sortName, this.options.sortOrder, this.data]); + } else { + this.data.sort(function (a, b) { + if (_this3.header.sortNames[index]) { + name = _this3.header.sortNames[index]; + } + + var aa = Utils.getItemField(a, name, _this3.options.escape); + var bb = Utils.getItemField(b, name, _this3.options.escape); + var value = Utils.calculateObjectValue(_this3.header, _this3.header.sorters[index], [aa, bb, a, b]); + + if (value !== undefined) { + if (_this3.options.sortStable && value === 0) { + return order * (a._position - b._position); + } + + return order * value; + } + + return Utils.sort(aa, bb, order, _this3.options.sortStable, a._position, b._position); + }); + } + + if (this.options.sortClass !== undefined) { + clearTimeout(timeoutId); + timeoutId = setTimeout(function () { + _this3.$el.removeClass(_this3.options.sortClass); + + var index = _this3.$header.find("[data-field=\"".concat(_this3.options.sortName, "\"]")).index(); + + _this3.$el.find("tr td:nth-child(".concat(index + 1, ")")).addClass(_this3.options.sortClass); + }, 250); + } + } + } + }, { + key: "onSort", + value: function onSort(_ref) { + var type = _ref.type, + currentTarget = _ref.currentTarget; + var $this = type === 'keypress' ? $(currentTarget) : $(currentTarget).parent(); + var $this_ = this.$header.find('th').eq($this.index()); + this.$header.add(this.$header_).find('span.order').remove(); + + if (this.options.sortName === $this.data('field')) { + this.options.sortOrder = this.options.sortOrder === 'asc' ? 'desc' : 'asc'; + } else { + this.options.sortName = $this.data('field'); + + if (this.options.rememberOrder) { + this.options.sortOrder = $this.data('order') === 'asc' ? 'desc' : 'asc'; + } else { + this.options.sortOrder = this.columns[this.fieldsColumnsIndex[$this.data('field')]].sortOrder || this.columns[this.fieldsColumnsIndex[$this.data('field')]].order; + } + } + + this.trigger('sort', this.options.sortName, this.options.sortOrder); + $this.add($this_).data('order', this.options.sortOrder); // Assign the correct sortable arrow + + this.getCaret(); + + if (this.options.sidePagination === 'server' && this.options.serverSort) { + this.options.pageNumber = 1; + this.initServer(this.options.silentSort); + return; + } + + this.initSort(); + this.initBody(); + } + }, { + key: "initToolbar", + value: function initToolbar() { + var _this4 = this; + + var opts = this.options; + var html = []; + var timeoutId = 0; + var $keepOpen; + var switchableCount = 0; + + if (this.$toolbar.find('.bs-bars').children().length) { + $('body').append($(opts.toolbar)); + } + + this.$toolbar.html(''); + + if (typeof opts.toolbar === 'string' || _typeof(opts.toolbar) === 'object') { + $(Utils.sprintf('
    ', this.constants.classes.pull, opts.toolbarAlign)).appendTo(this.$toolbar).append($(opts.toolbar)); + } // showColumns, showToggle, showRefresh + + + html = ["
    ")]; + + if (typeof opts.icons === 'string') { + opts.icons = Utils.calculateObjectValue(null, opts.icons); + } + + var buttonsHtml = { + paginationSwitch: ""), + refresh: ""), + toggle: ""), + fullscreen: ""), + columns: function () { + var html = []; + html.push("
    \n \n ").concat(_this4.constants.html.toolbarDropdown[0])); + + if (opts.showColumnsSearch) { + html.push(Utils.sprintf(_this4.constants.html.toolbarDropdownItem, Utils.sprintf('', _this4.constants.classes.input, opts.formatSearch()))); + html.push(_this4.constants.html.toolbarDropdownSeparator); + } + + if (opts.showColumnsToggleAll) { + var allFieldsVisible = _this4.getVisibleColumns().length === _this4.columns.filter(function (column) { + return !_this4.isSelectionColumn(column); + }).length; + + html.push(Utils.sprintf(_this4.constants.html.toolbarDropdownItem, Utils.sprintf('
    ', allFieldsVisible ? 'checked="checked"' : '', opts.formatColumnsToggleAll()))); + + html.push(_this4.constants.html.toolbarDropdownSeparator); + } + + var visibleColumns = 0; + + _this4.columns.forEach(function (column, i) { + if (column.visible) { + visibleColumns++; + } + }); + + _this4.columns.forEach(function (column, i) { + if (_this4.isSelectionColumn(column)) { + return; + } + + if (opts.cardView && !column.cardVisible) { + return; + } + + var checked = column.visible ? ' checked="checked"' : ''; + var disabled = visibleColumns <= _this4.options.minimumCountColumns && checked ? ' disabled="disabled"' : ''; + + if (column.switchable) { + html.push(Utils.sprintf(_this4.constants.html.toolbarDropdownItem, Utils.sprintf('
    ', column.field, column.field, i, checked, disabled, column.field, column.title))); + switchableCount++; + } + }); + + html.push(_this4.constants.html.toolbarDropdown[1], '
    '); + return html.join(''); + }() + }; + + if (typeof opts.buttonsOrder === 'string') { + opts.buttonsOrder = opts.buttonsOrder.replace(/\[|\]| |'/g, '').toLowerCase().split(','); + } + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = opts.buttonsOrder[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var button = _step.value; + + if (opts['show' + button.charAt(0).toUpperCase() + button.substring(1)]) { + html.push(buttonsHtml[button]); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + html.push('
    '); // Fix #188: this.showToolbar is for extensions + + if (this.showToolbar || html.length > 2) { + this.$toolbar.append(html.join('')); + } + + if (opts.showPaginationSwitch) { + this.$toolbar.find('button[name="paginationSwitch"]').off('click').on('click', function () { + return _this4.togglePagination(); + }); + } + + if (opts.showFullscreen) { + this.$toolbar.find('button[name="fullscreen"]').off('click').on('click', function () { + return _this4.toggleFullscreen(); + }); + } + + if (opts.showRefresh) { + this.$toolbar.find('button[name="refresh"]').off('click').on('click', function () { + return _this4.refresh(); + }); + } + + if (opts.showToggle) { + this.$toolbar.find('button[name="toggle"]').off('click').on('click', function () { + _this4.toggleView(); + }); + } + + if (opts.showColumns) { + $keepOpen = this.$toolbar.find('.keep-open'); + var $checkboxes = $keepOpen.find('input[type="checkbox"]:not(".toggle-all")'); + var $toggleAll = $keepOpen.find('input[type="checkbox"].toggle-all'); + + if (switchableCount <= opts.minimumCountColumns) { + $keepOpen.find('input').prop('disabled', true); + } + + $keepOpen.find('li, label').off('click').on('click', function (e) { + e.stopImmediatePropagation(); + }); + $checkboxes.off('click').on('click', function (_ref2) { + var currentTarget = _ref2.currentTarget; + var $this = $(currentTarget); + + _this4._toggleColumn($this.val(), $this.prop('checked'), false); + + _this4.trigger('column-switch', $this.data('field'), $this.prop('checked')); + + $toggleAll.prop('checked', $checkboxes.filter(':checked').length === _this4.columns.filter(function (column) { + return !_this4.isSelectionColumn(column); + }).length); + }); + $toggleAll.off('click').on('click', function (_ref3) { + var currentTarget = _ref3.currentTarget; + + _this4._toggleAllColumns($(currentTarget).prop('checked')); + }); + + if (opts.showColumnsSearch) { + var $columnsSearch = $keepOpen.find('#columnsSearch'); + var $listItems = $keepOpen.find('.dropdown-item-marker'); + $columnsSearch.on('keyup paste change', function (_ref4) { + var currentTarget = _ref4.currentTarget; + var $this = $(currentTarget); + var searchValue = $this.val().toLowerCase(); + $listItems.show(); + $checkboxes.each(function (i, el) { + var $checkbox = $(el); + var $listItem = $checkbox.parents('.dropdown-item-marker'); + var text = $listItem.text().toLowerCase(); + + if (!text.includes(searchValue)) { + $listItem.hide(); + } + }); + }); + } + } // Fix #4516: this.showSearchClearButton is for extensions + + + if (opts.search || this.showSearchClearButton) { + html = []; + var showSearchButton = Utils.sprintf(this.constants.html.searchButton, this.constants.buttonsClass, opts.formatSearch(), opts.showButtonIcons ? Utils.sprintf(this.constants.html.icon, opts.iconsPrefix, opts.icons.search) : '', opts.showButtonText ? opts.formatSearch() : ''); + var showSearchClearButton = Utils.sprintf(this.constants.html.searchClearButton, this.constants.buttonsClass, opts.formatClearSearch(), opts.showButtonIcons ? Utils.sprintf(this.constants.html.icon, opts.iconsPrefix, opts.icons.clearSearch) : '', opts.showButtonText ? opts.formatClearSearch() : ''); + var searchInputHtml = ""); + var searchInputFinalHtml = searchInputHtml; + + if (opts.showSearchButton || opts.showSearchClearButton) { + var _buttonsHtml = (opts.showSearchButton ? showSearchButton : '') + (opts.showSearchClearButton ? showSearchClearButton : ''); + + searchInputFinalHtml = opts.search ? Utils.sprintf(this.constants.html.inputGroup, searchInputHtml, _buttonsHtml) : _buttonsHtml; + } + + html.push(Utils.sprintf("\n
    \n %s\n
    \n "), searchInputFinalHtml)); + this.$toolbar.append(html.join('')); + var $searchInput = this.$toolbar.find('.search input'); + + var handleInputEvent = function handleInputEvent() { + var eventTriggers = "keyup drop blur ".concat(Utils.isIEBrowser() ? 'mouseup' : ''); + $searchInput.off(eventTriggers).on(eventTriggers, function (event) { + if (opts.searchOnEnterKey && event.keyCode !== 13) { + return; + } + + if ([37, 38, 39, 40].includes(event.keyCode)) { + return; + } + + clearTimeout(timeoutId); // doesn't matter if it's 0 + + timeoutId = setTimeout(function () { + _this4.onSearch({ + currentTarget: event.currentTarget + }); + }, opts.searchTimeOut); + }); + }; + + if (opts.showSearchButton) { + this.$toolbar.find('.search button[name=search]').off('click').on('click', function (event) { + clearTimeout(timeoutId); // doesn't matter if it's 0 + + timeoutId = setTimeout(function () { + _this4.onSearch({ + currentTarget: $searchInput + }); + }, opts.searchTimeOut); + }); + + if (opts.searchOnEnterKey) { + handleInputEvent(); + } + } else { + handleInputEvent(); + } + + if (opts.showSearchClearButton) { + this.$toolbar.find('.search button[name=clearSearch]').click(function () { + _this4.resetSearch(); + }); + } + } + } + }, { + key: "onSearch", + value: function onSearch() { + var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + currentTarget = _ref5.currentTarget, + firedByInitSearchText = _ref5.firedByInitSearchText; + + var overwriteSearchText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + if (currentTarget !== undefined && $(currentTarget).length && overwriteSearchText) { + var text = $(currentTarget).val().trim(); + + if (this.options.trimOnSearch && $(currentTarget).val() !== text) { + $(currentTarget).val(text); + } + + if (this.searchText === text && text.length > 0) { + return; + } + + if ($(currentTarget).hasClass('search-input')) { + this.searchText = text; + this.options.searchText = text; + } + } + + if (!firedByInitSearchText) { + this.options.pageNumber = 1; + } + + this.initSearch(); + + if (firedByInitSearchText) { + if (this.options.sidePagination === 'client') { + this.updatePagination(); + } + } else { + this.updatePagination(); + } + + this.trigger('search', this.searchText); + } + }, { + key: "initSearch", + value: function initSearch() { + var _this5 = this; + + this.filterOptions = this.filterOptions || this.options.filterOptions; + + if (this.options.sidePagination !== 'server') { + if (this.options.customSearch) { + this.data = Utils.calculateObjectValue(this.options, this.options.customSearch, [this.options.data, this.searchText, this.filterColumns]); + return; + } + + var s = this.searchText && (this.fromHtml ? Utils.escapeHTML(this.searchText) : this.searchText).toLowerCase(); + var f = Utils.isEmptyObject(this.filterColumns) ? null : this.filterColumns; // Check filter + + if (typeof this.filterOptions.filterAlgorithm === 'function') { + this.data = this.options.data.filter(function (item, i) { + return _this5.filterOptions.filterAlgorithm.apply(null, [item, f]); + }); + } else if (typeof this.filterOptions.filterAlgorithm === 'string') { + this.data = f ? this.options.data.filter(function (item, i) { + var filterAlgorithm = _this5.filterOptions.filterAlgorithm; + + if (filterAlgorithm === 'and') { + for (var key in f) { + if (Array.isArray(f[key]) && !f[key].includes(item[key]) || !Array.isArray(f[key]) && item[key] !== f[key]) { + return false; + } + } + } else if (filterAlgorithm === 'or') { + var match = false; + + for (var _key in f) { + if (Array.isArray(f[_key]) && f[_key].includes(item[_key]) || !Array.isArray(f[_key]) && item[_key] === f[_key]) { + match = true; + } + } + + return match; + } + + return true; + }) : this.options.data; + } + + var visibleFields = this.getVisibleFields(); + this.data = s ? this.data.filter(function (item, i) { + for (var j = 0; j < _this5.header.fields.length; j++) { + if (!_this5.header.searchables[j] || _this5.options.visibleSearch && visibleFields.indexOf(_this5.header.fields[j]) === -1) { + continue; + } + + var key = Utils.isNumeric(_this5.header.fields[j]) ? parseInt(_this5.header.fields[j], 10) : _this5.header.fields[j]; + var column = _this5.columns[_this5.fieldsColumnsIndex[key]]; + var value = void 0; + + if (typeof key === 'string') { + value = item; + var props = key.split('.'); + + for (var _i2 = 0; _i2 < props.length; _i2++) { + if (value[props[_i2]] !== null) { + value = value[props[_i2]]; + } + } + } else { + value = item[key]; + } // Fix #142: respect searchFormatter boolean + + + if (column && column.searchFormatter) { + value = Utils.calculateObjectValue(column, _this5.header.formatters[j], [value, item, i, column.field], value); + } + + if (typeof value === 'string' || typeof value === 'number') { + if (_this5.options.strictSearch) { + if ("".concat(value).toLowerCase() === s) { + return true; + } + } else { + var largerSmallerEqualsRegex = /(?:(<=|=>|=<|>=|>|<)(?:\s+)?(\d+)?|(\d+)?(\s+)?(<=|=>|=<|>=|>|<))/gm; + var matches = largerSmallerEqualsRegex.exec(s); + var comparisonCheck = false; + + if (matches) { + var operator = matches[1] || "".concat(matches[5], "l"); + var comparisonValue = matches[2] || matches[3]; + var int = parseInt(value, 10); + var comparisonInt = parseInt(comparisonValue, 10); + + switch (operator) { + case '>': + case ' comparisonInt; + break; + + case '<': + case '>l': + comparisonCheck = int < comparisonInt; + break; + + case '<=': + case '=<': + case '>=l': + case '=>l': + comparisonCheck = int <= comparisonInt; + break; + + case '>=': + case '=>': + case '<=l': + case '== comparisonInt; + break; + } + } + + if (comparisonCheck || "".concat(value).toLowerCase().includes(s)) { + return true; + } + } + } + } + + return false; + }) : this.data; + } + + this.initSort(); + } + }, { + key: "initPagination", + value: function initPagination() { + var _this6 = this; + + var opts = this.options; + + if (!opts.pagination) { + this.$pagination.hide(); + return; + } + + this.$pagination.show(); + var html = []; + var allSelected = false; + var i; + var from; + var to; + var $pageList; + var $pre; + var $next; + var $number; + var data = this.getData({ + includeHiddenRows: false + }); + var pageList = opts.pageList; + + if (typeof pageList === 'string') { + pageList = pageList.replace(/\[|\]| /g, '').toLowerCase().split(','); + } + + pageList = pageList.map(function (value) { + if (typeof value === 'string') { + return value.toLowerCase() === opts.formatAllRows().toLowerCase() || ['all', 'unlimited'].includes(value.toLowerCase()) ? opts.formatAllRows() : +value; + } + + return value; + }); + + if (opts.sidePagination !== 'server') { + opts.totalRows = data.length; + } + + this.totalPages = 0; + + if (opts.totalRows) { + if (opts.pageSize === opts.formatAllRows()) { + opts.pageSize = opts.totalRows; + allSelected = true; + } + + this.totalPages = ~~((opts.totalRows - 1) / opts.pageSize) + 1; + opts.totalPages = this.totalPages; + } + + if (this.totalPages > 0 && opts.pageNumber > this.totalPages) { + opts.pageNumber = this.totalPages; + } + + this.pageFrom = (opts.pageNumber - 1) * opts.pageSize + 1; + this.pageTo = opts.pageNumber * opts.pageSize; + + if (this.pageTo > opts.totalRows) { + this.pageTo = opts.totalRows; + } + + if (this.options.pagination && this.options.sidePagination !== 'server') { + this.options.totalNotFiltered = this.options.data.length; + } + + if (!this.options.showExtendedPagination) { + this.options.totalNotFiltered = undefined; + } + + var paginationInfo = opts.onlyInfoPagination ? opts.formatDetailPagination(opts.totalRows) : opts.formatShowingRows(this.pageFrom, this.pageTo, opts.totalRows, opts.totalNotFiltered); + html.push("
    \n \n ").concat(paginationInfo, "\n ")); + + if (!opts.onlyInfoPagination) { + html.push(''); + var pageNumber = ["\n \n ").concat(this.constants.html.pageDropdown[0])]; + pageList.forEach(function (page, i) { + if (!opts.smartDisplay || i === 0 || pageList[i - 1] < opts.totalRows) { + var active; + + if (allSelected) { + active = page === opts.formatAllRows() ? _this6.constants.classes.dropdownActive : ''; + } else { + active = page === opts.pageSize ? _this6.constants.classes.dropdownActive : ''; + } + + pageNumber.push(Utils.sprintf(_this6.constants.html.pageDropdownItem, active, page)); + } + }); + pageNumber.push("".concat(this.constants.html.pageDropdown[1], "")); + html.push(opts.formatRecordsPerPage(pageNumber.join(''))); + html.push('
    '); + html.push("
    "), Utils.sprintf(this.constants.html.pagination[0], Utils.sprintf(' pagination-%s', opts.iconSize)), Utils.sprintf(this.constants.html.paginationItem, ' page-pre', opts.formatSRPaginationPreText(), opts.paginationPreText)); + + if (this.totalPages < opts.paginationSuccessivelySize) { + from = 1; + to = this.totalPages; + } else { + from = opts.pageNumber - opts.paginationPagesBySide; + to = from + opts.paginationPagesBySide * 2; + } + + if (opts.pageNumber < opts.paginationSuccessivelySize - 1) { + to = opts.paginationSuccessivelySize; + } + + if (opts.paginationSuccessivelySize > this.totalPages - from) { + from = from - (opts.paginationSuccessivelySize - (this.totalPages - from)) + 1; + } + + if (from < 1) { + from = 1; + } + + if (to > this.totalPages) { + to = this.totalPages; + } + + var middleSize = Math.round(opts.paginationPagesBySide / 2); + + var pageItem = function pageItem(i) { + var classes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + return Utils.sprintf(_this6.constants.html.paginationItem, classes + (i === opts.pageNumber ? " ".concat(_this6.constants.classes.paginationActive) : ''), opts.formatSRPaginationPageText(i), i); + }; + + if (from > 1) { + var max = opts.paginationPagesBySide; + if (max >= from) max = from - 1; + + for (i = 1; i <= max; i++) { + html.push(pageItem(i)); + } + + if (from - 1 === max + 1) { + i = from - 1; + html.push(pageItem(i)); + } else { + if (from - 1 > max) { + if (from - opts.paginationPagesBySide * 2 > opts.paginationPagesBySide && opts.paginationUseIntermediate) { + i = Math.round((from - middleSize) / 2 + middleSize); + html.push(pageItem(i, ' page-intermediate')); + } else { + html.push(Utils.sprintf(this.constants.html.paginationItem, ' page-first-separator disabled', '', '...')); + } + } + } + } + + for (i = from; i <= to; i++) { + html.push(pageItem(i)); + } + + if (this.totalPages > to) { + var min = this.totalPages - (opts.paginationPagesBySide - 1); + if (to >= min) min = to + 1; + + if (to + 1 === min - 1) { + i = to + 1; + html.push(pageItem(i)); + } else { + if (min > to + 1) { + if (this.totalPages - to > opts.paginationPagesBySide * 2 && opts.paginationUseIntermediate) { + i = Math.round((this.totalPages - middleSize - to) / 2 + to); + html.push(pageItem(i, ' page-intermediate')); + } else { + html.push(Utils.sprintf(this.constants.html.paginationItem, ' page-last-separator disabled', '', '...')); + } + } + } + + for (i = min; i <= this.totalPages; i++) { + html.push(pageItem(i)); + } + } + + html.push(Utils.sprintf(this.constants.html.paginationItem, ' page-next', opts.formatSRPaginationNextText(), opts.paginationNextText)); + html.push(this.constants.html.pagination[1], '
    '); + } + + this.$pagination.html(html.join('')); + var dropupClass = ['bottom', 'both'].includes(opts.paginationVAlign) ? " ".concat(this.constants.classes.dropup) : ''; + this.$pagination.last().find('.page-list > span').addClass(dropupClass); + + if (!opts.onlyInfoPagination) { + $pageList = this.$pagination.find('.page-list a'); + $pre = this.$pagination.find('.page-pre'); + $next = this.$pagination.find('.page-next'); + $number = this.$pagination.find('.page-item').not('.page-next, .page-pre, .page-last-separator, .page-first-separator'); + + if (this.totalPages <= 1) { + this.$pagination.find('div.pagination').hide(); + } + + if (opts.smartDisplay) { + if (pageList.length < 2 || opts.totalRows <= pageList[0]) { + this.$pagination.find('span.page-list').hide(); + } + } // when data is empty, hide the pagination + + + this.$pagination[this.getData().length ? 'show' : 'hide'](); + + if (!opts.paginationLoop) { + if (opts.pageNumber === 1) { + $pre.addClass('disabled'); + } + + if (opts.pageNumber === this.totalPages) { + $next.addClass('disabled'); + } + } + + if (allSelected) { + opts.pageSize = opts.formatAllRows(); + } // removed the events for last and first, onPageNumber executeds the same logic + + + $pageList.off('click').on('click', function (e) { + return _this6.onPageListChange(e); + }); + $pre.off('click').on('click', function (e) { + return _this6.onPagePre(e); + }); + $next.off('click').on('click', function (e) { + return _this6.onPageNext(e); + }); + $number.off('click').on('click', function (e) { + return _this6.onPageNumber(e); + }); + } + } + }, { + key: "updatePagination", + value: function updatePagination(event) { + // Fix #171: IE disabled button can be clicked bug. + if (event && $(event.currentTarget).hasClass('disabled')) { + return; + } + + if (!this.options.maintainMetaData) { + this.resetRows(); + } + + this.initPagination(); + + if (this.options.sidePagination === 'server') { + this.initServer(); + } else { + this.initBody(); + } + + this.trigger('page-change', this.options.pageNumber, this.options.pageSize); + } + }, { + key: "onPageListChange", + value: function onPageListChange(event) { + event.preventDefault(); + var $this = $(event.currentTarget); + $this.parent().addClass(this.constants.classes.dropdownActive).siblings().removeClass(this.constants.classes.dropdownActive); + this.options.pageSize = $this.text().toUpperCase() === this.options.formatAllRows().toUpperCase() ? this.options.formatAllRows() : +$this.text(); + this.$toolbar.find('.page-size').text(this.options.pageSize); + this.updatePagination(event); + return false; + } + }, { + key: "onPagePre", + value: function onPagePre(event) { + event.preventDefault(); + + if (this.options.pageNumber - 1 === 0) { + this.options.pageNumber = this.options.totalPages; + } else { + this.options.pageNumber--; + } + + this.updatePagination(event); + return false; + } + }, { + key: "onPageNext", + value: function onPageNext(event) { + event.preventDefault(); + + if (this.options.pageNumber + 1 > this.options.totalPages) { + this.options.pageNumber = 1; + } else { + this.options.pageNumber++; + } + + this.updatePagination(event); + return false; + } + }, { + key: "onPageNumber", + value: function onPageNumber(event) { + event.preventDefault(); + + if (this.options.pageNumber === +$(event.currentTarget).text()) { + return; + } + + this.options.pageNumber = +$(event.currentTarget).text(); + this.updatePagination(event); + return false; + } + }, { + key: "initRow", + value: function initRow(item, i, data, trFragments) { + var _this7 = this; + + var html = []; + var style = {}; + var csses = []; + var data_ = ''; + var attributes = {}; + var htmlAttributes = []; + + if (Utils.findIndex(this.hiddenRows, item) > -1) { + return; + } + + style = Utils.calculateObjectValue(this.options, this.options.rowStyle, [item, i], style); + + if (style && style.css) { + for (var _i3 = 0, _Object$entries2 = Object.entries(style.css); _i3 < _Object$entries2.length; _i3++) { + var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i3], 2), + key = _Object$entries2$_i[0], + value = _Object$entries2$_i[1]; + + csses.push("".concat(key, ": ").concat(value)); + } + } + + attributes = Utils.calculateObjectValue(this.options, this.options.rowAttributes, [item, i], attributes); + + if (attributes) { + for (var _i4 = 0, _Object$entries3 = Object.entries(attributes); _i4 < _Object$entries3.length; _i4++) { + var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i4], 2), + _key2 = _Object$entries3$_i[0], + _value = _Object$entries3$_i[1]; + + htmlAttributes.push("".concat(_key2, "=\"").concat(Utils.escapeHTML(_value), "\"")); + } + } + + if (item._data && !Utils.isEmptyObject(item._data)) { + for (var _i5 = 0, _Object$entries4 = Object.entries(item._data); _i5 < _Object$entries4.length; _i5++) { + var _Object$entries4$_i = _slicedToArray(_Object$entries4[_i5], 2), + k = _Object$entries4$_i[0], + v = _Object$entries4$_i[1]; + + // ignore data-index + if (k === 'index') { + return; + } + + data_ += " data-".concat(k, "='").concat(_typeof(v) === 'object' ? JSON.stringify(v) : v, "'"); + } + } + + html.push(''); + + if (this.options.cardView) { + html.push("
    ")); + } + + if (!this.options.cardView && this.options.detailView && this.options.detailViewIcon) { + html.push(''); + + if (Utils.calculateObjectValue(null, this.options.detailFilter, [i, item])) { + html.push("\n \n ".concat(Utils.sprintf(this.constants.html.icon, this.options.iconsPrefix, this.options.icons.detailOpen), "\n \n ")); + } + + html.push(''); + } + + this.header.fields.forEach(function (field, j) { + var text = ''; + var value_ = Utils.getItemField(item, field, _this7.options.escape); + var value = ''; + var type = ''; + var cellStyle = {}; + var id_ = ''; + var class_ = _this7.header.classes[j]; + var style_ = ''; + var data_ = ''; + var rowspan_ = ''; + var colspan_ = ''; + var title_ = ''; + var column = _this7.columns[j]; + + if (_this7.fromHtml && typeof value_ === 'undefined') { + if (!column.checkbox && !column.radio) { + return; + } + } + + if (!column.visible) { + return; + } + + if (_this7.options.cardView && !column.cardVisible) { + return; + } + + if (column.escape) { + value_ = Utils.escapeHTML(value_); + } + + if (csses.concat([_this7.header.styles[j]]).length) { + style_ = " style=\"".concat(csses.concat([_this7.header.styles[j]]).join('; '), "\""); + } // handle td's id and class + + + if (item["_".concat(field, "_id")]) { + id_ = Utils.sprintf(' id="%s"', item["_".concat(field, "_id")]); + } + + if (item["_".concat(field, "_class")]) { + class_ = Utils.sprintf(' class="%s"', item["_".concat(field, "_class")]); + } + + if (item["_".concat(field, "_rowspan")]) { + rowspan_ = Utils.sprintf(' rowspan="%s"', item["_".concat(field, "_rowspan")]); + } + + if (item["_".concat(field, "_colspan")]) { + colspan_ = Utils.sprintf(' colspan="%s"', item["_".concat(field, "_colspan")]); + } + + if (item["_".concat(field, "_title")]) { + title_ = Utils.sprintf(' title="%s"', item["_".concat(field, "_title")]); + } + + cellStyle = Utils.calculateObjectValue(_this7.header, _this7.header.cellStyles[j], [value_, item, i, field], cellStyle); + + if (cellStyle.classes) { + class_ = " class=\"".concat(cellStyle.classes, "\""); + } + + if (cellStyle.css) { + var csses_ = []; + + for (var _i6 = 0, _Object$entries5 = Object.entries(cellStyle.css); _i6 < _Object$entries5.length; _i6++) { + var _Object$entries5$_i = _slicedToArray(_Object$entries5[_i6], 2), + _key3 = _Object$entries5$_i[0], + _value2 = _Object$entries5$_i[1]; + + csses_.push("".concat(_key3, ": ").concat(_value2)); + } + + style_ = " style=\"".concat(csses_.concat(_this7.header.styles[j]).join('; '), "\""); + } + + value = Utils.calculateObjectValue(column, _this7.header.formatters[j], [value_, item, i, field], value_); + + if (item["_".concat(field, "_data")] && !Utils.isEmptyObject(item["_".concat(field, "_data")])) { + for (var _i7 = 0, _Object$entries6 = Object.entries(item["_".concat(field, "_data")]); _i7 < _Object$entries6.length; _i7++) { + var _Object$entries6$_i = _slicedToArray(_Object$entries6[_i7], 2), + _k = _Object$entries6$_i[0], + _v = _Object$entries6$_i[1]; + + // ignore data-index + if (_k === 'index') { + return; + } + + data_ += " data-".concat(_k, "=\"").concat(_v, "\""); + } + } + + if (column.checkbox || column.radio) { + type = column.checkbox ? 'checkbox' : type; + type = column.radio ? 'radio' : type; + var f = field ? field : 'btSelectItem'; + var c = column['class'] || ''; + var isChecked = (value === true || value_ || value && value.checked) && value !== false; + var isDisabled = !column.checkboxEnabled || value && value.disabled; + text = [_this7.options.cardView ? "
    ") : ""), "
    \n \n \n
    "), _this7.header.formatters[j] && typeof value === 'string' ? value : '', _this7.options.cardView ? '
    ' : ''].join(''); + item[_this7.header.stateField] = value === true || !!value_ || value && value.checked; + } else { + value = typeof value === 'undefined' || value === null ? _this7.options.undefinedText : value; + + if (_this7.options.cardView) { + var cardTitle = _this7.options.showHeader ? "").concat(Utils.getFieldTitle(_this7.columns, field), "") : ''; + text = "
    ".concat(cardTitle, "").concat(value, "
    "); + + if (_this7.options.smartDisplay && value === '') { + text = '
    '; + } + } else { + text = "").concat(value, ""); + } + } + + html.push(text); + }); + + if (this.options.cardView) { + html.push('
    '); + } + + html.push(''); + return html.join(''); + } + }, { + key: "initBody", + value: function initBody(fixedScroll) { + var _this8 = this; + + var data = this.getData(); + this.trigger('pre-body', data); + this.$body = this.$el.find('>tbody'); + + if (!this.$body.length) { + this.$body = $('').appendTo(this.$el); + } // Fix #389 Bootstrap-table-flatJSON is not working + + + if (!this.options.pagination || this.options.sidePagination === 'server') { + this.pageFrom = 1; + this.pageTo = data.length; + } + + var rows = []; + var trFragments = $(document.createDocumentFragment()); + var hasTr = false; + + for (var i = this.pageFrom - 1; i < this.pageTo; i++) { + var item = data[i]; + var tr = this.initRow(item, i, data, trFragments); + hasTr = hasTr || !!tr; + + if (tr && typeof tr === 'string') { + if (!this.options.virtualScroll) { + trFragments.append(tr); + } else { + rows.push(tr); + } + } + } // show no records + + + if (!hasTr) { + this.$body.html("".concat(Utils.sprintf('%s', this.$header.find('th').length, this.options.formatNoMatches()), "")); + } else { + if (!this.options.virtualScroll) { + this.$body.html(trFragments); + } else { + if (this.virtualScroll) { + this.virtualScroll.destroy(); + } + + this.virtualScroll = new VirtualScroll({ + rows: rows, + fixedScroll: fixedScroll, + scrollEl: this.$tableBody[0], + contentEl: this.$body[0], + itemHeight: this.options.virtualScrollItemHeight, + callback: function callback() { + _this8.fitHeader(); + + _this8.initBodyEvent(); + } + }); + } + } + + if (!fixedScroll) { + this.scrollTo(0); + } + + this.initBodyEvent(); + this.updateSelected(); + this.initFooter(); + this.resetView(); + + if (this.options.sidePagination !== 'server') { + this.options.totalRows = data.length; + } + + this.trigger('post-body', data); + } + }, { + key: "initBodyEvent", + value: function initBodyEvent() { + var _this9 = this; + + // click to select by column + this.$body.find('> tr[data-index] > td').off('click dblclick').on('click dblclick', function (e) { + var $td = $(e.currentTarget); + var $tr = $td.parent(); + var $cardViewArr = $(e.target).parents('.card-views').children(); + var $cardViewTarget = $(e.target).parents('.card-view'); + var rowIndex = $tr.data('index'); + var item = _this9.data[rowIndex]; + var index = _this9.options.cardView ? $cardViewArr.index($cardViewTarget) : $td[0].cellIndex; + + var fields = _this9.getVisibleFields(); + + var field = fields[_this9.options.detailView && _this9.options.detailViewIcon && !_this9.options.cardView ? index - 1 : index]; + var column = _this9.columns[_this9.fieldsColumnsIndex[field]]; + var value = Utils.getItemField(item, field, _this9.options.escape); + + if ($td.find('.detail-icon').length) { + return; + } + + _this9.trigger(e.type === 'click' ? 'click-cell' : 'dbl-click-cell', field, value, item, $td); + + _this9.trigger(e.type === 'click' ? 'click-row' : 'dbl-click-row', item, $tr, field); // if click to select - then trigger the checkbox/radio click + + + if (e.type === 'click' && _this9.options.clickToSelect && column.clickToSelect && !Utils.calculateObjectValue(_this9.options, _this9.options.ignoreClickToSelectOn, [e.target])) { + var $selectItem = $tr.find(Utils.sprintf('[name="%s"]', _this9.options.selectItemName)); + + if ($selectItem.length) { + $selectItem[0].click(); + } + } + + if (e.type === 'click' && _this9.options.detailViewByClick) { + _this9.toggleDetailView(rowIndex, _this9.header.detailFormatters[_this9.fieldsColumnsIndex[field]]); + } + }).off('mousedown').on('mousedown', function (e) { + // https://github.com/jquery/jquery/issues/1741 + _this9.multipleSelectRowCtrlKey = e.ctrlKey || e.metaKey; + _this9.multipleSelectRowShiftKey = e.shiftKey; + }); + this.$body.find('> tr[data-index] > td > .detail-icon').off('click').on('click', function (e) { + e.preventDefault(); + + _this9.toggleDetailView($(e.currentTarget).parent().parent().data('index')); + + return false; + }); + this.$selectItem = this.$body.find(Utils.sprintf('[name="%s"]', this.options.selectItemName)); + this.$selectItem.off('click').on('click', function (e) { + e.stopImmediatePropagation(); + var $this = $(e.currentTarget); + + _this9._toggleCheck($this.prop('checked'), $this.data('index')); + }); + this.header.events.forEach(function (_events, i) { + var events = _events; + + if (!events) { + return; + } // fix bug, if events is defined with namespace + + + if (typeof events === 'string') { + events = Utils.calculateObjectValue(null, events); + } + + var field = _this9.header.fields[i]; + + var fieldIndex = _this9.getVisibleFields().indexOf(field); + + if (fieldIndex === -1) { + return; + } + + if (_this9.options.detailView && !_this9.options.cardView) { + fieldIndex += 1; + } + + var _loop = function _loop(key) { + if (!events.hasOwnProperty(key)) { + return "continue"; + } + + var event = events[key]; + + _this9.$body.find('>tr:not(.no-records-found)').each(function (i, tr) { + var $tr = $(tr); + var $td = $tr.find(_this9.options.cardView ? '.card-views>.card-view' : '>td').eq(fieldIndex); + var index = key.indexOf(' '); + var name = key.substring(0, index); + var el = key.substring(index + 1); + $td.find(el).off(name).on(name, function (e) { + var index = $tr.data('index'); + var row = _this9.data[index]; + var value = row[field]; + event.apply(_this9, [e, value, row, index]); + }); + }); + }; + + for (var key in events) { + var _ret = _loop(key); + + if (_ret === "continue") continue; + } + }); + } + }, { + key: "initServer", + value: function initServer(silent, query, url) { + var _this10 = this; + + var data = {}; + var index = this.header.fields.indexOf(this.options.sortName); + var params = { + searchText: this.searchText, + sortName: this.options.sortName, + sortOrder: this.options.sortOrder + }; + + if (this.header.sortNames[index]) { + params.sortName = this.header.sortNames[index]; + } + + if (this.options.pagination && this.options.sidePagination === 'server') { + params.pageSize = this.options.pageSize === this.options.formatAllRows() ? this.options.totalRows : this.options.pageSize; + params.pageNumber = this.options.pageNumber; + } + + if (!(url || this.options.url) && !this.options.ajax) { + return; + } + + if (this.options.queryParamsType === 'limit') { + params = { + search: params.searchText, + sort: params.sortName, + order: params.sortOrder + }; + + if (this.options.pagination && this.options.sidePagination === 'server') { + params.offset = this.options.pageSize === this.options.formatAllRows() ? 0 : this.options.pageSize * (this.options.pageNumber - 1); + params.limit = this.options.pageSize === this.options.formatAllRows() ? this.options.totalRows : this.options.pageSize; + + if (params.limit === 0) { + delete params.limit; + } + } + } + + if (!Utils.isEmptyObject(this.filterColumnsPartial)) { + params.filter = JSON.stringify(this.filterColumnsPartial, null); + } + + $.extend(params, query || {}); + data = Utils.calculateObjectValue(this.options, this.options.queryParams, [params], data); // false to stop request + + if (data === false) { + return; + } + + if (!silent) { + this.showLoading(); + } + + var request = $.extend({}, Utils.calculateObjectValue(null, this.options.ajaxOptions), { + type: this.options.method, + url: url || this.options.url, + data: this.options.contentType === 'application/json' && this.options.method === 'post' ? JSON.stringify(data) : data, + cache: this.options.cache, + contentType: this.options.contentType, + dataType: this.options.dataType, + success: function success(_res, textStatus, jqXHR) { + var res = Utils.calculateObjectValue(_this10.options, _this10.options.responseHandler, [_res, jqXHR], _res); + + _this10.load(res); + + _this10.trigger('load-success', res, jqXHR && jqXHR.status, jqXHR); + + if (!silent) { + _this10.hideLoading(); + } + + if (_this10.options.sidePagination === 'server' && res[_this10.options.totalField] > 0 && !res[_this10.options.dataField].length) { + _this10.updatePagination(); + } + }, + error: function error(jqXHR) { + var data = []; + + if (_this10.options.sidePagination === 'server') { + data = {}; + data[_this10.options.totalField] = 0; + data[_this10.options.dataField] = []; + } + + _this10.load(data); + + _this10.trigger('load-error', jqXHR && jqXHR.status, jqXHR); + + if (!silent) _this10.$tableLoading.hide(); + } + }); + + if (this.options.ajax) { + Utils.calculateObjectValue(this, this.options.ajax, [request], null); + } else { + if (this._xhr && this._xhr.readyState !== 4) { + this._xhr.abort(); + } + + this._xhr = $.ajax(request); + } + + return data; + } + }, { + key: "initSearchText", + value: function initSearchText() { + if (this.options.search) { + this.searchText = ''; + + if (this.options.searchText !== '') { + var $search = this.$toolbar.find('.search input'); + $search.val(this.options.searchText); + this.onSearch({ + currentTarget: $search, + firedByInitSearchText: true + }); + } + } + } + }, { + key: "getCaret", + value: function getCaret() { + var _this11 = this; + + this.$header.find('th').each(function (i, th) { + $(th).find('.sortable').removeClass('desc asc').addClass($(th).data('field') === _this11.options.sortName ? _this11.options.sortOrder : 'both'); + }); + } + }, { + key: "updateSelected", + value: function updateSelected() { + var checkAll = this.$selectItem.filter(':enabled').length && this.$selectItem.filter(':enabled').length === this.$selectItem.filter(':enabled').filter(':checked').length; + this.$selectAll.add(this.$selectAll_).prop('checked', checkAll); + this.$selectItem.each(function (i, el) { + $(el).closest('tr')[$(el).prop('checked') ? 'addClass' : 'removeClass']('selected'); + }); + } + }, { + key: "updateRows", + value: function updateRows() { + var _this12 = this; + + this.$selectItem.each(function (i, el) { + _this12.data[$(el).data('index')][_this12.header.stateField] = $(el).prop('checked'); + }); + } + }, { + key: "resetRows", + value: function resetRows() { + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = this.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var row = _step2.value; + this.$selectAll.prop('checked', false); + this.$selectItem.prop('checked', false); + + if (this.header.stateField) { + row[this.header.stateField] = false; + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return != null) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + this.initHiddenRows(); + } + }, { + key: "trigger", + value: function trigger(_name) { + var _this$options; + + var name = "".concat(_name, ".bs.table"); + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key4 = 1; _key4 < _len; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + + (_this$options = this.options)[BootstrapTable.EVENTS[name]].apply(_this$options, args); + + this.$el.trigger($.Event(name), args); + this.options.onAll(name, args); + this.$el.trigger($.Event('all.bs.table'), [name, args]); + } + }, { + key: "resetHeader", + value: function resetHeader() { + var _this13 = this; + + // fix #61: the hidden table reset header bug. + // fix bug: get $el.css('width') error sometime (height = 500) + clearTimeout(this.timeoutId_); + this.timeoutId_ = setTimeout(function () { + return _this13.fitHeader(); + }, this.$el.is(':hidden') ? 100 : 0); + } + }, { + key: "fitHeader", + value: function fitHeader() { + var _this14 = this; + + if (this.$el.is(':hidden')) { + this.timeoutId_ = setTimeout(function () { + return _this14.fitHeader(); + }, 100); + return; + } + + var fixedBody = this.$tableBody.get(0); + var scrollWidth = fixedBody.scrollWidth > fixedBody.clientWidth && fixedBody.scrollHeight > fixedBody.clientHeight + this.$header.outerHeight() ? Utils.getScrollBarWidth() : 0; + this.$el.css('margin-top', -this.$header.outerHeight()); + var focused = $(':focus'); + + if (focused.length > 0) { + var $th = focused.parents('th'); + + if ($th.length > 0) { + var dataField = $th.attr('data-field'); + + if (dataField !== undefined) { + var $headerTh = this.$header.find("[data-field='".concat(dataField, "']")); + + if ($headerTh.length > 0) { + $headerTh.find(':input').addClass('focus-temp'); + } + } + } + } + + this.$header_ = this.$header.clone(true, true); + this.$selectAll_ = this.$header_.find('[name="btSelectAll"]'); + this.$tableHeader.css('margin-right', scrollWidth).find('table').css('width', this.$el.outerWidth()).html('').attr('class', this.$el.attr('class')).append(this.$header_); + this.$tableLoading.css('width', this.$el.outerWidth()); + var focusedTemp = $('.focus-temp:visible:eq(0)'); + + if (focusedTemp.length > 0) { + focusedTemp.focus(); + this.$header.find('.focus-temp').removeClass('focus-temp'); + } // fix bug: $.data() is not working as expected after $.append() + + + this.$header.find('th[data-field]').each(function (i, el) { + _this14.$header_.find(Utils.sprintf('th[data-field="%s"]', $(el).data('field'))).data($(el).data()); + }); + var visibleFields = this.getVisibleFields(); + var $ths = this.$header_.find('th'); + var $tr = this.$body.find('>tr:not(.no-records-found,.virtual-scroll-top)').eq(0); + + while ($tr.length && $tr.find('>td[colspan]:not([colspan="1"])').length) { + $tr = $tr.next(); + } + + $tr.find('> *').each(function (i, el) { + var $this = $(el); + var index = i; + + if (_this14.options.detailView && _this14.options.detailViewIcon && !_this14.options.cardView) { + if (i === 0) { + var $thDetail = $ths.filter('.detail'); + + var _zoomWidth = $thDetail.innerWidth() - $thDetail.find('.fht-cell').width(); + + $thDetail.find('.fht-cell').width($this.innerWidth() - _zoomWidth); + } + + index = i - 1; + } + + if (index === -1) { + return; + } + + var $th = _this14.$header_.find(Utils.sprintf('th[data-field="%s"]', visibleFields[index])); + + if ($th.length > 1) { + $th = $($ths[$this[0].cellIndex]); + } + + var zoomWidth = $th.innerWidth() - $th.find('.fht-cell').width(); + $th.find('.fht-cell').width($this.innerWidth() - zoomWidth); + }); + this.horizontalScroll(); + this.trigger('post-header'); + } + }, { + key: "initFooter", + value: function initFooter() { + if (!this.options.showFooter || this.options.cardView) { + // do nothing + return; + } + + var data = this.getData(); + var html = []; + + if (!this.options.cardView && this.options.detailView && this.options.detailViewIcon) { + html.push('
    '); + } + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = this.columns[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var column = _step3.value; + var falign = ''; + var valign = ''; + var csses = []; + var style = {}; + var class_ = Utils.sprintf(' class="%s"', column['class']); + + if (!column.visible) { + continue; + } + + if (this.options.cardView && !column.cardVisible) { + return; + } + + falign = Utils.sprintf('text-align: %s; ', column.falign ? column.falign : column.align); + valign = Utils.sprintf('vertical-align: %s; ', column.valign); + style = Utils.calculateObjectValue(null, this.options.footerStyle, [column]); + + if (style && style.css) { + for (var _i8 = 0, _Object$entries7 = Object.entries(style.css); _i8 < _Object$entries7.length; _i8++) { + var _Object$entries7$_i = _slicedToArray(_Object$entries7[_i8], 2), + key = _Object$entries7$_i[0], + value = _Object$entries7$_i[1]; + + csses.push("".concat(key, ": ").concat(value)); + } + } + + if (style && style.classes) { + class_ = Utils.sprintf(' class="%s"', column['class'] ? [column['class'], style.classes].join(' ') : style.classes); + } + + html.push(''); + html.push('
    '); + html.push(Utils.calculateObjectValue(column, column.footerFormatter, [data], this.footerData[0] && this.footerData[0][column.field] || '')); + html.push('
    '); + html.push('
    '); + html.push('
    '); + html.push(''); + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return != null) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + if (!this.options.height && !this.$tableFooter.length) { + this.$el.append(''); + this.$tableFooter = this.$el.find('tfoot'); + } + + this.$tableFooter.find('tr').html(html.join('')); + this.trigger('post-footer', this.$tableFooter); + } + }, { + key: "fitFooter", + value: function fitFooter() { + var _this15 = this; + + if (this.$el.is(':hidden')) { + setTimeout(function () { + return _this15.fitFooter(); + }, 100); + return; + } + + var fixedBody = this.$tableBody.get(0); + var scrollWidth = fixedBody.scrollWidth > fixedBody.clientWidth && fixedBody.scrollHeight > fixedBody.clientHeight + this.$header.outerHeight() ? Utils.getScrollBarWidth() : 0; + this.$tableFooter.css('margin-right', scrollWidth).find('table').css('width', this.$el.outerWidth()).attr('class', this.$el.attr('class')); + var visibleFields = this.getVisibleFields(); + var $ths = this.$tableFooter.find('th'); + var $tr = this.$body.find('>tr:first-child:not(.no-records-found)'); + + while ($tr.length && $tr.find('>td[colspan]:not([colspan="1"])').length) { + $tr = $tr.next(); + } + + $tr.find('> *').each(function (i, el) { + var $this = $(el); + var index = i; + + if (_this15.options.detailView && !_this15.options.cardView) { + if (i === 0) { + var $thDetail = $ths.filter('.detail'); + + var _zoomWidth2 = $thDetail.innerWidth() - $thDetail.find('.fht-cell').width(); + + $thDetail.find('.fht-cell').width($this.innerWidth() - _zoomWidth2); + } + + index = i - 1; + } + + if (index === -1) { + return; + } + + var $th = $ths.eq(i); + var zoomWidth = $th.innerWidth() - $th.find('.fht-cell').width(); + $th.find('.fht-cell').width($this.innerWidth() - zoomWidth); + }); + this.horizontalScroll(); + } + }, { + key: "horizontalScroll", + value: function horizontalScroll() { + var _this16 = this; + + // horizontal scroll event + // TODO: it's probably better improving the layout than binding to scroll event + this.$tableBody.off('scroll').on('scroll', function () { + var scrollLeft = _this16.$tableBody.scrollLeft(); + + if (_this16.options.showHeader && _this16.options.height) { + _this16.$tableHeader.scrollLeft(scrollLeft); + } + + if (_this16.options.showFooter && !_this16.options.cardView) { + _this16.$tableFooter.scrollLeft(scrollLeft); + } + + _this16.trigger('scroll-body', _this16.$tableBody); + }); + } + }, { + key: "getVisibleFields", + value: function getVisibleFields() { + var visibleFields = []; + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = this.header.fields[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var field = _step4.value; + var column = this.columns[this.fieldsColumnsIndex[field]]; + + if (!column || !column.visible) { + continue; + } + + visibleFields.push(field); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return != null) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + + return visibleFields; + } + }, { + key: "initHiddenRows", + value: function initHiddenRows() { + this.hiddenRows = []; + } // PUBLIC FUNCTION DEFINITION + // ======================= + + }, { + key: "getOptions", + value: function getOptions() { + // deep copy and remove data + var options = $.extend({}, this.options); + delete options.data; + return $.extend(true, {}, options); + } + }, { + key: "refreshOptions", + value: function refreshOptions(options) { + // If the objects are equivalent then avoid the call of destroy / init methods + if (Utils.compareObjects(this.options, options, true)) { + return; + } + + this.options = $.extend(this.options, options); + this.trigger('refresh-options', this.options); + this.destroy(); + this.init(); + } + }, { + key: "getData", + value: function getData(params) { + var data = this.options.data; + + if ((this.searchText || this.options.customSearch || this.options.sortName || !Utils.isEmptyObject(this.filterColumns) || !Utils.isEmptyObject(this.filterColumnsPartial)) && (!params || !params.unfiltered)) { + data = this.data; + } + + if (params && params.useCurrentPage) { + data = data.slice(this.pageFrom - 1, this.pageTo); + } + + if (params && !params.includeHiddenRows) { + var hiddenRows = this.getHiddenRows(); + data = data.filter(function (row) { + return Utils.findIndex(hiddenRows, row) === -1; + }); + } + + return data; + } + }, { + key: "getSelections", + value: function getSelections() { + var _this17 = this; + + // fix #2424: from html with checkbox + return this.data.filter(function (row) { + return row[_this17.header.stateField] === true; + }); + } + }, { + key: "getAllSelections", + value: function getAllSelections() { + var _this18 = this; + + return this.options.data.filter(function (row) { + return row[_this18.header.stateField] === true; + }); + } + }, { + key: "load", + value: function load(_data) { + var fixedScroll = false; + var data = _data; // #431: support pagination + + if (this.options.pagination && this.options.sidePagination === 'server') { + this.options.totalRows = data[this.options.totalField]; + } + + if (this.options.pagination && this.options.sidePagination === 'server') { + this.options.totalNotFiltered = data[this.options.totalNotFilteredField]; + } + + fixedScroll = data.fixedScroll; + data = Array.isArray(data) ? data : data[this.options.dataField]; + this.initData(data); + this.initSearch(); + this.initPagination(); + this.initBody(fixedScroll); + } + }, { + key: "append", + value: function append(data) { + this.initData(data, 'append'); + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + } + }, { + key: "prepend", + value: function prepend(data) { + this.initData(data, 'prepend'); + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + } + }, { + key: "remove", + value: function remove(params) { + var len = this.options.data.length; + var i; + var row; + + if (!params.hasOwnProperty('field') || !params.hasOwnProperty('values')) { + return; + } + + for (i = len - 1; i >= 0; i--) { + row = this.options.data[i]; + + if (!row.hasOwnProperty(params.field)) { + continue; + } + + if (params.values.includes(row[params.field])) { + this.options.data.splice(i, 1); + + if (this.options.sidePagination === 'server') { + this.options.totalRows -= 1; + } + } + } + + if (len === this.options.data.length) { + return; + } + + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + } + }, { + key: "removeAll", + value: function removeAll() { + if (this.options.data.length > 0) { + this.options.data.splice(0, this.options.data.length); + this.initSearch(); + this.initPagination(); + this.initBody(true); + } + } + }, { + key: "insertRow", + value: function insertRow(params) { + if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) { + return; + } + + this.options.data.splice(params.index, 0, params.row); + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + } + }, { + key: "updateRow", + value: function updateRow(params) { + var allParams = Array.isArray(params) ? params : [params]; + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; + + try { + for (var _iterator5 = allParams[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var _params = _step5.value; + + if (!_params.hasOwnProperty('index') || !_params.hasOwnProperty('row')) { + continue; + } + + $.extend(this.options.data[_params.index], _params.row); + + if (_params.hasOwnProperty('replace') && _params.replace) { + this.options.data[_params.index] = _params.row; + } else { + $.extend(this.options.data[_params.index], _params.row); + } + } + } catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; + } finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5.return != null) { + _iterator5.return(); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } + } + } + + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + } + }, { + key: "getRowByUniqueId", + value: function getRowByUniqueId(_id) { + var uniqueId = this.options.uniqueId; + var len = this.options.data.length; + var id = _id; + var dataRow = null; + var i; + var row; + var rowUniqueId; + + for (i = len - 1; i >= 0; i--) { + row = this.options.data[i]; + + if (row.hasOwnProperty(uniqueId)) { + // uniqueId is a column + rowUniqueId = row[uniqueId]; + } else if (row._data && row._data.hasOwnProperty(uniqueId)) { + // uniqueId is a row data property + rowUniqueId = row._data[uniqueId]; + } else { + continue; + } + + if (typeof rowUniqueId === 'string') { + id = id.toString(); + } else if (typeof rowUniqueId === 'number') { + if (Number(rowUniqueId) === rowUniqueId && rowUniqueId % 1 === 0) { + id = parseInt(id); + } else if (rowUniqueId === Number(rowUniqueId) && rowUniqueId !== 0) { + id = parseFloat(id); + } + } + + if (rowUniqueId === id) { + dataRow = row; + break; + } + } + + return dataRow; + } + }, { + key: "updateByUniqueId", + value: function updateByUniqueId(params) { + var allParams = Array.isArray(params) ? params : [params]; + var _iteratorNormalCompletion6 = true; + var _didIteratorError6 = false; + var _iteratorError6 = undefined; + + try { + for (var _iterator6 = allParams[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var _params2 = _step6.value; + + if (!_params2.hasOwnProperty('id') || !_params2.hasOwnProperty('row')) { + continue; + } + + var rowId = this.options.data.indexOf(this.getRowByUniqueId(_params2.id)); + + if (rowId === -1) { + continue; + } + + if (_params2.hasOwnProperty('replace') && _params2.replace) { + this.options.data[rowId] = _params2.row; + } else { + $.extend(this.options.data[rowId], _params2.row); + } + } + } catch (err) { + _didIteratorError6 = true; + _iteratorError6 = err; + } finally { + try { + if (!_iteratorNormalCompletion6 && _iterator6.return != null) { + _iterator6.return(); + } + } finally { + if (_didIteratorError6) { + throw _iteratorError6; + } + } + } + + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + } + }, { + key: "removeByUniqueId", + value: function removeByUniqueId(id) { + var len = this.options.data.length; + var row = this.getRowByUniqueId(id); + + if (row) { + this.options.data.splice(this.options.data.indexOf(row), 1); + } + + if (len === this.options.data.length) { + return; + } + + this.initSearch(); + this.initPagination(); + this.initBody(true); + } + }, { + key: "updateCell", + value: function updateCell(params) { + if (!params.hasOwnProperty('index') || !params.hasOwnProperty('field') || !params.hasOwnProperty('value')) { + return; + } + + this.data[params.index][params.field] = params.value; + + if (params.reinit === false) { + return; + } + + this.initSort(); + this.initBody(true); + } + }, { + key: "updateCellByUniqueId", + value: function updateCellByUniqueId(params) { + var _this19 = this; + + if (!params.hasOwnProperty('id') || !params.hasOwnProperty('field') || !params.hasOwnProperty('value')) { + return; + } + + var allParams = Array.isArray(params) ? params : [params]; + allParams.forEach(function (_ref6) { + var id = _ref6.id, + field = _ref6.field, + value = _ref6.value; + + var rowId = _this19.options.data.indexOf(_this19.getRowByUniqueId(id)); + + if (rowId === -1) { + return; + } + + _this19.options.data[rowId][field] = value; + }); + + if (params.reinit === false) { + return; + } + + this.initSort(); + this.initBody(true); + } + }, { + key: "showRow", + value: function showRow(params) { + this._toggleRow(params, true); + } + }, { + key: "hideRow", + value: function hideRow(params) { + this._toggleRow(params, false); + } + }, { + key: "_toggleRow", + value: function _toggleRow(params, visible) { + var row; + + if (params.hasOwnProperty('index')) { + row = this.getData()[params.index]; + } else if (params.hasOwnProperty('uniqueId')) { + row = this.getRowByUniqueId(params.uniqueId); + } + + if (!row) { + return; + } + + var index = Utils.findIndex(this.hiddenRows, row); + + if (!visible && index === -1) { + this.hiddenRows.push(row); + } else if (visible && index > -1) { + this.hiddenRows.splice(index, 1); + } + + if (visible) { + this.updatePagination(); + } else { + this.initBody(true); + this.initPagination(); + } + } + }, { + key: "getHiddenRows", + value: function getHiddenRows(show) { + if (show) { + this.initHiddenRows(); + this.initBody(true); + return; + } + + var data = this.getData(); + var rows = []; + var _iteratorNormalCompletion7 = true; + var _didIteratorError7 = false; + var _iteratorError7 = undefined; + + try { + for (var _iterator7 = data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var row = _step7.value; + + if (this.hiddenRows.includes(row)) { + rows.push(row); + } + } + } catch (err) { + _didIteratorError7 = true; + _iteratorError7 = err; + } finally { + try { + if (!_iteratorNormalCompletion7 && _iterator7.return != null) { + _iterator7.return(); + } + } finally { + if (_didIteratorError7) { + throw _iteratorError7; + } + } + } + + this.hiddenRows = rows; + return rows; + } + }, { + key: "showColumn", + value: function showColumn(field) { + var _this20 = this; + + var fields = Array.isArray(field) ? field : [field]; + fields.forEach(function (field) { + _this20._toggleColumn(_this20.fieldsColumnsIndex[field], true, true); + }); + } + }, { + key: "hideColumn", + value: function hideColumn(field) { + var _this21 = this; + + var fields = Array.isArray(field) ? field : [field]; + fields.forEach(function (field) { + _this21._toggleColumn(_this21.fieldsColumnsIndex[field], false, true); + }); + } + }, { + key: "_toggleColumn", + value: function _toggleColumn(index, checked, needUpdate) { + if (index === -1 || this.columns[index].visible === checked) { + return; + } + + this.columns[index].visible = checked; + this.initHeader(); + this.initSearch(); + this.initPagination(); + this.initBody(); + + if (this.options.showColumns) { + var $items = this.$toolbar.find('.keep-open input:not(".toggle-all")').prop('disabled', false); + + if (needUpdate) { + $items.filter(Utils.sprintf('[value="%s"]', index)).prop('checked', checked); + } + + if ($items.filter(':checked').length <= this.options.minimumCountColumns) { + $items.filter(':checked').prop('disabled', true); + } + } + } + }, { + key: "getVisibleColumns", + value: function getVisibleColumns() { + var _this22 = this; + + return this.columns.filter(function (column) { + return column.visible && !_this22.isSelectionColumn(column); + }); + } + }, { + key: "getHiddenColumns", + value: function getHiddenColumns() { + return this.columns.filter(function (_ref7) { + var visible = _ref7.visible; + return !visible; + }); + } + }, { + key: "isSelectionColumn", + value: function isSelectionColumn(column) { + return column.radio || column.checkbox; + } + }, { + key: "showAllColumns", + value: function showAllColumns() { + this._toggleAllColumns(true); + } + }, { + key: "hideAllColumns", + value: function hideAllColumns() { + this._toggleAllColumns(false); + } + }, { + key: "_toggleAllColumns", + value: function _toggleAllColumns(visible) { + var _this23 = this; + + var _iteratorNormalCompletion8 = true; + var _didIteratorError8 = false; + var _iteratorError8 = undefined; + + try { + for (var _iterator8 = this.columns.slice().reverse()[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { + var column = _step8.value; + + if (column.switchable) { + if (!visible && this.options.showColumns && this.getVisibleColumns().length === this.options.minimumCountColumns) { + continue; + } + + column.visible = visible; + } + } + } catch (err) { + _didIteratorError8 = true; + _iteratorError8 = err; + } finally { + try { + if (!_iteratorNormalCompletion8 && _iterator8.return != null) { + _iterator8.return(); + } + } finally { + if (_didIteratorError8) { + throw _iteratorError8; + } + } + } + + this.initHeader(); + this.initSearch(); + this.initPagination(); + this.initBody(); + + if (this.options.showColumns) { + var $items = this.$toolbar.find('.keep-open input[type="checkbox"]:not(".toggle-all")').prop('disabled', false); + + if (visible) { + $items.prop('checked', visible); + } else { + $items.get().reverse().forEach(function (item) { + if ($items.filter(':checked').length > _this23.options.minimumCountColumns) { + $(item).prop('checked', visible); + } + }); + } + + if ($items.filter(':checked').length <= this.options.minimumCountColumns) { + $items.filter(':checked').prop('disabled', true); + } + } + } + }, { + key: "mergeCells", + value: function mergeCells(options) { + var row = options.index; + var col = this.getVisibleFields().indexOf(options.field); + var rowspan = options.rowspan || 1; + var colspan = options.colspan || 1; + var i; + var j; + var $tr = this.$body.find('>tr'); + + if (this.options.detailView && !this.options.cardView) { + col += 1; + } + + var $td = $tr.eq(row).find('>td').eq(col); + + if (row < 0 || col < 0 || row >= this.data.length) { + return; + } + + for (i = row; i < row + rowspan; i++) { + for (j = col; j < col + colspan; j++) { + $tr.eq(i).find('>td').eq(j).hide(); + } + } + + $td.attr('rowspan', rowspan).attr('colspan', colspan).show(); + } + }, { + key: "checkAll", + value: function checkAll() { + this._toggleCheckAll(true); + } + }, { + key: "uncheckAll", + value: function uncheckAll() { + this._toggleCheckAll(false); + } + }, { + key: "_toggleCheckAll", + value: function _toggleCheckAll(checked) { + var rowsBefore = this.getSelections(); + this.$selectAll.add(this.$selectAll_).prop('checked', checked); + this.$selectItem.filter(':enabled').prop('checked', checked); + this.updateRows(); + var rowsAfter = this.getSelections(); + + if (checked) { + this.trigger('check-all', rowsAfter, rowsBefore); + return; + } + + this.trigger('uncheck-all', rowsAfter, rowsBefore); + } + }, { + key: "checkInvert", + value: function checkInvert() { + var $items = this.$selectItem.filter(':enabled'); + var checked = $items.filter(':checked'); + $items.each(function (i, el) { + $(el).prop('checked', !$(el).prop('checked')); + }); + this.updateRows(); + this.updateSelected(); + this.trigger('uncheck-some', checked); + checked = this.getSelections(); + this.trigger('check-some', checked); + } + }, { + key: "check", + value: function check(index) { + this._toggleCheck(true, index); + } + }, { + key: "uncheck", + value: function uncheck(index) { + this._toggleCheck(false, index); + } + }, { + key: "_toggleCheck", + value: function _toggleCheck(checked, index) { + var $el = this.$selectItem.filter("[data-index=\"".concat(index, "\"]")); + var row = this.data[index]; + + if ($el.is(':radio') || this.options.singleSelect || this.options.multipleSelectRow && !this.multipleSelectRowCtrlKey && !this.multipleSelectRowShiftKey) { + var _iteratorNormalCompletion9 = true; + var _didIteratorError9 = false; + var _iteratorError9 = undefined; + + try { + for (var _iterator9 = this.options.data[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { + var r = _step9.value; + r[this.header.stateField] = false; + } + } catch (err) { + _didIteratorError9 = true; + _iteratorError9 = err; + } finally { + try { + if (!_iteratorNormalCompletion9 && _iterator9.return != null) { + _iterator9.return(); + } + } finally { + if (_didIteratorError9) { + throw _iteratorError9; + } + } + } + + this.$selectItem.filter(':checked').not($el).prop('checked', false); + } + + row[this.header.stateField] = checked; + + if (this.options.multipleSelectRow) { + if (this.multipleSelectRowShiftKey && this.multipleSelectRowLastSelectedIndex >= 0) { + var indexes = [this.multipleSelectRowLastSelectedIndex, index].sort(); + + for (var i = indexes[0] + 1; i < indexes[1]; i++) { + this.data[i][this.header.stateField] = true; + this.$selectItem.filter("[data-index=\"".concat(i, "\"]")).prop('checked', true); + } + } + + this.multipleSelectRowCtrlKey = false; + this.multipleSelectRowShiftKey = false; + this.multipleSelectRowLastSelectedIndex = checked ? index : -1; + } + + $el.prop('checked', checked); + this.updateSelected(); + this.trigger(checked ? 'check' : 'uncheck', this.data[index], $el); + } + }, { + key: "checkBy", + value: function checkBy(obj) { + this._toggleCheckBy(true, obj); + } + }, { + key: "uncheckBy", + value: function uncheckBy(obj) { + this._toggleCheckBy(false, obj); + } + }, { + key: "_toggleCheckBy", + value: function _toggleCheckBy(checked, obj) { + var _this24 = this; + + if (!obj.hasOwnProperty('field') || !obj.hasOwnProperty('values')) { + return; + } + + var rows = []; + this.data.forEach(function (row, i) { + if (!row.hasOwnProperty(obj.field)) { + return false; + } + + if (obj.values.includes(row[obj.field])) { + var $el = _this24.$selectItem.filter(':enabled').filter(Utils.sprintf('[data-index="%s"]', i)); + + $el = checked ? $el.not(':checked') : $el.filter(':checked'); + + if (!$el.length) { + return; + } + + $el.prop('checked', checked); + row[_this24.header.stateField] = checked; + rows.push(row); + + _this24.trigger(checked ? 'check' : 'uncheck', row, $el); + } + }); + this.updateSelected(); + this.trigger(checked ? 'check-some' : 'uncheck-some', rows); + } + }, { + key: "refresh", + value: function refresh(params) { + if (params && params.url) { + this.options.url = params.url; + } + + if (params && params.pageNumber) { + this.options.pageNumber = params.pageNumber; + } + + if (params && params.pageSize) { + this.options.pageSize = params.pageSize; + } + + this.trigger('refresh', this.initServer(params && params.silent, params && params.query, params && params.url)); + } + }, { + key: "destroy", + value: function destroy() { + this.$el.insertBefore(this.$container); + $(this.options.toolbar).insertBefore(this.$el); + this.$container.next().remove(); + this.$container.remove(); + this.$el.html(this.$el_.html()).css('margin-top', '0').attr('class', this.$el_.attr('class') || ''); // reset the class + } + }, { + key: "resetView", + value: function resetView(params) { + var padding = 0; + + if (params && params.height) { + this.options.height = params.height; + } + + this.$selectAll.prop('checked', this.$selectItem.length > 0 && this.$selectItem.length === this.$selectItem.filter(':checked').length); + this.$tableContainer.toggleClass('has-card-view', this.options.cardView); + + if (!this.options.cardView && this.options.showHeader && this.options.height) { + this.$tableHeader.show(); + this.resetHeader(); + padding += this.$header.outerHeight(true) + 1; + } else { + this.$tableHeader.hide(); + this.trigger('post-header'); + } + + if (!this.options.cardView && this.options.showFooter) { + this.$tableFooter.show(); + this.fitFooter(); + + if (this.options.height) { + padding += this.$tableFooter.outerHeight(true); + } + } + + if (this.$container.hasClass('fullscreen')) { + this.$tableContainer.css('height', ''); + this.$tableContainer.css('width', ''); + } else if (this.options.height) { + var toolbarHeight = this.$toolbar.outerHeight(true); + var paginationHeight = this.$pagination.outerHeight(true); + var height = this.options.height - toolbarHeight - paginationHeight; + var $bodyTable = this.$tableBody.find('>table'); + var tableHeight = $bodyTable.outerHeight(); + this.$tableContainer.css('height', "".concat(height, "px")); + + if (this.$tableBorder) { + var tableBorderHeight = height - tableHeight - 2; + + if (this.$tableBody[0].scrollWidth - this.$tableBody.innerWidth()) { + tableBorderHeight -= Utils.getScrollBarWidth(); + } + + this.$tableBorder.css('width', "".concat($bodyTable.outerWidth(), "px")); + this.$tableBorder.css('height', "".concat(tableBorderHeight, "px")); + } + } + + if (this.options.cardView) { + // remove the element css + this.$el.css('margin-top', '0'); + this.$tableContainer.css('padding-bottom', '0'); + this.$tableFooter.hide(); + } else { + // Assign the correct sortable arrow + this.getCaret(); + this.$tableContainer.css('padding-bottom', "".concat(padding, "px")); + } + + this.trigger('reset-view'); + } + }, { + key: "showLoading", + value: function showLoading() { + this.$tableLoading.css('display', 'flex'); + } + }, { + key: "hideLoading", + value: function hideLoading() { + this.$tableLoading.css('display', 'none'); + } + }, { + key: "togglePagination", + value: function togglePagination() { + this.options.pagination = !this.options.pagination; + var icon = this.options.showButtonIcons ? this.options.pagination ? this.options.icons.paginationSwitchDown : this.options.icons.paginationSwitchUp : ''; + var text = this.options.showButtonText ? this.options.pagination ? this.options.formatPaginationSwitchUp() : this.options.formatPaginationSwitchDown() : ''; + this.$toolbar.find('button[name="paginationSwitch"]').html(Utils.sprintf(this.constants.html.icon, this.options.iconsPrefix, icon) + ' ' + text); + this.updatePagination(); + } + }, { + key: "toggleFullscreen", + value: function toggleFullscreen() { + this.$el.closest('.bootstrap-table').toggleClass('fullscreen'); + this.resetView(); + } + }, { + key: "toggleView", + value: function toggleView() { + this.options.cardView = !this.options.cardView; + this.initHeader(); + var icon = this.options.showButtonIcons ? this.options.cardView ? this.options.icons.toggleOn : this.options.icons.toggleOff : ''; + var text = this.options.showButtonText ? this.options.cardView ? this.options.formatToggleOff() : this.options.formatToggleOn() : ''; + this.$toolbar.find('button[name="toggle"]').html(Utils.sprintf(this.constants.html.icon, this.options.iconsPrefix, icon) + ' ' + text); + this.initBody(); + this.trigger('toggle', this.options.cardView); + } + }, { + key: "resetSearch", + value: function resetSearch(text) { + var $search = this.$toolbar.find('.search input'); + $search.val(text || ''); + this.onSearch({ + currentTarget: $search + }); + } + }, { + key: "filterBy", + value: function filterBy(columns, options) { + this.filterOptions = Utils.isEmptyObject(options) ? this.options.filterOptions : $.extend(this.options.filterOptions, options); + this.filterColumns = Utils.isEmptyObject(columns) ? {} : columns; + this.options.pageNumber = 1; + this.initSearch(); + this.updatePagination(); + } + }, { + key: "scrollTo", + value: function scrollTo(params) { + if (typeof params === 'undefined') { + return this.$tableBody.scrollTop(); + } + + var options = { + unit: 'px', + value: 0 + }; + + if (_typeof(params) === 'object') { + options = Object.assign(options, params); + } else if (typeof params === 'string' && params === 'bottom') { + options.value = this.$tableBody[0].scrollHeight; + } else if (typeof params === 'string') { + options.value = params; + } + + var scrollTo = options.value; + + if (options.unit === 'rows') { + scrollTo = 0; + this.$body.find("> tr:lt(".concat(options.value, ")")).each(function (i, el) { + scrollTo += $(el).outerHeight(true); + }); + } + + this.$tableBody.scrollTop(scrollTo); + } + }, { + key: "getScrollPosition", + value: function getScrollPosition() { + return this.scrollTo(); + } + }, { + key: "selectPage", + value: function selectPage(page) { + if (page > 0 && page <= this.options.totalPages) { + this.options.pageNumber = page; + this.updatePagination(); + } + } + }, { + key: "prevPage", + value: function prevPage() { + if (this.options.pageNumber > 1) { + this.options.pageNumber--; + this.updatePagination(); + } + } + }, { + key: "nextPage", + value: function nextPage() { + if (this.options.pageNumber < this.options.totalPages) { + this.options.pageNumber++; + this.updatePagination(); + } + } + }, { + key: "toggleDetailView", + value: function toggleDetailView(index, _columnDetailFormatter) { + var $tr = this.$body.find(Utils.sprintf('> tr[data-index="%s"]', index)); + + if ($tr.next().is('tr.detail-view')) { + this.collapseRow(index); + } else { + this.expandRow(index, _columnDetailFormatter); + } + + this.resetView(); + } + }, { + key: "expandRow", + value: function expandRow(index, _columnDetailFormatter) { + var row = this.data[index]; + var $tr = this.$body.find(Utils.sprintf('> tr[data-index="%s"][data-has-detail-view]', index)); + + if ($tr.next().is('tr.detail-view')) { + return; + } + + if (this.options.detailViewIcon) { + $tr.find('a.detail-icon').html(Utils.sprintf(this.constants.html.icon, this.options.iconsPrefix, this.options.icons.detailClose)); + } + + $tr.after(Utils.sprintf('', $tr.children('td').length)); + var $element = $tr.next().find('td'); + var detailFormatter = _columnDetailFormatter || this.options.detailFormatter; + var content = Utils.calculateObjectValue(this.options, detailFormatter, [index, row, $element], ''); + + if ($element.length === 1) { + $element.append(content); + } + + this.trigger('expand-row', index, row, $element); + } + }, { + key: "collapseRow", + value: function collapseRow(index) { + var row = this.data[index]; + var $tr = this.$body.find(Utils.sprintf('> tr[data-index="%s"][data-has-detail-view]', index)); + + if (!$tr.next().is('tr.detail-view')) { + return; + } + + if (this.options.detailViewIcon) { + $tr.find('a.detail-icon').html(Utils.sprintf(this.constants.html.icon, this.options.iconsPrefix, this.options.icons.detailOpen)); + } + + this.trigger('collapse-row', index, row, $tr.next()); + $tr.next().remove(); + } + }, { + key: "expandAllRows", + value: function expandAllRows() { + var trs = this.$body.find('> tr[data-index][data-has-detail-view]'); + + for (var i = 0; i < trs.length; i++) { + this.expandRow($(trs[i]).data('index')); + } + } + }, { + key: "collapseAllRows", + value: function collapseAllRows() { + var trs = this.$body.find('> tr[data-index][data-has-detail-view]'); + + for (var i = 0; i < trs.length; i++) { + this.collapseRow($(trs[i]).data('index')); + } + } + }, { + key: "updateColumnTitle", + value: function updateColumnTitle(params) { + if (!params.hasOwnProperty('field') || !params.hasOwnProperty('title')) { + return; + } + + this.columns[this.fieldsColumnsIndex[params.field]].title = this.options.escape ? Utils.escapeHTML(params.title) : params.title; + + if (this.columns[this.fieldsColumnsIndex[params.field]].visible) { + var header = this.options.height !== undefined ? this.$tableHeader : this.$header; + header.find('th[data-field]').each(function (i, el) { + if ($(el).data('field') === params.field) { + $($(el).find('.th-inner')[0]).text(params.title); + return false; + } + }); + } + } + }, { + key: "updateFormatText", + value: function updateFormatText(formatName, text) { + if (!/^format/.test(formatName) || !this.options[formatName]) { + return; + } + + if (typeof text === 'string') { + this.options[formatName] = function () { + return text; + }; + } else if (typeof text === 'function') { + this.options[formatName] = text; + } + + this.initToolbar(); + this.initPagination(); + this.initBody(); + } + }]); + + return BootstrapTable; + }(); + + BootstrapTable.VERSION = Constants.VERSION; + BootstrapTable.DEFAULTS = Constants.DEFAULTS; + BootstrapTable.LOCALES = Constants.LOCALES; + BootstrapTable.COLUMN_DEFAULTS = Constants.COLUMN_DEFAULTS; + BootstrapTable.METHODS = Constants.METHODS; + BootstrapTable.EVENTS = Constants.EVENTS; // BOOTSTRAP TABLE PLUGIN DEFINITION + // ======================= + + $.BootstrapTable = BootstrapTable; + + $.fn.bootstrapTable = function (option) { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key5 = 1; _key5 < _len2; _key5++) { + args[_key5 - 1] = arguments[_key5]; + } + + var value; + this.each(function (i, el) { + var data = $(el).data('bootstrap.table'); + var options = $.extend({}, BootstrapTable.DEFAULTS, $(el).data(), _typeof(option) === 'object' && option); + + if (typeof option === 'string') { + var _data2; + + if (!Constants.METHODS.includes(option)) { + throw new Error("Unknown method: ".concat(option)); + } + + if (!data) { + return; + } + + value = (_data2 = data)[option].apply(_data2, args); + + if (option === 'destroy') { + $(el).removeData('bootstrap.table'); + } + } + + if (!data) { + $(el).data('bootstrap.table', data = new $.BootstrapTable(el, options)); + } + }); + return typeof value === 'undefined' ? this : value; + }; + + $.fn.bootstrapTable.Constructor = BootstrapTable; + $.fn.bootstrapTable.theme = Constants.THEME; + $.fn.bootstrapTable.VERSION = Constants.VERSION; + $.fn.bootstrapTable.defaults = BootstrapTable.DEFAULTS; + $.fn.bootstrapTable.columnDefaults = BootstrapTable.COLUMN_DEFAULTS; + $.fn.bootstrapTable.events = BootstrapTable.EVENTS; + $.fn.bootstrapTable.locales = BootstrapTable.LOCALES; + $.fn.bootstrapTable.methods = BootstrapTable.METHODS; + $.fn.bootstrapTable.utils = Utils; // BOOTSTRAP TABLE INIT + // ======================= + + $(function () { + $('[data-toggle="table"]').bootstrapTable(); + }); + + return BootstrapTable; + +}))); \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-table/bootstrap-table.min.css b/assets/bootstrap/js/bootstrap-table/bootstrap-table.min.css new file mode 100644 index 0000000..f4ae4b4 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/bootstrap-table.min.css @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.16.0 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +.bootstrap-table .fixed-table-toolbar::after{content:"";display:block;clear:both;}.bootstrap-table .fixed-table-toolbar .bs-bars,.bootstrap-table .fixed-table-toolbar .search,.bootstrap-table .fixed-table-toolbar .columns{position:relative;margin-top:10px;margin-bottom:10px;}.bootstrap-table .fixed-table-toolbar .columns .btn-group > .btn-group{display:inline-block;margin-left:-1px !important;}.bootstrap-table .fixed-table-toolbar .columns .btn-group > .btn-group > .btn{border-radius:0;}.bootstrap-table .fixed-table-toolbar .columns .btn-group > .btn-group:first-child > .btn{border-top-left-radius:4px;border-bottom-left-radius:4px;}.bootstrap-table .fixed-table-toolbar .columns .btn-group > .btn-group:last-child > .btn{border-top-right-radius:4px;border-bottom-right-radius:4px;}.bootstrap-table .fixed-table-toolbar .columns .dropdown-menu{text-align:left;max-height:300px;overflow:auto;-ms-overflow-style:scrollbar;z-index:1001;}.bootstrap-table .fixed-table-toolbar .columns label{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;}.bootstrap-table .fixed-table-toolbar .columns-left{margin-right:5px;}.bootstrap-table .fixed-table-toolbar .columns-right{margin-left:5px;}.bootstrap-table .fixed-table-toolbar .pull-right .dropdown-menu{right:0;left:auto;}.bootstrap-table .fixed-table-container{position:relative;clear:both;}.bootstrap-table .fixed-table-container .table{width:100%;margin-bottom:0 !important;}.bootstrap-table .fixed-table-container .table th,.bootstrap-table .fixed-table-container .table td{vertical-align:middle;box-sizing:border-box;}.bootstrap-table .fixed-table-container .table thead th{vertical-align:bottom;padding:0;margin:0;}.bootstrap-table .fixed-table-container .table thead th:focus{outline:0 solid transparent;}.bootstrap-table .fixed-table-container .table thead th.detail{width:30px;}.bootstrap-table .fixed-table-container .table thead th .th-inner{padding:0.75rem;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.bootstrap-table .fixed-table-container .table thead th .sortable{cursor:pointer;background-position:right;background-repeat:no-repeat;padding-right:30px !important;}.bootstrap-table .fixed-table-container .table thead th .both{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC");}.bootstrap-table .fixed-table-container .table thead th .asc{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==");}.bootstrap-table .fixed-table-container .table thead th .desc{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII= ");}.bootstrap-table .fixed-table-container .table tbody tr.selected td{background-color:rgba(0,0,0,0.035);}.bootstrap-table .fixed-table-container .table tbody tr.no-records-found td{text-align:center;}.bootstrap-table .fixed-table-container .table tbody tr .card-view{display:flex;}.bootstrap-table .fixed-table-container .table tbody tr .card-view .card-view-title{font-weight:bold;display:inline-block;min-width:30%;text-align:left !important;}.bootstrap-table .fixed-table-container .table .bs-checkbox{text-align:center;}.bootstrap-table .fixed-table-container .table .bs-checkbox label{margin-bottom:0;}.bootstrap-table .fixed-table-container .table .bs-checkbox label input[type="radio"],.bootstrap-table .fixed-table-container .table .bs-checkbox label input[type="checkbox"]{margin:0 auto !important;}.bootstrap-table .fixed-table-container .table.table-sm .th-inner{padding:0.3rem;}.bootstrap-table .fixed-table-container.fixed-height:not(.has-footer){border-bottom:1px solid #dee2e6;}.bootstrap-table .fixed-table-container.fixed-height.has-card-view{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6;}.bootstrap-table .fixed-table-container.fixed-height .fixed-table-border{border-left:1px solid #dee2e6;border-right:1px solid #dee2e6;}.bootstrap-table .fixed-table-container.fixed-height .table thead th{border-bottom:1px solid #dee2e6;}.bootstrap-table .fixed-table-container.fixed-height .table-dark thead th{border-bottom:1px solid #32383e;}.bootstrap-table .fixed-table-container .fixed-table-header{overflow:hidden;}.bootstrap-table .fixed-table-container .fixed-table-body{overflow-x:auto;overflow-y:auto;height:100%;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading{align-items:center;background:#fff;display:none;justify-content:center;position:absolute;bottom:0;width:100%;z-index:1000;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap{align-items:baseline;display:flex;justify-content:center;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .loading-text{font-size:2rem;margin-right:6px;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap{align-items:center;display:flex;justify-content:center;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-dot,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::after,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::before{content:"";animation-duration:1.5s;animation-iteration-count:infinite;animation-name:LOADING;background:#212529;border-radius:50%;display:block;height:5px;margin:0 4px;opacity:0;width:5px;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-dot{animation-delay:0.3s;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::after{animation-delay:0.6s;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark{background:#212529;}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-dot,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-wrap::after,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-wrap::before{background:#fff;}.bootstrap-table .fixed-table-container .fixed-table-footer{overflow:hidden;}.bootstrap-table .fixed-table-pagination::after{content:"";display:block;clear:both;}.bootstrap-table .fixed-table-pagination > .pagination-detail,.bootstrap-table .fixed-table-pagination > .pagination{margin-top:10px;margin-bottom:10px;}.bootstrap-table .fixed-table-pagination > .pagination-detail .pagination-info{line-height:34px;margin-right:5px;}.bootstrap-table .fixed-table-pagination > .pagination-detail .page-list{display:inline-block;}.bootstrap-table .fixed-table-pagination > .pagination-detail .page-list .btn-group{position:relative;display:inline-block;vertical-align:middle;}.bootstrap-table .fixed-table-pagination > .pagination-detail .page-list .btn-group .dropdown-menu{margin-bottom:0;}.bootstrap-table .fixed-table-pagination > .pagination ul.pagination{margin:0;}.bootstrap-table .fixed-table-pagination > .pagination ul.pagination a{}.bootstrap-table .fixed-table-pagination > .pagination ul.pagination li.page-intermediate a{color:#c8c8c8;}.bootstrap-table .fixed-table-pagination > .pagination ul.pagination li.page-intermediate a::before{content:'\2B05';}.bootstrap-table .fixed-table-pagination > .pagination ul.pagination li.page-intermediate a::after{content:'\27A1';}.bootstrap-table .fixed-table-pagination > .pagination ul.pagination li.disabled a{pointer-events:none;cursor:default;}.bootstrap-table.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100% !important;background:#fff;height:calc(100vh);overflow-y:scroll;}.dropdown-item.dropdown-item-marker{padding:.25rem 1.5rem;}.dropdown-item.dropdown-item-marker:focus,.dropdown-item.dropdown-item:active{background-color:#fff;color:#4d5259;}div.fixed-table-scroll-inner{width:100%;height:200px;}div.fixed-table-scroll-outer{top:0;left:0;visibility:hidden;width:200px;height:150px;overflow:hidden;}@keyframes LOADING{0%{opacity:0;}50%{opacity:1;}to{opacity:0;}} \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-table/bootstrap-table.min.js b/assets/bootstrap/js/bootstrap-table/bootstrap-table.min.js new file mode 100644 index 0000000..970c746 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/bootstrap-table.min.js @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.16.0 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?module.exports=factory(require('jquery')):typeof define==='function'&&define.amd?define(['jquery'],factory):(global=global||self,global.BootstrapTable=factory(global.jQuery))}(this,(function($){'use strict';$=$&&$.hasOwnProperty('default')?$['default']:$;var commonjsGlobal=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global!=='undefined'?global:typeof self!=='undefined'?self:{};function createCommonjsModule(fn,module){return module={exports:{}},fn(module,module.exports),module.exports}var check=function(it){return it&&it.Math==Math&&it};var global_1=check(typeof globalThis=='object'&&globalThis)||check(typeof window=='object'&&window)||check(typeof self=='object'&&self)||check(typeof commonjsGlobal=='object'&&commonjsGlobal)||Function('return this')();var fails=function(exec){try{return!!exec()}catch(error){return true}};var descriptors=!fails(function(){return Object.defineProperty({},'a',{get:function(){return 7}}).a!=7});var nativePropertyIsEnumerable={}.propertyIsEnumerable;var getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;var NASHORN_BUG=getOwnPropertyDescriptor&&!nativePropertyIsEnumerable.call({1:2},1);var f=NASHORN_BUG?function propertyIsEnumerable(V){var descriptor=getOwnPropertyDescriptor(this,V);return!!descriptor&&descriptor.enumerable}:nativePropertyIsEnumerable;var objectPropertyIsEnumerable={f:f};var createPropertyDescriptor=function(bitmap,value){return{enumerable:!(bitmap&1),configurable:!(bitmap&2),writable:!(bitmap&4),value:value}};var toString={}.toString;var classofRaw=function(it){return toString.call(it).slice(8,-1)};var split=''.split;var indexedObject=fails(function(){return!Object('z').propertyIsEnumerable(0)})?function(it){return classofRaw(it)=='String'?split.call(it,''):Object(it)}:Object;var requireObjectCoercible=function(it){if(it==undefined)throw TypeError("Can't call method on "+it);return it};var toIndexedObject=function(it){return indexedObject(requireObjectCoercible(it))};var isObject=function(it){return typeof it==='object'?it!==null:typeof it==='function'};var toPrimitive=function(input,PREFERRED_STRING){if(!isObject(input))return input;var fn,val;if(PREFERRED_STRING&&typeof(fn=input.toString)=='function'&&!isObject(val=fn.call(input)))return val;if(typeof(fn=input.valueOf)=='function'&&!isObject(val=fn.call(input)))return val;if(!PREFERRED_STRING&&typeof(fn=input.toString)=='function'&&!isObject(val=fn.call(input)))return val;throw TypeError("Can't convert object to primitive value");};var hasOwnProperty={}.hasOwnProperty;var has=function(it,key){return hasOwnProperty.call(it,key)};var document$1=global_1.document;var EXISTS=isObject(document$1)&&isObject(document$1.createElement);var documentCreateElement=function(it){return EXISTS?document$1.createElement(it):{}};var ie8DomDefine=!descriptors&&!fails(function(){return Object.defineProperty(documentCreateElement('div'),'a',{get:function(){return 7}}).a!=7});var nativeGetOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;var f$1=descriptors?nativeGetOwnPropertyDescriptor:function getOwnPropertyDescriptor(O,P){O=toIndexedObject(O);P=toPrimitive(P,true);if(ie8DomDefine)try{return nativeGetOwnPropertyDescriptor(O,P)}catch(error){}if(has(O,P))return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O,P),O[P])};var objectGetOwnPropertyDescriptor={f:f$1};var anObject=function(it){if(!isObject(it)){throw TypeError(String(it)+' is not an object');}return it};var nativeDefineProperty=Object.defineProperty;var f$2=descriptors?nativeDefineProperty:function defineProperty(O,P,Attributes){anObject(O);P=toPrimitive(P,true);anObject(Attributes);if(ie8DomDefine)try{return nativeDefineProperty(O,P,Attributes)}catch(error){}if('get'in Attributes||'set'in Attributes)throw TypeError('Accessors not supported');if('value'in Attributes)O[P]=Attributes.value;return O};var objectDefineProperty={f:f$2};var createNonEnumerableProperty=descriptors?function(object,key,value){return objectDefineProperty.f(object,key,createPropertyDescriptor(1,value))}:function(object,key,value){object[key]=value;return object};var setGlobal=function(key,value){try{createNonEnumerableProperty(global_1,key,value)}catch(error){global_1[key]=value}return value};var SHARED='__core-js_shared__';var store=global_1[SHARED]||setGlobal(SHARED,{});var sharedStore=store;var functionToString=Function.toString;if(typeof sharedStore.inspectSource!='function'){sharedStore.inspectSource=function(it){return functionToString.call(it)}}var inspectSource=sharedStore.inspectSource;var WeakMap=global_1.WeakMap;var nativeWeakMap=typeof WeakMap==='function'&&/native code/.test(inspectSource(WeakMap));var shared=createCommonjsModule(function(module){(module.exports=function(key,value){return sharedStore[key]||(sharedStore[key]=value!==undefined?value:{})})('versions',[]).push({version:'3.6.0',mode:'global',copyright:'© 2019 Denis Pushkarev (zloirock.ru)'})});var id=0;var postfix=Math.random();var uid=function(key){return'Symbol('+String(key===undefined?'':key)+')_'+(++id+postfix).toString(36)};var keys=shared('keys');var sharedKey=function(key){return keys[key]||(keys[key]=uid(key))};var hiddenKeys={};var WeakMap$1=global_1.WeakMap;var set,get,has$1;var enforce=function(it){return has$1(it)?get(it):set(it,{})};var getterFor=function(TYPE){return function(it){var state;if(!isObject(it)||(state=get(it)).type!==TYPE){throw TypeError('Incompatible receiver, '+TYPE+' required');}return state}};if(nativeWeakMap){var store$1=new WeakMap$1();var wmget=store$1.get;var wmhas=store$1.has;var wmset=store$1.set;set=function(it,metadata){wmset.call(store$1,it,metadata);return metadata};get=function(it){return wmget.call(store$1,it)||{}};has$1=function(it){return wmhas.call(store$1,it)}}else{var STATE=sharedKey('state');hiddenKeys[STATE]=true;set=function(it,metadata){createNonEnumerableProperty(it,STATE,metadata);return metadata};get=function(it){return has(it,STATE)?it[STATE]:{}};has$1=function(it){return has(it,STATE)}}var internalState={set:set,get:get,has:has$1,enforce:enforce,getterFor:getterFor};var redefine=createCommonjsModule(function(module){var getInternalState=internalState.get;var enforceInternalState=internalState.enforce;var TEMPLATE=String(String).split('String');(module.exports=function(O,key,value,options){var unsafe=options?!!options.unsafe:false;var simple=options?!!options.enumerable:false;var noTargetGet=options?!!options.noTargetGet:false;if(typeof value=='function'){if(typeof key=='string'&&!has(value,'name'))createNonEnumerableProperty(value,'name',key);enforceInternalState(value).source=TEMPLATE.join(typeof key=='string'?key:'')}if(O===global_1){if(simple)O[key]=value;else setGlobal(key,value);return}else if(!unsafe){delete O[key]}else if(!noTargetGet&&O[key]){simple=true}if(simple)O[key]=value;else createNonEnumerableProperty(O,key,value)})(Function.prototype,'toString',function toString(){return typeof this=='function'&&getInternalState(this).source||inspectSource(this)})});var path=global_1;var aFunction=function(variable){return typeof variable=='function'?variable:undefined};var getBuiltIn=function(namespace,method){return arguments.length<2?aFunction(path[namespace])||aFunction(global_1[namespace]):path[namespace]&&path[namespace][method]||global_1[namespace]&&global_1[namespace][method]};var ceil=Math.ceil;var floor=Math.floor;var toInteger=function(argument){return isNaN(argument=+argument)?0:(argument>0?floor:ceil)(argument)};var min=Math.min;var toLength=function(argument){return argument>0?min(toInteger(argument),0x1FFFFFFFFFFFFF):0};var max=Math.max;var min$1=Math.min;var toAbsoluteIndex=function(index,length){var integer=toInteger(index);return integer<0?max(integer+length,0):min$1(integer,length)};var createMethod=function(IS_INCLUDES){return function($this,el,fromIndex){var O=toIndexedObject($this);var length=toLength(O.length);var index=toAbsoluteIndex(fromIndex,length);var value;if(IS_INCLUDES&&el!=el)while(length>index){value=O[index++];if(value!=value)return true}else for(;length>index;index++){if((IS_INCLUDES||index in O)&&O[index]===el)return IS_INCLUDES||index||0}return!IS_INCLUDES&&-1}};var arrayIncludes={includes:createMethod(true),indexOf:createMethod(false)};var indexOf=arrayIncludes.indexOf;var objectKeysInternal=function(object,names){var O=toIndexedObject(object);var i=0;var result=[];var key;for(key in O)!has(hiddenKeys,key)&&has(O,key)&&result.push(key);while(names.length>i)if(has(O,key=names[i++])){~indexOf(result,key)||result.push(key)}return result};var enumBugKeys=['constructor','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','toLocaleString','toString','valueOf'];var hiddenKeys$1=enumBugKeys.concat('length','prototype');var f$3=Object.getOwnPropertyNames||function getOwnPropertyNames(O){return objectKeysInternal(O,hiddenKeys$1)};var objectGetOwnPropertyNames={f:f$3};var f$4=Object.getOwnPropertySymbols;var objectGetOwnPropertySymbols={f:f$4};var ownKeys=getBuiltIn('Reflect','ownKeys')||function ownKeys(it){var keys=objectGetOwnPropertyNames.f(anObject(it));var getOwnPropertySymbols=objectGetOwnPropertySymbols.f;return getOwnPropertySymbols?keys.concat(getOwnPropertySymbols(it)):keys};var copyConstructorProperties=function(target,source){var keys=ownKeys(source);var defineProperty=objectDefineProperty.f;var getOwnPropertyDescriptor=objectGetOwnPropertyDescriptor.f;for(var i=0;iindex)objectDefineProperty.f(O,key=keys[index++],Properties[key]);return O};var html=getBuiltIn('document','documentElement');var GT='>';var LT='<';var PROTOTYPE='prototype';var SCRIPT='script';var IE_PROTO=sharedKey('IE_PROTO');var EmptyConstructor=function(){};var scriptTag=function(content){return LT+SCRIPT+GT+content+LT+'/'+SCRIPT+GT};var NullProtoObjectViaActiveX=function(activeXDocument){activeXDocument.write(scriptTag(''));activeXDocument.close();var temp=activeXDocument.parentWindow.Object;activeXDocument=null;return temp};var NullProtoObjectViaIFrame=function(){var iframe=documentCreateElement('iframe');var JS='java'+SCRIPT+':';var iframeDocument;iframe.style.display='none';html.appendChild(iframe);iframe.src=String(JS);iframeDocument=iframe.contentWindow.document;iframeDocument.open();iframeDocument.write(scriptTag('document.F=Object'));iframeDocument.close();return iframeDocument.F};var activeXDocument;var NullProtoObject=function(){try{activeXDocument=document.domain&&new ActiveXObject('htmlfile')}catch(error){}NullProtoObject=activeXDocument?NullProtoObjectViaActiveX(activeXDocument):NullProtoObjectViaIFrame();var length=enumBugKeys.length;while(length--)delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];return NullProtoObject()};hiddenKeys[IE_PROTO]=true;var objectCreate=Object.create||function create(O,Properties){var result;if(O!==null){EmptyConstructor[PROTOTYPE]=anObject(O);result=new EmptyConstructor();EmptyConstructor[PROTOTYPE]=null;result[IE_PROTO]=O}else result=NullProtoObject();return Properties===undefined?result:objectDefineProperties(result,Properties)};var nativeGetOwnPropertyNames=objectGetOwnPropertyNames.f;var toString$1={}.toString;var windowNames=typeof window=='object'&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];var getWindowNames=function(it){try{return nativeGetOwnPropertyNames(it)}catch(error){return windowNames.slice()}};var f$5=function getOwnPropertyNames(it){return windowNames&&toString$1.call(it)=='[object Window]'?getWindowNames(it):nativeGetOwnPropertyNames(toIndexedObject(it))};var objectGetOwnPropertyNamesExternal={f:f$5};var WellKnownSymbolsStore=shared('wks');var Symbol$1=global_1.Symbol;var createWellKnownSymbol=useSymbolAsUid?Symbol$1:uid;var wellKnownSymbol=function(name){if(!has(WellKnownSymbolsStore,name)){if(nativeSymbol&&has(Symbol$1,name))WellKnownSymbolsStore[name]=Symbol$1[name];else WellKnownSymbolsStore[name]=createWellKnownSymbol('Symbol.'+name)}return WellKnownSymbolsStore[name]};var f$6=wellKnownSymbol;var wrappedWellKnownSymbol={f:f$6};var defineProperty=objectDefineProperty.f;var defineWellKnownSymbol=function(NAME){var Symbol=path.Symbol||(path.Symbol={});if(!has(Symbol,NAME))defineProperty(Symbol,NAME,{value:wrappedWellKnownSymbol.f(NAME)})};var defineProperty$1=objectDefineProperty.f;var TO_STRING_TAG=wellKnownSymbol('toStringTag');var setToStringTag=function(it,TAG,STATIC){if(it&&!has(it=STATIC?it:it.prototype,TO_STRING_TAG)){defineProperty$1(it,TO_STRING_TAG,{configurable:true,value:TAG})}};var aFunction$1=function(it){if(typeof it!='function'){throw TypeError(String(it)+' is not a function');}return it};var bindContext=function(fn,that,length){aFunction$1(fn);if(that===undefined)return fn;switch(length){case 0:return function(){return fn.call(that)};case 1:return function(a){return fn.call(that,a)};case 2:return function(a,b){return fn.call(that,a,b)};case 3:return function(a,b,c){return fn.call(that,a,b,c)}}return function(){return fn.apply(that,arguments)}};var SPECIES=wellKnownSymbol('species');var arraySpeciesCreate=function(originalArray,length){var C;if(isArray(originalArray)){C=originalArray.constructor;if(typeof C=='function'&&(C===Array||isArray(C.prototype)))C=undefined;else if(isObject(C)){C=C[SPECIES];if(C===null)C=undefined}}return new(C===undefined?Array:C)(length===0?0:length)};var push=[].push;var createMethod$1=function(TYPE){var IS_MAP=TYPE==1;var IS_FILTER=TYPE==2;var IS_SOME=TYPE==3;var IS_EVERY=TYPE==4;var IS_FIND_INDEX=TYPE==6;var NO_HOLES=TYPE==5||IS_FIND_INDEX;return function($this,callbackfn,that,specificCreate){var O=toObject($this);var self=indexedObject(O);var boundFunction=bindContext(callbackfn,that,3);var length=toLength(self.length);var index=0;var create=specificCreate||arraySpeciesCreate;var target=IS_MAP?create($this,length):IS_FILTER?create($this,0):undefined;var value,result;for(;length>index;index++)if(NO_HOLES||index in self){value=self[index];result=boundFunction(value,index,O);if(TYPE){if(IS_MAP)target[index]=result;else if(result)switch(TYPE){case 3:return true;case 5:return value;case 6:return index;case 2:push.call(target,value)}else if(IS_EVERY)return false}}return IS_FIND_INDEX?-1:IS_SOME||IS_EVERY?IS_EVERY:target}};var arrayIteration={forEach:createMethod$1(0),map:createMethod$1(1),filter:createMethod$1(2),some:createMethod$1(3),every:createMethod$1(4),find:createMethod$1(5),findIndex:createMethod$1(6)};var $forEach=arrayIteration.forEach;var HIDDEN=sharedKey('hidden');var SYMBOL='Symbol';var PROTOTYPE$1='prototype';var TO_PRIMITIVE=wellKnownSymbol('toPrimitive');var setInternalState=internalState.set;var getInternalState=internalState.getterFor(SYMBOL);var ObjectPrototype=Object[PROTOTYPE$1];var $Symbol=global_1.Symbol;var $stringify=getBuiltIn('JSON','stringify');var nativeGetOwnPropertyDescriptor$1=objectGetOwnPropertyDescriptor.f;var nativeDefineProperty$1=objectDefineProperty.f;var nativeGetOwnPropertyNames$1=objectGetOwnPropertyNamesExternal.f;var nativePropertyIsEnumerable$1=objectPropertyIsEnumerable.f;var AllSymbols=shared('symbols');var ObjectPrototypeSymbols=shared('op-symbols');var StringToSymbolRegistry=shared('string-to-symbol-registry');var SymbolToStringRegistry=shared('symbol-to-string-registry');var WellKnownSymbolsStore$1=shared('wks');var QObject=global_1.QObject;var USE_SETTER=!QObject||!QObject[PROTOTYPE$1]||!QObject[PROTOTYPE$1].findChild;var setSymbolDescriptor=descriptors&&fails(function(){return objectCreate(nativeDefineProperty$1({},'a',{get:function(){return nativeDefineProperty$1(this,'a',{value:7}).a}})).a!=7})?function(O,P,Attributes){var ObjectPrototypeDescriptor=nativeGetOwnPropertyDescriptor$1(ObjectPrototype,P);if(ObjectPrototypeDescriptor)delete ObjectPrototype[P];nativeDefineProperty$1(O,P,Attributes);if(ObjectPrototypeDescriptor&&O!==ObjectPrototype){nativeDefineProperty$1(ObjectPrototype,P,ObjectPrototypeDescriptor)}}:nativeDefineProperty$1;var wrap=function(tag,description){var symbol=AllSymbols[tag]=objectCreate($Symbol[PROTOTYPE$1]);setInternalState(symbol,{type:SYMBOL,tag:tag,description:description});if(!descriptors)symbol.description=description;return symbol};var isSymbol=nativeSymbol&&typeof $Symbol.iterator=='symbol'?function(it){return typeof it=='symbol'}:function(it){return Object(it)instanceof $Symbol};var $defineProperty=function defineProperty(O,P,Attributes){if(O===ObjectPrototype)$defineProperty(ObjectPrototypeSymbols,P,Attributes);anObject(O);var key=toPrimitive(P,true);anObject(Attributes);if(has(AllSymbols,key)){if(!Attributes.enumerable){if(!has(O,HIDDEN))nativeDefineProperty$1(O,HIDDEN,createPropertyDescriptor(1,{}));O[HIDDEN][key]=true}else{if(has(O,HIDDEN)&&O[HIDDEN][key])O[HIDDEN][key]=false;Attributes=objectCreate(Attributes,{enumerable:createPropertyDescriptor(0,false)})}return setSymbolDescriptor(O,key,Attributes)}return nativeDefineProperty$1(O,key,Attributes)};var $defineProperties=function defineProperties(O,Properties){anObject(O);var properties=toIndexedObject(Properties);var keys=objectKeys(properties).concat($getOwnPropertySymbols(properties));$forEach(keys,function(key){if(!descriptors||$propertyIsEnumerable.call(properties,key))$defineProperty(O,key,properties[key])});return O};var $create=function create(O,Properties){return Properties===undefined?objectCreate(O):$defineProperties(objectCreate(O),Properties)};var $propertyIsEnumerable=function propertyIsEnumerable(V){var P=toPrimitive(V,true);var enumerable=nativePropertyIsEnumerable$1.call(this,P);if(this===ObjectPrototype&&has(AllSymbols,P)&&!has(ObjectPrototypeSymbols,P))return false;return enumerable||!has(this,P)||!has(AllSymbols,P)||has(this,HIDDEN)&&this[HIDDEN][P]?enumerable:true};var $getOwnPropertyDescriptor=function getOwnPropertyDescriptor(O,P){var it=toIndexedObject(O);var key=toPrimitive(P,true);if(it===ObjectPrototype&&has(AllSymbols,key)&&!has(ObjectPrototypeSymbols,key))return;var descriptor=nativeGetOwnPropertyDescriptor$1(it,key);if(descriptor&&has(AllSymbols,key)&&!(has(it,HIDDEN)&&it[HIDDEN][key])){descriptor.enumerable=true}return descriptor};var $getOwnPropertyNames=function getOwnPropertyNames(O){var names=nativeGetOwnPropertyNames$1(toIndexedObject(O));var result=[];$forEach(names,function(key){if(!has(AllSymbols,key)&&!has(hiddenKeys,key))result.push(key)});return result};var $getOwnPropertySymbols=function getOwnPropertySymbols(O){var IS_OBJECT_PROTOTYPE=O===ObjectPrototype;var names=nativeGetOwnPropertyNames$1(IS_OBJECT_PROTOTYPE?ObjectPrototypeSymbols:toIndexedObject(O));var result=[];$forEach(names,function(key){if(has(AllSymbols,key)&&(!IS_OBJECT_PROTOTYPE||has(ObjectPrototype,key))){result.push(AllSymbols[key])}});return result};if(!nativeSymbol){$Symbol=function Symbol(){if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor');var description=!arguments.length||arguments[0]===undefined?undefined:String(arguments[0]);var tag=uid(description);var setter=function(value){if(this===ObjectPrototype)setter.call(ObjectPrototypeSymbols,value);if(has(this,HIDDEN)&&has(this[HIDDEN],tag))this[HIDDEN][tag]=false;setSymbolDescriptor(this,tag,createPropertyDescriptor(1,value))};if(descriptors&&USE_SETTER)setSymbolDescriptor(ObjectPrototype,tag,{configurable:true,set:setter});return wrap(tag,description)};redefine($Symbol[PROTOTYPE$1],'toString',function toString(){return getInternalState(this).tag});objectPropertyIsEnumerable.f=$propertyIsEnumerable;objectDefineProperty.f=$defineProperty;objectGetOwnPropertyDescriptor.f=$getOwnPropertyDescriptor;objectGetOwnPropertyNames.f=objectGetOwnPropertyNamesExternal.f=$getOwnPropertyNames;objectGetOwnPropertySymbols.f=$getOwnPropertySymbols;if(descriptors){nativeDefineProperty$1($Symbol[PROTOTYPE$1],'description',{configurable:true,get:function description(){return getInternalState(this).description}});{redefine(ObjectPrototype,'propertyIsEnumerable',$propertyIsEnumerable,{unsafe:true})}}}if(!useSymbolAsUid){wrappedWellKnownSymbol.f=function(name){return wrap(wellKnownSymbol(name),name)}}_export({global:true,wrap:true,forced:!nativeSymbol,sham:!nativeSymbol},{Symbol:$Symbol});$forEach(objectKeys(WellKnownSymbolsStore$1),function(name){defineWellKnownSymbol(name)});_export({target:SYMBOL,stat:true,forced:!nativeSymbol},{'for':function(key){var string=String(key);if(has(StringToSymbolRegistry,string))return StringToSymbolRegistry[string];var symbol=$Symbol(string);StringToSymbolRegistry[string]=symbol;SymbolToStringRegistry[symbol]=string;return symbol},keyFor:function keyFor(sym){if(!isSymbol(sym))throw TypeError(sym+' is not a symbol');if(has(SymbolToStringRegistry,sym))return SymbolToStringRegistry[sym]},useSetter:function(){USE_SETTER=true},useSimple:function(){USE_SETTER=false}});_export({target:'Object',stat:true,forced:!nativeSymbol,sham:!descriptors},{create:$create,defineProperty:$defineProperty,defineProperties:$defineProperties,getOwnPropertyDescriptor:$getOwnPropertyDescriptor});_export({target:'Object',stat:true,forced:!nativeSymbol},{getOwnPropertyNames:$getOwnPropertyNames,getOwnPropertySymbols:$getOwnPropertySymbols});_export({target:'Object',stat:true,forced:fails(function(){objectGetOwnPropertySymbols.f(1)})},{getOwnPropertySymbols:function getOwnPropertySymbols(it){return objectGetOwnPropertySymbols.f(toObject(it))}});if($stringify){var FORCED_JSON_STRINGIFY=!nativeSymbol||fails(function(){var symbol=$Symbol();return $stringify([symbol])!='[null]'||$stringify({a:symbol})!='{}'||$stringify(Object(symbol))!='{}'});_export({target:'JSON',stat:true,forced:FORCED_JSON_STRINGIFY},{stringify:function stringify(it,replacer,space){var args=[it];var index=1;var $replacer;while(arguments.length>index)args.push(arguments[index++]);$replacer=replacer;if(!isObject(replacer)&&it===undefined||isSymbol(it))return;if(!isArray(replacer))replacer=function(key,value){if(typeof $replacer=='function')value=$replacer.call(this,key,value);if(!isSymbol(value))return value};args[1]=replacer;return $stringify.apply(null,args)}})}if(!$Symbol[PROTOTYPE$1][TO_PRIMITIVE]){createNonEnumerableProperty($Symbol[PROTOTYPE$1],TO_PRIMITIVE,$Symbol[PROTOTYPE$1].valueOf)}setToStringTag($Symbol,SYMBOL);hiddenKeys[HIDDEN]=true;var defineProperty$2=objectDefineProperty.f;var NativeSymbol=global_1.Symbol;if(descriptors&&typeof NativeSymbol=='function'&&(!('description'in NativeSymbol.prototype)||NativeSymbol().description!==undefined)){var EmptyStringDescriptionStore={};var SymbolWrapper=function Symbol(){var description=arguments.length<1||arguments[0]===undefined?undefined:String(arguments[0]);var result=this instanceof SymbolWrapper?new NativeSymbol(description):description===undefined?NativeSymbol():NativeSymbol(description);if(description==='')EmptyStringDescriptionStore[result]=true;return result};copyConstructorProperties(SymbolWrapper,NativeSymbol);var symbolPrototype=SymbolWrapper.prototype=NativeSymbol.prototype;symbolPrototype.constructor=SymbolWrapper;var symbolToString=symbolPrototype.toString;var native=String(NativeSymbol('test'))=='Symbol(test)';var regexp=/^Symbol\((.*)\)[^)]+$/;defineProperty$2(symbolPrototype,'description',{configurable:true,get:function description(){var symbol=isObject(this)?this.valueOf():this;var string=symbolToString.call(symbol);if(has(EmptyStringDescriptionStore,symbol))return'';var desc=native?string.slice(7,-1):string.replace(regexp,'$1');return desc===''?undefined:desc}});_export({global:true,forced:true},{Symbol:SymbolWrapper})}defineWellKnownSymbol('iterator');var createProperty=function(object,key,value){var propertyKey=toPrimitive(key);if(propertyKey in object)objectDefineProperty.f(object,propertyKey,createPropertyDescriptor(0,value));else object[propertyKey]=value};var userAgent=getBuiltIn('navigator','userAgent')||'';var process=global_1.process;var versions=process&&process.versions;var v8=versions&&versions.v8;var match,version;if(v8){match=v8.split('.');version=match[0]+match[1]}else if(userAgent){match=userAgent.match(/Edge\/(\d+)/);if(!match||match[1]>=74){match=userAgent.match(/Chrome\/(\d+)/);if(match)version=match[1]}}var v8Version=version&&+version;var SPECIES$1=wellKnownSymbol('species');var arrayMethodHasSpeciesSupport=function(METHOD_NAME){return v8Version>=51||!fails(function(){var array=[];var constructor=array.constructor={};constructor[SPECIES$1]=function(){return{foo:1}};return array[METHOD_NAME](Boolean).foo!==1})};var IS_CONCAT_SPREADABLE=wellKnownSymbol('isConcatSpreadable');var MAX_SAFE_INTEGER=0x1FFFFFFFFFFFFF;var MAXIMUM_ALLOWED_INDEX_EXCEEDED='Maximum allowed index exceeded';var IS_CONCAT_SPREADABLE_SUPPORT=v8Version>=51||!fails(function(){var array=[];array[IS_CONCAT_SPREADABLE]=false;return array.concat()[0]!==array});var SPECIES_SUPPORT=arrayMethodHasSpeciesSupport('concat');var isConcatSpreadable=function(O){if(!isObject(O))return false;var spreadable=O[IS_CONCAT_SPREADABLE];return spreadable!==undefined?!!spreadable:isArray(O)};var FORCED=!IS_CONCAT_SPREADABLE_SUPPORT||!SPECIES_SUPPORT;_export({target:'Array',proto:true,forced:FORCED},{concat:function concat(arg){var O=toObject(this);var A=arraySpeciesCreate(O,0);var n=0;var i,k,length,len,E;for(i=-1,length=arguments.length;iMAX_SAFE_INTEGER)throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);for(k=0;k=MAX_SAFE_INTEGER)throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);createProperty(A,n++,E)}}A.length=n;return A}});var $filter=arrayIteration.filter;var HAS_SPECIES_SUPPORT=arrayMethodHasSpeciesSupport('filter');var USES_TO_LENGTH=HAS_SPECIES_SUPPORT&&!fails(function(){[].filter.call({length:-1,0:1},function(it){throw it;})});_export({target:'Array',proto:true,forced:!HAS_SPECIES_SUPPORT||!USES_TO_LENGTH},{filter:function filter(callbackfn){return $filter(this,callbackfn,arguments.length>1?arguments[1]:undefined)}});var UNSCOPABLES=wellKnownSymbol('unscopables');var ArrayPrototype=Array.prototype;if(ArrayPrototype[UNSCOPABLES]==undefined){objectDefineProperty.f(ArrayPrototype,UNSCOPABLES,{configurable:true,value:objectCreate(null)})}var addToUnscopables=function(key){ArrayPrototype[UNSCOPABLES][key]=true};var $find=arrayIteration.find;var FIND='find';var SKIPS_HOLES=true;if(FIND in[])Array(1)[FIND](function(){SKIPS_HOLES=false});_export({target:'Array',proto:true,forced:SKIPS_HOLES},{find:function find(callbackfn){return $find(this,callbackfn,arguments.length>1?arguments[1]:undefined)}});addToUnscopables(FIND);var $findIndex=arrayIteration.findIndex;var FIND_INDEX='findIndex';var SKIPS_HOLES$1=true;if(FIND_INDEX in[])Array(1)[FIND_INDEX](function(){SKIPS_HOLES$1=false});_export({target:'Array',proto:true,forced:SKIPS_HOLES$1},{findIndex:function findIndex(callbackfn){return $findIndex(this,callbackfn,arguments.length>1?arguments[1]:undefined)}});addToUnscopables(FIND_INDEX);var $includes=arrayIncludes.includes;_export({target:'Array',proto:true},{includes:function includes(el){return $includes(this,el,arguments.length>1?arguments[1]:undefined)}});addToUnscopables('includes');var sloppyArrayMethod=function(METHOD_NAME,argument){var method=[][METHOD_NAME];return!method||!fails(function(){method.call(null,argument||function(){throw 1;},1)})};var $indexOf=arrayIncludes.indexOf;var nativeIndexOf=[].indexOf;var NEGATIVE_ZERO=!!nativeIndexOf&&1/[1].indexOf(1,-0)<0;var SLOPPY_METHOD=sloppyArrayMethod('indexOf');_export({target:'Array',proto:true,forced:NEGATIVE_ZERO||SLOPPY_METHOD},{indexOf:function indexOf(searchElement){return NEGATIVE_ZERO?nativeIndexOf.apply(this,arguments)||0:$indexOf(this,searchElement,arguments.length>1?arguments[1]:undefined)}});var correctPrototypeGetter=!fails(function(){function F(){}F.prototype.constructor=null;return Object.getPrototypeOf(new F())!==F.prototype});var IE_PROTO$1=sharedKey('IE_PROTO');var ObjectPrototype$1=Object.prototype;var objectGetPrototypeOf=correctPrototypeGetter?Object.getPrototypeOf:function(O){O=toObject(O);if(has(O,IE_PROTO$1))return O[IE_PROTO$1];if(typeof O.constructor=='function'&&O instanceof O.constructor){return O.constructor.prototype}return O instanceof Object?ObjectPrototype$1:null};var ITERATOR=wellKnownSymbol('iterator');var BUGGY_SAFARI_ITERATORS=false;var returnThis=function(){return this};var IteratorPrototype,PrototypeOfArrayIteratorPrototype,arrayIterator;if([].keys){arrayIterator=[].keys();if(!('next'in arrayIterator))BUGGY_SAFARI_ITERATORS=true;else{PrototypeOfArrayIteratorPrototype=objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator));if(PrototypeOfArrayIteratorPrototype!==Object.prototype)IteratorPrototype=PrototypeOfArrayIteratorPrototype}}if(IteratorPrototype==undefined)IteratorPrototype={};if(!has(IteratorPrototype,ITERATOR)){createNonEnumerableProperty(IteratorPrototype,ITERATOR,returnThis)}var iteratorsCore={IteratorPrototype:IteratorPrototype,BUGGY_SAFARI_ITERATORS:BUGGY_SAFARI_ITERATORS};var IteratorPrototype$1=iteratorsCore.IteratorPrototype;var createIteratorConstructor=function(IteratorConstructor,NAME,next){var TO_STRING_TAG=NAME+' Iterator';IteratorConstructor.prototype=objectCreate(IteratorPrototype$1,{next:createPropertyDescriptor(1,next)});setToStringTag(IteratorConstructor,TO_STRING_TAG,false);return IteratorConstructor};var aPossiblePrototype=function(it){if(!isObject(it)&&it!==null){throw TypeError("Can't set "+String(it)+' as a prototype');}return it};var objectSetPrototypeOf=Object.setPrototypeOf||('__proto__'in{}?function(){var CORRECT_SETTER=false;var test={};var setter;try{setter=Object.getOwnPropertyDescriptor(Object.prototype,'__proto__').set;setter.call(test,[]);CORRECT_SETTER=test instanceof Array}catch(error){}return function setPrototypeOf(O,proto){anObject(O);aPossiblePrototype(proto);if(CORRECT_SETTER)setter.call(O,proto);else O.__proto__=proto;return O}}():undefined);var IteratorPrototype$2=iteratorsCore.IteratorPrototype;var BUGGY_SAFARI_ITERATORS$1=iteratorsCore.BUGGY_SAFARI_ITERATORS;var ITERATOR$1=wellKnownSymbol('iterator');var KEYS='keys';var VALUES='values';var ENTRIES='entries';var returnThis$1=function(){return this};var defineIterator=function(Iterable,NAME,IteratorConstructor,next,DEFAULT,IS_SET,FORCED){createIteratorConstructor(IteratorConstructor,NAME,next);var getIterationMethod=function(KIND){if(KIND===DEFAULT&&defaultIterator)return defaultIterator;if(!BUGGY_SAFARI_ITERATORS$1&&KIND in IterablePrototype)return IterablePrototype[KIND];switch(KIND){case KEYS:return function keys(){return new IteratorConstructor(this,KIND)};case VALUES:return function values(){return new IteratorConstructor(this,KIND)};case ENTRIES:return function entries(){return new IteratorConstructor(this,KIND)}}return function(){return new IteratorConstructor(this)}};var TO_STRING_TAG=NAME+' Iterator';var INCORRECT_VALUES_NAME=false;var IterablePrototype=Iterable.prototype;var nativeIterator=IterablePrototype[ITERATOR$1]||IterablePrototype['@@iterator']||DEFAULT&&IterablePrototype[DEFAULT];var defaultIterator=!BUGGY_SAFARI_ITERATORS$1&&nativeIterator||getIterationMethod(DEFAULT);var anyNativeIterator=NAME=='Array'?IterablePrototype.entries||nativeIterator:nativeIterator;var CurrentIteratorPrototype,methods,KEY;if(anyNativeIterator){CurrentIteratorPrototype=objectGetPrototypeOf(anyNativeIterator.call(new Iterable()));if(IteratorPrototype$2!==Object.prototype&&CurrentIteratorPrototype.next){if(objectGetPrototypeOf(CurrentIteratorPrototype)!==IteratorPrototype$2){if(objectSetPrototypeOf){objectSetPrototypeOf(CurrentIteratorPrototype,IteratorPrototype$2)}else if(typeof CurrentIteratorPrototype[ITERATOR$1]!='function'){createNonEnumerableProperty(CurrentIteratorPrototype,ITERATOR$1,returnThis$1)}}setToStringTag(CurrentIteratorPrototype,TO_STRING_TAG,true)}}if(DEFAULT==VALUES&&nativeIterator&&nativeIterator.name!==VALUES){INCORRECT_VALUES_NAME=true;defaultIterator=function values(){return nativeIterator.call(this)}}if(IterablePrototype[ITERATOR$1]!==defaultIterator){createNonEnumerableProperty(IterablePrototype,ITERATOR$1,defaultIterator)}if(DEFAULT){methods={values:getIterationMethod(VALUES),keys:IS_SET?defaultIterator:getIterationMethod(KEYS),entries:getIterationMethod(ENTRIES)};if(FORCED)for(KEY in methods){if(BUGGY_SAFARI_ITERATORS$1||INCORRECT_VALUES_NAME||!(KEY in IterablePrototype)){redefine(IterablePrototype,KEY,methods[KEY])}}else _export({target:NAME,proto:true,forced:BUGGY_SAFARI_ITERATORS$1||INCORRECT_VALUES_NAME},methods)}return methods};var ARRAY_ITERATOR='Array Iterator';var setInternalState$1=internalState.set;var getInternalState$1=internalState.getterFor(ARRAY_ITERATOR);var es_array_iterator=defineIterator(Array,'Array',function(iterated,kind){setInternalState$1(this,{type:ARRAY_ITERATOR,target:toIndexedObject(iterated),index:0,kind:kind})},function(){var state=getInternalState$1(this);var target=state.target;var kind=state.kind;var index=state.index++;if(!target||index>=target.length){state.target=undefined;return{value:undefined,done:true}}if(kind=='keys')return{value:index,done:false};if(kind=='values')return{value:target[index],done:false};return{value:[index,target[index]],done:false}},'values');addToUnscopables('keys');addToUnscopables('values');addToUnscopables('entries');var nativeJoin=[].join;var ES3_STRINGS=indexedObject!=Object;var SLOPPY_METHOD$1=sloppyArrayMethod('join',',');_export({target:'Array',proto:true,forced:ES3_STRINGS||SLOPPY_METHOD$1},{join:function join(separator){return nativeJoin.call(toIndexedObject(this),separator===undefined?',':separator)}});var $map=arrayIteration.map;var HAS_SPECIES_SUPPORT$1=arrayMethodHasSpeciesSupport('map');var USES_TO_LENGTH$1=HAS_SPECIES_SUPPORT$1&&!fails(function(){[].map.call({length:-1,0:1},function(it){throw it;})});_export({target:'Array',proto:true,forced:!HAS_SPECIES_SUPPORT$1||!USES_TO_LENGTH$1},{map:function map(callbackfn){return $map(this,callbackfn,arguments.length>1?arguments[1]:undefined)}});var nativeReverse=[].reverse;var test=[1,2];_export({target:'Array',proto:true,forced:String(test)===String(test.reverse())},{reverse:function reverse(){if(isArray(this))this.length=this.length;return nativeReverse.call(this)}});var SPECIES$2=wellKnownSymbol('species');var nativeSlice=[].slice;var max$1=Math.max;_export({target:'Array',proto:true,forced:!arrayMethodHasSpeciesSupport('slice')},{slice:function slice(start,end){var O=toIndexedObject(this);var length=toLength(O.length);var k=toAbsoluteIndex(start,length);var fin=toAbsoluteIndex(end===undefined?length:end,length);var Constructor,result,n;if(isArray(O)){Constructor=O.constructor;if(typeof Constructor=='function'&&(Constructor===Array||isArray(Constructor.prototype))){Constructor=undefined}else if(isObject(Constructor)){Constructor=Constructor[SPECIES$2];if(Constructor===null)Constructor=undefined}if(Constructor===Array||Constructor===undefined){return nativeSlice.call(O,k,fin)}}result=new(Constructor===undefined?Array:Constructor)(max$1(fin-k,0));for(n=0;kMAX_SAFE_INTEGER$1){throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);}A=arraySpeciesCreate(O,actualDeleteCount);for(k=0;klen-actualDeleteCount+insertCount;k--)delete O[k-1]}else if(insertCount>actualDeleteCount){for(k=len-actualDeleteCount;k>actualStart;k--){from=k+actualDeleteCount-1;to=k+insertCount-1;if(from in O)O[to]=O[from];else delete O[to]}}for(k=0;k2){it=trim(it);first=it.charCodeAt(0);if(first===43||first===45){third=it.charCodeAt(2);if(third===88||third===120)return NaN}else if(first===48){switch(it.charCodeAt(1)){case 66:case 98:radix=2;maxCode=49;break;case 79:case 111:radix=8;maxCode=55;break;default:return+it}digits=it.slice(2);length=digits.length;for(index=0;indexmaxCode)return NaN}return parseInt(digits,radix)}}return+it};if(isForced_1(NUMBER,!NativeNumber(' 0o1')||!NativeNumber('0b1')||NativeNumber('+0x1'))){var NumberWrapper=function Number(value){var it=arguments.length<1?0:value;var dummy=this;return dummy instanceof NumberWrapper&&(BROKEN_CLASSOF?fails(function(){NumberPrototype.valueOf.call(dummy)}):classofRaw(dummy)!=NUMBER)?inheritIfRequired(new NativeNumber(toNumber(it)),dummy,NumberWrapper):toNumber(it)};for(var keys$1=descriptors?getOwnPropertyNames(NativeNumber):('MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger').split(','),j=0,key;keys$1.length>j;j++){if(has(NativeNumber,key=keys$1[j])&&!has(NumberWrapper,key)){defineProperty$3(NumberWrapper,key,getOwnPropertyDescriptor$2(NativeNumber,key))}}NumberWrapper.prototype=NumberPrototype;NumberPrototype.constructor=NumberWrapper;redefine(global_1,NUMBER,NumberWrapper)}var nativeAssign=Object.assign;var defineProperty$4=Object.defineProperty;var objectAssign=!nativeAssign||fails(function(){if(descriptors&&nativeAssign({b:1},nativeAssign(defineProperty$4({},'a',{enumerable:true,get:function(){defineProperty$4(this,'b',{value:3,enumerable:false})}}),{b:2})).b!==1)return true;var A={};var B={};var symbol=Symbol();var alphabet='abcdefghijklmnopqrst';A[symbol]=7;alphabet.split('').forEach(function(chr){B[chr]=chr});return nativeAssign({},A)[symbol]!=7||objectKeys(nativeAssign({},B)).join('')!=alphabet})?function assign(target,source){var T=toObject(target);var argumentsLength=arguments.length;var index=1;var getOwnPropertySymbols=objectGetOwnPropertySymbols.f;var propertyIsEnumerable=objectPropertyIsEnumerable.f;while(argumentsLength>index){var S=indexedObject(arguments[index++]);var keys=getOwnPropertySymbols?objectKeys(S).concat(getOwnPropertySymbols(S)):objectKeys(S);var length=keys.length;var j=0;var key;while(length>j){key=keys[j++];if(!descriptors||propertyIsEnumerable.call(S,key))T[key]=S[key]}}return T}:nativeAssign;_export({target:'Object',stat:true,forced:Object.assign!==objectAssign},{assign:objectAssign});var propertyIsEnumerable=objectPropertyIsEnumerable.f;var createMethod$3=function(TO_ENTRIES){return function(it){var O=toIndexedObject(it);var keys=objectKeys(O);var length=keys.length;var i=0;var result=[];var key;while(length>i){key=keys[i++];if(!descriptors||propertyIsEnumerable.call(O,key)){result.push(TO_ENTRIES?[key,O[key]]:O[key])}}return result}};var objectToArray={entries:createMethod$3(true),values:createMethod$3(false)};var $entries=objectToArray.entries;_export({target:'Object',stat:true},{entries:function entries(O){return $entries(O)}});var TO_STRING_TAG$1=wellKnownSymbol('toStringTag');var test$2={};test$2[TO_STRING_TAG$1]='z';var toStringTagSupport=String(test$2)==='[object z]';var TO_STRING_TAG$2=wellKnownSymbol('toStringTag');var CORRECT_ARGUMENTS=classofRaw(function(){return arguments}())=='Arguments';var tryGet=function(it,key){try{return it[key]}catch(error){}};var classof=toStringTagSupport?classofRaw:function(it){var O,tag,result;return it===undefined?'Undefined':it===null?'Null':typeof(tag=tryGet(O=Object(it),TO_STRING_TAG$2))=='string'?tag:CORRECT_ARGUMENTS?classofRaw(O):(result=classofRaw(O))=='Object'&&typeof O.callee=='function'?'Arguments':result};var objectToString=toStringTagSupport?{}.toString:function toString(){return'[object '+classof(this)+']'};if(!toStringTagSupport){redefine(Object.prototype,'toString',objectToString,{unsafe:true})}var trim$1=stringTrim.trim;var nativeParseFloat=global_1.parseFloat;var FORCED$2=1/nativeParseFloat(whitespaces+'-0')!==-Infinity;var _parseFloat=FORCED$2?function parseFloat(string){var trimmedString=trim$1(String(string));var result=nativeParseFloat(trimmedString);return result===0&&trimmedString.charAt(0)=='-'?-0:result}:nativeParseFloat;_export({global:true,forced:parseFloat!=_parseFloat},{parseFloat:_parseFloat});var trim$2=stringTrim.trim;var nativeParseInt=global_1.parseInt;var hex=/^[+-]?0[Xx]/;var FORCED$3=nativeParseInt(whitespaces+'08')!==8||nativeParseInt(whitespaces+'0x16')!==22;var _parseInt=FORCED$3?function parseInt(string,radix){var S=trim$2(String(string));return nativeParseInt(S,(radix>>>0)||(hex.test(S)?16:10))}:nativeParseInt;_export({global:true,forced:parseInt!=_parseInt},{parseInt:_parseInt});var regexpFlags=function(){var that=anObject(this);var result='';if(that.global)result+='g';if(that.ignoreCase)result+='i';if(that.multiline)result+='m';if(that.dotAll)result+='s';if(that.unicode)result+='u';if(that.sticky)result+='y';return result};function RE(s,f){return RegExp(s,f)}var UNSUPPORTED_Y=fails(function(){var re=RE('a','y');re.lastIndex=2;return re.exec('abcd')!=null});var BROKEN_CARET=fails(function(){var re=RE('^r','gy');re.lastIndex=2;return re.exec('str')!=null});var regexpStickyHelpers={UNSUPPORTED_Y:UNSUPPORTED_Y,BROKEN_CARET:BROKEN_CARET};var nativeExec=RegExp.prototype.exec;var nativeReplace=String.prototype.replace;var patchedExec=nativeExec;var UPDATES_LAST_INDEX_WRONG=(function(){var re1=/a/;var re2=/b*/g;nativeExec.call(re1,'a');nativeExec.call(re2,'a');return re1.lastIndex!==0||re2.lastIndex!==0})();var UNSUPPORTED_Y$1=regexpStickyHelpers.UNSUPPORTED_Y||regexpStickyHelpers.BROKEN_CARET;var NPCG_INCLUDED=/()??/.exec('')[1]!==undefined;var PATCH=UPDATES_LAST_INDEX_WRONG||NPCG_INCLUDED||UNSUPPORTED_Y$1;if(PATCH){patchedExec=function exec(str){var re=this;var lastIndex,reCopy,match,i;var sticky=UNSUPPORTED_Y$1&&re.sticky;var flags=regexpFlags.call(re);var source=re.source;var charsAdded=0;var strCopy=str;if(sticky){flags=flags.replace('y','');if(flags.indexOf('g')===-1){flags+='g'}strCopy=String(str).slice(re.lastIndex);if(re.lastIndex>0&&(!re.multiline||re.multiline&&str[re.lastIndex-1]!=='\n')){source='(?: '+source+')';strCopy=' '+strCopy;charsAdded++}reCopy=new RegExp('^(?:'+source+')',flags)}if(NPCG_INCLUDED){reCopy=new RegExp('^'+source+'$(?!\\s)',flags)}if(UPDATES_LAST_INDEX_WRONG)lastIndex=re.lastIndex;match=nativeExec.call(sticky?reCopy:re,strCopy);if(sticky){if(match){match.input=match.input.slice(charsAdded);match[0]=match[0].slice(charsAdded);match.index=re.lastIndex;re.lastIndex+=match[0].length}else re.lastIndex=0}else if(UPDATES_LAST_INDEX_WRONG&&match){re.lastIndex=re.global?match.index+match[0].length:lastIndex}if(NPCG_INCLUDED&&match&&match.length>1){nativeReplace.call(match[0],reCopy,function(){for(i=1;i1?arguments[1]:undefined)}});var createMethod$4=function(CONVERT_TO_STRING){return function($this,pos){var S=String(requireObjectCoercible($this));var position=toInteger(pos);var size=S.length;var first,second;if(position<0||position>=size)return CONVERT_TO_STRING?'':undefined;first=S.charCodeAt(position);return first<0xD800||first>0xDBFF||position+1===size||(second=S.charCodeAt(position+1))<0xDC00||second>0xDFFF?CONVERT_TO_STRING?S.charAt(position):first:CONVERT_TO_STRING?S.slice(position,position+2):(first-0xD800<<10)+(second-0xDC00)+0x10000}};var stringMultibyte={codeAt:createMethod$4(false),charAt:createMethod$4(true)};var charAt=stringMultibyte.charAt;var STRING_ITERATOR='String Iterator';var setInternalState$2=internalState.set;var getInternalState$2=internalState.getterFor(STRING_ITERATOR);defineIterator(String,'String',function(iterated){setInternalState$2(this,{type:STRING_ITERATOR,string:String(iterated),index:0})},function next(){var state=getInternalState$2(this);var string=state.string;var index=state.index;var point;if(index>=string.length)return{value:undefined,done:true};point=charAt(string,index);state.index+=point.length;return{value:point,done:false}});var SPECIES$3=wellKnownSymbol('species');var REPLACE_SUPPORTS_NAMED_GROUPS=!fails(function(){var re=/./;re.exec=function(){var result=[];result.groups={a:'7'};return result};return''.replace(re,'$')!=='7'});var REPLACE_KEEPS_$0=(function(){return'a'.replace(/./,'$0')==='$0'})();var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC=!fails(function(){var re=/(?:)/;var originalExec=re.exec;re.exec=function(){return originalExec.apply(this,arguments)};var result='ab'.split(re);return result.length!==2||result[0]!=='a'||result[1]!=='b'});var fixRegexpWellKnownSymbolLogic=function(KEY,length,exec,sham){var SYMBOL=wellKnownSymbol(KEY);var DELEGATES_TO_SYMBOL=!fails(function(){var O={};O[SYMBOL]=function(){return 7};return''[KEY](O)!=7});var DELEGATES_TO_EXEC=DELEGATES_TO_SYMBOL&&!fails(function(){var execCalled=false;var re=/a/;if(KEY==='split'){re={};re.constructor={};re.constructor[SPECIES$3]=function(){return re};re.flags='';re[SYMBOL]=/./[SYMBOL]}re.exec=function(){execCalled=true;return null};re[SYMBOL]('');return!execCalled});if(!DELEGATES_TO_SYMBOL||!DELEGATES_TO_EXEC||(KEY==='replace'&&!(REPLACE_SUPPORTS_NAMED_GROUPS&&REPLACE_KEEPS_$0))||(KEY==='split'&&!SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)){var nativeRegExpMethod=/./[SYMBOL];var methods=exec(SYMBOL,''[KEY],function(nativeMethod,regexp,str,arg2,forceStringMethod){if(regexp.exec===regexpExec){if(DELEGATES_TO_SYMBOL&&!forceStringMethod){return{done:true,value:nativeRegExpMethod.call(regexp,str,arg2)}}return{done:true,value:nativeMethod.call(str,regexp,arg2)}}return{done:false}},{REPLACE_KEEPS_$0:REPLACE_KEEPS_$0});var stringMethod=methods[0];var regexMethod=methods[1];redefine(String.prototype,KEY,stringMethod);redefine(RegExp.prototype,SYMBOL,length==2?function(string,arg){return regexMethod.call(string,this,arg)}:function(string){return regexMethod.call(string,this)})}if(sham)createNonEnumerableProperty(RegExp.prototype[SYMBOL],'sham',true)};var charAt$1=stringMultibyte.charAt;var advanceStringIndex=function(S,index,unicode){return index+(unicode?charAt$1(S,index).length:1)};var regexpExecAbstract=function(R,S){var exec=R.exec;if(typeof exec==='function'){var result=exec.call(R,S);if(typeof result!=='object'){throw TypeError('RegExp exec method returned something other than an Object or null');}return result}if(classofRaw(R)!=='RegExp'){throw TypeError('RegExp#exec called on incompatible receiver');}return regexpExec.call(R,S)};var max$3=Math.max;var min$3=Math.min;var floor$1=Math.floor;var SUBSTITUTION_SYMBOLS=/\$([$&'`]|\d\d?|<[^>]*>)/g;var SUBSTITUTION_SYMBOLS_NO_NAMED=/\$([$&'`]|\d\d?)/g;var maybeToString=function(it){return it===undefined?it:String(it)};fixRegexpWellKnownSymbolLogic('replace',2,function(REPLACE,nativeReplace,maybeCallNative,reason){return[function replace(searchValue,replaceValue){var O=requireObjectCoercible(this);var replacer=searchValue==undefined?undefined:searchValue[REPLACE];return replacer!==undefined?replacer.call(searchValue,O,replaceValue):nativeReplace.call(String(O),searchValue,replaceValue)},function(regexp,replaceValue){if(reason.REPLACE_KEEPS_$0||(typeof replaceValue==='string'&&replaceValue.indexOf('$0')===-1)){var res=maybeCallNative(nativeReplace,regexp,this,replaceValue);if(res.done)return res.value}var rx=anObject(regexp);var S=String(this);var functionalReplace=typeof replaceValue==='function';if(!functionalReplace)replaceValue=String(replaceValue);var global=rx.global;if(global){var fullUnicode=rx.unicode;rx.lastIndex=0}var results=[];while(true){var result=regexpExecAbstract(rx,S);if(result===null)break;results.push(result);if(!global)break;var matchStr=String(result[0]);if(matchStr==='')rx.lastIndex=advanceStringIndex(S,toLength(rx.lastIndex),fullUnicode)}var accumulatedResult='';var nextSourcePosition=0;for(var i=0;i=nextSourcePosition){accumulatedResult+=S.slice(nextSourcePosition,position)+replacement;nextSourcePosition=position+matched.length}}return accumulatedResult+S.slice(nextSourcePosition)}];function getSubstitution(matched,str,position,captures,namedCaptures,replacement){var tailPos=position+matched.length;var m=captures.length;var symbols=SUBSTITUTION_SYMBOLS_NO_NAMED;if(namedCaptures!==undefined){namedCaptures=toObject(namedCaptures);symbols=SUBSTITUTION_SYMBOLS}return nativeReplace.call(replacement,symbols,function(match,ch){var capture;switch(ch.charAt(0)){case'$':return'$';case'&':return matched;case'`':return str.slice(0,position);case"'":return str.slice(tailPos);case'<':capture=namedCaptures[ch.slice(1,-1)];break;default:var n=+ch;if(n===0)return match;if(n>m){var f=floor$1(n/10);if(f===0)return match;if(f<=m)return captures[f-1]===undefined?ch.charAt(1):captures[f-1]+ch.charAt(1);return match}capture=captures[n-1]}return capture===undefined?'':capture})}});var sameValue=Object.is||function is(x,y){return x===y?x!==0||1/x===1/y:x!=x&&y!=y};fixRegexpWellKnownSymbolLogic('search',1,function(SEARCH,nativeSearch,maybeCallNative){return[function search(regexp){var O=requireObjectCoercible(this);var searcher=regexp==undefined?undefined:regexp[SEARCH];return searcher!==undefined?searcher.call(regexp,O):new RegExp(regexp)[SEARCH](String(O))},function(regexp){var res=maybeCallNative(nativeSearch,regexp,this);if(res.done)return res.value;var rx=anObject(regexp);var S=String(this);var previousLastIndex=rx.lastIndex;if(!sameValue(previousLastIndex,0))rx.lastIndex=0;var result=regexpExecAbstract(rx,S);if(!sameValue(rx.lastIndex,previousLastIndex))rx.lastIndex=previousLastIndex;return result===null?-1:result.index}]});var SPECIES$4=wellKnownSymbol('species');var speciesConstructor=function(O,defaultConstructor){var C=anObject(O).constructor;var S;return C===undefined||(S=anObject(C)[SPECIES$4])==undefined?defaultConstructor:aFunction$1(S)};var arrayPush=[].push;var min$4=Math.min;var MAX_UINT32=0xFFFFFFFF;var SUPPORTS_Y=!fails(function(){return!RegExp(MAX_UINT32,'y')});fixRegexpWellKnownSymbolLogic('split',2,function(SPLIT,nativeSplit,maybeCallNative){var internalSplit;if('abbc'.split(/(b)*/)[1]=='c'||'test'.split(/(?:)/,-1).length!=4||'ab'.split(/(?:ab)*/).length!=2||'.'.split(/(.?)(.?)/).length!=4||'.'.split(/()()/).length>1||''.split(/.?/).length){internalSplit=function(separator,limit){var string=String(requireObjectCoercible(this));var lim=limit===undefined?MAX_UINT32:limit>>>0;if(lim===0)return[];if(separator===undefined)return[string];if(!isRegexp(separator)){return nativeSplit.call(string,separator,lim)}var output=[];var flags=(separator.ignoreCase?'i':'')+(separator.multiline?'m':'')+(separator.unicode?'u':'')+(separator.sticky?'y':'');var lastLastIndex=0;var separatorCopy=new RegExp(separator.source,flags+'g');var match,lastIndex,lastLength;while(match=regexpExec.call(separatorCopy,string)){lastIndex=separatorCopy.lastIndex;if(lastIndex>lastLastIndex){output.push(string.slice(lastLastIndex,match.index));if(match.length>1&&match.index=lim)break}if(separatorCopy.lastIndex===match.index)separatorCopy.lastIndex++}if(lastLastIndex===string.length){if(lastLength||!separatorCopy.test(''))output.push('')}else output.push(string.slice(lastLastIndex));return output.length>lim?output.slice(0,lim):output}}else if('0'.split(undefined,0).length){internalSplit=function(separator,limit){return separator===undefined&&limit===0?[]:nativeSplit.call(this,separator,limit)}}else internalSplit=nativeSplit;return[function split(separator,limit){var O=requireObjectCoercible(this);var splitter=separator==undefined?undefined:separator[SPLIT];return splitter!==undefined?splitter.call(separator,O,limit):internalSplit.call(String(O),separator,limit)},function(regexp,limit){var res=maybeCallNative(internalSplit,regexp,this,limit,internalSplit!==nativeSplit);if(res.done)return res.value;var rx=anObject(regexp);var S=String(this);var C=speciesConstructor(rx,RegExp);var unicodeMatching=rx.unicode;var flags=(rx.ignoreCase?'i':'')+(rx.multiline?'m':'')+(rx.unicode?'u':'')+(SUPPORTS_Y?'y':'g');var splitter=new C(SUPPORTS_Y?rx:'^(?:'+rx.source+')',flags);var lim=limit===undefined?MAX_UINT32:limit>>>0;if(lim===0)return[];if(S.length===0)return regexpExecAbstract(splitter,S)===null?[S]:[];var p=0;var q=0;var A=[];while(q1?arguments[1]:undefined)}:[].forEach;for(var COLLECTION_NAME in domIterables){var Collection=global_1[COLLECTION_NAME];var CollectionPrototype=Collection&&Collection.prototype;if(CollectionPrototype&&CollectionPrototype.forEach!==arrayForEach)try{createNonEnumerableProperty(CollectionPrototype,'forEach',arrayForEach)}catch(error){CollectionPrototype.forEach=arrayForEach}}var ITERATOR$2=wellKnownSymbol('iterator');var TO_STRING_TAG$3=wellKnownSymbol('toStringTag');var ArrayValues=es_array_iterator.values;for(var COLLECTION_NAME$1 in domIterables){var Collection$1=global_1[COLLECTION_NAME$1];var CollectionPrototype$1=Collection$1&&Collection$1.prototype;if(CollectionPrototype$1){if(CollectionPrototype$1[ITERATOR$2]!==ArrayValues)try{createNonEnumerableProperty(CollectionPrototype$1,ITERATOR$2,ArrayValues)}catch(error){CollectionPrototype$1[ITERATOR$2]=ArrayValues}if(!CollectionPrototype$1[TO_STRING_TAG$3]){createNonEnumerableProperty(CollectionPrototype$1,TO_STRING_TAG$3,COLLECTION_NAME$1)}if(domIterables[COLLECTION_NAME$1])for(var METHOD_NAME in es_array_iterator){if(CollectionPrototype$1[METHOD_NAME]!==es_array_iterator[METHOD_NAME])try{createNonEnumerableProperty(CollectionPrototype$1,METHOD_NAME,es_array_iterator[METHOD_NAME])}catch(error){CollectionPrototype$1[METHOD_NAME]=es_array_iterator[METHOD_NAME]}}}}function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function(obj){return typeof obj}}else{_typeof=function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i',''],toolbarDropdownItem:'',toolbarDropdownSeparator:'
  • ',pageDropdown:[''],pageDropdownItem:'
    ',dropdownCaret:'',pagination:['
      ','
    '],paginationItem:'
  • %s
  • ',icon:'',inputGroup:'
    %s%s
    ',searchInput:'',searchButton:'',searchClearButton:''}},4:{iconsPrefix:'mdi',icons:{paginationSwitchDown:'mdi-arrow-down-drop-circle-outline',paginationSwitchUp:'mdi-arrow-up-drop-circle-outline',refresh:'mdi-refresh',toggleOff:'mdi-playlist-check',toggleOn:'mdi-playlist-remove',columns:'mdi-table-column-remove',detailOpen:'mdi-plus',detailClose:'mdi-minus',fullscreen:'mdi-fullscreen',search:'mdi-table-search',clearSearch:'mdi-trash-can-outline'},classes:{buttonsPrefix:'btn',buttons:'default',buttonsGroup:'btn-group',buttonsDropdown:'btn-group',pull:'float',inputGroup:'btn-group',inputPrefix:'form-control-',input:'form-control',paginationDropdown:'btn-group dropdown',dropup:'dropup',dropdownActive:'active',paginationActive:'active',buttonActive:'active'},html:{toolbarDropdown:[''],toolbarDropdownItem:'',pageDropdown:[''],pageDropdownItem:'%s',toolbarDropdownSeparator:'',dropdownCaret:'',pagination:['
      ','
    '],paginationItem:'
  • %s
  • ',icon:'',inputGroup:'
    %s
    %s
    ',searchInput:'',searchButton:'',searchClearButton:''}}}[bootstrapVersion];var DEFAULTS={height:undefined,classes:'table table-bordered table-hover',theadClasses:'',headerStyle:function headerStyle(column){return{}},rowStyle:function rowStyle(row,index){return{}},rowAttributes:function rowAttributes(row,index){return{}},undefinedText:'-',locale:undefined,virtualScroll:false,virtualScrollItemHeight:undefined,sortable:true,sortClass:undefined,silentSort:true,sortName:undefined,sortOrder:'asc',sortStable:false,rememberOrder:false,serverSort:true,customSort:undefined,columns:[[]],data:[],url:undefined,method:'get',cache:true,contentType:'application/json',dataType:'json',ajax:undefined,ajaxOptions:{},queryParams:function queryParams(params){return params},queryParamsType:'limit',responseHandler:function responseHandler(res){return res},totalField:'total',totalNotFilteredField:'totalNotFiltered',dataField:'rows',pagination:false,onlyInfoPagination:false,showExtendedPagination:false,paginationLoop:true,sidePagination:'client',totalRows:0,totalNotFiltered:0,pageNumber:1,pageSize:10,pageList:[10,25,50,100],paginationHAlign:'right',paginationVAlign:'bottom',paginationDetailHAlign:'left',paginationPreText:'‹',paginationNextText:'›',paginationSuccessivelySize:5,paginationPagesBySide:1,paginationUseIntermediate:false,search:false,searchOnEnterKey:false,strictSearch:false,visibleSearch:false,showButtonIcons:true,showButtonText:false,showSearchButton:false,showSearchClearButton:false,trimOnSearch:true,searchAlign:'right',searchTimeOut:500,searchText:'',customSearch:undefined,showHeader:true,showFooter:false,footerStyle:function footerStyle(column){return{}},showColumns:false,showColumnsToggleAll:false,showColumnsSearch:false,minimumCountColumns:1,showPaginationSwitch:false,showRefresh:false,showToggle:false,showFullscreen:false,smartDisplay:true,escape:false,filterOptions:{filterAlgorithm:'and'},idField:undefined,selectItemName:'btSelectItem',clickToSelect:false,ignoreClickToSelectOn:function ignoreClickToSelectOn(_ref){var tagName=_ref.tagName;return['A','BUTTON'].includes(tagName)},singleSelect:false,checkboxHeader:true,maintainMetaData:false,multipleSelectRow:false,uniqueId:undefined,cardView:false,detailView:false,detailViewIcon:true,detailViewByClick:false,detailFormatter:function detailFormatter(index,row){return''},detailFilter:function detailFilter(index,row){return true},toolbar:undefined,toolbarAlign:'left',buttonsToolbar:undefined,buttonsAlign:'right',buttonsOrder:['paginationSwitch','refresh','toggle','fullscreen','columns'],buttonsPrefix:CONSTANTS.classes.buttonsPrefix,buttonsClass:CONSTANTS.classes.buttons,icons:CONSTANTS.icons,html:CONSTANTS.html,iconSize:undefined,iconsPrefix:CONSTANTS.iconsPrefix,onAll:function onAll(name,args){return false},onClickCell:function onClickCell(field,value,row,$element){return false},onDblClickCell:function onDblClickCell(field,value,row,$element){return false},onClickRow:function onClickRow(item,$element){return false},onDblClickRow:function onDblClickRow(item,$element){return false},onSort:function onSort(name,order){return false},onCheck:function onCheck(row){return false},onUncheck:function onUncheck(row){return false},onCheckAll:function onCheckAll(rows){return false},onUncheckAll:function onUncheckAll(rows){return false},onCheckSome:function onCheckSome(rows){return false},onUncheckSome:function onUncheckSome(rows){return false},onLoadSuccess:function onLoadSuccess(data){return false},onLoadError:function onLoadError(status){return false},onColumnSwitch:function onColumnSwitch(field,checked){return false},onPageChange:function onPageChange(number,size){return false},onSearch:function onSearch(text){return false},onToggle:function onToggle(cardView){return false},onPreBody:function onPreBody(data){return false},onPostBody:function onPostBody(){return false},onPostHeader:function onPostHeader(){return false},onPostFooter:function onPostFooter(){return false},onExpandRow:function onExpandRow(index,row,$detail){return false},onCollapseRow:function onCollapseRow(index,row){return false},onRefreshOptions:function onRefreshOptions(options){return false},onRefresh:function onRefresh(params){return false},onResetView:function onResetView(){return false},onScrollBody:function onScrollBody(){return false}};var EN={formatLoadingMessage:function formatLoadingMessage(){return'Loading, please wait'},formatRecordsPerPage:function formatRecordsPerPage(pageNumber){return"".concat(pageNumber," rows per page")},formatShowingRows:function formatShowingRows(pageFrom,pageTo,totalRows,totalNotFiltered){if(totalNotFiltered!==undefined&&totalNotFiltered>0&&totalNotFiltered>totalRows){return"Showing ".concat(pageFrom," to ").concat(pageTo," of ").concat(totalRows," rows (filtered from ").concat(totalNotFiltered," total rows)")}return"Showing ".concat(pageFrom," to ").concat(pageTo," of ").concat(totalRows," rows")},formatSRPaginationPreText:function formatSRPaginationPreText(){return'previous page'},formatSRPaginationPageText:function formatSRPaginationPageText(page){return"to page ".concat(page)},formatSRPaginationNextText:function formatSRPaginationNextText(){return'next page'},formatDetailPagination:function formatDetailPagination(totalRows){return"Showing ".concat(totalRows," rows")},formatSearch:function formatSearch(){return'Search'},formatClearSearch:function formatClearSearch(){return'Clear Search'},formatNoMatches:function formatNoMatches(){return'No matching records found'},formatPaginationSwitch:function formatPaginationSwitch(){return'Hide/Show pagination'},formatPaginationSwitchDown:function formatPaginationSwitchDown(){return'Show pagination'},formatPaginationSwitchUp:function formatPaginationSwitchUp(){return'Hide pagination'},formatRefresh:function formatRefresh(){return'Refresh'},formatToggle:function formatToggle(){return'Toggle'},formatToggleOn:function formatToggleOn(){return'Show card view'},formatToggleOff:function formatToggleOff(){return'Hide card view'},formatColumns:function formatColumns(){return'Columns'},formatColumnsToggleAll:function formatColumnsToggleAll(){return'Toggle all'},formatFullscreen:function formatFullscreen(){return'Fullscreen'},formatAllRows:function formatAllRows(){return'All'}};var COLUMN_DEFAULTS={field:undefined,title:undefined,titleTooltip:undefined,'class':undefined,width:undefined,widthUnit:'px',rowspan:undefined,colspan:undefined,align:undefined,halign:undefined,falign:undefined,valign:undefined,cellStyle:undefined,radio:false,checkbox:false,checkboxEnabled:true,clickToSelect:true,showSelectTitle:false,sortable:false,sortName:undefined,order:'asc',sorter:undefined,visible:true,switchable:true,cardVisible:true,searchable:true,formatter:undefined,footerFormatter:undefined,detailFormatter:undefined,searchFormatter:true,escape:false,events:undefined};var METHODS=['getOptions','refreshOptions','getData','getSelections','getAllSelections','load','append','prepend','remove','removeAll','insertRow','updateRow','getRowByUniqueId','updateByUniqueId','removeByUniqueId','updateCell','updateCellByUniqueId','showRow','hideRow','getHiddenRows','showColumn','hideColumn','getVisibleColumns','getHiddenColumns','showAllColumns','hideAllColumns','mergeCells','checkAll','uncheckAll','checkInvert','check','uncheck','checkBy','uncheckBy','refresh','destroy','resetView','showLoading','hideLoading','togglePagination','toggleFullscreen','toggleView','resetSearch','filterBy','scrollTo','getScrollPosition','selectPage','prevPage','nextPage','toggleDetailView','expandRow','collapseRow','expandAllRows','collapseAllRows','updateColumnTitle','updateFormatText'];var EVENTS={'all.bs.table':'onAll','click-row.bs.table':'onClickRow','dbl-click-row.bs.table':'onDblClickRow','click-cell.bs.table':'onClickCell','dbl-click-cell.bs.table':'onDblClickCell','sort.bs.table':'onSort','check.bs.table':'onCheck','uncheck.bs.table':'onUncheck','check-all.bs.table':'onCheckAll','uncheck-all.bs.table':'onUncheckAll','check-some.bs.table':'onCheckSome','uncheck-some.bs.table':'onUncheckSome','load-success.bs.table':'onLoadSuccess','load-error.bs.table':'onLoadError','column-switch.bs.table':'onColumnSwitch','page-change.bs.table':'onPageChange','search.bs.table':'onSearch','toggle.bs.table':'onToggle','pre-body.bs.table':'onPreBody','post-body.bs.table':'onPostBody','post-header.bs.table':'onPostHeader','post-footer.bs.table':'onPostFooter','expand-row.bs.table':'onExpandRow','collapse-row.bs.table':'onCollapseRow','refresh-options.bs.table':'onRefreshOptions','reset-view.bs.table':'onResetView','refresh.bs.table':'onRefresh','scroll-body.bs.table':'onScrollBody'};Object.assign(DEFAULTS,EN);var Constants={VERSION:VERSION,THEME:"bootstrap".concat(bootstrapVersion),CONSTANTS:CONSTANTS,DEFAULTS:DEFAULTS,COLUMN_DEFAULTS:COLUMN_DEFAULTS,METHODS:METHODS,EVENTS:EVENTS,LOCALES:{en:EN,'en-US':EN}};var FAILS_ON_PRIMITIVES=fails(function(){objectKeys(1)});_export({target:'Object',stat:true,forced:FAILS_ON_PRIMITIVES},{keys:function keys(it){return objectKeys(toObject(it))}});var Utils={sprintf:function sprintf(_str){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key]}var flag=true;var i=0;var str=_str.replace(/%s/g,function(){var arg=args[i++];if(typeof arg==='undefined'){flag=false;return''}return arg});return flag?str:''},isEmptyObject:function isEmptyObject(){var obj=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return Object.entries(obj).length===0&&obj.constructor===Object},isNumeric:function isNumeric(n){return!isNaN(parseFloat(n))&&isFinite(n)},getFieldTitle:function getFieldTitle(list,value){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=list[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var item=_step.value;if(item.field===value){return item.title}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError;}}}return''},setFieldIndex:function setFieldIndex(columns){var totalCol=0;var flag=[];var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=columns[0][Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var column=_step2.value;totalCol+=column.colspan||1}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return!=null){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2;}}}for(var i=0;i1){var colspan=0;var _loop=function _loop(i){var column=allColumns.find(function(col){return col.fieldIndex===i});if(column.visible){colspan++}};for(var i=r.colspanIndex;i0}}}catch(err){_didIteratorError5=true;_iteratorError5=err}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return!=null){_iterator5.return()}}finally{if(_didIteratorError5){throw _iteratorError5;}}}}}catch(err){_didIteratorError4=true;_iteratorError4=err}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return!=null){_iterator4.return()}}finally{if(_didIteratorError4){throw _iteratorError4;}}}},getScrollBarWidth:function getScrollBarWidth(){if(this.cachedWidth===undefined){var $inner=$('
    ').addClass('fixed-table-scroll-inner');var $outer=$('
    ').addClass('fixed-table-scroll-outer');$outer.append($inner);$('body').append($outer);var w1=$inner[0].offsetWidth;$outer.css('overflow','scroll');var w2=$inner[0].offsetWidth;if(w1===w2){w2=$outer[0].clientWidth}$outer.remove();this.cachedWidth=w1-w2}return this.cachedWidth},calculateObjectValue:function calculateObjectValue(self,name,args,defaultValue){var func=name;if(typeof name==='string'){var names=name.split('.');if(names.length>1){func=window;var _iteratorNormalCompletion6=true;var _didIteratorError6=false;var _iteratorError6=undefined;try{for(var _iterator6=names[Symbol.iterator](),_step6;!(_iteratorNormalCompletion6=(_step6=_iterator6.next()).done);_iteratorNormalCompletion6=true){var f=_step6.value;func=func[f]}}catch(err){_didIteratorError6=true;_iteratorError6=err}finally{try{if(!_iteratorNormalCompletion6&&_iterator6.return!=null){_iterator6.return()}}finally{if(_didIteratorError6){throw _iteratorError6;}}}}else{func=window[name]}}if(func!==null&&_typeof(func)==='object'){return func}if(typeof func==='function'){return func.apply(self,args||[])}if(!func&&typeof name==='string'&&this.sprintf.apply(this,[name].concat(_toConsumableArray(args)))){return this.sprintf.apply(this,[name].concat(_toConsumableArray(args)))}return defaultValue},compareObjects:function compareObjects(objectA,objectB,compareLength){var aKeys=Object.keys(objectA);var bKeys=Object.keys(objectB);if(compareLength&&aKeys.length!==bKeys.length){return false}for(var _i2=0,_aKeys=aKeys;_i2<_aKeys.length;_i2++){var key=_aKeys[_i2];if(bKeys.includes(key)&&objectA[key]!==objectB[key]){return false}}return true},escapeHTML:function escapeHTML(text){if(typeof text==='string'){return text.replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"').replace(/'/g,''').replace(/`/g,'`')}return text},getRealDataAttr:function getRealDataAttr(dataAttr){for(var _i3=0,_Object$entries=Object.entries(dataAttr);_i3<_Object$entries.length;_i3++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i3],2),attr=_Object$entries$_i[0],value=_Object$entries$_i[1];var auxAttr=attr.split(/(?=[A-Z])/).join('-').toLowerCase();if(auxAttr!==attr){dataAttr[auxAttr]=value;delete dataAttr[attr]}}return dataAttr},getItemField:function getItemField(item,field,escape){var value=item;if(typeof field!=='string'||item.hasOwnProperty(field)){return escape?this.escapeHTML(item[field]):item[field]}var props=field.split('.');var _iteratorNormalCompletion7=true;var _didIteratorError7=false;var _iteratorError7=undefined;try{for(var _iterator7=props[Symbol.iterator](),_step7;!(_iteratorNormalCompletion7=(_step7=_iterator7.next()).done);_iteratorNormalCompletion7=true){var p=_step7.value;value=value&&value[p]}}catch(err){_didIteratorError7=true;_iteratorError7=err}finally{try{if(!_iteratorNormalCompletion7&&_iterator7.return!=null){_iterator7.return()}}finally{if(_didIteratorError7){throw _iteratorError7;}}}return escape?this.escapeHTML(value):value},isIEBrowser:function isIEBrowser(){return navigator.userAgent.includes('MSIE ')||/Trident.*rv:11\./.test(navigator.userAgent)},findIndex:function findIndex(items,item){var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=items[Symbol.iterator](),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var it=_step8.value;if(JSON.stringify(it)===JSON.stringify(item)){return items.indexOf(it)}}}catch(err){_didIteratorError8=true;_iteratorError8=err}finally{try{if(!_iteratorNormalCompletion8&&_iterator8.return!=null){_iterator8.return()}}finally{if(_didIteratorError8){throw _iteratorError8;}}}return-1},trToData:function trToData(columns,$els){var _this=this;var data=[];var m=[];$els.each(function(y,el){var row={};row._id=$(el).attr('id');row._class=$(el).attr('class');row._data=_this.getRealDataAttr($(el).data());$(el).find('>td,>th').each(function(_x,el){var cspan=+$(el).attr('colspan')||1;var rspan=+$(el).attr('rowspan')||1;var x=_x;for(;m[y]&&m[y][x];x++){}for(var tx=x;txb){return order}return 0}if(a===b){return 0}if(typeof a!=='string'){a=a.toString()}if(a.localeCompare(b)===-1){return order*-1}return order},getResizeEventName:function getResizeEventName(){var id=arguments.length>0&&arguments[0]!==undefined?arguments[0]:'';id=id||"".concat(+new Date()).concat(~~(Math.random()*1000000));return"resize.bootstrap-table-".concat(id)}};var BLOCK_ROWS=50;var CLUSTER_BLOCKS=4;var VirtualScroll=function(){function VirtualScroll(options){var _this=this;_classCallCheck(this,VirtualScroll);this.rows=options.rows;this.scrollEl=options.scrollEl;this.contentEl=options.contentEl;this.callback=options.callback;this.itemHeight=options.itemHeight;this.cache={};this.scrollTop=this.scrollEl.scrollTop;this.initDOM(this.rows,options.fixedScroll);this.scrollEl.scrollTop=this.scrollTop;this.lastCluster=0;var onScroll=function onScroll(){if(_this.lastCluster!==(_this.lastCluster=_this.getNum())){_this.initDOM(_this.rows);_this.callback()}};this.scrollEl.addEventListener('scroll',onScroll,false);this.destroy=function(){_this.contentEl.innerHtml='';_this.scrollEl.removeEventListener('scroll',onScroll,false)}}_createClass(VirtualScroll,[{key:"initDOM",value:function initDOM(rows,fixedScroll){if(typeof this.clusterHeight==='undefined'){this.cache.scrollTop=this.scrollEl.scrollTop;this.cache.data=this.contentEl.innerHTML=rows[0]+rows[0]+rows[0];this.getRowsHeight(rows)}var data=this.initData(rows,this.getNum(fixedScroll));var thisRows=data.rows.join('');var dataChanged=this.checkChanges('data',thisRows);var topOffsetChanged=this.checkChanges('top',data.topOffset);var bottomOffsetChanged=this.checkChanges('bottom',data.bottomOffset);var html=[];if(dataChanged&&topOffsetChanged){if(data.topOffset){html.push(this.getExtra('top',data.topOffset))}html.push(thisRows);if(data.bottomOffset){html.push(this.getExtra('bottom',data.bottomOffset))}this.contentEl.innerHTML=html.join('');if(fixedScroll){this.contentEl.scrollTop=this.cache.scrollTop}}else if(bottomOffsetChanged){this.contentEl.lastChild.style.height="".concat(data.bottomOffset,"px")}}},{key:"getRowsHeight",value:function getRowsHeight(){if(typeof this.itemHeight==='undefined'){var nodes=this.contentEl.children;var node=nodes[Math.floor(nodes.length/2)];this.itemHeight=node.offsetHeight}this.blockHeight=this.itemHeight*BLOCK_ROWS;this.clusterRows=BLOCK_ROWS*CLUSTER_BLOCKS;this.clusterHeight=this.blockHeight*CLUSTER_BLOCKS}},{key:"getNum",value:function getNum(fixedScroll){this.scrollTop=fixedScroll?this.cache.scrollTop:this.scrollEl.scrollTop;return Math.floor(this.scrollTop/(this.clusterHeight-this.blockHeight))||0}},{key:"initData",value:function initData(rows,num){if(rows.length
    ':'';var bottomPagination=['bottom','both'].includes(this.options.paginationVAlign)?'
    ':'';this.$container=$("\n
    \n
    \n ").concat(topPagination,"\n
    \n
    \n
    \n
    \n \n ").concat(this.options.formatLoadingMessage(),"\n \n \n
    \n
    \n
    \n
    \n ").concat(bottomPagination,"\n
    \n "));this.$container.insertAfter(this.$el);this.$tableContainer=this.$container.find('.fixed-table-container');this.$tableHeader=this.$container.find('.fixed-table-header');this.$tableBody=this.$container.find('.fixed-table-body');this.$tableLoading=this.$container.find('.fixed-table-loading');this.$tableFooter=this.$el.find('tfoot');if(this.options.buttonsToolbar){this.$toolbar=$('body').find(this.options.buttonsToolbar)}else{this.$toolbar=this.$container.find('.fixed-table-toolbar')}this.$pagination=this.$container.find('.fixed-table-pagination');this.$tableBody.append(this.$el);this.$container.after('
    ');this.$el.addClass(this.options.classes);this.$tableLoading.addClass(this.options.classes);if(this.options.height){this.$tableContainer.addClass('fixed-height');if(this.options.showFooter){this.$tableContainer.addClass('has-footer')}if(this.options.classes.split(' ').includes('table-bordered')){this.$tableBody.append('
    ');this.$tableBorder=this.$tableBody.find('.fixed-table-border');this.$tableLoading.addClass('fixed-table-border')}this.$tableFooter=this.$container.find('.fixed-table-footer')}}},{key:"initTable",value:function initTable(){var _this=this;var columns=[];this.$header=this.$el.find('>thead');if(!this.$header.length){this.$header=$("")).appendTo(this.$el)}else if(this.options.theadClasses){this.$header.addClass(this.options.theadClasses)}this.$header.find('tr').each(function(i,el){var column=[];$(el).find('th').each(function(i,el){if(typeof $(el).data('field')!=='undefined'){$(el).data('field',"".concat($(el).data('field')))}column.push($.extend({},{title:$(el).html(),'class':$(el).attr('class'),titleTooltip:$(el).attr('title'),rowspan:$(el).attr('rowspan')?+$(el).attr('rowspan'):undefined,colspan:$(el).attr('colspan')?+$(el).attr('colspan'):undefined},$(el).data()))});columns.push(column)});if(!Array.isArray(this.options.columns[0])){this.options.columns=[this.options.columns]}this.options.columns=$.extend(true,[],columns,this.options.columns);this.columns=[];this.fieldsColumnsIndex=[];Utils.setFieldIndex(this.options.columns);this.options.columns.forEach(function(columns,i){columns.forEach(function(_column,j){var column=$.extend({},BootstrapTable.COLUMN_DEFAULTS,_column);if(typeof column.fieldIndex!=='undefined'){_this.columns[column.fieldIndex]=column;_this.fieldsColumnsIndex[column.field]=column.fieldIndex}_this.options.columns[i][j]=column})});if(!this.options.data.length){this.options.data=Utils.trToData(this.columns,this.$el.find('>tbody>tr'));if(this.options.data.length){this.fromHtml=true}}this.footerData=Utils.trToData(this.columns,this.$el.find('>tfoot>tr'));if(this.footerData){this.$el.find('tfoot').html('')}if(!this.options.showFooter||this.options.cardView){this.$tableFooter.hide()}else{this.$tableFooter.show()}}},{key:"initHeader",value:function initHeader(){var _this2=this;var visibleColumns={};var html=[];this.header={fields:[],styles:[],classes:[],formatters:[],detailFormatters:[],events:[],sorters:[],sortNames:[],cellStyles:[],searchables:[]};Utils.updateFieldGroup(this.options.columns);this.options.columns.forEach(function(columns,i){html.push('');if(i===0&&!_this2.options.cardView&&_this2.options.detailView&&_this2.options.detailViewIcon){html.push("\n
    \n \n "))}columns.forEach(function(column,j){var class_=Utils.sprintf(' class="%s"',column['class']);var unitWidth=column.widthUnit;var width=parseFloat(column.width);var halign=Utils.sprintf('text-align: %s; ',column.halign?column.halign:column.align);var align=Utils.sprintf('text-align: %s; ',column.align);var style=Utils.sprintf('vertical-align: %s; ',column.valign);style+=Utils.sprintf('width: %s; ',(column.checkbox||column.radio)&&!width?!column.showSelectTitle?'36px':undefined:width?width+unitWidth:undefined);if(typeof column.fieldIndex==='undefined'&&!column.visible){return}var headerStyle=Utils.calculateObjectValue(null,_this2.options.headerStyle,[column]);var csses=[];var classes='';if(headerStyle&&headerStyle.css){for(var _i=0,_Object$entries=Object.entries(headerStyle.css);_i<_Object$entries.length;_i++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i],2),key=_Object$entries$_i[0],value=_Object$entries$_i[1];csses.push("".concat(key,": ").concat(value))}}if(headerStyle&&headerStyle.classes){classes=Utils.sprintf(' class="%s"',column['class']?[column['class'],headerStyle.classes].join(' '):headerStyle.classes)}if(typeof column.fieldIndex!=='undefined'){_this2.header.fields[column.fieldIndex]=column.field;_this2.header.styles[column.fieldIndex]=align+style;_this2.header.classes[column.fieldIndex]=class_;_this2.header.formatters[column.fieldIndex]=column.formatter;_this2.header.detailFormatters[column.fieldIndex]=column.detailFormatter;_this2.header.events[column.fieldIndex]=column.events;_this2.header.sorters[column.fieldIndex]=column.sorter;_this2.header.sortNames[column.fieldIndex]=column.sortName;_this2.header.cellStyles[column.fieldIndex]=column.cellStyle;_this2.header.searchables[column.fieldIndex]=column.searchable;if(!column.visible){return}if(_this2.options.cardView&&!column.cardVisible){return}visibleColumns[column.field]=column}html.push("0?' data-not-first-th':'','>');html.push(Utils.sprintf('
    ',_this2.options.sortable&&column.sortable?'sortable both':''));var text=_this2.options.escape?Utils.escapeHTML(column.title):column.title;var title=text;if(column.checkbox){text='';var cf=column.field?column.field:'btSelectAll';if(!_this2.options.singleSelect&&_this2.options.checkboxHeader){text='
    '}_this2.header.stateField=column.field}if(column.radio){text='';_this2.header.stateField=column.field}if(!text&&column.showSelectTitle){text+=title}html.push(text);html.push('
    ');html.push('
    ');html.push('
    ');html.push('')});html.push('')});this.$header.html(html.join(''));this.$header.find('th[data-field]').each(function(i,el){$(el).data(visibleColumns[$(el).data('field')])});this.$container.off('click','.th-inner').on('click','.th-inner',function(e){var $this=$(e.currentTarget);if(_this2.options.detailView&&!$this.parent().hasClass('bs-checkbox')){if($this.closest('.bootstrap-table')[0]!==_this2.$container[0]){return false}}if(_this2.options.sortable&&$this.parent().data().sortable){_this2.onSort(e)}});this.$header.children().children().off('keypress').on('keypress',function(e){if(_this2.options.sortable&&$(e.currentTarget).data().sortable){var code=e.keyCode||e.which;if(code===13){_this2.onSort(e)}}});var resizeEvent=Utils.getResizeEventName(this.$el.attr('id'));$(window).off(resizeEvent);if(!this.options.showHeader||this.options.cardView){this.$header.hide();this.$tableHeader.hide();this.$tableLoading.css('top',0)}else{this.$header.show();this.$tableHeader.show();this.$tableLoading.css('top',this.$header.outerHeight()+1);this.getCaret();$(window).on(resizeEvent,function(){return _this2.resetView()})}this.$selectAll=this.$header.find('[name="btSelectAll"]');this.$selectAll.off('click').on('click',function(e){e.stopPropagation();var checked=$(e.currentTarget).prop('checked');_this2[checked?'checkAll':'uncheckAll']();_this2.updateSelected()})}},{key:"initData",value:function initData(data,type){if(type==='append'){this.options.data=this.options.data.concat(data)}else if(type==='prepend'){this.options.data=[].concat(data).concat(this.options.data)}else{this.options.data=data||this.options.data}this.data=this.options.data;if(this.options.sidePagination==='server'){return}this.initSort()}},{key:"initSort",value:function initSort(){var _this3=this;var name=this.options.sortName;var order=this.options.sortOrder==='desc'?-1:1;var index=this.header.fields.indexOf(this.options.sortName);var timeoutId=0;if(index!==-1){if(this.options.sortStable){this.data.forEach(function(row,i){if(!row.hasOwnProperty('_position')){row._position=i}})}if(this.options.customSort){Utils.calculateObjectValue(this.options,this.options.customSort,[this.options.sortName,this.options.sortOrder,this.data])}else{this.data.sort(function(a,b){if(_this3.header.sortNames[index]){name=_this3.header.sortNames[index]}var aa=Utils.getItemField(a,name,_this3.options.escape);var bb=Utils.getItemField(b,name,_this3.options.escape);var value=Utils.calculateObjectValue(_this3.header,_this3.header.sorters[index],[aa,bb,a,b]);if(value!==undefined){if(_this3.options.sortStable&&value===0){return order*(a._position-b._position)}return order*value}return Utils.sort(aa,bb,order,_this3.options.sortStable,a._position,b._position)})}if(this.options.sortClass!==undefined){clearTimeout(timeoutId);timeoutId=setTimeout(function(){_this3.$el.removeClass(_this3.options.sortClass);var index=_this3.$header.find("[data-field=\"".concat(_this3.options.sortName,"\"]")).index();_this3.$el.find("tr td:nth-child(".concat(index+1,")")).addClass(_this3.options.sortClass)},250)}}}},{key:"onSort",value:function onSort(_ref){var type=_ref.type,currentTarget=_ref.currentTarget;var $this=type==='keypress'?$(currentTarget):$(currentTarget).parent();var $this_=this.$header.find('th').eq($this.index());this.$header.add(this.$header_).find('span.order').remove();if(this.options.sortName===$this.data('field')){this.options.sortOrder=this.options.sortOrder==='asc'?'desc':'asc'}else{this.options.sortName=$this.data('field');if(this.options.rememberOrder){this.options.sortOrder=$this.data('order')==='asc'?'desc':'asc'}else{this.options.sortOrder=this.columns[this.fieldsColumnsIndex[$this.data('field')]].sortOrder||this.columns[this.fieldsColumnsIndex[$this.data('field')]].order}}this.trigger('sort',this.options.sortName,this.options.sortOrder);$this.add($this_).data('order',this.options.sortOrder);this.getCaret();if(this.options.sidePagination==='server'&&this.options.serverSort){this.options.pageNumber=1;this.initServer(this.options.silentSort);return}this.initSort();this.initBody()}},{key:"initToolbar",value:function initToolbar(){var _this4=this;var opts=this.options;var html=[];var timeoutId=0;var $keepOpen;var switchableCount=0;if(this.$toolbar.find('.bs-bars').children().length){$('body').append($(opts.toolbar))}this.$toolbar.html('');if(typeof opts.toolbar==='string'||_typeof(opts.toolbar)==='object'){$(Utils.sprintf('
    ',this.constants.classes.pull,opts.toolbarAlign)).appendTo(this.$toolbar).append($(opts.toolbar))}html=["
    ")];if(typeof opts.icons==='string'){opts.icons=Utils.calculateObjectValue(null,opts.icons)}var buttonsHtml={paginationSwitch:""),refresh:""),toggle:""),fullscreen:""),columns:function(){var html=[];html.push("
    \n \n ").concat(_this4.constants.html.toolbarDropdown[0]));if(opts.showColumnsSearch){html.push(Utils.sprintf(_this4.constants.html.toolbarDropdownItem,Utils.sprintf('',_this4.constants.classes.input,opts.formatSearch())));html.push(_this4.constants.html.toolbarDropdownSeparator)}if(opts.showColumnsToggleAll){var allFieldsVisible=_this4.getVisibleColumns().length===_this4.columns.filter(function(column){return!_this4.isSelectionColumn(column)}).length;html.push(Utils.sprintf(_this4.constants.html.toolbarDropdownItem,Utils.sprintf('
    ',allFieldsVisible?'checked="checked"':'',opts.formatColumnsToggleAll())));html.push(_this4.constants.html.toolbarDropdownSeparator)}var visibleColumns=0;_this4.columns.forEach(function(column,i){if(column.visible){visibleColumns++}});_this4.columns.forEach(function(column,i){if(_this4.isSelectionColumn(column)){return}if(opts.cardView&&!column.cardVisible){return}var checked=column.visible?' checked="checked"':'';var disabled=visibleColumns<=_this4.options.minimumCountColumns&&checked?' disabled="disabled"':'';if(column.switchable){html.push(Utils.sprintf(_this4.constants.html.toolbarDropdownItem,Utils.sprintf('
    ',column.field,column.field,i,checked,disabled,column.field,column.title)));switchableCount++}});html.push(_this4.constants.html.toolbarDropdown[1],'
    ');return html.join('')}()};if(typeof opts.buttonsOrder==='string'){opts.buttonsOrder=opts.buttonsOrder.replace(/\[|\]| |'/g,'').toLowerCase().split(',')}var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=opts.buttonsOrder[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var button=_step.value;if(opts['show'+button.charAt(0).toUpperCase()+button.substring(1)]){html.push(buttonsHtml[button])}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError;}}}html.push('
    ');if(this.showToolbar||html.length>2){this.$toolbar.append(html.join(''))}if(opts.showPaginationSwitch){this.$toolbar.find('button[name="paginationSwitch"]').off('click').on('click',function(){return _this4.togglePagination()})}if(opts.showFullscreen){this.$toolbar.find('button[name="fullscreen"]').off('click').on('click',function(){return _this4.toggleFullscreen()})}if(opts.showRefresh){this.$toolbar.find('button[name="refresh"]').off('click').on('click',function(){return _this4.refresh()})}if(opts.showToggle){this.$toolbar.find('button[name="toggle"]').off('click').on('click',function(){_this4.toggleView()})}if(opts.showColumns){$keepOpen=this.$toolbar.find('.keep-open');var $checkboxes=$keepOpen.find('input[type="checkbox"]:not(".toggle-all")');var $toggleAll=$keepOpen.find('input[type="checkbox"].toggle-all');if(switchableCount<=opts.minimumCountColumns){$keepOpen.find('input').prop('disabled',true)}$keepOpen.find('li, label').off('click').on('click',function(e){e.stopImmediatePropagation()});$checkboxes.off('click').on('click',function(_ref2){var currentTarget=_ref2.currentTarget;var $this=$(currentTarget);_this4._toggleColumn($this.val(),$this.prop('checked'),false);_this4.trigger('column-switch',$this.data('field'),$this.prop('checked'));$toggleAll.prop('checked',$checkboxes.filter(':checked').length===_this4.columns.filter(function(column){return!_this4.isSelectionColumn(column)}).length)});$toggleAll.off('click').on('click',function(_ref3){var currentTarget=_ref3.currentTarget;_this4._toggleAllColumns($(currentTarget).prop('checked'))});if(opts.showColumnsSearch){var $columnsSearch=$keepOpen.find('#columnsSearch');var $listItems=$keepOpen.find('.dropdown-item-marker');$columnsSearch.on('keyup paste change',function(_ref4){var currentTarget=_ref4.currentTarget;var $this=$(currentTarget);var searchValue=$this.val().toLowerCase();$listItems.show();$checkboxes.each(function(i,el){var $checkbox=$(el);var $listItem=$checkbox.parents('.dropdown-item-marker');var text=$listItem.text().toLowerCase();if(!text.includes(searchValue)){$listItem.hide()}})})}}if(opts.search||this.showSearchClearButton){html=[];var showSearchButton=Utils.sprintf(this.constants.html.searchButton,this.constants.buttonsClass,opts.formatSearch(),opts.showButtonIcons?Utils.sprintf(this.constants.html.icon,opts.iconsPrefix,opts.icons.search):'',opts.showButtonText?opts.formatSearch():'');var showSearchClearButton=Utils.sprintf(this.constants.html.searchClearButton,this.constants.buttonsClass,opts.formatClearSearch(),opts.showButtonIcons?Utils.sprintf(this.constants.html.icon,opts.iconsPrefix,opts.icons.clearSearch):'',opts.showButtonText?opts.formatClearSearch():'');var searchInputHtml="");var searchInputFinalHtml=searchInputHtml;if(opts.showSearchButton||opts.showSearchClearButton){var _buttonsHtml=(opts.showSearchButton?showSearchButton:'')+(opts.showSearchClearButton?showSearchClearButton:'');searchInputFinalHtml=opts.search?Utils.sprintf(this.constants.html.inputGroup,searchInputHtml,_buttonsHtml):_buttonsHtml}html.push(Utils.sprintf("\n
    \n %s\n
    \n "),searchInputFinalHtml));this.$toolbar.append(html.join(''));var $searchInput=this.$toolbar.find('.search input');var handleInputEvent=function handleInputEvent(){var eventTriggers="keyup drop blur ".concat(Utils.isIEBrowser()?'mouseup':'');$searchInput.off(eventTriggers).on(eventTriggers,function(event){if(opts.searchOnEnterKey&&event.keyCode!==13){return}if([37,38,39,40].includes(event.keyCode)){return}clearTimeout(timeoutId);timeoutId=setTimeout(function(){_this4.onSearch({currentTarget:event.currentTarget})},opts.searchTimeOut)})};if(opts.showSearchButton){this.$toolbar.find('.search button[name=search]').off('click').on('click',function(event){clearTimeout(timeoutId);timeoutId=setTimeout(function(){_this4.onSearch({currentTarget:$searchInput})},opts.searchTimeOut)});if(opts.searchOnEnterKey){handleInputEvent()}}else{handleInputEvent()}if(opts.showSearchClearButton){this.$toolbar.find('.search button[name=clearSearch]').click(function(){_this4.resetSearch()})}}}},{key:"onSearch",value:function onSearch(){var _ref5=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},currentTarget=_ref5.currentTarget,firedByInitSearchText=_ref5.firedByInitSearchText;var overwriteSearchText=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(currentTarget!==undefined&&$(currentTarget).length&&overwriteSearchText){var text=$(currentTarget).val().trim();if(this.options.trimOnSearch&&$(currentTarget).val()!==text){$(currentTarget).val(text)}if(this.searchText===text&&text.length>0){return}if($(currentTarget).hasClass('search-input')){this.searchText=text;this.options.searchText=text}}if(!firedByInitSearchText){this.options.pageNumber=1}this.initSearch();if(firedByInitSearchText){if(this.options.sidePagination==='client'){this.updatePagination()}}else{this.updatePagination()}this.trigger('search',this.searchText)}},{key:"initSearch",value:function initSearch(){var _this5=this;this.filterOptions=this.filterOptions||this.options.filterOptions;if(this.options.sidePagination!=='server'){if(this.options.customSearch){this.data=Utils.calculateObjectValue(this.options,this.options.customSearch,[this.options.data,this.searchText,this.filterColumns]);return}var s=this.searchText&&(this.fromHtml?Utils.escapeHTML(this.searchText):this.searchText).toLowerCase();var f=Utils.isEmptyObject(this.filterColumns)?null:this.filterColumns;if(typeof this.filterOptions.filterAlgorithm==='function'){this.data=this.options.data.filter(function(item,i){return _this5.filterOptions.filterAlgorithm.apply(null,[item,f])})}else if(typeof this.filterOptions.filterAlgorithm==='string'){this.data=f?this.options.data.filter(function(item,i){var filterAlgorithm=_this5.filterOptions.filterAlgorithm;if(filterAlgorithm==='and'){for(var key in f){if(Array.isArray(f[key])&&!f[key].includes(item[key])||!Array.isArray(f[key])&&item[key]!==f[key]){return false}}}else if(filterAlgorithm==='or'){var match=false;for(var _key in f){if(Array.isArray(f[_key])&&f[_key].includes(item[_key])||!Array.isArray(f[_key])&&item[_key]===f[_key]){match=true}}return match}return true}):this.options.data}var visibleFields=this.getVisibleFields();this.data=s?this.data.filter(function(item,i){for(var j=0;j<_this5.header.fields.length;j++){if(!_this5.header.searchables[j]||_this5.options.visibleSearch&&visibleFields.indexOf(_this5.header.fields[j])===-1){continue}var key=Utils.isNumeric(_this5.header.fields[j])?parseInt(_this5.header.fields[j],10):_this5.header.fields[j];var column=_this5.columns[_this5.fieldsColumnsIndex[key]];var value=void 0;if(typeof key==='string'){value=item;var props=key.split('.');for(var _i2=0;_i2|=<|>=|>|<)(?:\s+)?(\d+)?|(\d+)?(\s+)?(<=|=>|=<|>=|>|<))/gm;var matches=largerSmallerEqualsRegex.exec(s);var comparisonCheck=false;if(matches){var operator=matches[1]||"".concat(matches[5],"l");var comparisonValue=matches[2]||matches[3];var int=parseInt(value,10);var comparisonInt=parseInt(comparisonValue,10);switch(operator){case'>':case'comparisonInt;break;case'<':case'>l':comparisonCheck=int=l':case'=>l':comparisonCheck=int<=comparisonInt;break;case'>=':case'=>':case'<=l':case'==comparisonInt;break}}if(comparisonCheck||"".concat(value).toLowerCase().includes(s)){return true}}}}return false}):this.data}this.initSort()}},{key:"initPagination",value:function initPagination(){var _this6=this;var opts=this.options;if(!opts.pagination){this.$pagination.hide();return}this.$pagination.show();var html=[];var allSelected=false;var i;var from;var to;var $pageList;var $pre;var $next;var $number;var data=this.getData({includeHiddenRows:false});var pageList=opts.pageList;if(typeof pageList==='string'){pageList=pageList.replace(/\[|\]| /g,'').toLowerCase().split(',')}pageList=pageList.map(function(value){if(typeof value==='string'){return value.toLowerCase()===opts.formatAllRows().toLowerCase()||['all','unlimited'].includes(value.toLowerCase())?opts.formatAllRows():+value}return value});if(opts.sidePagination!=='server'){opts.totalRows=data.length}this.totalPages=0;if(opts.totalRows){if(opts.pageSize===opts.formatAllRows()){opts.pageSize=opts.totalRows;allSelected=true}this.totalPages=~~((opts.totalRows-1)/opts.pageSize)+1;opts.totalPages=this.totalPages}if(this.totalPages>0&&opts.pageNumber>this.totalPages){opts.pageNumber=this.totalPages}this.pageFrom=(opts.pageNumber-1)*opts.pageSize+1;this.pageTo=opts.pageNumber*opts.pageSize;if(this.pageTo>opts.totalRows){this.pageTo=opts.totalRows}if(this.options.pagination&&this.options.sidePagination!=='server'){this.options.totalNotFiltered=this.options.data.length}if(!this.options.showExtendedPagination){this.options.totalNotFiltered=undefined}var paginationInfo=opts.onlyInfoPagination?opts.formatDetailPagination(opts.totalRows):opts.formatShowingRows(this.pageFrom,this.pageTo,opts.totalRows,opts.totalNotFiltered);html.push("
    \n \n ").concat(paginationInfo,"\n "));if(!opts.onlyInfoPagination){html.push('');var pageNumber=["\n \n ").concat(this.constants.html.pageDropdown[0])];pageList.forEach(function(page,i){if(!opts.smartDisplay||i===0||pageList[i-1]"));html.push(opts.formatRecordsPerPage(pageNumber.join('')));html.push('
    ');html.push("
    "),Utils.sprintf(this.constants.html.pagination[0],Utils.sprintf(' pagination-%s',opts.iconSize)),Utils.sprintf(this.constants.html.paginationItem,' page-pre',opts.formatSRPaginationPreText(),opts.paginationPreText));if(this.totalPagesthis.totalPages-from){from=from-(opts.paginationSuccessivelySize-(this.totalPages-from))+1}if(from<1){from=1}if(to>this.totalPages){to=this.totalPages}var middleSize=Math.round(opts.paginationPagesBySide/2);var pageItem=function pageItem(i){var classes=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';return Utils.sprintf(_this6.constants.html.paginationItem,classes+(i===opts.pageNumber?" ".concat(_this6.constants.classes.paginationActive):''),opts.formatSRPaginationPageText(i),i)};if(from>1){var max=opts.paginationPagesBySide;if(max>=from)max=from-1;for(i=1;i<=max;i++){html.push(pageItem(i))}if(from-1===max+1){i=from-1;html.push(pageItem(i))}else{if(from-1>max){if(from-opts.paginationPagesBySide*2>opts.paginationPagesBySide&&opts.paginationUseIntermediate){i=Math.round((from-middleSize)/2+middleSize);html.push(pageItem(i,' page-intermediate'))}else{html.push(Utils.sprintf(this.constants.html.paginationItem,' page-first-separator disabled','','...'))}}}}for(i=from;i<=to;i++){html.push(pageItem(i))}if(this.totalPages>to){var min=this.totalPages-(opts.paginationPagesBySide-1);if(to>=min)min=to+1;if(to+1===min-1){i=to+1;html.push(pageItem(i))}else{if(min>to+1){if(this.totalPages-to>opts.paginationPagesBySide*2&&opts.paginationUseIntermediate){i=Math.round((this.totalPages-middleSize-to)/2+to);html.push(pageItem(i,' page-intermediate'))}else{html.push(Utils.sprintf(this.constants.html.paginationItem,' page-last-separator disabled','','...'))}}}for(i=min;i<=this.totalPages;i++){html.push(pageItem(i))}}html.push(Utils.sprintf(this.constants.html.paginationItem,' page-next',opts.formatSRPaginationNextText(),opts.paginationNextText));html.push(this.constants.html.pagination[1],'
    ')}this.$pagination.html(html.join(''));var dropupClass=['bottom','both'].includes(opts.paginationVAlign)?" ".concat(this.constants.classes.dropup):'';this.$pagination.last().find('.page-list > span').addClass(dropupClass);if(!opts.onlyInfoPagination){$pageList=this.$pagination.find('.page-list a');$pre=this.$pagination.find('.page-pre');$next=this.$pagination.find('.page-next');$number=this.$pagination.find('.page-item').not('.page-next, .page-pre, .page-last-separator, .page-first-separator');if(this.totalPages<=1){this.$pagination.find('div.pagination').hide()}if(opts.smartDisplay){if(pageList.length<2||opts.totalRows<=pageList[0]){this.$pagination.find('span.page-list').hide()}}this.$pagination[this.getData().length?'show':'hide']();if(!opts.paginationLoop){if(opts.pageNumber===1){$pre.addClass('disabled')}if(opts.pageNumber===this.totalPages){$next.addClass('disabled')}}if(allSelected){opts.pageSize=opts.formatAllRows()}$pageList.off('click').on('click',function(e){return _this6.onPageListChange(e)});$pre.off('click').on('click',function(e){return _this6.onPagePre(e)});$next.off('click').on('click',function(e){return _this6.onPageNext(e)});$number.off('click').on('click',function(e){return _this6.onPageNumber(e)})}}},{key:"updatePagination",value:function updatePagination(event){if(event&&$(event.currentTarget).hasClass('disabled')){return}if(!this.options.maintainMetaData){this.resetRows()}this.initPagination();if(this.options.sidePagination==='server'){this.initServer()}else{this.initBody()}this.trigger('page-change',this.options.pageNumber,this.options.pageSize)}},{key:"onPageListChange",value:function onPageListChange(event){event.preventDefault();var $this=$(event.currentTarget);$this.parent().addClass(this.constants.classes.dropdownActive).siblings().removeClass(this.constants.classes.dropdownActive);this.options.pageSize=$this.text().toUpperCase()===this.options.formatAllRows().toUpperCase()?this.options.formatAllRows():+$this.text();this.$toolbar.find('.page-size').text(this.options.pageSize);this.updatePagination(event);return false}},{key:"onPagePre",value:function onPagePre(event){event.preventDefault();if(this.options.pageNumber-1===0){this.options.pageNumber=this.options.totalPages}else{this.options.pageNumber--}this.updatePagination(event);return false}},{key:"onPageNext",value:function onPageNext(event){event.preventDefault();if(this.options.pageNumber+1>this.options.totalPages){this.options.pageNumber=1}else{this.options.pageNumber++}this.updatePagination(event);return false}},{key:"onPageNumber",value:function onPageNumber(event){event.preventDefault();if(this.options.pageNumber===+$(event.currentTarget).text()){return}this.options.pageNumber=+$(event.currentTarget).text();this.updatePagination(event);return false}},{key:"initRow",value:function initRow(item,i,data,trFragments){var _this7=this;var html=[];var style={};var csses=[];var data_='';var attributes={};var htmlAttributes=[];if(Utils.findIndex(this.hiddenRows,item)>-1){return}style=Utils.calculateObjectValue(this.options,this.options.rowStyle,[item,i],style);if(style&&style.css){for(var _i3=0,_Object$entries2=Object.entries(style.css);_i3<_Object$entries2.length;_i3++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i3],2),key=_Object$entries2$_i[0],value=_Object$entries2$_i[1];csses.push("".concat(key,": ").concat(value))}}attributes=Utils.calculateObjectValue(this.options,this.options.rowAttributes,[item,i],attributes);if(attributes){for(var _i4=0,_Object$entries3=Object.entries(attributes);_i4<_Object$entries3.length;_i4++){var _Object$entries3$_i=_slicedToArray(_Object$entries3[_i4],2),_key2=_Object$entries3$_i[0],_value=_Object$entries3$_i[1];htmlAttributes.push("".concat(_key2,"=\"").concat(Utils.escapeHTML(_value),"\""))}}if(item._data&&!Utils.isEmptyObject(item._data)){for(var _i5=0,_Object$entries4=Object.entries(item._data);_i5<_Object$entries4.length;_i5++){var _Object$entries4$_i=_slicedToArray(_Object$entries4[_i5],2),k=_Object$entries4$_i[0],v=_Object$entries4$_i[1];if(k==='index'){return}data_+=" data-".concat(k,"='").concat(_typeof(v)==='object'?JSON.stringify(v):v,"'")}}html.push('');if(this.options.cardView){html.push("
    "))}if(!this.options.cardView&&this.options.detailView&&this.options.detailViewIcon){html.push('');if(Utils.calculateObjectValue(null,this.options.detailFilter,[i,item])){html.push("\n \n ".concat(Utils.sprintf(this.constants.html.icon,this.options.iconsPrefix,this.options.icons.detailOpen),"\n \n "))}html.push('')}this.header.fields.forEach(function(field,j){var text='';var value_=Utils.getItemField(item,field,_this7.options.escape);var value='';var type='';var cellStyle={};var id_='';var class_=_this7.header.classes[j];var style_='';var data_='';var rowspan_='';var colspan_='';var title_='';var column=_this7.columns[j];if(_this7.fromHtml&&typeof value_==='undefined'){if(!column.checkbox&&!column.radio){return}}if(!column.visible){return}if(_this7.options.cardView&&!column.cardVisible){return}if(column.escape){value_=Utils.escapeHTML(value_)}if(csses.concat([_this7.header.styles[j]]).length){style_=" style=\"".concat(csses.concat([_this7.header.styles[j]]).join('; '),"\"")}if(item["_".concat(field,"_id")]){id_=Utils.sprintf(' id="%s"',item["_".concat(field,"_id")])}if(item["_".concat(field,"_class")]){class_=Utils.sprintf(' class="%s"',item["_".concat(field,"_class")])}if(item["_".concat(field,"_rowspan")]){rowspan_=Utils.sprintf(' rowspan="%s"',item["_".concat(field,"_rowspan")])}if(item["_".concat(field,"_colspan")]){colspan_=Utils.sprintf(' colspan="%s"',item["_".concat(field,"_colspan")])}if(item["_".concat(field,"_title")]){title_=Utils.sprintf(' title="%s"',item["_".concat(field,"_title")])}cellStyle=Utils.calculateObjectValue(_this7.header,_this7.header.cellStyles[j],[value_,item,i,field],cellStyle);if(cellStyle.classes){class_=" class=\"".concat(cellStyle.classes,"\"")}if(cellStyle.css){var csses_=[];for(var _i6=0,_Object$entries5=Object.entries(cellStyle.css);_i6<_Object$entries5.length;_i6++){var _Object$entries5$_i=_slicedToArray(_Object$entries5[_i6],2),_key3=_Object$entries5$_i[0],_value2=_Object$entries5$_i[1];csses_.push("".concat(_key3,": ").concat(_value2))}style_=" style=\"".concat(csses_.concat(_this7.header.styles[j]).join('; '),"\"")}value=Utils.calculateObjectValue(column,_this7.header.formatters[j],[value_,item,i,field],value_);if(item["_".concat(field,"_data")]&&!Utils.isEmptyObject(item["_".concat(field,"_data")])){for(var _i7=0,_Object$entries6=Object.entries(item["_".concat(field,"_data")]);_i7<_Object$entries6.length;_i7++){var _Object$entries6$_i=_slicedToArray(_Object$entries6[_i7],2),_k=_Object$entries6$_i[0],_v=_Object$entries6$_i[1];if(_k==='index'){return}data_+=" data-".concat(_k,"=\"").concat(_v,"\"")}}if(column.checkbox||column.radio){type=column.checkbox?'checkbox':type;type=column.radio?'radio':type;var f=field?field:'btSelectItem';var c=column['class']||'';var isChecked=(value===true||value_||value&&value.checked)&&value!==false;var isDisabled=!column.checkboxEnabled||value&&value.disabled;text=[_this7.options.cardView?"
    "):""),"
    \n \n \n
    "),_this7.header.formatters[j]&&typeof value==='string'?value:'',_this7.options.cardView?'
    ':''].join('');item[_this7.header.stateField]=value===true||!!value_||value&&value.checked}else{value=typeof value==='undefined'||value===null?_this7.options.undefinedText:value;if(_this7.options.cardView){var cardTitle=_this7.options.showHeader?"").concat(Utils.getFieldTitle(_this7.columns,field),""):'';text="
    ".concat(cardTitle,"").concat(value,"
    ");if(_this7.options.smartDisplay&&value===''){text='
    '}}else{text="").concat(value,"")}}html.push(text)});if(this.options.cardView){html.push('
    ')}html.push('');return html.join('')}},{key:"initBody",value:function initBody(fixedScroll){var _this8=this;var data=this.getData();this.trigger('pre-body',data);this.$body=this.$el.find('>tbody');if(!this.$body.length){this.$body=$('').appendTo(this.$el)}if(!this.options.pagination||this.options.sidePagination==='server'){this.pageFrom=1;this.pageTo=data.length}var rows=[];var trFragments=$(document.createDocumentFragment());var hasTr=false;for(var i=this.pageFrom-1;i".concat(Utils.sprintf('%s',this.$header.find('th').length,this.options.formatNoMatches()),""))}else{if(!this.options.virtualScroll){this.$body.html(trFragments)}else{if(this.virtualScroll){this.virtualScroll.destroy()}this.virtualScroll=new VirtualScroll({rows:rows,fixedScroll:fixedScroll,scrollEl:this.$tableBody[0],contentEl:this.$body[0],itemHeight:this.options.virtualScrollItemHeight,callback:function callback(){_this8.fitHeader();_this8.initBodyEvent()}})}}if(!fixedScroll){this.scrollTo(0)}this.initBodyEvent();this.updateSelected();this.initFooter();this.resetView();if(this.options.sidePagination!=='server'){this.options.totalRows=data.length}this.trigger('post-body',data)}},{key:"initBodyEvent",value:function initBodyEvent(){var _this9=this;this.$body.find('> tr[data-index] > td').off('click dblclick').on('click dblclick',function(e){var $td=$(e.currentTarget);var $tr=$td.parent();var $cardViewArr=$(e.target).parents('.card-views').children();var $cardViewTarget=$(e.target).parents('.card-view');var rowIndex=$tr.data('index');var item=_this9.data[rowIndex];var index=_this9.options.cardView?$cardViewArr.index($cardViewTarget):$td[0].cellIndex;var fields=_this9.getVisibleFields();var field=fields[_this9.options.detailView&&_this9.options.detailViewIcon&&!_this9.options.cardView?index-1:index];var column=_this9.columns[_this9.fieldsColumnsIndex[field]];var value=Utils.getItemField(item,field,_this9.options.escape);if($td.find('.detail-icon').length){return}_this9.trigger(e.type==='click'?'click-cell':'dbl-click-cell',field,value,item,$td);_this9.trigger(e.type==='click'?'click-row':'dbl-click-row',item,$tr,field);if(e.type==='click'&&_this9.options.clickToSelect&&column.clickToSelect&&!Utils.calculateObjectValue(_this9.options,_this9.options.ignoreClickToSelectOn,[e.target])){var $selectItem=$tr.find(Utils.sprintf('[name="%s"]',_this9.options.selectItemName));if($selectItem.length){$selectItem[0].click()}}if(e.type==='click'&&_this9.options.detailViewByClick){_this9.toggleDetailView(rowIndex,_this9.header.detailFormatters[_this9.fieldsColumnsIndex[field]])}}).off('mousedown').on('mousedown',function(e){_this9.multipleSelectRowCtrlKey=e.ctrlKey||e.metaKey;_this9.multipleSelectRowShiftKey=e.shiftKey});this.$body.find('> tr[data-index] > td > .detail-icon').off('click').on('click',function(e){e.preventDefault();_this9.toggleDetailView($(e.currentTarget).parent().parent().data('index'));return false});this.$selectItem=this.$body.find(Utils.sprintf('[name="%s"]',this.options.selectItemName));this.$selectItem.off('click').on('click',function(e){e.stopImmediatePropagation();var $this=$(e.currentTarget);_this9._toggleCheck($this.prop('checked'),$this.data('index'))});this.header.events.forEach(function(_events,i){var events=_events;if(!events){return}if(typeof events==='string'){events=Utils.calculateObjectValue(null,events)}var field=_this9.header.fields[i];var fieldIndex=_this9.getVisibleFields().indexOf(field);if(fieldIndex===-1){return}if(_this9.options.detailView&&!_this9.options.cardView){fieldIndex+=1}var _loop=function _loop(key){if(!events.hasOwnProperty(key)){return"continue"}var event=events[key];_this9.$body.find('>tr:not(.no-records-found)').each(function(i,tr){var $tr=$(tr);var $td=$tr.find(_this9.options.cardView?'.card-views>.card-view':'>td').eq(fieldIndex);var index=key.indexOf(' ');var name=key.substring(0,index);var el=key.substring(index+1);$td.find(el).off(name).on(name,function(e){var index=$tr.data('index');var row=_this9.data[index];var value=row[field];event.apply(_this9,[e,value,row,index])})})};for(var key in events){var _ret=_loop(key);if(_ret==="continue")continue}})}},{key:"initServer",value:function initServer(silent,query,url){var _this10=this;var data={};var index=this.header.fields.indexOf(this.options.sortName);var params={searchText:this.searchText,sortName:this.options.sortName,sortOrder:this.options.sortOrder};if(this.header.sortNames[index]){params.sortName=this.header.sortNames[index]}if(this.options.pagination&&this.options.sidePagination==='server'){params.pageSize=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize;params.pageNumber=this.options.pageNumber}if(!(url||this.options.url)&&!this.options.ajax){return}if(this.options.queryParamsType==='limit'){params={search:params.searchText,sort:params.sortName,order:params.sortOrder};if(this.options.pagination&&this.options.sidePagination==='server'){params.offset=this.options.pageSize===this.options.formatAllRows()?0:this.options.pageSize*(this.options.pageNumber-1);params.limit=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize;if(params.limit===0){delete params.limit}}}if(!Utils.isEmptyObject(this.filterColumnsPartial)){params.filter=JSON.stringify(this.filterColumnsPartial,null)}$.extend(params,query||{});data=Utils.calculateObjectValue(this.options,this.options.queryParams,[params],data);if(data===false){return}if(!silent){this.showLoading()}var request=$.extend({},Utils.calculateObjectValue(null,this.options.ajaxOptions),{type:this.options.method,url:url||this.options.url,data:this.options.contentType==='application/json'&&this.options.method==='post'?JSON.stringify(data):data,cache:this.options.cache,contentType:this.options.contentType,dataType:this.options.dataType,success:function success(_res,textStatus,jqXHR){var res=Utils.calculateObjectValue(_this10.options,_this10.options.responseHandler,[_res,jqXHR],_res);_this10.load(res);_this10.trigger('load-success',res,jqXHR&&jqXHR.status,jqXHR);if(!silent){_this10.hideLoading()}if(_this10.options.sidePagination==='server'&&res[_this10.options.totalField]>0&&!res[_this10.options.dataField].length){_this10.updatePagination()}},error:function error(jqXHR){var data=[];if(_this10.options.sidePagination==='server'){data={};data[_this10.options.totalField]=0;data[_this10.options.dataField]=[]}_this10.load(data);_this10.trigger('load-error',jqXHR&&jqXHR.status,jqXHR);if(!silent)_this10.$tableLoading.hide()}});if(this.options.ajax){Utils.calculateObjectValue(this,this.options.ajax,[request],null)}else{if(this._xhr&&this._xhr.readyState!==4){this._xhr.abort()}this._xhr=$.ajax(request)}return data}},{key:"initSearchText",value:function initSearchText(){if(this.options.search){this.searchText='';if(this.options.searchText!==''){var $search=this.$toolbar.find('.search input');$search.val(this.options.searchText);this.onSearch({currentTarget:$search,firedByInitSearchText:true})}}}},{key:"getCaret",value:function getCaret(){var _this11=this;this.$header.find('th').each(function(i,th){$(th).find('.sortable').removeClass('desc asc').addClass($(th).data('field')===_this11.options.sortName?_this11.options.sortOrder:'both')})}},{key:"updateSelected",value:function updateSelected(){var checkAll=this.$selectItem.filter(':enabled').length&&this.$selectItem.filter(':enabled').length===this.$selectItem.filter(':enabled').filter(':checked').length;this.$selectAll.add(this.$selectAll_).prop('checked',checkAll);this.$selectItem.each(function(i,el){$(el).closest('tr')[$(el).prop('checked')?'addClass':'removeClass']('selected')})}},{key:"updateRows",value:function updateRows(){var _this12=this;this.$selectItem.each(function(i,el){_this12.data[$(el).data('index')][_this12.header.stateField]=$(el).prop('checked')})}},{key:"resetRows",value:function resetRows(){var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=this.data[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var row=_step2.value;this.$selectAll.prop('checked',false);this.$selectItem.prop('checked',false);if(this.header.stateField){row[this.header.stateField]=false}}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return!=null){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2;}}}this.initHiddenRows()}},{key:"trigger",value:function trigger(_name){var _this$options;var name="".concat(_name,".bs.table");for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key4=1;_key4<_len;_key4++){args[_key4-1]=arguments[_key4]}(_this$options=this.options)[BootstrapTable.EVENTS[name]].apply(_this$options,args);this.$el.trigger($.Event(name),args);this.options.onAll(name,args);this.$el.trigger($.Event('all.bs.table'),[name,args])}},{key:"resetHeader",value:function resetHeader(){var _this13=this;clearTimeout(this.timeoutId_);this.timeoutId_=setTimeout(function(){return _this13.fitHeader()},this.$el.is(':hidden')?100:0)}},{key:"fitHeader",value:function fitHeader(){var _this14=this;if(this.$el.is(':hidden')){this.timeoutId_=setTimeout(function(){return _this14.fitHeader()},100);return}var fixedBody=this.$tableBody.get(0);var scrollWidth=fixedBody.scrollWidth>fixedBody.clientWidth&&fixedBody.scrollHeight>fixedBody.clientHeight+this.$header.outerHeight()?Utils.getScrollBarWidth():0;this.$el.css('margin-top',-this.$header.outerHeight());var focused=$(':focus');if(focused.length>0){var $th=focused.parents('th');if($th.length>0){var dataField=$th.attr('data-field');if(dataField!==undefined){var $headerTh=this.$header.find("[data-field='".concat(dataField,"']"));if($headerTh.length>0){$headerTh.find(':input').addClass('focus-temp')}}}}this.$header_=this.$header.clone(true,true);this.$selectAll_=this.$header_.find('[name="btSelectAll"]');this.$tableHeader.css('margin-right',scrollWidth).find('table').css('width',this.$el.outerWidth()).html('').attr('class',this.$el.attr('class')).append(this.$header_);this.$tableLoading.css('width',this.$el.outerWidth());var focusedTemp=$('.focus-temp:visible:eq(0)');if(focusedTemp.length>0){focusedTemp.focus();this.$header.find('.focus-temp').removeClass('focus-temp')}this.$header.find('th[data-field]').each(function(i,el){_this14.$header_.find(Utils.sprintf('th[data-field="%s"]',$(el).data('field'))).data($(el).data())});var visibleFields=this.getVisibleFields();var $ths=this.$header_.find('th');var $tr=this.$body.find('>tr:not(.no-records-found,.virtual-scroll-top)').eq(0);while($tr.length&&$tr.find('>td[colspan]:not([colspan="1"])').length){$tr=$tr.next()}$tr.find('> *').each(function(i,el){var $this=$(el);var index=i;if(_this14.options.detailView&&_this14.options.detailViewIcon&&!_this14.options.cardView){if(i===0){var $thDetail=$ths.filter('.detail');var _zoomWidth=$thDetail.innerWidth()-$thDetail.find('.fht-cell').width();$thDetail.find('.fht-cell').width($this.innerWidth()-_zoomWidth)}index=i-1}if(index===-1){return}var $th=_this14.$header_.find(Utils.sprintf('th[data-field="%s"]',visibleFields[index]));if($th.length>1){$th=$($ths[$this[0].cellIndex])}var zoomWidth=$th.innerWidth()-$th.find('.fht-cell').width();$th.find('.fht-cell').width($this.innerWidth()-zoomWidth)});this.horizontalScroll();this.trigger('post-header')}},{key:"initFooter",value:function initFooter(){if(!this.options.showFooter||this.options.cardView){return}var data=this.getData();var html=[];if(!this.options.cardView&&this.options.detailView&&this.options.detailViewIcon){html.push('
    ')}var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=this.columns[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var column=_step3.value;var falign='';var valign='';var csses=[];var style={};var class_=Utils.sprintf(' class="%s"',column['class']);if(!column.visible){continue}if(this.options.cardView&&!column.cardVisible){return}falign=Utils.sprintf('text-align: %s; ',column.falign?column.falign:column.align);valign=Utils.sprintf('vertical-align: %s; ',column.valign);style=Utils.calculateObjectValue(null,this.options.footerStyle,[column]);if(style&&style.css){for(var _i8=0,_Object$entries7=Object.entries(style.css);_i8<_Object$entries7.length;_i8++){var _Object$entries7$_i=_slicedToArray(_Object$entries7[_i8],2),key=_Object$entries7$_i[0],value=_Object$entries7$_i[1];csses.push("".concat(key,": ").concat(value))}}if(style&&style.classes){class_=Utils.sprintf(' class="%s"',column['class']?[column['class'],style.classes].join(' '):style.classes)}html.push('');html.push('
    ');html.push(Utils.calculateObjectValue(column,column.footerFormatter,[data],this.footerData[0]&&this.footerData[0][column.field]||''));html.push('
    ');html.push('
    ');html.push('');html.push('')}}catch(err){_didIteratorError3=true;_iteratorError3=err}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return!=null){_iterator3.return()}}finally{if(_didIteratorError3){throw _iteratorError3;}}}if(!this.options.height&&!this.$tableFooter.length){this.$el.append('');this.$tableFooter=this.$el.find('tfoot')}this.$tableFooter.find('tr').html(html.join(''));this.trigger('post-footer',this.$tableFooter)}},{key:"fitFooter",value:function fitFooter(){var _this15=this;if(this.$el.is(':hidden')){setTimeout(function(){return _this15.fitFooter()},100);return}var fixedBody=this.$tableBody.get(0);var scrollWidth=fixedBody.scrollWidth>fixedBody.clientWidth&&fixedBody.scrollHeight>fixedBody.clientHeight+this.$header.outerHeight()?Utils.getScrollBarWidth():0;this.$tableFooter.css('margin-right',scrollWidth).find('table').css('width',this.$el.outerWidth()).attr('class',this.$el.attr('class'));var visibleFields=this.getVisibleFields();var $ths=this.$tableFooter.find('th');var $tr=this.$body.find('>tr:first-child:not(.no-records-found)');while($tr.length&&$tr.find('>td[colspan]:not([colspan="1"])').length){$tr=$tr.next()}$tr.find('> *').each(function(i,el){var $this=$(el);var index=i;if(_this15.options.detailView&&!_this15.options.cardView){if(i===0){var $thDetail=$ths.filter('.detail');var _zoomWidth2=$thDetail.innerWidth()-$thDetail.find('.fht-cell').width();$thDetail.find('.fht-cell').width($this.innerWidth()-_zoomWidth2)}index=i-1}if(index===-1){return}var $th=$ths.eq(i);var zoomWidth=$th.innerWidth()-$th.find('.fht-cell').width();$th.find('.fht-cell').width($this.innerWidth()-zoomWidth)});this.horizontalScroll()}},{key:"horizontalScroll",value:function horizontalScroll(){var _this16=this;this.$tableBody.off('scroll').on('scroll',function(){var scrollLeft=_this16.$tableBody.scrollLeft();if(_this16.options.showHeader&&_this16.options.height){_this16.$tableHeader.scrollLeft(scrollLeft)}if(_this16.options.showFooter&&!_this16.options.cardView){_this16.$tableFooter.scrollLeft(scrollLeft)}_this16.trigger('scroll-body',_this16.$tableBody)})}},{key:"getVisibleFields",value:function getVisibleFields(){var visibleFields=[];var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=this.header.fields[Symbol.iterator](),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var field=_step4.value;var column=this.columns[this.fieldsColumnsIndex[field]];if(!column||!column.visible){continue}visibleFields.push(field)}}catch(err){_didIteratorError4=true;_iteratorError4=err}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return!=null){_iterator4.return()}}finally{if(_didIteratorError4){throw _iteratorError4;}}}return visibleFields}},{key:"initHiddenRows",value:function initHiddenRows(){this.hiddenRows=[]}},{key:"getOptions",value:function getOptions(){var options=$.extend({},this.options);delete options.data;return $.extend(true,{},options)}},{key:"refreshOptions",value:function refreshOptions(options){if(Utils.compareObjects(this.options,options,true)){return}this.options=$.extend(this.options,options);this.trigger('refresh-options',this.options);this.destroy();this.init()}},{key:"getData",value:function getData(params){var data=this.options.data;if((this.searchText||this.options.customSearch||this.options.sortName||!Utils.isEmptyObject(this.filterColumns)||!Utils.isEmptyObject(this.filterColumnsPartial))&&(!params||!params.unfiltered)){data=this.data}if(params&¶ms.useCurrentPage){data=data.slice(this.pageFrom-1,this.pageTo)}if(params&&!params.includeHiddenRows){var hiddenRows=this.getHiddenRows();data=data.filter(function(row){return Utils.findIndex(hiddenRows,row)===-1})}return data}},{key:"getSelections",value:function getSelections(){var _this17=this;return this.data.filter(function(row){return row[_this17.header.stateField]===true})}},{key:"getAllSelections",value:function getAllSelections(){var _this18=this;return this.options.data.filter(function(row){return row[_this18.header.stateField]===true})}},{key:"load",value:function load(_data){var fixedScroll=false;var data=_data;if(this.options.pagination&&this.options.sidePagination==='server'){this.options.totalRows=data[this.options.totalField]}if(this.options.pagination&&this.options.sidePagination==='server'){this.options.totalNotFiltered=data[this.options.totalNotFilteredField]}fixedScroll=data.fixedScroll;data=Array.isArray(data)?data:data[this.options.dataField];this.initData(data);this.initSearch();this.initPagination();this.initBody(fixedScroll)}},{key:"append",value:function append(data){this.initData(data,'append');this.initSearch();this.initPagination();this.initSort();this.initBody(true)}},{key:"prepend",value:function prepend(data){this.initData(data,'prepend');this.initSearch();this.initPagination();this.initSort();this.initBody(true)}},{key:"remove",value:function remove(params){var len=this.options.data.length;var i;var row;if(!params.hasOwnProperty('field')||!params.hasOwnProperty('values')){return}for(i=len-1;i>=0;i--){row=this.options.data[i];if(!row.hasOwnProperty(params.field)){continue}if(params.values.includes(row[params.field])){this.options.data.splice(i,1);if(this.options.sidePagination==='server'){this.options.totalRows-=1}}}if(len===this.options.data.length){return}this.initSearch();this.initPagination();this.initSort();this.initBody(true)}},{key:"removeAll",value:function removeAll(){if(this.options.data.length>0){this.options.data.splice(0,this.options.data.length);this.initSearch();this.initPagination();this.initBody(true)}}},{key:"insertRow",value:function insertRow(params){if(!params.hasOwnProperty('index')||!params.hasOwnProperty('row')){return}this.options.data.splice(params.index,0,params.row);this.initSearch();this.initPagination();this.initSort();this.initBody(true)}},{key:"updateRow",value:function updateRow(params){var allParams=Array.isArray(params)?params:[params];var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{for(var _iterator5=allParams[Symbol.iterator](),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator5.next()).done);_iteratorNormalCompletion5=true){var _params=_step5.value;if(!_params.hasOwnProperty('index')||!_params.hasOwnProperty('row')){continue}$.extend(this.options.data[_params.index],_params.row);if(_params.hasOwnProperty('replace')&&_params.replace){this.options.data[_params.index]=_params.row}else{$.extend(this.options.data[_params.index],_params.row)}}}catch(err){_didIteratorError5=true;_iteratorError5=err}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return!=null){_iterator5.return()}}finally{if(_didIteratorError5){throw _iteratorError5;}}}this.initSearch();this.initPagination();this.initSort();this.initBody(true)}},{key:"getRowByUniqueId",value:function getRowByUniqueId(_id){var uniqueId=this.options.uniqueId;var len=this.options.data.length;var id=_id;var dataRow=null;var i;var row;var rowUniqueId;for(i=len-1;i>=0;i--){row=this.options.data[i];if(row.hasOwnProperty(uniqueId)){rowUniqueId=row[uniqueId]}else if(row._data&&row._data.hasOwnProperty(uniqueId)){rowUniqueId=row._data[uniqueId]}else{continue}if(typeof rowUniqueId==='string'){id=id.toString()}else if(typeof rowUniqueId==='number'){if(Number(rowUniqueId)===rowUniqueId&&rowUniqueId%1===0){id=parseInt(id)}else if(rowUniqueId===Number(rowUniqueId)&&rowUniqueId!==0){id=parseFloat(id)}}if(rowUniqueId===id){dataRow=row;break}}return dataRow}},{key:"updateByUniqueId",value:function updateByUniqueId(params){var allParams=Array.isArray(params)?params:[params];var _iteratorNormalCompletion6=true;var _didIteratorError6=false;var _iteratorError6=undefined;try{for(var _iterator6=allParams[Symbol.iterator](),_step6;!(_iteratorNormalCompletion6=(_step6=_iterator6.next()).done);_iteratorNormalCompletion6=true){var _params2=_step6.value;if(!_params2.hasOwnProperty('id')||!_params2.hasOwnProperty('row')){continue}var rowId=this.options.data.indexOf(this.getRowByUniqueId(_params2.id));if(rowId===-1){continue}if(_params2.hasOwnProperty('replace')&&_params2.replace){this.options.data[rowId]=_params2.row}else{$.extend(this.options.data[rowId],_params2.row)}}}catch(err){_didIteratorError6=true;_iteratorError6=err}finally{try{if(!_iteratorNormalCompletion6&&_iterator6.return!=null){_iterator6.return()}}finally{if(_didIteratorError6){throw _iteratorError6;}}}this.initSearch();this.initPagination();this.initSort();this.initBody(true)}},{key:"removeByUniqueId",value:function removeByUniqueId(id){var len=this.options.data.length;var row=this.getRowByUniqueId(id);if(row){this.options.data.splice(this.options.data.indexOf(row),1)}if(len===this.options.data.length){return}this.initSearch();this.initPagination();this.initBody(true)}},{key:"updateCell",value:function updateCell(params){if(!params.hasOwnProperty('index')||!params.hasOwnProperty('field')||!params.hasOwnProperty('value')){return}this.data[params.index][params.field]=params.value;if(params.reinit===false){return}this.initSort();this.initBody(true)}},{key:"updateCellByUniqueId",value:function updateCellByUniqueId(params){var _this19=this;if(!params.hasOwnProperty('id')||!params.hasOwnProperty('field')||!params.hasOwnProperty('value')){return}var allParams=Array.isArray(params)?params:[params];allParams.forEach(function(_ref6){var id=_ref6.id,field=_ref6.field,value=_ref6.value;var rowId=_this19.options.data.indexOf(_this19.getRowByUniqueId(id));if(rowId===-1){return}_this19.options.data[rowId][field]=value});if(params.reinit===false){return}this.initSort();this.initBody(true)}},{key:"showRow",value:function showRow(params){this._toggleRow(params,true)}},{key:"hideRow",value:function hideRow(params){this._toggleRow(params,false)}},{key:"_toggleRow",value:function _toggleRow(params,visible){var row;if(params.hasOwnProperty('index')){row=this.getData()[params.index]}else if(params.hasOwnProperty('uniqueId')){row=this.getRowByUniqueId(params.uniqueId)}if(!row){return}var index=Utils.findIndex(this.hiddenRows,row);if(!visible&&index===-1){this.hiddenRows.push(row)}else if(visible&&index>-1){this.hiddenRows.splice(index,1)}if(visible){this.updatePagination()}else{this.initBody(true);this.initPagination()}}},{key:"getHiddenRows",value:function getHiddenRows(show){if(show){this.initHiddenRows();this.initBody(true);return}var data=this.getData();var rows=[];var _iteratorNormalCompletion7=true;var _didIteratorError7=false;var _iteratorError7=undefined;try{for(var _iterator7=data[Symbol.iterator](),_step7;!(_iteratorNormalCompletion7=(_step7=_iterator7.next()).done);_iteratorNormalCompletion7=true){var row=_step7.value;if(this.hiddenRows.includes(row)){rows.push(row)}}}catch(err){_didIteratorError7=true;_iteratorError7=err}finally{try{if(!_iteratorNormalCompletion7&&_iterator7.return!=null){_iterator7.return()}}finally{if(_didIteratorError7){throw _iteratorError7;}}}this.hiddenRows=rows;return rows}},{key:"showColumn",value:function showColumn(field){var _this20=this;var fields=Array.isArray(field)?field:[field];fields.forEach(function(field){_this20._toggleColumn(_this20.fieldsColumnsIndex[field],true,true)})}},{key:"hideColumn",value:function hideColumn(field){var _this21=this;var fields=Array.isArray(field)?field:[field];fields.forEach(function(field){_this21._toggleColumn(_this21.fieldsColumnsIndex[field],false,true)})}},{key:"_toggleColumn",value:function _toggleColumn(index,checked,needUpdate){if(index===-1||this.columns[index].visible===checked){return}this.columns[index].visible=checked;this.initHeader();this.initSearch();this.initPagination();this.initBody();if(this.options.showColumns){var $items=this.$toolbar.find('.keep-open input:not(".toggle-all")').prop('disabled',false);if(needUpdate){$items.filter(Utils.sprintf('[value="%s"]',index)).prop('checked',checked)}if($items.filter(':checked').length<=this.options.minimumCountColumns){$items.filter(':checked').prop('disabled',true)}}}},{key:"getVisibleColumns",value:function getVisibleColumns(){var _this22=this;return this.columns.filter(function(column){return column.visible&&!_this22.isSelectionColumn(column)})}},{key:"getHiddenColumns",value:function getHiddenColumns(){return this.columns.filter(function(_ref7){var visible=_ref7.visible;return!visible})}},{key:"isSelectionColumn",value:function isSelectionColumn(column){return column.radio||column.checkbox}},{key:"showAllColumns",value:function showAllColumns(){this._toggleAllColumns(true)}},{key:"hideAllColumns",value:function hideAllColumns(){this._toggleAllColumns(false)}},{key:"_toggleAllColumns",value:function _toggleAllColumns(visible){var _this23=this;var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=this.columns.slice().reverse()[Symbol.iterator](),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var column=_step8.value;if(column.switchable){if(!visible&&this.options.showColumns&&this.getVisibleColumns().length===this.options.minimumCountColumns){continue}column.visible=visible}}}catch(err){_didIteratorError8=true;_iteratorError8=err}finally{try{if(!_iteratorNormalCompletion8&&_iterator8.return!=null){_iterator8.return()}}finally{if(_didIteratorError8){throw _iteratorError8;}}}this.initHeader();this.initSearch();this.initPagination();this.initBody();if(this.options.showColumns){var $items=this.$toolbar.find('.keep-open input[type="checkbox"]:not(".toggle-all")').prop('disabled',false);if(visible){$items.prop('checked',visible)}else{$items.get().reverse().forEach(function(item){if($items.filter(':checked').length>_this23.options.minimumCountColumns){$(item).prop('checked',visible)}})}if($items.filter(':checked').length<=this.options.minimumCountColumns){$items.filter(':checked').prop('disabled',true)}}}},{key:"mergeCells",value:function mergeCells(options){var row=options.index;var col=this.getVisibleFields().indexOf(options.field);var rowspan=options.rowspan||1;var colspan=options.colspan||1;var i;var j;var $tr=this.$body.find('>tr');if(this.options.detailView&&!this.options.cardView){col+=1}var $td=$tr.eq(row).find('>td').eq(col);if(row<0||col<0||row>=this.data.length){return}for(i=row;itd').eq(j).hide()}}$td.attr('rowspan',rowspan).attr('colspan',colspan).show()}},{key:"checkAll",value:function checkAll(){this._toggleCheckAll(true)}},{key:"uncheckAll",value:function uncheckAll(){this._toggleCheckAll(false)}},{key:"_toggleCheckAll",value:function _toggleCheckAll(checked){var rowsBefore=this.getSelections();this.$selectAll.add(this.$selectAll_).prop('checked',checked);this.$selectItem.filter(':enabled').prop('checked',checked);this.updateRows();var rowsAfter=this.getSelections();if(checked){this.trigger('check-all',rowsAfter,rowsBefore);return}this.trigger('uncheck-all',rowsAfter,rowsBefore)}},{key:"checkInvert",value:function checkInvert(){var $items=this.$selectItem.filter(':enabled');var checked=$items.filter(':checked');$items.each(function(i,el){$(el).prop('checked',!$(el).prop('checked'))});this.updateRows();this.updateSelected();this.trigger('uncheck-some',checked);checked=this.getSelections();this.trigger('check-some',checked)}},{key:"check",value:function check(index){this._toggleCheck(true,index)}},{key:"uncheck",value:function uncheck(index){this._toggleCheck(false,index)}},{key:"_toggleCheck",value:function _toggleCheck(checked,index){var $el=this.$selectItem.filter("[data-index=\"".concat(index,"\"]"));var row=this.data[index];if($el.is(':radio')||this.options.singleSelect||this.options.multipleSelectRow&&!this.multipleSelectRowCtrlKey&&!this.multipleSelectRowShiftKey){var _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=this.options.data[Symbol.iterator](),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){var r=_step9.value;r[this.header.stateField]=false}}catch(err){_didIteratorError9=true;_iteratorError9=err}finally{try{if(!_iteratorNormalCompletion9&&_iterator9.return!=null){_iterator9.return()}}finally{if(_didIteratorError9){throw _iteratorError9;}}}this.$selectItem.filter(':checked').not($el).prop('checked',false)}row[this.header.stateField]=checked;if(this.options.multipleSelectRow){if(this.multipleSelectRowShiftKey&&this.multipleSelectRowLastSelectedIndex>=0){var indexes=[this.multipleSelectRowLastSelectedIndex,index].sort();for(var i=indexes[0]+1;i0&&this.$selectItem.length===this.$selectItem.filter(':checked').length);this.$tableContainer.toggleClass('has-card-view',this.options.cardView);if(!this.options.cardView&&this.options.showHeader&&this.options.height){this.$tableHeader.show();this.resetHeader();padding+=this.$header.outerHeight(true)+1}else{this.$tableHeader.hide();this.trigger('post-header')}if(!this.options.cardView&&this.options.showFooter){this.$tableFooter.show();this.fitFooter();if(this.options.height){padding+=this.$tableFooter.outerHeight(true)}}if(this.$container.hasClass('fullscreen')){this.$tableContainer.css('height','');this.$tableContainer.css('width','')}else if(this.options.height){var toolbarHeight=this.$toolbar.outerHeight(true);var paginationHeight=this.$pagination.outerHeight(true);var height=this.options.height-toolbarHeight-paginationHeight;var $bodyTable=this.$tableBody.find('>table');var tableHeight=$bodyTable.outerHeight();this.$tableContainer.css('height',"".concat(height,"px"));if(this.$tableBorder){var tableBorderHeight=height-tableHeight-2;if(this.$tableBody[0].scrollWidth-this.$tableBody.innerWidth()){tableBorderHeight-=Utils.getScrollBarWidth()}this.$tableBorder.css('width',"".concat($bodyTable.outerWidth(),"px"));this.$tableBorder.css('height',"".concat(tableBorderHeight,"px"))}}if(this.options.cardView){this.$el.css('margin-top','0');this.$tableContainer.css('padding-bottom','0');this.$tableFooter.hide()}else{this.getCaret();this.$tableContainer.css('padding-bottom',"".concat(padding,"px"))}this.trigger('reset-view')}},{key:"showLoading",value:function showLoading(){this.$tableLoading.css('display','flex')}},{key:"hideLoading",value:function hideLoading(){this.$tableLoading.css('display','none')}},{key:"togglePagination",value:function togglePagination(){this.options.pagination=!this.options.pagination;var icon=this.options.showButtonIcons?this.options.pagination?this.options.icons.paginationSwitchDown:this.options.icons.paginationSwitchUp:'';var text=this.options.showButtonText?this.options.pagination?this.options.formatPaginationSwitchUp():this.options.formatPaginationSwitchDown():'';this.$toolbar.find('button[name="paginationSwitch"]').html(Utils.sprintf(this.constants.html.icon,this.options.iconsPrefix,icon)+' '+text);this.updatePagination()}},{key:"toggleFullscreen",value:function toggleFullscreen(){this.$el.closest('.bootstrap-table').toggleClass('fullscreen');this.resetView()}},{key:"toggleView",value:function toggleView(){this.options.cardView=!this.options.cardView;this.initHeader();var icon=this.options.showButtonIcons?this.options.cardView?this.options.icons.toggleOn:this.options.icons.toggleOff:'';var text=this.options.showButtonText?this.options.cardView?this.options.formatToggleOff():this.options.formatToggleOn():'';this.$toolbar.find('button[name="toggle"]').html(Utils.sprintf(this.constants.html.icon,this.options.iconsPrefix,icon)+' '+text);this.initBody();this.trigger('toggle',this.options.cardView)}},{key:"resetSearch",value:function resetSearch(text){var $search=this.$toolbar.find('.search input');$search.val(text||'');this.onSearch({currentTarget:$search})}},{key:"filterBy",value:function filterBy(columns,options){this.filterOptions=Utils.isEmptyObject(options)?this.options.filterOptions:$.extend(this.options.filterOptions,options);this.filterColumns=Utils.isEmptyObject(columns)?{}:columns;this.options.pageNumber=1;this.initSearch();this.updatePagination()}},{key:"scrollTo",value:function scrollTo(params){if(typeof params==='undefined'){return this.$tableBody.scrollTop()}var options={unit:'px',value:0};if(_typeof(params)==='object'){options=Object.assign(options,params)}else if(typeof params==='string'&¶ms==='bottom'){options.value=this.$tableBody[0].scrollHeight}else if(typeof params==='string'){options.value=params}var scrollTo=options.value;if(options.unit==='rows'){scrollTo=0;this.$body.find("> tr:lt(".concat(options.value,")")).each(function(i,el){scrollTo+=$(el).outerHeight(true)})}this.$tableBody.scrollTop(scrollTo)}},{key:"getScrollPosition",value:function getScrollPosition(){return this.scrollTo()}},{key:"selectPage",value:function selectPage(page){if(page>0&&page<=this.options.totalPages){this.options.pageNumber=page;this.updatePagination()}}},{key:"prevPage",value:function prevPage(){if(this.options.pageNumber>1){this.options.pageNumber--;this.updatePagination()}}},{key:"nextPage",value:function nextPage(){if(this.options.pageNumber tr[data-index="%s"]',index));if($tr.next().is('tr.detail-view')){this.collapseRow(index)}else{this.expandRow(index,_columnDetailFormatter)}this.resetView()}},{key:"expandRow",value:function expandRow(index,_columnDetailFormatter){var row=this.data[index];var $tr=this.$body.find(Utils.sprintf('> tr[data-index="%s"][data-has-detail-view]',index));if($tr.next().is('tr.detail-view')){return}if(this.options.detailViewIcon){$tr.find('a.detail-icon').html(Utils.sprintf(this.constants.html.icon,this.options.iconsPrefix,this.options.icons.detailClose))}$tr.after(Utils.sprintf('',$tr.children('td').length));var $element=$tr.next().find('td');var detailFormatter=_columnDetailFormatter||this.options.detailFormatter;var content=Utils.calculateObjectValue(this.options,detailFormatter,[index,row,$element],'');if($element.length===1){$element.append(content)}this.trigger('expand-row',index,row,$element)}},{key:"collapseRow",value:function collapseRow(index){var row=this.data[index];var $tr=this.$body.find(Utils.sprintf('> tr[data-index="%s"][data-has-detail-view]',index));if(!$tr.next().is('tr.detail-view')){return}if(this.options.detailViewIcon){$tr.find('a.detail-icon').html(Utils.sprintf(this.constants.html.icon,this.options.iconsPrefix,this.options.icons.detailOpen))}this.trigger('collapse-row',index,row,$tr.next());$tr.next().remove()}},{key:"expandAllRows",value:function expandAllRows(){var trs=this.$body.find('> tr[data-index][data-has-detail-view]');for(var i=0;i tr[data-index][data-has-detail-view]');for(var i=0;i1?_len2-1:0),_key5=1;_key5<_len2;_key5++){args[_key5-1]=arguments[_key5]}var value;this.each(function(i,el){var data=$(el).data('bootstrap.table');var options=$.extend({},BootstrapTable.DEFAULTS,$(el).data(),_typeof(option)==='object'&&option);if(typeof option==='string'){var _data2;if(!Constants.METHODS.includes(option)){throw new Error("Unknown method: ".concat(option));}if(!data){return}value=(_data2=data)[option].apply(_data2,args);if(option==='destroy'){$(el).removeData('bootstrap.table')}}if(!data){$(el).data('bootstrap.table',data=new $.BootstrapTable(el,options))}});return typeof value==='undefined'?this:value};$.fn.bootstrapTable.Constructor=BootstrapTable;$.fn.bootstrapTable.theme=Constants.THEME;$.fn.bootstrapTable.VERSION=Constants.VERSION;$.fn.bootstrapTable.defaults=BootstrapTable.DEFAULTS;$.fn.bootstrapTable.columnDefaults=BootstrapTable.COLUMN_DEFAULTS;$.fn.bootstrapTable.events=BootstrapTable.EVENTS;$.fn.bootstrapTable.locales=BootstrapTable.LOCALES;$.fn.bootstrapTable.methods=BootstrapTable.METHODS;$.fn.bootstrapTable.utils=Utils;$(function(){$('[data-toggle="table"]').bootstrapTable()});return BootstrapTable}))); \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-table/extensions/accent-neutralise/bootstrap-table-accent-neutralise.min.js b/assets/bootstrap/js/bootstrap-table/extensions/accent-neutralise/bootstrap-table-accent-neutralise.min.js new file mode 100644 index 0000000..8abed80 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/accent-neutralise/bootstrap-table-accent-neutralise.min.js @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.16.0 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e((t=t||self).jQuery)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(t,e){return t(e={exports:{}},e.exports),e.exports}var n=function(t){return t&&t.Math==Math&&t},o=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||Function("return this")(),i=function(t){try{return!!t()}catch(t){return!0}},a=!i((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})),u={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,s={f:c&&!u.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:u},l=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},f={}.toString,p=function(t){return f.call(t).slice(8,-1)},y="".split,b=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==p(t)?y.call(t,""):Object(t)}:Object,v=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},d=function(t){return b(v(t))},h=function(t){return"object"==typeof t?null!==t:"function"==typeof t},g=function(t,e){if(!h(t))return t;var r,n;if(e&&"function"==typeof(r=t.toString)&&!h(n=r.call(t)))return n;if("function"==typeof(r=t.valueOf)&&!h(n=r.call(t)))return n;if(!e&&"function"==typeof(r=t.toString)&&!h(n=r.call(t)))return n;throw TypeError("Can't convert object to primitive value")},m={}.hasOwnProperty,S=function(t,e){return m.call(t,e)},O=o.document,w=h(O)&&h(O.createElement),x=function(t){return w?O.createElement(t):{}},j=!a&&!i((function(){return 7!=Object.defineProperty(x("div"),"a",{get:function(){return 7}}).a})),E=Object.getOwnPropertyDescriptor,A={f:a?E:function(t,e){if(t=d(t),e=g(e,!0),j)try{return E(t,e)}catch(t){}if(S(t,e))return l(!s.f.call(t,e),t[e])}},T=function(t){if(!h(t))throw TypeError(String(t)+" is not an object");return t},P=Object.defineProperty,I={f:a?P:function(t,e,r){if(T(t),e=g(e,!0),T(r),j)try{return P(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},_=a?function(t,e,r){return I.f(t,e,l(1,r))}:function(t,e,r){return t[e]=r,t},L=function(t,e){try{_(o,t,e)}catch(r){o[t]=e}return e},R=o["__core-js_shared__"]||L("__core-js_shared__",{}),k=Function.toString;"function"!=typeof R.inspectSource&&(R.inspectSource=function(t){return k.call(t)});var C,N,M,F=R.inspectSource,D=o.WeakMap,$="function"==typeof D&&/native code/.test(F(D)),G=r((function(t){(t.exports=function(t,e){return R[t]||(R[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.0",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})),V=0,U=Math.random(),z=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++V+U).toString(36)},B=G("keys"),Y=function(t){return B[t]||(B[t]=z(t))},q={},K=o.WeakMap;if($){var W=new K,H=W.get,J=W.has,Q=W.set;C=function(t,e){return Q.call(W,t,e),e},N=function(t){return H.call(W,t)||{}},M=function(t){return J.call(W,t)}}else{var X=Y("state");q[X]=!0,C=function(t,e){return _(t,X,e),e},N=function(t){return S(t,X)?t[X]:{}},M=function(t){return S(t,X)}}var Z,tt={set:C,get:N,has:M,enforce:function(t){return M(t)?N(t):C(t,{})},getterFor:function(t){return function(e){var r;if(!h(e)||(r=N(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}},et=r((function(t){var e=tt.get,r=tt.enforce,n=String(String).split("String");(t.exports=function(t,e,i,a){var u=!!a&&!!a.unsafe,c=!!a&&!!a.enumerable,s=!!a&&!!a.noTargetGet;"function"==typeof i&&("string"!=typeof e||S(i,"name")||_(i,"name",e),r(i).source=n.join("string"==typeof e?e:"")),t!==o?(u?!s&&t[e]&&(c=!0):delete t[e],c?t[e]=i:_(t,e,i)):c?t[e]=i:L(e,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&e(this).source||F(this)}))})),rt=o,nt=function(t){return"function"==typeof t?t:void 0},ot=function(t,e){return arguments.length<2?nt(rt[t])||nt(o[t]):rt[t]&&rt[t][e]||o[t]&&o[t][e]},it=Math.ceil,at=Math.floor,ut=function(t){return isNaN(t=+t)?0:(t>0?at:it)(t)},ct=Math.min,st=function(t){return t>0?ct(ut(t),9007199254740991):0},lt=Math.max,ft=Math.min,pt=function(t){return function(e,r,n){var o,i=d(e),a=st(i.length),u=function(t,e){var r=ut(t);return r<0?lt(r+e,0):ft(r,e)}(n,a);if(t&&r!=r){for(;a>u;)if((o=i[u++])!=o)return!0}else for(;a>u;u++)if((t||u in i)&&i[u]===r)return t||u||0;return!t&&-1}},yt={includes:pt(!0),indexOf:pt(!1)},bt=yt.indexOf,vt=function(t,e){var r,n=d(t),o=0,i=[];for(r in n)!S(q,r)&&S(n,r)&&i.push(r);for(;e.length>o;)S(n,r=e[o++])&&(~bt(i,r)||i.push(r));return i},dt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],ht=dt.concat("length","prototype"),gt={f:Object.getOwnPropertyNames||function(t){return vt(t,ht)}},mt={f:Object.getOwnPropertySymbols},St=ot("Reflect","ownKeys")||function(t){var e=gt.f(T(t)),r=mt.f;return r?e.concat(r(t)):e},Ot=function(t,e){for(var r=St(e),n=I.f,o=A.f,i=0;ii;)I.f(t,r=n[i++],e[r]);return t},Ft=ot("document","documentElement"),Dt=Y("IE_PROTO"),$t=function(){},Gt=function(t){return" +... + + + + + + +
    TypeValueDate
    +``` + +## Options + +### usePipeline + +* type: Boolean +* description: Set true to enable pipelining +* default: `false` + +## pipelineSize + +* type: Integer +* description: Size of each cache window. Must be greater than 0 +* default: `1000` + +## Events + +### onCachedDataHit(cached-data-hit.bs.table) + +* Fires when paging was able to use the locally cached data. + +### onCachedDataReset(cached-data-reset.bs.table) + +* Fires when the locally cached data needed to be reset (i.e. on sorting, searching, page size change or paged out of current cache window) diff --git a/assets/bootstrap/js/bootstrap-table/extensions/pipeline/bootstrap-table-pipeline.js b/assets/bootstrap/js/bootstrap-table/extensions/pipeline/bootstrap-table-pipeline.js new file mode 100644 index 0000000..4b2f941 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/pipeline/bootstrap-table-pipeline.js @@ -0,0 +1,320 @@ +/** + * @author doug-the-guy + * @version v1.0.0 + * + * Bootstrap Table Pipeline + * ----------------------- + * + * This plugin enables client side data caching for server side requests which will + * eliminate the need to issue a new request every page change. This will allow + * for a performance balance for a large data set between returning all data at once + * (client side paging) and a new server side request (server side paging). + * + * There are two new options: + * - usePipeline: enables this feature + * - pipelineSize: the size of each cache window + * + * The size of the pipeline must be evenly divisible by the current page size. This is + * assured by rounding up to the nearest evenly divisible value. For example, if + * the pipeline size is 4990 and the current page size is 25, then pipeline size will + * be dynamically set to 5000. + * + * The cache windows are computed based on the pipeline size and the total number of rows + * returned by the server side query. For example, with pipeline size 500 and total rows + * 1300, the cache windows will be: + * + * [{'lower': 0, 'upper': 499}, {'lower': 500, 'upper': 999}, {'lower': 1000, 'upper': 1499}] + * + * Using the limit (i.e. the pipelineSize) and offset parameters, the server side request + * **MUST** return only the data in the requested cache window **AND** the total number of rows. + * To wit, the server side code must use the offset and limit parameters to prepare the response + * data. + * + * On a page change, the new offset is checked if it is within the current cache window. If so, + * the requested page data is returned from the cached data set. Otherwise, a new server side + * request will be issued for the new cache window. + * + * The current cached data is only invalidated on these events: + * * sorting + * * searching + * * page size change + * * page change moves into a new cache window + * + * There are two new events: + * - cached-data-hit.bs.table: issued when cached data is used on a page change + * - cached-data-reset.bs.table: issued when the cached data is invalidated and a + * new server side request is issued + * + **/ + +const Utils = $.fn.bootstrapTable.utils + +$.extend($.fn.bootstrapTable.defaults, { + usePipeline: false, + pipelineSize: 1000, + onCachedDataHit (data) { + return false + }, + onCachedDataReset (data) { + return false + } +}) + +$.extend($.fn.bootstrapTable.Constructor.EVENTS, { + 'cached-data-hit.bs.table': 'onCachedDataHit', + 'cached-data-reset.bs.table': 'onCachedDataReset' +}) + +const BootstrapTable = $.fn.bootstrapTable.Constructor +const _init = BootstrapTable.prototype.init +const _initServer = BootstrapTable.prototype.initServer +const _onSearch = BootstrapTable.prototype.onSearch +const _onSort = BootstrapTable.prototype.onSort +const _onPageListChange = BootstrapTable.prototype.onPageListChange + +BootstrapTable.prototype.init = function (...args) { + // needs to be called before initServer() + this.initPipeline() + _init.apply(this, Array.prototype.slice.apply(args)) +} + +BootstrapTable.prototype.initPipeline = function () { + this.cacheRequestJSON = {} + this.cacheWindows = [] + this.currWindow = 0 + this.resetCache = true +} + +BootstrapTable.prototype.onSearch = function (event) { + /* force a cache reset on search */ + if (this.options.usePipeline) { + this.resetCache = true + } + _onSearch.apply(this, Array.prototype.slice.apply(arguments)) +} + +BootstrapTable.prototype.onSort = function (event) { + /* force a cache reset on sort */ + if (this.options.usePipeline) { + this.resetCache = true + } + _onSort.apply(this, Array.prototype.slice.apply(arguments)) +} + +BootstrapTable.prototype.onPageListChange = function (event) { + /* rebuild cache window on page size change */ + const target = $(event.currentTarget) + const newPageSize = parseInt(target.text()) + this.options.pipelineSize = this.calculatePipelineSize(this.options.pipelineSize, newPageSize) + this.resetCache = true + _onPageListChange.apply(this, Array.prototype.slice.apply(arguments)) +} + +BootstrapTable.prototype.calculatePipelineSize = (pipelineSize, pageSize) => { + /* calculate pipeline size by rounding up to the nearest value evenly divisible + * by the pageSize */ + if (pageSize === 0) return 0 + return Math.ceil(pipelineSize / pageSize) * pageSize +} + +BootstrapTable.prototype.setCacheWindows = function () { + /* set cache windows based on the total number of rows returned by server side + * request and the pipelineSize */ + this.cacheWindows = [] + const numWindows = this.options.totalRows / this.options.pipelineSize + for (let i = 0; i <= numWindows; i++) { + const b = i * this.options.pipelineSize + this.cacheWindows[i] = {'lower': b, 'upper': b + this.options.pipelineSize - 1} + } +} + +BootstrapTable.prototype.setCurrWindow = function (offset) { + /* set the current cache window index, based on where the current offset falls */ + this.currWindow = 0 + for (let i = 0; i < this.cacheWindows.length; i++) { + if (this.cacheWindows[i].lower <= offset && offset <= this.cacheWindows[i].upper) { + this.currWindow = i + break + } + } +} + +BootstrapTable.prototype.drawFromCache = function (offset, limit) { + /* draw rows from the cache using offset and limit */ + const res = $.extend(true, {}, this.cacheRequestJSON) + const drawStart = offset - this.cacheWindows[this.currWindow].lower + const drawEnd = drawStart + limit + res.rows = res.rows.slice(drawStart, drawEnd) + return res +} + +BootstrapTable.prototype.initServer = function (silent, query, url) { + /* determine if requested data is in cache (on paging) or if + * a new ajax request needs to be issued (sorting, searching, paging + * moving outside of cached data, page size change) + * initial version of this extension will entirely override base initServer + **/ + + let data = {} + const index = this.header.fields.indexOf(this.options.sortName) + + let params = { + searchText: this.searchText, + sortName: this.options.sortName, + sortOrder: this.options.sortOrder + } + + let request = null + + if (this.header.sortNames[index]) { + params.sortName = this.header.sortNames[index] + } + + if (this.options.pagination && this.options.sidePagination === 'server') { + params.pageSize = this.options.pageSize === this.options.formatAllRows() + ? this.options.totalRows : this.options.pageSize + params.pageNumber = this.options.pageNumber + } + + if (!(url || this.options.url) && !this.options.ajax) { + return + } + + let useAjax = true + if (this.options.queryParamsType === 'limit') { + params = { + searchText: params.searchText, + sortName: params.sortName, + sortOrder: params.sortOrder + } + if (this.options.pagination && this.options.sidePagination === 'server') { + params.limit = this.options.pageSize === this.options.formatAllRows() ? this.options.totalRows : this.options.pageSize + params.offset = (this.options.pageSize === this.options.formatAllRows() ? this.options.totalRows : this.options.pageSize) * (this.options.pageNumber - 1) + if (this.options.usePipeline) { + // if cacheWindows is empty, this is the initial request + if (!this.cacheWindows.length) { + useAjax = true + params.drawOffset = params.offset + // cache exists: determine if the page request is entirely within the current cached window + } else { + const w = this.cacheWindows[this.currWindow] + // case 1: reset cache but stay within current window (e.g. column sort) + // case 2: move outside of the current window (e.g. search or paging) + // since each cache window is aligned with the current page size + // checking if params.offset is outside the current window is sufficient. + // need to requery for preceding or succeeding cache window + // also handle case + if (this.resetCache || (params.offset < w.lower || params.offset > w.upper)) { + useAjax = true + this.setCurrWindow(params.offset) + // store the relative offset for drawing the page data afterwards + params.drawOffset = params.offset + // now set params.offset to the lower bound of the new cache window + // the server will return that whole cache window + params.offset = this.cacheWindows[this.currWindow].lower + // within current cache window + } else { + useAjax = false + } + } + } else { + if (params.limit === 0) { + delete params.limit + } + } + } + } + + // force an ajax call - this is on search, sort or page size change + if (this.resetCache) { + useAjax = true + this.resetCache = false + } + + if (this.options.usePipeline && useAjax) { + /* in this scenario limit is used on the server to get the cache window + * and drawLimit is used to get the page data afterwards */ + params.drawLimit = params.limit + params.limit = this.options.pipelineSize + } + + // cached results can be used + if (!useAjax) { + const res = this.drawFromCache(params.offset, params.limit) + this.load(res) + this.trigger('load-success', res) + this.trigger('cached-data-hit', res) + return + } + // cached results can't be used + // continue base initServer code + if (!($.isEmptyObject(this.filterColumnsPartial))) { + params.filter = JSON.stringify(this.filterColumnsPartial, null) + } + + data = Utils.calculateObjectValue(this.options, this.options.queryParams, [params], data) + + $.extend(data, query || {}) + + // false to stop request + if (data === false) { + return + } + + if (!silent) { + this.$tableLoading.show() + } + const self = this + + request = $.extend({}, Utils.calculateObjectValue(null, this.options.ajaxOptions), { + type: this.options.method, + url: url || this.options.url, + data: this.options.contentType === 'application/json' && this.options.method === 'post' + ? JSON.stringify(data) : data, + cache: this.options.cache, + contentType: this.options.contentType, + dataType: this.options.dataType, + success (res) { + res = Utils.calculateObjectValue(self.options, self.options.responseHandler, [res], res) + // cache results if using pipelining + if (self.options.usePipeline) { + // store entire request in cache + self.cacheRequestJSON = $.extend(true, {}, res) + // this gets set in load() also but needs to be set before + // setting cacheWindows + self.options.totalRows = res[self.options.totalField] + // if this is a search, potentially less results will be returned + // so cache windows need to be rebuilt. Otherwise it + // will come out the same + self.setCacheWindows() + self.setCurrWindow(params.drawOffset) + // just load data for the page + res = self.drawFromCache(params.drawOffset, params.drawLimit) + self.trigger('cached-data-reset', res) + } + self.load(res) + self.trigger('load-success', res) + if (!silent) self.$tableLoading.hide() + }, + error (res) { + let data = [] + if (self.options.sidePagination === 'server') { + data = {} + data[self.options.totalField] = 0 + data[self.options.dataField] = [] + } + self.load(data) + self.trigger('load-error', res.status, res) + if (!silent) self.$tableLoading.hide() + } + }) + + if (this.options.ajax) { + Utils.calculateObjectValue(this, this.options.ajax, [request], null) + } else { + if (this._xhr && this._xhr.readyState !== 4) { + this._xhr.abort() + } + this._xhr = $.ajax(request) + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/pipeline/extension.json b/assets/bootstrap/js/bootstrap-table/extensions/pipeline/extension.json new file mode 100644 index 0000000..de569c8 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/pipeline/extension.json @@ -0,0 +1,18 @@ +{ + "name": "Pipeline", + "version": "1.0.0", + "description": "Plugin to support a hybrid approach to server/client side paging.", + "url": "", + "example": "#", + + "plugins": [{ + "name": "bootstrap-table-pipeline", + "url": "" + }], + + "author": { + "name": "doug-the-guy", + "image": "" + } +} + diff --git a/assets/bootstrap/js/bootstrap-table/extensions/print/bootstrap-table-print.js b/assets/bootstrap/js/bootstrap-table/extensions/print/bootstrap-table-print.js new file mode 100644 index 0000000..65bb306 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/print/bootstrap-table-print.js @@ -0,0 +1,181 @@ +/** + * @update zhixin wen + */ + +const Utils = $.fn.bootstrapTable.utils + +function printPageBuilderDefault (table) { + return ` + + + + + + Print Table + +

    Printed on: ${new Date}

    +
    ${table}
    + + ` +} + +$.extend($.fn.bootstrapTable.defaults, { + showPrint: false, + printAsFilteredAndSortedOnUI: true, + printSortColumn: undefined, + printSortOrder: 'asc', + printPageBuilder (table) { + return printPageBuilderDefault(table) + } +}) + +$.extend($.fn.bootstrapTable.COLUMN_DEFAULTS, { + printFilter: undefined, + printIgnore: false, + printFormatter: undefined +}) + +$.extend($.fn.bootstrapTable.defaults.icons, { + print: { + bootstrap3: 'glyphicon-print icon-share' + }[$.fn.bootstrapTable.theme] || 'fa-print' +}) + +$.BootstrapTable = class extends $.BootstrapTable { + initToolbar (...args) { + this.showToolbar = this.showToolbar || this.options.showPrint + + super.initToolbar(...args) + + if (!this.options.showPrint) { + return + } + + const $btnGroup = this.$toolbar.find('>.columns') + let $print = $btnGroup.find('button.bs-print') + + if (!$print.length) { + $print = $(` + ` + ).appendTo($btnGroup) + } + + $print.off('click').on('click', () => { + this.doPrint(this.options.printAsFilteredAndSortedOnUI ? + this.getData() : this.options.data.slice(0)) + }) + } + + doPrint (data) { + const formatValue = (row, i, column ) => { + const value = Utils.calculateObjectValue(column, column.printFormatter, + [row[column.field], row, i], row[column.field]) + + return typeof value === 'undefined' || value === null + ? this.options.undefinedText : value + } + + const buildTable = (data, columnsArray) => { + const dir = this.$el.attr('dir') || 'ltr' + const html = [``] + + for (const columns of columnsArray) { + html.push('') + for (let h = 0; h < columns.length; h++) { + if (!columns[h].printIgnore) { + html.push( + ``) + } + } + html.push('') + } + + html.push('') + + for (let i = 0; i < data.length; i++) { + html.push('') + + for (const columns of columnsArray) { + for (let j = 0; j < columns.length; j++) { + if (!columns[j].printIgnore && columns[j].field) { + html.push('') + } + } + } + + html.push('') + } + html.push('
    ${columns[h].title}
    ', formatValue(data[i], i, columns[j]), '
    ') + return html.join('') + } + + const sortRows = (data, colName, sortOrder) => { + if (!colName) { + return data + } + let reverse = sortOrder !== 'asc' + reverse = -((+reverse) || -1) + return data.sort((a, b) => reverse * (a[colName].localeCompare(b[colName]))) + } + + const filterRow = (row, filters) => { + for (let index = 0; index < filters.length; ++index) { + if (row[filters[index].colName] !== filters[index].value) { + return false + } + } + return true + } + + const filterRows = (data, filters) => data.filter(row => filterRow(row,filters)) + + const getColumnFilters = columns => !columns || !columns[0] ? [] : columns[0].filter(col => col.printFilter).map(col => ({ + colName: col.field, + value: col.printFilter + })) + + data = filterRows(data,getColumnFilters(this.options.columns)) + data = sortRows(data, this.options.printSortColumn, this.options.printSortOrder) + const table = buildTable(data, this.options.columns) + const newWin = window.open('') + newWin.document.write(this.options.printPageBuilder.call(this, table)) + newWin.document.close() + newWin.focus() + newWin.print() + newWin.close() + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js b/assets/bootstrap/js/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js new file mode 100644 index 0000000..54ae6a0 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js @@ -0,0 +1,199 @@ +/** + * @author: Dennis Hernández + * @webSite: http://djhvscf.github.io/Blog + * @update: https://github.com/wenzhixin + * @version: v1.2.0 + */ + +$.akottr.dragtable.prototype._restoreState = function (persistObj) { + for (const [field, value] of Object.entries(persistObj)) { + var $th = this.originalTable.el.find(`th[data-field="${field}"]`) + this.originalTable.startIndex = $th.prevAll().length + 1 + this.originalTable.endIndex = parseInt(value, 10) + 1 + this._bubbleCols() + } +} + +// From MDN site, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter +const filterFn = () => { + if (!Array.prototype.filter) { + Array.prototype.filter = function (fun/* , thisArg*/) { + if (this === undefined || this === null) { + throw new TypeError() + } + + const t = Object(this) + const len = t.length >>> 0 + if (typeof fun !== 'function') { + throw new TypeError() + } + + const res = [] + const thisArg = arguments.length >= 2 ? arguments[1] : undefined + for (let i = 0; i < len; i++) { + if (i in t) { + const val = t[i] + + // NOTE: Technically this should Object.defineProperty at + // the next index, as push can be affected by + // properties on Object.prototype and Array.prototype. + // But this method's new, and collisions should be + // rare, so use the more-compatible alternative. + if (fun.call(thisArg, val, i, t)) { + res.push(val) + } + } + } + + return res + } + } +} + +$.extend($.fn.bootstrapTable.defaults, { + reorderableColumns: false, + maxMovingRows: 10, + onReorderColumn (headerFields) { + return false + }, + dragaccept: null +}) + +$.extend($.fn.bootstrapTable.Constructor.EVENTS, { + 'reorder-column.bs.table': 'onReorderColumn' +}) + +$.fn.bootstrapTable.methods.push('orderColumns') + +$.BootstrapTable = class extends $.BootstrapTable { + initHeader (...args) { + super.initHeader(...args) + + if (!this.options.reorderableColumns) { + return + } + + this.makeRowsReorderable() + } + + _toggleColumn (...args) { + super._toggleColumn(...args) + + if (!this.options.reorderableColumns) { + return + } + + this.makeRowsReorderable() + } + + toggleView (...args) { + super.toggleView(...args) + + if (!this.options.reorderableColumns) { + return + } + + if (this.options.cardView) { + return + } + + this.makeRowsReorderable() + } + + resetView (...args) { + super.resetView(...args) + + if (!this.options.reorderableColumns) { + return + } + + this.makeRowsReorderable() + } + + makeRowsReorderable (order = null) { + try { + $(this.$el).dragtable('destroy') + } catch (e) { + // do nothing + } + $(this.$el).dragtable({ + maxMovingRows: this.options.maxMovingRows, + dragaccept: this.options.dragaccept, + clickDelay: 200, + dragHandle: '.th-inner', + restoreState: order ? order : this.columnsSortOrder, + beforeStop: (table) => { + const sortOrder = {} + table.el.find('th').each((i, el) => { + sortOrder[$(el).data('field')] = i + }) + + this.columnsSortOrder = sortOrder + if (this.options.cookie) { + this.persistReorderColumnsState(this) + } + + const ths = [] + const formatters = [] + const columns = [] + let columnsHidden = [] + let columnIndex = -1 + const optionsColumns = [] + this.$header.find('th:not(.detail)').each(function (i) { + ths.push($(this).data('field')) + formatters.push($(this).data('formatter')) + }) + + // Exist columns not shown + if (ths.length < this.columns.length) { + columnsHidden = this.columns.filter(column => !column.visible) + for (var i = 0; i < columnsHidden.length; i++) { + ths.push(columnsHidden[i].field) + formatters.push(columnsHidden[i].formatter) + } + } + + for (let i = 0; i < ths.length; i++) { + columnIndex = this.fieldsColumnsIndex[ths[i]] + if (columnIndex !== -1) { + this.fieldsColumnsIndex[ths[i]] = i + this.columns[columnIndex].fieldIndex = i + columns.push(this.columns[columnIndex]) + } + } + + this.columns = columns + + filterFn() // Support { + let found = false + const field = column.field + this.options.columns[0].filter(item => { + if (!found && item['field'] === field) { + optionsColumns.push(item) + found = true + return false + } + return true + }) + }) + + this.options.columns[0] = optionsColumns + + this.header.fields = ths + this.header.formatters = formatters + this.initHeader() + this.initToolbar() + this.initSearchText() + this.initBody() + this.resetView() + this.trigger('reorder-column', ths) + } + }) + } + + orderColumns (order) { + this.columnsSortOrder = order + this.makeRowsReorderable() + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/reorder-columns/extension.json b/assets/bootstrap/js/bootstrap-table/extensions/reorder-columns/extension.json new file mode 100644 index 0000000..a3cc778 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/reorder-columns/extension.json @@ -0,0 +1,17 @@ +{ + "name": "Reorder Columns", + "version": "1.1.0", + "description": "Plugin to support the reordering columns feature.", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/reorder-columns", + "example": "http://issues.wenzhixin.net.cn/bootstrap-table/#extensions/reorder-columns.html", + + "plugins": [{ + "name": "bootstrap-table-reorder-columns", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/reorder-columns" + }], + + "author": { + "name": "djhvscf", + "image": "https://avatars1.githubusercontent.com/u/4496763" + } +} \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js b/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js new file mode 100644 index 0000000..82d48ef --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js @@ -0,0 +1,95 @@ +/** + * @author: Dennis Hernández + * @webSite: http://djhvscf.github.io/Blog + * @update zhixin wen + */ + +const rowAttr = (row, index) => ({ + id: `customId_${index}` +}) + +$.extend($.fn.bootstrapTable.defaults, { + reorderableRows: false, + onDragStyle: null, + onDropStyle: null, + onDragClass: 'reorder_rows_onDragClass', + dragHandle: '>tbody>tr>td', + useRowAttrFunc: false, + onReorderRowsDrag (row) { + return false + }, + onReorderRowsDrop (row) { + return false + }, + onReorderRow (newData) { + return false + } +}) + +$.extend($.fn.bootstrapTable.Constructor.EVENTS, { + 'reorder-row.bs.table': 'onReorderRow' +}) + +$.BootstrapTable = class extends $.BootstrapTable { + init (...args) { + if (!this.options.reorderableRows) { + super.init(...args) + return + } + + if (this.options.useRowAttrFunc) { + this.options.rowAttributes = rowAttr + } + + const onPostBody = this.options.onPostBody + this.options.onPostBody = () => { + setTimeout(() => { + this.makeRowsReorderable() + onPostBody.call(this.options, this.options.data) + }, 1) + } + + super.init(...args) + } + + makeRowsReorderable () { + this.$el.tableDnD({ + onDragStyle: this.options.onDragStyle, + onDropStyle: this.options.onDropStyle, + onDragClass: this.options.onDragClass, + onDragStart: (table, droppedRow) => this.onDropStart(table, droppedRow), + onDrop: (table, droppedRow) => this.onDrop(table, droppedRow), + dragHandle: this.options.dragHandle + }) + } + + onDropStart (table, draggingTd) { + this.$draggingTd = $(draggingTd).css('cursor', 'move') + this.draggingIndex = $(this.$draggingTd.parent()).data('index') + // Call the user defined function + this.options.onReorderRowsDrag(this.data[this.draggingIndex]) + } + + onDrop (table) { + this.$draggingTd.css('cursor', '') + const newData = [] + for (let i = 0; i < table.tBodies[0].rows.length; i++) { + const $tr = $(table.tBodies[0].rows[i]) + newData.push(this.data[$tr.data('index')]) + $tr.data('index', i) + } + + const draggingRow = this.data[this.draggingIndex] + const droppedIndex = newData.indexOf(this.data[this.draggingIndex]) + const droppedRow = this.data[droppedIndex] + const index = this.options.data.indexOf(this.data[droppedIndex]) + this.options.data.splice(this.options.data.indexOf(draggingRow), 1) + this.options.data.splice(index, 0, draggingRow) + + // Call the user defined function + this.options.onReorderRowsDrop(droppedRow) + + // Call the event reorder-row + this.trigger('reorder-row', newData) + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.scss b/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.scss new file mode 100644 index 0000000..9aeaa38 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.scss @@ -0,0 +1,14 @@ +.reorder_rows_onDragClass td { + background-color: #eee; + -webkit-box-shadow: 11px 5px 12px 2px #333, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset; + -webkit-box-shadow: 6px 3px 5px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset; + -moz-box-shadow: 6px 4px 5px 1px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset; + -box-shadow: 6px 4px 5px 1px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset; +} + +.reorder_rows_onDragClass td:last-child { + -webkit-box-shadow: 8px 7px 12px 0 #333, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset; + -webkit-box-shadow: 1px 8px 6px -4px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset; + -moz-box-shadow: 0 9px 4px -4px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset, -1px 0 0 #ccc inset; + -box-shadow: 0 9px 4px -4px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset, -1px 0 0 #ccc inset; +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/extension.json b/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/extension.json new file mode 100644 index 0000000..69b978f --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/reorder-rows/extension.json @@ -0,0 +1,17 @@ +{ + "name": "Reorder Rows", + "version": "1.0.0", + "description": "Plugin to support the reordering rows feature.", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/reorder-rows", + "example": "http://issues.wenzhixin.net.cn/bootstrap-table/#extensions/reorder-rows.html", + + "plugins": [{ + "name": "bootstrap-table-reorder-rows", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/reorder-rows" + }], + + "author": { + "name": "djhvscf", + "image": "https://avatars1.githubusercontent.com/u/4496763" + } +} \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js b/assets/bootstrap/js/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js new file mode 100644 index 0000000..4ca48a9 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js @@ -0,0 +1,68 @@ +/** + * @author: Dennis Hernández + * @webSite: http://djhvscf.github.io/Blog + * @version: v2.0.0 + */ + +const isInit = that => that.$el.data('resizableColumns') !== undefined + +const initResizable = that => { + if (that.options.resizable && !that.options.cardView && !isInit(that)) { + that.$el.resizableColumns({ + store: window.store + }) + } +} + +const destroy = that => { + if (isInit(that)) { + that.$el.data('resizableColumns').destroy() + } +} + +const reInitResizable = that => { + destroy(that) + initResizable(that) +} + +$.extend($.fn.bootstrapTable.defaults, { + resizable: false +}) + +const BootstrapTable = $.fn.bootstrapTable.Constructor +const _initBody = BootstrapTable.prototype.initBody +const _toggleView = BootstrapTable.prototype.toggleView +const _resetView = BootstrapTable.prototype.resetView + +BootstrapTable.prototype.initBody = function (...args) { + const that = this + _initBody.apply(this, Array.prototype.slice.apply(args)) + + that.$el + .off('column-switch.bs.table page-change.bs.table') + .on('column-switch.bs.table page-change.bs.table', () => { + reInitResizable(that) + }) +} + +BootstrapTable.prototype.toggleView = function (...args) { + _toggleView.apply(this, Array.prototype.slice.apply(args)) + + if (this.options.resizable && this.options.cardView) { + // Destroy the plugin + destroy(this) + } +} + +BootstrapTable.prototype.resetView = function (...args) { + const that = this + + _resetView.apply(this, Array.prototype.slice.apply(args)) + + if (this.options.resizable) { + // because in fitHeader function, we use setTimeout(func, 100); + setTimeout(() => { + initResizable(that) + }, 100) + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/resizable/extension.json b/assets/bootstrap/js/bootstrap-table/extensions/resizable/extension.json new file mode 100644 index 0000000..f428c12 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/resizable/extension.json @@ -0,0 +1,17 @@ +{ + "name": "Resizable", + "version": "1.1.0", + "description": "Plugin to support the resizable feature.", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/resizable", + "example": "http://issues.wenzhixin.net.cn/bootstrap-table/#extensions/resizable.html", + + "plugins": [{ + "name": "bootstrap-table-resizable", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/resizable" + }], + + "author": { + "name": "djhvscf", + "image": "https://avatars1.githubusercontent.com/u/4496763" + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.js b/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.js new file mode 100644 index 0000000..16d0a39 --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.js @@ -0,0 +1,119 @@ +/** + * @author vincent loh + * @update J Manuel Corona + * @update zhixin wen + */ + +const Utils = $.fn.bootstrapTable.utils + +$.extend($.fn.bootstrapTable.defaults, { + stickyHeader: false, + stickyHeaderOffsetY: 0, + stickyHeaderOffsetLeft: 0, + stickyHeaderOffsetRight: 0 +}) + +$.BootstrapTable = class extends $.BootstrapTable { + initHeader (...args) { + super.initHeader(...args) + + if (!this.options.stickyHeader) { + return + } + + this.$tableBody.find('.sticky-header-container,.sticky_anchor_begin,.sticky_anchor_end').remove() + + this.$el.before('
    ') + this.$el.before('
    ') + this.$el.after('
    ') + this.$header.addClass('sticky-header') + + // clone header just once, to be used as sticky header + // deep clone header, using source header affects tbody>td width + this.$stickyContainer = this.$tableBody.find('.sticky-header-container') + this.$stickyBegin = this.$tableBody.find('.sticky_anchor_begin') + this.$stickyEnd = this.$tableBody.find('.sticky_anchor_end') + this.$stickyHeader = this.$header.clone(true, true) + + // render sticky on window scroll or resize + $(window).off('resize.sticky-header-table') + .on('resize.sticky-header-table', () => this.renderStickyHeader()) + $(window).off('scroll.sticky-header-table') + .on('scroll.sticky-header-table', () => this.renderStickyHeader()) + this.$tableBody.off('scroll').on('scroll', () => this.matchPositionX()) + } + + onColumnSearch ({currentTarget, keyCode}) { + super.onColumnSearch({currentTarget, keyCode}) + this.renderStickyHeader() + } + + resetView (...args) { + super.resetView(...args) + + $('.bootstrap-table.fullscreen').off('scroll') + .on('scroll', () => this.renderStickyHeader()) + } + + renderStickyHeader () { + const that = this + this.$stickyHeader = this.$header.clone(true, true) + + if (this.options.filterControl) { + $(this.$stickyHeader).off('keyup change mouseup').on('keyup change mouse', function (e) { + const $target = $(e.target) + const value = $target.val() + const field = $target.parents('th').data('field') + const $coreTh = that.$header.find('th[data-field="' + field + '"]') + + if ($target.is('input')) { + $coreTh.find('input').val(value) + } else if ($target.is('select')) { + const $select = $coreTh.find('select') + $select.find('option[selected]').removeAttr('selected') + $select.find('option[value="' + value + '"]').attr('selected', true) + } + + that.triggerSearch() + }) + } + + const top = $(window).scrollTop() + // top anchor scroll position, minus header height + const start = this.$stickyBegin.offset().top - this.options.stickyHeaderOffsetY + // bottom anchor scroll position, minus header height, minus sticky height + const end = this.$stickyEnd.offset().top - this.options.stickyHeaderOffsetY - this.$header.height() + // show sticky when top anchor touches header, and when bottom anchor not exceeded + if (top > start && top <= end) { + // ensure clone and source column widths are the same + this.$stickyHeader.find('tr:eq(0)').find('th').each((index, el) => { + $(el).css('min-width', this.$header.find('tr:eq(0)').find('th').eq(index).css('width')) + }) + // match bootstrap table style + this.$stickyContainer.show().addClass('fix-sticky fixed-table-container') + // stick it in position + let stickyHeaderOffsetLeft = this.options.stickyHeaderOffsetLeft + let stickyHeaderOffsetRight = this.options.stickyHeaderOffsetRight + if (this.$el.closest('.bootstrap-table').hasClass('fullscreen')) { + stickyHeaderOffsetLeft = 0 + stickyHeaderOffsetRight = 0 + } + this.$stickyContainer.css('top', `${this.options.stickyHeaderOffsetY}`) + this.$stickyContainer.css('left', `${stickyHeaderOffsetLeft}`) + this.$stickyContainer.css('right', `${stickyHeaderOffsetRight}`) + // create scrollable container for header + this.$stickyTable = $('') + this.$stickyTable.addClass(this.options.classes) + // append cloned header to dom + this.$stickyContainer.html(this.$stickyTable.append(this.$stickyHeader)) + // match clone and source header positions when left-right scroll + this.matchPositionX() + } else { + this.$stickyContainer.removeClass('fix-sticky').hide() + } + } + + matchPositionX () { + this.$stickyContainer.scrollLeft(this.$tableBody.scrollLeft()) + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.scss b/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.scss new file mode 100644 index 0000000..b6ae5fd --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.scss @@ -0,0 +1,22 @@ +/** + * @author vincent loh + * @update zhixin wen + */ + +.fix-sticky { + position: fixed !important; + overflow: hidden; + z-index: 100; +} + +.fix-sticky table thead { + background: #fff; +} + +.fix-sticky table thead.thead-light { + background: #e9ecef; +} + +.fix-sticky table thead.thead-dark { + background: #212529; +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/extension.json b/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/extension.json new file mode 100644 index 0000000..70ae30f --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/sticky-header/extension.json @@ -0,0 +1,17 @@ +{ + "name": "Sticky Header", + "version": "1.0.0", + "description": "An extension which provides a sticky header for table columns when scrolling on a long page and / or table. Works for tables with many columns and narrow width with horizontal scrollbars too.", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/sticky-header", + "example": "http://issues.wenzhixin.net.cn/bootstrap-table/#extensions/sticky-header.html", + + "plugins": [{ + "name": "bootstrap-table-sticky-header", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/sticky-header" + }], + + "author": { + "name": "vinzloh", + "image": "https://avatars0.githubusercontent.com/u/5501845" + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js b/assets/bootstrap/js/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js new file mode 100644 index 0000000..c661e2d --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js @@ -0,0 +1,360 @@ +/** + * @author: aperez + * @version: v2.0.0 + * + * @update Dennis Hernández + * @update zhixin wen + */ + +const Utils = $.fn.bootstrapTable.utils + +const bootstrap = { + bootstrap3: { + icons: { + advancedSearchIcon: 'glyphicon-chevron-down' + }, + html: { + modal: ` + + ` + } + }, + bootstrap4: { + icons: { + advancedSearchIcon: 'fa-chevron-down' + }, + html: { + modal: ` + + ` + } + }, + bulma: { + icons: { + advancedSearchIcon: 'fa-chevron-down' + }, + html: { + modal: ` + + ` + } + }, + foundation: { + icons: { + advancedSearchIcon: 'fa-chevron-down' + }, + html: { + modal: ` +
    +

    %s

    +
    + +
    + + + +
    + ` + } + }, + materialize: { + icons: { + advancedSearchIcon: 'expand_more' + }, + html: { + modal: ` + + ` + } + }, + semantic: { + icons: { + advancedSearchIcon: 'fa-chevron-down' + }, + html: { + modal: ` + + ` + } + } +}[$.fn.bootstrapTable.theme] + +$.extend($.fn.bootstrapTable.defaults, { + advancedSearch: false, + idForm: 'advancedSearch', + actionForm: '', + idTable: undefined, + onColumnAdvancedSearch (field, text) { + return false + } +}) + +$.extend($.fn.bootstrapTable.defaults.icons, { + advancedSearchIcon: bootstrap.icons.advancedSearchIcon +}) + +$.extend($.fn.bootstrapTable.Constructor.EVENTS, { + 'column-advanced-search.bs.table': 'onColumnAdvancedSearch' +}) + +$.extend($.fn.bootstrapTable.locales, { + formatAdvancedSearch () { + return 'Advanced search' + }, + formatAdvancedCloseButton () { + return 'Close' + } +}) + +$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales) + +$.BootstrapTable = class extends $.BootstrapTable { + initToolbar () { + const o = this.options + + this.showToolbar = this.showToolbar || + (o.search && + o.advancedSearch && + o.idTable) + + super.initToolbar() + + if (!o.search || !o.advancedSearch || !o.idTable) { + return + } + + this.$toolbar.find('>.columns').append(` + + `) + + this.$toolbar.find('button[name="advancedSearch"]').off('click').on('click', () => this.showAvdSearch()) + } + + showAvdSearch () { + const o = this.options + const modalSelector = '#avdSearchModal_' + o.idTable + if ($(modalSelector).length <= 0) { + $('body').append(Utils.sprintf(bootstrap.html.modal, o.idTable, o.formatAdvancedSearch(), o.idTable, o.idTable, o.buttonsClass, o.formatAdvancedCloseButton())) + + let timeoutId = 0 + + $(`#avdSearchModalContent_${o.idTable}`).append(this.createFormAvd().join('')) + + $(`#${o.idForm}`).off('keyup blur', 'input').on('keyup blur', 'input', e => { + if (o.sidePagination === 'server') { + this.onColumnAdvancedSearch(e) + } else { + clearTimeout(timeoutId) + timeoutId = setTimeout(() => { + this.onColumnAdvancedSearch(e) + }, o.searchTimeOut) + } + }) + + $(`#btnCloseAvd_${o.idTable}`).click(() => this.hideModal()) + + if ($.fn.bootstrapTable.theme === 'bulma') { + $(modalSelector).find('.delete').off('click').on('click', () => this.hideModal()) + } + + this.showModal() + } else { + this.showModal() + } + } + + showModal () { + const modalSelector = '#avdSearchModal_' + this.options.idTable + if ($.inArray($.fn.bootstrapTable.theme, ['bootstrap3', 'bootstrap4']) !== -1) { + $(modalSelector).modal() + } else if ($.fn.bootstrapTable.theme === 'bulma') { + $(modalSelector).toggleClass('is-active') + } else if ($.fn.bootstrapTable.theme === 'foundation') { + if (!this.toolbarModal) { + // eslint-disable-next-line no-undef + this.toolbarModal = new Foundation.Reveal($(modalSelector)) + } + this.toolbarModal.open() + } else if ($.fn.bootstrapTable.theme === 'materialize') { + $(modalSelector).modal() + $(modalSelector).modal('open') + } else if ($.fn.bootstrapTable.theme === 'semantic') { + $(modalSelector).modal('show') + } + + } + + hideModal () { + const $closeModalButton = $(`#avdSearchModal_${this.options.idTable}`) + const modalSelector = '#avdSearchModal_' + this.options.idTable + if ($.inArray($.fn.bootstrapTable.theme, ['bootstrap3', 'bootstrap4']) !== -1) { + $closeModalButton.modal('hide') + } else if ($.fn.bootstrapTable.theme === 'bulma') { + $('html').toggleClass('is-clipped') + $(modalSelector).toggleClass('is-active') + } else if ($.fn.bootstrapTable.theme === 'foundation') { + this.toolbarModal.close() + } else if ($.fn.bootstrapTable.theme === 'materialize') { + $(modalSelector).modal('open') + } else if ($.fn.bootstrapTable.theme === 'semantic') { + $(modalSelector).modal('close') + } + + if (this.options.sidePagination === 'server') { + this.options.pageNumber = 1 + this.updatePagination() + this.trigger('column-advanced-search', this.filterColumnsPartial) + } + } + + + createFormAvd () { + const o = this.options + const html = [`
    `] + + for (const column of this.columns) { + if (!column.checkbox && column.visible && column.searchable) { + html.push(` +
    + +
    + +
    +
    + `) + } + } + + html.push('') + + return html + } + + initSearch () { + super.initSearch() + + if (!this.options.advancedSearch || this.options.sidePagination === 'server') { + return + } + + const fp = $.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial + + this.data = fp ? this.data.filter((item, i) => { + for (const [key, v] of Object.entries(fp)) { + const fval = v.toLowerCase() + let value = item[key] + const index = this.header.fields.indexOf(key) + value = Utils.calculateObjectValue(this.header, + this.header.formatters[index], [value, item, i], value) + + if ( + !(index !== -1 && + (typeof value === 'string' || typeof value === 'number') && + (`${value}`).toLowerCase().includes(fval)) + ) { + return false + } + } + return true + }) : this.data + } + + onColumnAdvancedSearch (e) { + const text = $.trim($(e.currentTarget).val()) + const $field = $(e.currentTarget)[0].id + + if ($.isEmptyObject(this.filterColumnsPartial)) { + this.filterColumnsPartial = {} + } + if (text) { + this.filterColumnsPartial[$field] = text + } else { + delete this.filterColumnsPartial[$field] + } + + if (this.options.sidePagination !== 'server') { + this.options.pageNumber = 1 + this.onSearch(e) + this.updatePagination() + this.trigger('column-advanced-search', $field, text) + } + } +} diff --git a/assets/bootstrap/js/bootstrap-table/extensions/toolbar/extension.json b/assets/bootstrap/js/bootstrap-table/extensions/toolbar/extension.json new file mode 100644 index 0000000..f33ae2c --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/toolbar/extension.json @@ -0,0 +1,17 @@ +{ + "name": "Toolbar", + "version": "2.0.0", + "description": "Plugin to support the advanced search.", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/toolbar", + "example": "http://issues.wenzhixin.net.cn/bootstrap-table/#extensions/toolbar.html", + + "plugins": [{ + "name": "bootstrap-table-toolbar", + "url": "https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/toolbar" + }], + + "author": { + "name": "djhvscf", + "image": "https://avatars1.githubusercontent.com/u/4496763" + } +} \ No newline at end of file diff --git a/assets/bootstrap/js/bootstrap-table/extensions/treegrid/bootstrap-table-treegrid.min.js b/assets/bootstrap/js/bootstrap-table/extensions/treegrid/bootstrap-table-treegrid.min.js new file mode 100644 index 0000000..29dfd4a --- /dev/null +++ b/assets/bootstrap/js/bootstrap-table/extensions/treegrid/bootstrap-table-treegrid.min.js @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.16.0 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e((t=t||self).jQuery)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(t,e){return t(e={exports:{}},e.exports),e.exports}var n=function(t){return t&&t.Math==Math&&t},o=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||Function("return this")(),i=function(t){try{return!!t()}catch(t){return!0}},u=!i((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})),c={}.propertyIsEnumerable,a=Object.getOwnPropertyDescriptor,f={f:a&&!c.call({1:2},1)?function(t){var e=a(this,t);return!!e&&e.enumerable}:c},l=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},s={}.toString,p=function(t){return s.call(t).slice(8,-1)},y="".split,d=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==p(t)?y.call(t,""):Object(t)}:Object,v=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},h=function(t){return d(v(t))},g=function(t){return"object"==typeof t?null!==t:"function"==typeof t},b=function(t,e){if(!g(t))return t;var r,n;if(e&&"function"==typeof(r=t.toString)&&!g(n=r.call(t)))return n;if("function"==typeof(r=t.valueOf)&&!g(n=r.call(t)))return n;if(!e&&"function"==typeof(r=t.toString)&&!g(n=r.call(t)))return n;throw TypeError("Can't convert object to primitive value")},S={}.hasOwnProperty,m=function(t,e){return S.call(t,e)},w=o.document,O=g(w)&&g(w.createElement),j=function(t){return O?w.createElement(t):{}},T=!u&&!i((function(){return 7!=Object.defineProperty(j("div"),"a",{get:function(){return 7}}).a})),P=Object.getOwnPropertyDescriptor,_={f:u?P:function(t,e){if(t=h(t),e=b(e,!0),T)try{return P(t,e)}catch(t){}if(m(t,e))return l(!f.f.call(t,e),t[e])}},A=function(t){if(!g(t))throw TypeError(String(t)+" is not an object");return t},E=Object.defineProperty,I={f:u?E:function(t,e,r){if(A(t),e=b(e,!0),A(r),T)try{return E(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},L=u?function(t,e,r){return I.f(t,e,l(1,r))}:function(t,e,r){return t[e]=r,t},x=function(t,e){try{L(o,t,e)}catch(r){o[t]=e}return e},F=o["__core-js_shared__"]||x("__core-js_shared__",{}),k=Function.toString;"function"!=typeof F.inspectSource&&(F.inspectSource=function(t){return k.call(t)});var M,R,C,N=F.inspectSource,G=o.WeakMap,D="function"==typeof G&&/native code/.test(N(G)),B=r((function(t){(t.exports=function(t,e){return F[t]||(F[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.0",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})),V=0,H=Math.random(),q=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++V+H).toString(36)},z=B("keys"),W=function(t){return z[t]||(z[t]=q(t))},U={},Y=o.WeakMap;if(D){var J=new Y,Q=J.get,$=J.has,K=J.set;M=function(t,e){return K.call(J,t,e),e},R=function(t){return Q.call(J,t)||{}},C=function(t){return $.call(J,t)}}else{var X=W("state");U[X]=!0,M=function(t,e){return L(t,X,e),e},R=function(t){return m(t,X)?t[X]:{}},C=function(t){return m(t,X)}}var Z,tt={set:M,get:R,has:C,enforce:function(t){return C(t)?R(t):M(t,{})},getterFor:function(t){return function(e){var r;if(!g(e)||(r=R(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}},et=r((function(t){var e=tt.get,r=tt.enforce,n=String(String).split("String");(t.exports=function(t,e,i,u){var c=!!u&&!!u.unsafe,a=!!u&&!!u.enumerable,f=!!u&&!!u.noTargetGet;"function"==typeof i&&("string"!=typeof e||m(i,"name")||L(i,"name",e),r(i).source=n.join("string"==typeof e?e:"")),t!==o?(c?!f&&t[e]&&(a=!0):delete t[e],a?t[e]=i:L(t,e,i)):a?t[e]=i:x(e,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&e(this).source||N(this)}))})),rt=o,nt=function(t){return"function"==typeof t?t:void 0},ot=function(t,e){return arguments.length<2?nt(rt[t])||nt(o[t]):rt[t]&&rt[t][e]||o[t]&&o[t][e]},it=Math.ceil,ut=Math.floor,ct=function(t){return isNaN(t=+t)?0:(t>0?ut:it)(t)},at=Math.min,ft=function(t){return t>0?at(ct(t),9007199254740991):0},lt=Math.max,st=Math.min,pt=function(t){return function(e,r,n){var o,i=h(e),u=ft(i.length),c=function(t,e){var r=ct(t);return r<0?lt(r+e,0):st(r,e)}(n,u);if(t&&r!=r){for(;u>c;)if((o=i[c++])!=o)return!0}else for(;u>c;c++)if((t||c in i)&&i[c]===r)return t||c||0;return!t&&-1}},yt={includes:pt(!0),indexOf:pt(!1)}.indexOf,dt=function(t,e){var r,n=h(t),o=0,i=[];for(r in n)!m(U,r)&&m(n,r)&&i.push(r);for(;e.length>o;)m(n,r=e[o++])&&(~yt(i,r)||i.push(r));return i},vt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],ht=vt.concat("length","prototype"),gt={f:Object.getOwnPropertyNames||function(t){return dt(t,ht)}},bt={f:Object.getOwnPropertySymbols},St=ot("Reflect","ownKeys")||function(t){var e=gt.f(A(t)),r=bt.f;return r?e.concat(r(t)):e},mt=function(t,e){for(var r=St(e),n=I.f,o=_.f,i=0;ii;)I.f(t,r=n[i++],e[r]);return t},Ct=ot("document","documentElement"),Nt=W("IE_PROTO"),Gt=function(){},Dt=function(t){return" + + + + + + + + + + + + + diff --git a/assets/templates/tool/tool_cache.html b/assets/templates/tool/tool_cache.html new file mode 100644 index 0000000..b3fa582 --- /dev/null +++ b/assets/templates/tool/tool_cache.html @@ -0,0 +1,185 @@ + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    查询缓存
    +
    +
    + + +
    +
    +
    +
    + KEY +
    + +
    + + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    执行结果
    +
    +
    +
    
    +                    

    + +
    +
    +
    +
    +
    + + + + + + + + diff --git a/assets/templates/tool/tool_data.html b/assets/templates/tool/tool_data.html new file mode 100644 index 0000000..dbbb52d --- /dev/null +++ b/assets/templates/tool/tool_data.html @@ -0,0 +1,292 @@ + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    查询数据
    +
      +
    • +
    +
    +
    + + +
    +
    +
    +
    + 数据库 +
    + + +
    + +
    + 数据表 +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + 仅支持查询语句,最多支持查询 100 条数据。 +
    + +
    + + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + diff --git a/cmd/mfmt/main.go b/cmd/mfmt/main.go index e5ec5fd..309eadd 100644 --- a/cmd/mfmt/main.go +++ b/cmd/mfmt/main.go @@ -15,7 +15,8 @@ import ( "path/filepath" "strings" - "github.com/koketama/errors" + "github.com/xinliangnote/go-gin-api/pkg/errors" + "go.uber.org/zap" "golang.org/x/tools/go/packages" ) diff --git a/docs/docs.go b/docs/docs.go index 1880ec6..b6d28de 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -177,9 +177,9 @@ var doc = `{ }, "/api/admin/login": { "post": { - "description": "管理员登出", + "description": "管理员登录", "consumes": [ - "application/json" + "multipart/form-data" ], "produces": [ "application/json" @@ -187,12 +187,28 @@ var doc = `{ "tags": [ "API.admin" ], - "summary": "管理员登出", + "summary": "管理员登录", + "parameters": [ + { + "type": "string", + "description": "用户名", + "name": "username", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "密码", + "name": "password", + "in": "formData", + "required": true + } + ], "responses": { "200": { "description": "OK", "schema": { - "$ref": "#/definitions/admin_handler.logoutResponse" + "$ref": "#/definitions/admin_handler.loginResponse" } }, "400": { @@ -761,6 +777,387 @@ var doc = `{ } } }, + "/api/menu": { + "get": { + "description": "菜单列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "菜单列表", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.listResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + }, + "post": { + "description": "创建/编辑菜单", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "创建/编辑菜单", + "parameters": [ + { + "description": "请求信息", + "name": "Request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/menu_handler.createRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.createResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/menu/used": { + "patch": { + "description": "更新菜单为启用/禁用", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "更新菜单为启用/禁用", + "parameters": [ + { + "type": "string", + "description": "Hashid", + "name": "id", + "in": "formData", + "required": true + }, + { + "type": "integer", + "description": "是否启用 1:是 -1:否", + "name": "used", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.updateUsedResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/menu/{id}": { + "get": { + "description": "菜单详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "菜单详情", + "parameters": [ + { + "type": "string", + "description": "hashId", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.detailResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + }, + "delete": { + "description": "删除菜单", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "删除菜单", + "parameters": [ + { + "type": "string", + "description": "hashId", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.deleteResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/cache/clear": { + "patch": { + "description": "清空缓存", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "清空缓存", + "parameters": [ + { + "type": "string", + "description": "Redis Key", + "name": "redis_key", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.searchCacheResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/cache/search": { + "post": { + "description": "查询缓存", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "查询缓存", + "parameters": [ + { + "type": "string", + "description": "Redis Key", + "name": "redis_key", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.searchCacheResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/data/dbs": { + "get": { + "description": "查询 DB", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "查询 DB", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.dbsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/data/mysql": { + "post": { + "description": "执行 SQL 语句", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "执行 SQL 语句", + "parameters": [ + { + "type": "string", + "description": "数据库名称", + "name": "db_name", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "数据表名称", + "name": "table_name", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "SQL 语句", + "name": "sql", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.searchMySQLResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/data/tables": { + "post": { + "description": "查询 Table", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "查询 Table", + "parameters": [ + { + "type": "string", + "description": "数据库名称", + "name": "db_name", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.tablesResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, "/api/tool/hashids/decode/{id}": { "get": { "description": "HashIds 解密", @@ -1171,6 +1568,148 @@ var doc = `{ } } }, + "menu_handler.createRequest": { + "type": "object", + "properties": { + "icon": { + "description": "图标", + "type": "string" + }, + "id": { + "description": "ID", + "type": "string" + }, + "level": { + "description": "菜单类型 1:一级菜单 2:二级菜单", + "type": "integer" + }, + "link": { + "description": "链接地址", + "type": "string" + }, + "name": { + "description": "菜单名称", + "type": "string" + }, + "pid": { + "description": "父类ID", + "type": "integer" + } + } + }, + "menu_handler.createResponse": { + "type": "object", + "properties": { + "id": { + "description": "主键ID", + "type": "integer" + } + } + }, + "menu_handler.deleteResponse": { + "type": "object", + "properties": { + "id": { + "description": "主键ID", + "type": "integer" + } + } + }, + "menu_handler.detailResponse": { + "type": "object", + "properties": { + "icon": { + "description": "图标", + "type": "string" + }, + "id": { + "description": "主键ID", + "type": "integer" + }, + "link": { + "description": "链接地址", + "type": "string" + }, + "name": { + "description": "菜单名称", + "type": "string" + } + } + }, + "menu_handler.listData": { + "type": "object", + "properties": { + "hashid": { + "description": "hashid", + "type": "string" + }, + "icon": { + "description": "图标", + "type": "string" + }, + "id": { + "description": "ID", + "type": "integer" + }, + "is_used": { + "description": "是否启用 1=启用 -1=禁用", + "type": "integer" + }, + "link": { + "description": "链接地址", + "type": "string" + }, + "name": { + "description": "菜单名称", + "type": "string" + }, + "pid": { + "description": "父类ID", + "type": "integer" + } + } + }, + "menu_handler.listResponse": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/menu_handler.listData" + } + } + } + }, + "menu_handler.updateUsedResponse": { + "type": "object", + "properties": { + "id": { + "description": "主键ID", + "type": "integer" + } + } + }, + "tool_handler.dbData": { + "type": "object", + "properties": { + "db_name": { + "description": "数据库名称", + "type": "string" + } + } + }, + "tool_handler.dbsResponse": { + "type": "object", + "properties": { + "list": { + "description": "数据库列表", + "type": "array", + "items": { + "$ref": "#/definitions/tool_handler.dbData" + } + } + } + }, "tool_handler.hashIdsDecodeResponse": { "type": "object", "properties": { @@ -1188,6 +1727,84 @@ var doc = `{ "type": "string" } } + }, + "tool_handler.searchCacheResponse": { + "type": "object", + "properties": { + "ttl": { + "description": "过期时间", + "type": "string" + }, + "val": { + "description": "查询后的值", + "type": "string" + } + } + }, + "tool_handler.searchMySQLResponse": { + "type": "object", + "properties": { + "cols": { + "description": "查询后的行", + "type": "array", + "items": { + "type": "string" + } + }, + "cols_info": { + "description": "行信息", + "type": "array", + "items": { + "$ref": "#/definitions/tool_handler.tableColumn" + } + }, + "list": { + "description": "查询后的数据", + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + } + } + }, + "tool_handler.tableColumn": { + "type": "object", + "properties": { + "column_comment": { + "description": "字段注释", + "type": "string" + }, + "column_name": { + "description": "字段名称", + "type": "string" + } + } + }, + "tool_handler.tableData": { + "type": "object", + "properties": { + "table_comment": { + "description": "数据表备注", + "type": "string" + }, + "table_name": { + "description": "数据表名称", + "type": "string" + } + } + }, + "tool_handler.tablesResponse": { + "type": "object", + "properties": { + "list": { + "description": "数据表列表", + "type": "array", + "items": { + "$ref": "#/definitions/tool_handler.tableData" + } + } + } } } }` diff --git a/docs/swagger.json b/docs/swagger.json index 995d7b0..809a9b1 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -160,9 +160,9 @@ }, "/api/admin/login": { "post": { - "description": "管理员登出", + "description": "管理员登录", "consumes": [ - "application/json" + "multipart/form-data" ], "produces": [ "application/json" @@ -170,12 +170,28 @@ "tags": [ "API.admin" ], - "summary": "管理员登出", + "summary": "管理员登录", + "parameters": [ + { + "type": "string", + "description": "用户名", + "name": "username", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "密码", + "name": "password", + "in": "formData", + "required": true + } + ], "responses": { "200": { "description": "OK", "schema": { - "$ref": "#/definitions/admin_handler.logoutResponse" + "$ref": "#/definitions/admin_handler.loginResponse" } }, "400": { @@ -744,6 +760,387 @@ } } }, + "/api/menu": { + "get": { + "description": "菜单列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "菜单列表", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.listResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + }, + "post": { + "description": "创建/编辑菜单", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "创建/编辑菜单", + "parameters": [ + { + "description": "请求信息", + "name": "Request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/menu_handler.createRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.createResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/menu/used": { + "patch": { + "description": "更新菜单为启用/禁用", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "更新菜单为启用/禁用", + "parameters": [ + { + "type": "string", + "description": "Hashid", + "name": "id", + "in": "formData", + "required": true + }, + { + "type": "integer", + "description": "是否启用 1:是 -1:否", + "name": "used", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.updateUsedResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/menu/{id}": { + "get": { + "description": "菜单详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "菜单详情", + "parameters": [ + { + "type": "string", + "description": "hashId", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.detailResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + }, + "delete": { + "description": "删除菜单", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.menu" + ], + "summary": "删除菜单", + "parameters": [ + { + "type": "string", + "description": "hashId", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/menu_handler.deleteResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/cache/clear": { + "patch": { + "description": "清空缓存", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "清空缓存", + "parameters": [ + { + "type": "string", + "description": "Redis Key", + "name": "redis_key", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.searchCacheResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/cache/search": { + "post": { + "description": "查询缓存", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "查询缓存", + "parameters": [ + { + "type": "string", + "description": "Redis Key", + "name": "redis_key", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.searchCacheResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/data/dbs": { + "get": { + "description": "查询 DB", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "查询 DB", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.dbsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/data/mysql": { + "post": { + "description": "执行 SQL 语句", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "执行 SQL 语句", + "parameters": [ + { + "type": "string", + "description": "数据库名称", + "name": "db_name", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "数据表名称", + "name": "table_name", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "SQL 语句", + "name": "sql", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.searchMySQLResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/tool/data/tables": { + "post": { + "description": "查询 Table", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "API.tool" + ], + "summary": "查询 Table", + "parameters": [ + { + "type": "string", + "description": "数据库名称", + "name": "db_name", + "in": "formData", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tool_handler.tablesResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, "/api/tool/hashids/decode/{id}": { "get": { "description": "HashIds 解密", @@ -1154,6 +1551,148 @@ } } }, + "menu_handler.createRequest": { + "type": "object", + "properties": { + "icon": { + "description": "图标", + "type": "string" + }, + "id": { + "description": "ID", + "type": "string" + }, + "level": { + "description": "菜单类型 1:一级菜单 2:二级菜单", + "type": "integer" + }, + "link": { + "description": "链接地址", + "type": "string" + }, + "name": { + "description": "菜单名称", + "type": "string" + }, + "pid": { + "description": "父类ID", + "type": "integer" + } + } + }, + "menu_handler.createResponse": { + "type": "object", + "properties": { + "id": { + "description": "主键ID", + "type": "integer" + } + } + }, + "menu_handler.deleteResponse": { + "type": "object", + "properties": { + "id": { + "description": "主键ID", + "type": "integer" + } + } + }, + "menu_handler.detailResponse": { + "type": "object", + "properties": { + "icon": { + "description": "图标", + "type": "string" + }, + "id": { + "description": "主键ID", + "type": "integer" + }, + "link": { + "description": "链接地址", + "type": "string" + }, + "name": { + "description": "菜单名称", + "type": "string" + } + } + }, + "menu_handler.listData": { + "type": "object", + "properties": { + "hashid": { + "description": "hashid", + "type": "string" + }, + "icon": { + "description": "图标", + "type": "string" + }, + "id": { + "description": "ID", + "type": "integer" + }, + "is_used": { + "description": "是否启用 1=启用 -1=禁用", + "type": "integer" + }, + "link": { + "description": "链接地址", + "type": "string" + }, + "name": { + "description": "菜单名称", + "type": "string" + }, + "pid": { + "description": "父类ID", + "type": "integer" + } + } + }, + "menu_handler.listResponse": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/menu_handler.listData" + } + } + } + }, + "menu_handler.updateUsedResponse": { + "type": "object", + "properties": { + "id": { + "description": "主键ID", + "type": "integer" + } + } + }, + "tool_handler.dbData": { + "type": "object", + "properties": { + "db_name": { + "description": "数据库名称", + "type": "string" + } + } + }, + "tool_handler.dbsResponse": { + "type": "object", + "properties": { + "list": { + "description": "数据库列表", + "type": "array", + "items": { + "$ref": "#/definitions/tool_handler.dbData" + } + } + } + }, "tool_handler.hashIdsDecodeResponse": { "type": "object", "properties": { @@ -1171,6 +1710,84 @@ "type": "string" } } + }, + "tool_handler.searchCacheResponse": { + "type": "object", + "properties": { + "ttl": { + "description": "过期时间", + "type": "string" + }, + "val": { + "description": "查询后的值", + "type": "string" + } + } + }, + "tool_handler.searchMySQLResponse": { + "type": "object", + "properties": { + "cols": { + "description": "查询后的行", + "type": "array", + "items": { + "type": "string" + } + }, + "cols_info": { + "description": "行信息", + "type": "array", + "items": { + "$ref": "#/definitions/tool_handler.tableColumn" + } + }, + "list": { + "description": "查询后的数据", + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + } + } + }, + "tool_handler.tableColumn": { + "type": "object", + "properties": { + "column_comment": { + "description": "字段注释", + "type": "string" + }, + "column_name": { + "description": "字段名称", + "type": "string" + } + } + }, + "tool_handler.tableData": { + "type": "object", + "properties": { + "table_comment": { + "description": "数据表备注", + "type": "string" + }, + "table_name": { + "description": "数据表名称", + "type": "string" + } + } + }, + "tool_handler.tablesResponse": { + "type": "object", + "properties": { + "list": { + "description": "数据表列表", + "type": "array", + "items": { + "$ref": "#/definitions/tool_handler.tableData" + } + } + } } } } \ No newline at end of file diff --git a/docs/swagger.yaml b/docs/swagger.yaml index a9d131c..20b0427 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -227,6 +227,105 @@ definitions: description: 邮箱地址 type: string type: object + menu_handler.createRequest: + properties: + icon: + description: 图标 + type: string + id: + description: ID + type: string + level: + description: 菜单类型 1:一级菜单 2:二级菜单 + type: integer + link: + description: 链接地址 + type: string + name: + description: 菜单名称 + type: string + pid: + description: 父类ID + type: integer + type: object + menu_handler.createResponse: + properties: + id: + description: 主键ID + type: integer + type: object + menu_handler.deleteResponse: + properties: + id: + description: 主键ID + type: integer + type: object + menu_handler.detailResponse: + properties: + icon: + description: 图标 + type: string + id: + description: 主键ID + type: integer + link: + description: 链接地址 + type: string + name: + description: 菜单名称 + type: string + type: object + menu_handler.listData: + properties: + hashid: + description: hashid + type: string + icon: + description: 图标 + type: string + id: + description: ID + type: integer + is_used: + description: 是否启用 1=启用 -1=禁用 + type: integer + link: + description: 链接地址 + type: string + name: + description: 菜单名称 + type: string + pid: + description: 父类ID + type: integer + type: object + menu_handler.listResponse: + properties: + list: + items: + $ref: '#/definitions/menu_handler.listData' + type: array + type: object + menu_handler.updateUsedResponse: + properties: + id: + description: 主键ID + type: integer + type: object + tool_handler.dbData: + properties: + db_name: + description: 数据库名称 + type: string + type: object + tool_handler.dbsResponse: + properties: + list: + description: 数据库列表 + items: + $ref: '#/definitions/tool_handler.dbData' + type: array + type: object tool_handler.hashIdsDecodeResponse: properties: val: @@ -239,6 +338,60 @@ definitions: description: 加密后的值 type: string type: object + tool_handler.searchCacheResponse: + properties: + ttl: + description: 过期时间 + type: string + val: + description: 查询后的值 + type: string + type: object + tool_handler.searchMySQLResponse: + properties: + cols: + description: 查询后的行 + items: + type: string + type: array + cols_info: + description: 行信息 + items: + $ref: '#/definitions/tool_handler.tableColumn' + type: array + list: + description: 查询后的数据 + items: + additionalProperties: true + type: object + type: array + type: object + tool_handler.tableColumn: + properties: + column_comment: + description: 字段注释 + type: string + column_name: + description: 字段名称 + type: string + type: object + tool_handler.tableData: + properties: + table_comment: + description: 数据表备注 + type: string + table_name: + description: 数据表名称 + type: string + type: object + tool_handler.tablesResponse: + properties: + list: + description: 数据表列表 + items: + $ref: '#/definitions/tool_handler.tableData' + type: array + type: object host: 127.0.0.1:9999 info: contact: {} @@ -374,20 +527,31 @@ paths: /api/admin/login: post: consumes: - - application/json - description: 管理员登出 + - multipart/form-data + description: 管理员登录 + parameters: + - description: 用户名 + in: formData + name: username + required: true + type: string + - description: 密码 + in: formData + name: password + required: true + type: string produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/admin_handler.logoutResponse' + $ref: '#/definitions/admin_handler.loginResponse' "400": description: Bad Request schema: $ref: '#/definitions/code.Failure' - summary: 管理员登出 + summary: 管理员登录 tags: - API.admin /api/admin/modify_password: @@ -736,6 +900,258 @@ paths: summary: 修改邮件配置 tags: - API.config + /api/menu: + get: + consumes: + - application/json + description: 菜单列表 + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/menu_handler.listResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 菜单列表 + tags: + - API.menu + post: + consumes: + - multipart/form-data + description: 创建/编辑菜单 + parameters: + - description: 请求信息 + in: body + name: Request + required: true + schema: + $ref: '#/definitions/menu_handler.createRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/menu_handler.createResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 创建/编辑菜单 + tags: + - API.menu + /api/menu/{id}: + delete: + consumes: + - application/json + description: 删除菜单 + parameters: + - description: hashId + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/menu_handler.deleteResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 删除菜单 + tags: + - API.menu + get: + consumes: + - application/json + description: 菜单详情 + parameters: + - description: hashId + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/menu_handler.detailResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 菜单详情 + tags: + - API.menu + /api/menu/used: + patch: + consumes: + - application/json + description: 更新菜单为启用/禁用 + parameters: + - description: Hashid + in: formData + name: id + required: true + type: string + - description: 是否启用 1:是 -1:否 + in: formData + name: used + required: true + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/menu_handler.updateUsedResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 更新菜单为启用/禁用 + tags: + - API.menu + /api/tool/cache/clear: + patch: + consumes: + - multipart/form-data + description: 清空缓存 + parameters: + - description: Redis Key + in: formData + name: redis_key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/tool_handler.searchCacheResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 清空缓存 + tags: + - API.tool + /api/tool/cache/search: + post: + consumes: + - multipart/form-data + description: 查询缓存 + parameters: + - description: Redis Key + in: formData + name: redis_key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/tool_handler.searchCacheResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 查询缓存 + tags: + - API.tool + /api/tool/data/dbs: + get: + consumes: + - multipart/form-data + description: 查询 DB + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/tool_handler.dbsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 查询 DB + tags: + - API.tool + /api/tool/data/mysql: + post: + consumes: + - multipart/form-data + description: 执行 SQL 语句 + parameters: + - description: 数据库名称 + in: formData + name: db_name + required: true + type: string + - description: 数据表名称 + in: formData + name: table_name + required: true + type: string + - description: SQL 语句 + in: formData + name: sql + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/tool_handler.searchMySQLResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 执行 SQL 语句 + tags: + - API.tool + /api/tool/data/tables: + post: + consumes: + - multipart/form-data + description: 查询 Table + parameters: + - description: 数据库名称 + in: formData + name: db_name + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/tool_handler.tablesResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 查询 Table + tags: + - API.tool /api/tool/hashids/decode/{id}: get: consumes: diff --git a/go.mod b/go.mod index 678c79e..0ab1713 100644 --- a/go.mod +++ b/go.mod @@ -9,41 +9,45 @@ require ( github.com/dave/dst v0.26.2 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/fsnotify/fsnotify v1.4.9 - github.com/gin-contrib/pprof v1.2.1 + github.com/gin-contrib/pprof v1.3.0 github.com/gin-gonic/gin v1.6.3 github.com/go-ole/go-ole v1.2.5 // indirect github.com/go-openapi/spec v0.20.0 // indirect github.com/go-redis/redis/v7 v7.4.0 - github.com/golang/protobuf v1.4.3 - github.com/google/go-cmp v0.5.4 // indirect + github.com/golang/protobuf v1.5.0 github.com/jinzhu/gorm v1.9.16 - github.com/koketama/errors v1.0.2 - github.com/koketama/urltable v0.1.3 github.com/onsi/ginkgo v1.14.2 // indirect github.com/onsi/gomega v1.10.4 // indirect github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v0.9.3 + github.com/prometheus/client_golang v1.10.0 github.com/rs/cors v1.7.0 github.com/shirou/gopsutil v3.21.2+incompatible github.com/speps/go-hashids v2.0.0+incompatible github.com/spf13/cast v1.3.0 + github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.7.1 + github.com/stretchr/testify v1.7.0 // indirect github.com/swaggo/gin-swagger v1.3.0 github.com/swaggo/swag v1.7.0 github.com/tklauser/go-sysconf v0.3.4 // indirect github.com/vektah/gqlparser/v2 v2.1.0 - go.uber.org/multierr v1.5.0 + go.uber.org/multierr v1.6.0 go.uber.org/zap v1.16.0 + golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 // indirect golang.org/x/mod v0.4.0 // indirect - golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect - golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0 + golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect + golang.org/x/text v0.3.5 // indirect + golang.org/x/time v0.0.0-20191024005414-555d28b269f0 golang.org/x/tools v0.0.0-20201226215659-b1c90890d22a - google.golang.org/grpc v1.27.0 - google.golang.org/protobuf v1.25.0 // indirect + google.golang.org/genproto v0.0.0-20210224155714-063164c882e6 // indirect + google.golang.org/grpc v1.37.0 + google.golang.org/protobuf v1.26.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/natefinch/lumberjack.v2 v2.0.0 + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect gorm.io/driver/mysql v1.0.3 gorm.io/gorm v1.20.9 + honnef.co/go/tools v0.0.1-2020.1.4 // indirect ) diff --git a/go.sum b/go.sum index 97e0333..71933ad 100644 --- a/go.sum +++ b/go.sum @@ -16,6 +16,7 @@ github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyy github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -25,8 +26,12 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 h1:5sXbqlSomvdjlRbWyNqkPsJ3Fg+tQZCbgeX1VGljbQY= github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= @@ -34,30 +39,52 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dave/dst v0.26.2 h1:lnxLAKI3tx7MgLNVDirFCsDTlTG9nKTk7GcptKcWSwY= github.com/dave/dst v0.26.2/go.mod h1:UMDJuIRPfyUCC78eFuB+SV/WI8oDeyFDvM/JR6NI3IU= @@ -75,11 +102,21 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c h1:TUuUh0Xgj97tLMNtWtNvI9mIV6isjEb9lBMNv+77IGM= github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= @@ -88,21 +125,25 @@ github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/gzip v0.0.1 h1:ezvKOL6jH+jlzdHNE4h9h8q8uMpDQjyl0NN0Jd7jozc= github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w= -github.com/gin-contrib/pprof v1.2.1 h1:p6mY/FsE3tDx2+Wp3ksrMe1QL5egQ7p+lsZ7WbQLT1U= -github.com/gin-contrib/pprof v1.2.1/go.mod h1:u2l4P4YNkLXYz+xBbrl7Pxu1Btng6VCD7j3O3pUPP2w= +github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0= +github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0= github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= +github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= @@ -133,17 +174,22 @@ github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1 github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1x4= github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -162,6 +208,9 @@ github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -171,25 +220,37 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181127221834-b4f47329b966/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -200,6 +261,7 @@ github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerX github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= @@ -211,7 +273,10 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= @@ -219,24 +284,28 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E= github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/koketama/errors v1.0.2 h1:v8C8MDiz9QHqzQX587dQpD0bjro8n4GPm4leOELYPyo= -github.com/koketama/errors v1.0.2/go.mod h1:SIU03UGMkhp6tyB5+EvhDI9i9ZDa4rQolJCt9ZrFrbU= -github.com/koketama/urltable v0.1.3 h1:pEuk4/SaqYiTVs70p8GVZeZaLdGCO2Rq8xxKRgMwYwo= -github.com/koketama/urltable v0.1.3/go.mod h1:ime2hsHLQKb3AAJTLulUmYMIEb9YsF2RGSixT9z9ChA= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= @@ -249,7 +318,10 @@ github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -266,6 +338,7 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA= github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= @@ -287,47 +360,96 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M= github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.4 h1:NiTx7EEvBzu9sFOD1zORteLSt3o8gnlvZZwSE9TnY9U= github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3 h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= +github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.18.0 h1:WCVKW7aL6LEe1uryfI9dnEc2ZqNB1Fn0ok930v0iL1Y= +github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 h1:sofwID9zm4tzrgykg80hfFph1mryUeLRsUfoocVVmRY= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -336,6 +458,7 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= @@ -347,11 +470,14 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5I github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/speps/go-hashids v2.0.0+incompatible h1:kSfxGfESueJKTx0mpER9Y/1XHl+FVQjtCqRyYcviFbw= github.com/speps/go-hashids v2.0.0+incompatible/go.mod h1:P7hqPzMdnZOfyIk+xrlG1QaSMw+gCBdHKsBDnhpaZvc= @@ -359,20 +485,30 @@ github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E= @@ -385,6 +521,7 @@ github.com/tklauser/go-sysconf v0.3.4 h1:HT8SVixZd3IzLdfs/xlpq0jeSfTX57g1v6wB1Eu github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek= github.com/tklauser/numcpus v0.2.1 h1:ct88eFm+Q7m2ZfXJdan1xYoXKlmwsfP+k88q05KvlZc= github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -396,6 +533,8 @@ github.com/ugorji/go/codec v1.1.13 h1:013LbFhocBoIqgHeIHKlV4JWYhqogATYWZhIcH0WHn github.com/ugorji/go/codec v1.1.13/go.mod h1:oNVt3Dq+FO91WNQ/9JnHKQP2QJxTzoN7wCBFCq1OeuU= github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= @@ -406,17 +545,30 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= golang.org/x/arch v0.0.0-20180920145803-b19384d3c130/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8= @@ -426,6 +578,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= @@ -445,6 +598,8 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -464,6 +619,7 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -471,18 +627,21 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -493,6 +652,7 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -501,28 +661,39 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210217105451-b926d437f341 h1:2/QtM1mL37YmcsT8HaDNHDgTqqFVw+zr8UzMiBVLzYU= golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 h1:46ULzRKLh1CwgRq2dC5SlBzEqqNCi8rreOZnNrbqcIY= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -530,11 +701,15 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0 h1:xQwXv67TxFo9nC1GJFyab5eq/5B590r6RlnL/G8Sz7w= -golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -559,7 +734,10 @@ golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201120155355-20be4ac4bd6e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201226215659-b1c90890d22a h1:pdfjQ7VswBeGam3EpuEJ4e8EAb7JgaubV570LO/SIQM= @@ -569,12 +747,14 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -583,6 +763,7 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -590,13 +771,24 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a h1:Ob5/580gVHBJZgX google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20210224155714-063164c882e6 h1:bXUwz2WkXXrXgiLxww3vWmoSHLOGv4ipdPdTvKymcKw= +google.golang.org/genproto v0.0.0-20210224155714-063164c882e6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.37.0 h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -606,8 +798,12 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= @@ -617,8 +813,10 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= @@ -632,11 +830,13 @@ gopkg.in/src-d/go-billy.v4 v4.3.0 h1:KtlZ4c1OWbIs4jCv5ZXrTqG8EQocr0g/d4DjNg70aek gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -644,17 +844,24 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/mysql v1.0.3 h1:+JKBYPfn1tygR1/of/Fh2T8iwuVwzt+PEJmKaXzMQXg= gorm.io/driver/mysql v1.0.3/go.mod h1:twGxftLBlFgNVNakL7F+P/x9oYqoymG3YYT8cAfI9oI= gorm.io/gorm v1.20.4/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= gorm.io/gorm v1.20.9 h1:M3aIZKXAC1PtPVu9t3WGwkBTE1le5c2telz3I/qjRNg= gorm.io/gorm v1.20.9/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k= diff --git a/internal/api/code/code.go b/internal/api/code/code.go index 8f5615f..72a0d9a 100644 --- a/internal/api/code/code.go +++ b/internal/api/code/code.go @@ -52,6 +52,20 @@ const ( ConfigRedisConnectError = 20403 ConfigMySQLConnectError = 20404 ConfigMySQLInstallError = 20405 + ConfigGoVersionError = 20406 + + // 实用工具箱 + SearchRedisError = 20501 + ClearRedisError = 20502 + SearchRedisEmpty = 20503 + SearchMySQLError = 20504 + + // 菜单栏 + MenuCreateError = 20601 + MenuUpdateError = 20602 + MenuListError = 20603 + MenuDeleteError = 20604 + MenuDetailError = 20605 ) var codeText = map[int]string{ @@ -94,6 +108,18 @@ var codeText = map[int]string{ ConfigRedisConnectError: "Redis 连接失败", ConfigMySQLConnectError: "MySQL 连接失败", ConfigMySQLInstallError: "MySQL 初始化数据失败", + ConfigGoVersionError: "Go Version 不满足要求", + + SearchRedisError: "查询 Redis Key 失败", + ClearRedisError: "清空 Redis Key 失败", + SearchRedisEmpty: "查询的 Redis Key 不存在", + SearchMySQLError: "查询 MySQL 失败", + + MenuCreateError: "创建菜单失败", + MenuUpdateError: "更新菜单失败", + MenuDeleteError: "删除菜单失败", + MenuListError: "获取菜单列表页失败", + MenuDetailError: "获取菜单详情失败", } func Text(code int) string { diff --git a/internal/api/controller/menu_handler/func_create.go b/internal/api/controller/menu_handler/func_create.go new file mode 100755 index 0000000..3cee256 --- /dev/null +++ b/internal/api/controller/menu_handler/func_create.go @@ -0,0 +1,112 @@ +package menu_handler + +import ( + "net/http" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/api/service/menu_service" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" + + "github.com/spf13/cast" +) + +type createRequest struct { + Id string `form:"id"` // ID + Pid int32 `form:"pid"` // 父类ID + Name string `form:"name"` // 菜单名称 + Link string `form:"link"` // 链接地址 + Icon string `form:"icon"` // 图标 + Level int32 `form:"level"` // 菜单类型 1:一级菜单 2:二级菜单 +} + +type createResponse struct { + Id int32 `json:"id"` // 主键ID +} + +// Create 创建/编辑菜单 +// @Summary 创建/编辑菜单 +// @Description 创建/编辑菜单 +// @Tags API.menu +// @Accept multipart/form-data +// @Produce json +// @Param Request body createRequest true "请求信息" +// @Success 200 {object} createResponse +// @Failure 400 {object} code.Failure +// @Router /api/menu [post] +func (h *handler) Create() core.HandlerFunc { + return func(c core.Context) { + req := new(createRequest) + res := new(createResponse) + if err := c.ShouldBindForm(req); err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ParamBindError, + code.Text(code.ParamBindError)).WithErr(err), + ) + return + } + + if req.Id != "" { // 编辑功能 + ids, err := h.hashids.HashidsDecode(req.Id) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.HashIdsDecodeError, + code.Text(code.HashIdsDecodeError)).WithErr(err), + ) + return + } + + id := int32(ids[0]) + + updateData := new(menu_service.UpdateMenuData) + updateData.Name = req.Name + updateData.Icon = req.Icon + updateData.Link = req.Link + + err = h.menuService.Modify(c, id, updateData) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.MenuUpdateError, + code.Text(code.MenuUpdateError)).WithErr(err), + ) + return + } + + res.Id = id + c.Payload(res) + + } else { // 新增功能 + + pid := req.Level + level := 2 + + if req.Level == -1 { + pid = 0 + level = 1 + } + + createData := new(menu_service.CreateMenuData) + createData.Pid = pid + createData.Name = req.Name + createData.Icon = req.Icon + createData.Link = req.Link + createData.Level = cast.ToInt32(level) + + id, err := h.menuService.Create(c, createData) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.MenuCreateError, + code.Text(code.MenuCreateError)).WithErr(err), + ) + return + } + + res.Id = id + c.Payload(res) + } + } +} diff --git a/internal/api/controller/menu_handler/func_delete.go b/internal/api/controller/menu_handler/func_delete.go new file mode 100755 index 0000000..2f798c8 --- /dev/null +++ b/internal/api/controller/menu_handler/func_delete.go @@ -0,0 +1,67 @@ +package menu_handler + +import ( + "net/http" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" +) + +type deleteRequest struct { + Id string `uri:"id"` // HashID +} + +type deleteResponse struct { + Id int32 `json:"id"` // 主键ID +} + +// Delete 删除菜单 +// @Summary 删除菜单 +// @Description 删除菜单 +// @Tags API.menu +// @Accept json +// @Produce json +// @Param id path string true "hashId" +// @Success 200 {object} deleteResponse +// @Failure 400 {object} code.Failure +// @Router /api/menu/{id} [delete] +func (h *handler) Delete() core.HandlerFunc { + return func(c core.Context) { + req := new(deleteRequest) + res := new(deleteResponse) + if err := c.ShouldBindURI(req); err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ParamBindError, + code.Text(code.ParamBindError)).WithErr(err), + ) + return + } + + ids, err := h.hashids.HashidsDecode(req.Id) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.HashIdsDecodeError, + code.Text(code.HashIdsDecodeError)).WithErr(err), + ) + return + } + + id := int32(ids[0]) + + err = h.menuService.Delete(c, id) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.MenuDeleteError, + code.Text(code.MenuDeleteError)).WithErr(err), + ) + return + } + + res.Id = id + c.Payload(res) + } +} diff --git a/internal/api/controller/menu_handler/func_detail.go b/internal/api/controller/menu_handler/func_detail.go new file mode 100755 index 0000000..f7b8000 --- /dev/null +++ b/internal/api/controller/menu_handler/func_detail.go @@ -0,0 +1,77 @@ +package menu_handler + +import ( + "net/http" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/api/service/menu_service" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" +) + +type detailRequest struct { + Id string `uri:"id"` // HashID +} + +type detailResponse struct { + Id int32 `json:"id"` // 主键ID + Name string `json:"name"` // 菜单名称 + Link string `json:"link"` // 链接地址 + Icon string `json:"icon"` // 图标 +} + +// Detail 菜单详情 +// @Summary 菜单详情 +// @Description 菜单详情 +// @Tags API.menu +// @Accept json +// @Produce json +// @Param id path string true "hashId" +// @Success 200 {object} detailResponse +// @Failure 400 {object} code.Failure +// @Router /api/menu/{id} [get] +func (h *handler) Detail() core.HandlerFunc { + return func(c core.Context) { + req := new(detailRequest) + res := new(detailResponse) + if err := c.ShouldBindURI(req); err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ParamBindError, + code.Text(code.ParamBindError)).WithErr(err), + ) + return + } + + ids, err := h.hashids.HashidsDecode(req.Id) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.HashIdsDecodeError, + code.Text(code.HashIdsDecodeError)).WithErr(err), + ) + return + } + + id := int32(ids[0]) + + searchOneData := new(menu_service.SearchOneData) + searchOneData.Id = id + + info, err := h.menuService.Detail(c, searchOneData) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.MenuDetailError, + code.Text(code.MenuDetailError)).WithErr(err), + ) + return + } + + res.Id = info.Id + res.Name = info.Name + res.Link = info.Link + res.Icon = info.Icon + c.Payload(res) + } +} diff --git a/internal/api/controller/menu_handler/func_list.go b/internal/api/controller/menu_handler/func_list.go new file mode 100755 index 0000000..ab1fd3b --- /dev/null +++ b/internal/api/controller/menu_handler/func_list.go @@ -0,0 +1,74 @@ +package menu_handler + +import ( + "net/http" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/api/service/menu_service" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" + + "github.com/spf13/cast" + "go.uber.org/zap" +) + +type listData struct { + Id int32 `json:"id"` // ID + HashID string `json:"hashid"` // hashid + Pid int32 `json:"pid"` // 父类ID + Name string `json:"name"` // 菜单名称 + Link string `json:"link"` // 链接地址 + Icon string `json:"icon"` // 图标 + IsUsed int32 `json:"is_used"` // 是否启用 1=启用 -1=禁用 +} + +type listResponse struct { + List []listData `json:"list"` +} + +// List 菜单列表 +// @Summary 菜单列表 +// @Description 菜单列表 +// @Tags API.menu +// @Accept json +// @Produce json +// @Success 200 {object} listResponse +// @Failure 400 {object} code.Failure +// @Router /api/menu [get] +func (h *handler) List() core.HandlerFunc { + return func(c core.Context) { + res := new(listResponse) + resListData, err := h.menuService.List(c, new(menu_service.SearchData)) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.MenuListError, + code.Text(code.MenuListError)).WithErr(err), + ) + return + } + + res.List = make([]listData, len(resListData)) + + for k, v := range resListData { + hashId, err := h.hashids.HashidsEncode([]int{cast.ToInt(v.Id)}) + if err != nil { + h.logger.Info("hashids err", zap.Error(err)) + } + + data := listData{ + Id: v.Id, + HashID: hashId, + Pid: v.Pid, + Name: v.Name, + Link: v.Link, + Icon: v.Icon, + IsUsed: v.IsUsed, + } + + res.List[k] = data + } + + c.Payload(res) + } +} diff --git a/internal/api/controller/menu_handler/func_updateused.go b/internal/api/controller/menu_handler/func_updateused.go new file mode 100755 index 0000000..99cdd43 --- /dev/null +++ b/internal/api/controller/menu_handler/func_updateused.go @@ -0,0 +1,69 @@ +package menu_handler + +import ( + "net/http" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" +) + +type updateUsedRequest struct { + Id string `form:"id"` // 主键ID + Used int32 `form:"used"` // 是否启用 1:是 -1:否 +} + +type updateUsedResponse struct { + Id int32 `json:"id"` // 主键ID +} + +// UpdateUsed 更新菜单为启用/禁用 +// @Summary 更新菜单为启用/禁用 +// @Description 更新菜单为启用/禁用 +// @Tags API.menu +// @Accept json +// @Produce json +// @Param id formData string true "Hashid" +// @Param used formData int true "是否启用 1:是 -1:否" +// @Success 200 {object} updateUsedResponse +// @Failure 400 {object} code.Failure +// @Router /api/menu/used [patch] +func (h *handler) UpdateUsed() core.HandlerFunc { + return func(c core.Context) { + req := new(updateUsedRequest) + res := new(updateUsedResponse) + if err := c.ShouldBindForm(req); err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ParamBindError, + code.Text(code.ParamBindError)).WithErr(err), + ) + return + } + + ids, err := h.hashids.HashidsDecode(req.Id) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.HashIdsDecodeError, + code.Text(code.HashIdsDecodeError)).WithErr(err), + ) + return + } + + id := int32(ids[0]) + + err = h.menuService.UpdateUsed(c, id, req.Used) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.MenuUpdateError, + code.Text(code.MenuUpdateError)).WithErr(err), + ) + return + } + + res.Id = id + c.Payload(res) + } +} diff --git a/internal/api/controller/menu_handler/handler.go b/internal/api/controller/menu_handler/handler.go new file mode 100644 index 0000000..ac11d25 --- /dev/null +++ b/internal/api/controller/menu_handler/handler.go @@ -0,0 +1,61 @@ +package menu_handler + +import ( + "github.com/xinliangnote/go-gin-api/configs" + "github.com/xinliangnote/go-gin-api/internal/api/service/menu_service" + "github.com/xinliangnote/go-gin-api/internal/pkg/cache" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/internal/pkg/db" + "github.com/xinliangnote/go-gin-api/pkg/hash" + + "go.uber.org/zap" +) + +var _ Handler = (*handler)(nil) + +type Handler interface { + i() + + // Create 创建/编辑菜单 + // @Tags API.menu + // @Router /api/menu [post] + Create() core.HandlerFunc + + // Detail 菜单详情 + // @Tags API.menu + // @Router /api/menu/{id} [get] + Detail() core.HandlerFunc + + // Delete 删除菜单 + // @Tags API.menu + // @Router /api/menu/{id} [delete] + Delete() core.HandlerFunc + + // UpdateUsed 更新菜单为启用/禁用 + // @Tags API.menu + // @Router /api/menu/used [patch] + UpdateUsed() core.HandlerFunc + + // List 菜单列表 + // @Tags API.menu + // @Router /api/menu [get] + List() core.HandlerFunc +} + +type handler struct { + logger *zap.Logger + cache cache.Repo + hashids hash.Hash + menuService menu_service.Service +} + +func New(logger *zap.Logger, db db.Repo, cache cache.Repo) Handler { + return &handler{ + logger: logger, + cache: cache, + hashids: hash.New(configs.Get().HashIds.Secret, configs.Get().HashIds.Length), + menuService: menu_service.New(db, cache), + } +} + +func (h *handler) i() {} diff --git a/internal/api/controller/tool_handler/func_clearcache.go b/internal/api/controller/tool_handler/func_clearcache.go new file mode 100644 index 0000000..7648d85 --- /dev/null +++ b/internal/api/controller/tool_handler/func_clearcache.go @@ -0,0 +1,65 @@ +package tool_handler + +import ( + "net/http" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/pkg/cache" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" +) + +type clearCacheRequest struct { + RedisKey string `form:"redis_key"` // Redis Key +} + +type clearCacheResponse struct { + Bool bool `json:"bool"` // 删除结果 +} + +// ClearCache 清空缓存 +// @Summary 清空缓存 +// @Description 清空缓存 +// @Tags API.tool +// @Accept multipart/form-data +// @Produce json +// @Param redis_key formData string true "Redis Key" +// @Success 200 {object} searchCacheResponse +// @Failure 400 {object} code.Failure +// @Router /api/tool/cache/clear [patch] +func (h *handler) ClearCache() core.HandlerFunc { + return func(c core.Context) { + req := new(clearCacheRequest) + res := new(clearCacheResponse) + if err := c.ShouldBindForm(req); err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ParamBindError, + code.Text(code.ParamBindError)).WithErr(err), + ) + return + } + + if b := h.cache.Exists(req.RedisKey); b != true { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchRedisEmpty, + code.Text(code.SearchRedisEmpty)), + ) + return + } + + b := h.cache.Del(req.RedisKey, cache.WithTrace(c.Trace())) + if b != true { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ClearRedisError, + code.Text(code.ClearRedisError)), + ) + return + } + + res.Bool = b + c.Payload(res) + } +} diff --git a/internal/api/controller/tool_handler/func_dbs.go b/internal/api/controller/tool_handler/func_dbs.go new file mode 100644 index 0000000..983c40b --- /dev/null +++ b/internal/api/controller/tool_handler/func_dbs.go @@ -0,0 +1,37 @@ +package tool_handler + +import ( + "github.com/xinliangnote/go-gin-api/configs" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +type dbsResponse struct { + List []dbData `json:"list"` // 数据库列表 +} + +type dbData struct { + DbName string `json:"db_name"` // 数据库名称 +} + +// Dbs 查询 DB +// @Summary 查询 DB +// @Description 查询 DB +// @Tags API.tool +// @Accept multipart/form-data +// @Produce json +// @Success 200 {object} dbsResponse +// @Failure 400 {object} code.Failure +// @Router /api/tool/data/dbs [get] +func (h *handler) Dbs() core.HandlerFunc { + return func(c core.Context) { + res := new(dbsResponse) + + // TODO 后期支持查询多个数据库 + data := dbData{ + DbName: configs.Get().MySQL.Read.Name, + } + + res.List = append(res.List, data) + c.Payload(res) + } +} diff --git a/internal/api/controller/tool_handler/func_searchcache.go b/internal/api/controller/tool_handler/func_searchcache.go new file mode 100644 index 0000000..1147c13 --- /dev/null +++ b/internal/api/controller/tool_handler/func_searchcache.go @@ -0,0 +1,77 @@ +package tool_handler + +import ( + "net/http" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/pkg/cache" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" +) + +type searchCacheRequest struct { + RedisKey string `form:"redis_key"` // Redis Key +} + +type searchCacheResponse struct { + Val string `json:"val"` // 查询后的值 + TTL string `json:"ttl"` // 过期时间 +} + +// SearchCache 查询缓存 +// @Summary 查询缓存 +// @Description 查询缓存 +// @Tags API.tool +// @Accept multipart/form-data +// @Produce json +// @Param redis_key formData string true "Redis Key" +// @Success 200 {object} searchCacheResponse +// @Failure 400 {object} code.Failure +// @Router /api/tool/cache/search [post] +func (h *handler) SearchCache() core.HandlerFunc { + return func(c core.Context) { + req := new(searchCacheRequest) + res := new(searchCacheResponse) + if err := c.ShouldBindForm(req); err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ParamBindError, + code.Text(code.ParamBindError)).WithErr(err), + ) + return + } + + if b := h.cache.Exists(req.RedisKey); b != true { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchRedisEmpty, + code.Text(code.SearchRedisEmpty)), + ) + return + } + + val, err := h.cache.Get(req.RedisKey, cache.WithTrace(c.Trace())) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchRedisError, + code.Text(code.SearchRedisError)).WithErr(err), + ) + return + } + + ttl, err := h.cache.TTL(req.RedisKey) + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchRedisError, + code.Text(code.SearchRedisError)).WithErr(err), + ) + return + } + + res.Val = val + res.TTL = ttl.String() + c.Payload(res) + } +} diff --git a/internal/api/controller/tool_handler/func_searchmysql.go b/internal/api/controller/tool_handler/func_searchmysql.go new file mode 100644 index 0000000..1a9d4d4 --- /dev/null +++ b/internal/api/controller/tool_handler/func_searchmysql.go @@ -0,0 +1,223 @@ +package tool_handler + +import ( + "fmt" + "net/http" + "strings" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" + + "github.com/spf13/cast" +) + +type tableColumn struct { + ColumnName string `json:"column_name"` // 字段名称 + ColumnComment string `json:"column_comment"` // 字段注释 +} + +type searchMySQLRequest struct { + DbName string `form:"db_name"` // 数据库名称 + TableName string `form:"table_name"` // 数据表名称 + SQL string `form:"sql"` // SQL 语句 +} + +type searchMySQLResponse struct { + Cols []string `json:"cols"` // 查询后的行 + ColsInfo []tableColumn `json:"cols_info"` // 行信息 + List []map[string]interface{} `json:"list"` // 查询后的数据 +} + +var preFilterList = map[string]bool{ + "insert": true, + "update": true, + "delete": true, + "create": true, + "source": true, + "rename": true, +} + +var whiteListKeyword = []string{ + "is_deleted", + "updated_at", + "created_at", + "updated_user", + "created_user", + "show create table", +} + +var filterListKeyword = []string{ + "insert", + "update", + "truncate", + "delete", + "create", + "alter", + "rename", + "drop", + "replace", + "sleep", + "grant", + "revoke", + "load_file", + "outfile", + "transaction", + "commit", + "mysqldump", + "into", +} + +// SearchMySQL 执行 SQL 语句 +// @Summary 执行 SQL 语句 +// @Description 执行 SQL 语句 +// @Tags API.tool +// @Accept multipart/form-data +// @Produce json +// @Param db_name formData string true "数据库名称" +// @Param table_name formData string true "数据表名称" +// @Param sql formData string true "SQL 语句" +// @Success 200 {object} searchMySQLResponse +// @Failure 400 {object} code.Failure +// @Router /api/tool/data/mysql [post] +func (h *handler) SearchMySQL() core.HandlerFunc { + return func(c core.Context) { + req := new(searchMySQLRequest) + res := new(searchMySQLResponse) + if err := c.ShouldBindForm(req); err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ParamBindError, + code.Text(code.ParamBindError)).WithErr(err), + ) + return + } + + sql := strings.ToLower(strings.TrimSpace(req.SQL)) + if sql == "" { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchMySQLError, + "SQL 语句不能为空!"), + ) + return + } + + if preFilterList[string([]byte(sql)[:6])] { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchMySQLError, + "SQL 语句不能以 "+string([]byte(sql)[:6])+" 开头!"), + ) + return + } + + for _, f := range filterListKeyword { + if find := strings.Contains(sql, f); find { + + isWhiteList := false + for _, w := range whiteListKeyword { + if whiteFind := strings.Contains(sql, w); whiteFind { + isWhiteList = true + break + } + } + + if !isWhiteList { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchMySQLError, + "SQL 语句存在敏感词: "+f+"!"), + ) + return + } + + } + } + + if strings.ToLower(string([]byte(sql)[:6])) == "select" { + sql += " LIMIT 100" + } + + // TODO 后期支持查询多个数据库 + rows, err := h.db.GetDbR().Raw(sql).Rows() + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchMySQLError, + "MySQL "+err.Error()).WithErr(err), + ) + return + } + + defer rows.Close() + + cols, _ := rows.Columns() + + var data []map[string]interface{} + + for rows.Next() { + // Create a slice of interface{}'s to represent each column, + // and a second slice to contain pointers to each item in the columns slice. + columns := make([]interface{}, len(cols)) + columnPointers := make([]interface{}, len(cols)) + for i := range columns { + columnPointers[i] = &columns[i] + } + + // Scan the result into the column pointers... + if err := rows.Scan(columnPointers...); err != nil { + fmt.Printf("query table scan error, detail is [%v]\n", err.Error()) + continue + } + + // Create our map, and retrieve the value for each column from the pointers slice, + // storing it in the map with the name of the column as the key. + m := make(map[string]interface{}) + for i, colName := range cols { + val := columnPointers[i].(*interface{}) + m[colName] = cast.ToString(*val) + } + + data = append(data, m) + + } + + res.List = data + res.Cols = cols + + sqlTableColumn := fmt.Sprintf("SELECT `COLUMN_NAME`, `COLUMN_COMMENT` FROM `information_schema`.`columns` WHERE `table_schema`= '%s' AND `table_name`= '%s' ORDER BY `ORDINAL_POSITION` ASC", + req.DbName, req.TableName) + + rows, err = h.db.GetDbR().Raw(sqlTableColumn).Rows() + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchMySQLError, + "MySQL "+err.Error()).WithErr(err), + ) + return + } + defer rows.Close() + + var tableColumns []tableColumn + + for rows.Next() { + var column tableColumn + err = rows.Scan( + &column.ColumnName, + &column.ColumnComment) + + if err != nil { + fmt.Printf("query table column scan error, detail is [%v]\n", err.Error()) + continue + } + + tableColumns = append(tableColumns, column) + } + + res.ColsInfo = tableColumns + + c.Payload(res) + } +} diff --git a/internal/api/controller/tool_handler/func_tables.go b/internal/api/controller/tool_handler/func_tables.go new file mode 100644 index 0000000..14ebb5d --- /dev/null +++ b/internal/api/controller/tool_handler/func_tables.go @@ -0,0 +1,76 @@ +package tool_handler + +import ( + "fmt" + "net/http" + + "github.com/xinliangnote/go-gin-api/internal/api/code" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/pkg/errno" +) + +type tablesRequest struct { + DbName string `form:"db_name"` // 数据库名称 +} + +type tablesResponse struct { + List []tableData `json:"list"` // 数据表列表 +} + +type tableData struct { + Name string `json:"table_name"` // 数据表名称 + Comment string `json:"table_comment"` // 数据表备注 +} + +// Tables 查询 Table +// @Summary 查询 Table +// @Description 查询 Table +// @Tags API.tool +// @Accept multipart/form-data +// @Produce json +// @Param db_name formData string true "数据库名称" +// @Success 200 {object} tablesResponse +// @Failure 400 {object} code.Failure +// @Router /api/tool/data/tables [post] +func (h *handler) Tables() core.HandlerFunc { + return func(c core.Context) { + req := new(tablesRequest) + res := new(tablesResponse) + if err := c.ShouldBindForm(req); err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ParamBindError, + code.Text(code.ParamBindError)).WithErr(err), + ) + return + } + + sqlTables := fmt.Sprintf("SELECT `table_name`,`table_comment` FROM `information_schema`.`tables` WHERE `table_schema`= '%s'", req.DbName) + + // TODO 后期支持查询多个数据库 + rows, err := h.db.GetDbR().Raw(sqlTables).Rows() + if err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.SearchMySQLError, + code.Text(code.SearchMySQLError)).WithErr(err), + ) + return + } + + defer rows.Close() + + for rows.Next() { + var info tableData + err = rows.Scan(&info.Name, &info.Comment) + if err != nil { + fmt.Printf("execute query tables action error,had ignored, detail is [%v]\n", err.Error()) + continue + } + + res.List = append(res.List, info) + } + + c.Payload(res) + } +} diff --git a/internal/api/controller/tool_handler/handler.go b/internal/api/controller/tool_handler/handler.go index b516a2b..3df8087 100644 --- a/internal/api/controller/tool_handler/handler.go +++ b/internal/api/controller/tool_handler/handler.go @@ -24,10 +24,36 @@ type Handler interface { // @Tags API.tool // @Router /api/tool/hashids/decode/{id} [get] HashIdsDecode() core.HandlerFunc + + // SearchCache 查询缓存 + // @Tags API.tool + // @Router /api/tool/cache/search [post] + SearchCache() core.HandlerFunc + + // ClearCache 清空缓存 + // @Tags API.tool + // @Router /api/tool/cache/clear [patch] + ClearCache() core.HandlerFunc + + // Dbs 查询 DB + // @Tags API.tool + // @Router /api/tool/data/dbs [get] + Dbs() core.HandlerFunc + + // Tables 查询 Table + // @Tags API.tool + // @Router /api/tool/data/tables [post] + Tables() core.HandlerFunc + + // SearchMySQL 执行 SQL 语句 + // @Tags API.tool + // @Router /api/tool/data/mysql [post] + SearchMySQL() core.HandlerFunc } type handler struct { logger *zap.Logger + db db.Repo cache cache.Repo hashids hash.Hash } @@ -35,6 +61,7 @@ type handler struct { func New(logger *zap.Logger, db db.Repo, cache cache.Repo) Handler { return &handler{ logger: logger, + db: db, cache: cache, hashids: hash.New(configs.Get().HashIds.Secret, configs.Get().HashIds.Length), } diff --git a/internal/api/repository/db_repo/menu_repo/gen_menu.go b/internal/api/repository/db_repo/menu_repo/gen_menu.go new file mode 100755 index 0000000..4c386d0 --- /dev/null +++ b/internal/api/repository/db_repo/menu_repo/gen_menu.go @@ -0,0 +1,626 @@ +/////////////////////////////////////////////////////////// +// THIS FILE IS AUTO GENERATED by gormgen, DON'T EDIT IT // +// ANY CHANGES DONE HERE WILL BE LOST // +/////////////////////////////////////////////////////////// + +package menu_repo + +import ( + "fmt" + "time" + + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo" + + "github.com/pkg/errors" + "gorm.io/gorm" +) + +func NewModel() *Menu { + return new(Menu) +} + +func NewQueryBuilder() *menuRepoQueryBuilder { + return new(menuRepoQueryBuilder) +} + +func (t *Menu) Create(db *gorm.DB) (id int32, err error) { + if err = db.Create(t).Error; err != nil { + return 0, errors.Wrap(err, "create err") + } + return t.Id, nil +} + +func (t *Menu) Delete(db *gorm.DB) (err error) { + if err = db.Delete(t).Error; err != nil { + return errors.Wrap(err, "delete err") + } + return nil +} + +func (t *Menu) Updates(db *gorm.DB, m map[string]interface{}) (err error) { + if err = db.Model(&Menu{}).Where("id = ?", t.Id).Updates(m).Error; err != nil { + return errors.Wrap(err, "updates err") + } + return nil +} + +type menuRepoQueryBuilder struct { + order []string + where []struct { + prefix string + value interface{} + } + limit int + offset int +} + +func (qb *menuRepoQueryBuilder) buildQuery(db *gorm.DB) *gorm.DB { + ret := db + for _, where := range qb.where { + ret = ret.Where(where.prefix, where.value) + } + for _, order := range qb.order { + ret = ret.Order(order) + } + ret = ret.Limit(qb.limit).Offset(qb.offset) + return ret +} + +func (qb *menuRepoQueryBuilder) Count(db *gorm.DB) (int64, error) { + var c int64 + res := qb.buildQuery(db).Model(&Menu{}).Count(&c) + if res.Error != nil && res.Error == gorm.ErrRecordNotFound { + c = 0 + } + return c, res.Error +} + +func (qb *menuRepoQueryBuilder) First(db *gorm.DB) (*Menu, error) { + ret := &Menu{} + res := qb.buildQuery(db).First(ret) + if res.Error != nil && res.Error == gorm.ErrRecordNotFound { + ret = nil + } + return ret, res.Error +} + +func (qb *menuRepoQueryBuilder) QueryOne(db *gorm.DB) (*Menu, error) { + qb.limit = 1 + ret, err := qb.QueryAll(db) + if len(ret) > 0 { + return ret[0], err + } + return nil, err +} + +func (qb *menuRepoQueryBuilder) QueryAll(db *gorm.DB) ([]*Menu, error) { + var ret []*Menu + err := qb.buildQuery(db).Find(&ret).Error + return ret, err +} + +func (qb *menuRepoQueryBuilder) Limit(limit int) *menuRepoQueryBuilder { + qb.limit = limit + return qb +} + +func (qb *menuRepoQueryBuilder) Offset(offset int) *menuRepoQueryBuilder { + qb.offset = offset + return qb +} + +func (qb *menuRepoQueryBuilder) WhereId(p db_repo.Predicate, value int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "id", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIdIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "id", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIdNotIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "id", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderById(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "id "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WherePid(p db_repo.Predicate, value int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "pid", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WherePidIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "pid", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WherePidNotIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "pid", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByPid(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "pid "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereName(p db_repo.Predicate, value string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "name", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereNameIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "name", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereNameNotIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "name", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByName(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "name "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereLink(p db_repo.Predicate, value string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "link", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereLinkIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "link", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereLinkNotIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "link", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByLink(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "link "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIcon(p db_repo.Predicate, value string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "icon", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIconIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "icon", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIconNotIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "icon", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByIcon(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "icon "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereLevel(p db_repo.Predicate, value int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "level", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereLevelIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "level", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereLevelNotIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "level", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByLevel(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "level "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIsUsed(p db_repo.Predicate, value int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "is_used", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIsUsedIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "is_used", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIsUsedNotIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "is_used", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByIsUsed(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "is_used "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIsDeleted(p db_repo.Predicate, value int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "is_deleted", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIsDeletedIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "is_deleted", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereIsDeletedNotIn(value []int32) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "is_deleted", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByIsDeleted(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "is_deleted "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereCreatedAt(p db_repo.Predicate, value time.Time) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "created_at", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereCreatedAtIn(value []time.Time) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "created_at", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereCreatedAtNotIn(value []time.Time) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "created_at", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByCreatedAt(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "created_at "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereCreatedUser(p db_repo.Predicate, value string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "created_user", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereCreatedUserIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "created_user", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereCreatedUserNotIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "created_user", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByCreatedUser(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "created_user "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereUpdatedAt(p db_repo.Predicate, value time.Time) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "updated_at", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereUpdatedAtIn(value []time.Time) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "updated_at", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereUpdatedAtNotIn(value []time.Time) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "updated_at", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByUpdatedAt(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "updated_at "+order) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereUpdatedUser(p db_repo.Predicate, value string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "updated_user", p), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereUpdatedUserIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "updated_user", "IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) WhereUpdatedUserNotIn(value []string) *menuRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "updated_user", "NOT IN"), + value, + }) + return qb +} + +func (qb *menuRepoQueryBuilder) OrderByUpdatedUser(asc bool) *menuRepoQueryBuilder { + order := "DESC" + if asc { + order = "ASC" + } + + qb.order = append(qb.order, "updated_user "+order) + return qb +} diff --git a/internal/api/repository/db_repo/menu_repo/gen_model.go b/internal/api/repository/db_repo/menu_repo/gen_model.go new file mode 100755 index 0000000..044ac0a --- /dev/null +++ b/internal/api/repository/db_repo/menu_repo/gen_model.go @@ -0,0 +1,20 @@ +package menu_repo + +import "time" + +// 左侧菜单栏表 +//go:generate gormgen -structs Menu -input . +type Menu struct { + Id int32 // 主键 + Pid int32 // 父类ID + Name string // 菜单名称 + Link string // 链接地址 + Icon string // 图标 + Level int32 // 菜单类型 1:一级菜单 2:二级菜单 + IsUsed int32 // 是否启用 1:是 -1:否 + IsDeleted int32 // 是否删除 1:是 -1:否 + CreatedAt time.Time `gorm:"time"` // 创建时间 + CreatedUser string // 创建人 + UpdatedAt time.Time `gorm:"time"` // 更新时间 + UpdatedUser string // 更新人 +} diff --git a/internal/api/repository/db_repo/menu_repo/gen_table.md b/internal/api/repository/db_repo/menu_repo/gen_table.md new file mode 100755 index 0000000..90ba154 --- /dev/null +++ b/internal/api/repository/db_repo/menu_repo/gen_table.md @@ -0,0 +1,17 @@ +#### go_gin_api.menu +左侧菜单栏表 + +| 序号 | 名称 | 描述 | 类型 | 键 | 为空 | 额外 | 默认值 | +| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | +| 1 | id | 主键 | int(11) unsigned | PRI | NO | auto_increment | | +| 2 | pid | 父类ID | int(11) unsigned | | NO | | 0 | +| 3 | name | 菜单名称 | varchar(32) | | NO | | | +| 4 | link | 链接地址 | varchar(100) | | NO | | | +| 5 | icon | 图标 | varchar(60) | | NO | | | +| 6 | level | 菜单类型 1:一级菜单 2:二级菜单 | tinyint(1) unsigned | | NO | | 1 | +| 7 | is_used | 是否启用 1:是 -1:否 | tinyint(1) | | NO | | 1 | +| 8 | is_deleted | 是否删除 1:是 -1:否 | tinyint(1) | | NO | | -1 | +| 9 | created_at | 创建时间 | timestamp | | NO | | CURRENT_TIMESTAMP | +| 10 | created_user | 创建人 | varchar(60) | | NO | | | +| 11 | updated_at | 更新时间 | timestamp | | NO | on update CURRENT_TIMESTAMP | CURRENT_TIMESTAMP | +| 12 | updated_user | 更新人 | varchar(60) | | NO | | | diff --git a/internal/api/service/authorized_service/service_detailbykey.go b/internal/api/service/authorized_service/service_detailbykey.go index 66e15f0..dc6a1d0 100644 --- a/internal/api/service/authorized_service/service_detailbykey.go +++ b/internal/api/service/authorized_service/service_detailbykey.go @@ -2,6 +2,7 @@ package authorized_service import ( "encoding/json" + "time" "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo" "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/authorized_api_repo" @@ -71,7 +72,7 @@ func (s *service) DetailByKey(ctx core.Context, key string) (cacheData *CacheAut cacheDataByte, _ := json.Marshal(cacheData) - err = s.cache.Set(cacheKey, string(cacheDataByte), 0, cache.WithTrace(ctx.Trace())) + err = s.cache.Set(cacheKey, string(cacheDataByte), time.Hour*24, cache.WithTrace(ctx.Trace())) if err != nil { return nil, err } diff --git a/internal/api/service/menu_service/service.go b/internal/api/service/menu_service/service.go new file mode 100644 index 0000000..0f68162 --- /dev/null +++ b/internal/api/service/menu_service/service.go @@ -0,0 +1,45 @@ +package menu_service + +import ( + "github.com/xinliangnote/go-gin-api/configs" + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/menu_repo" + "github.com/xinliangnote/go-gin-api/internal/pkg/cache" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" + "github.com/xinliangnote/go-gin-api/internal/pkg/db" +) + +var _ Service = (*service)(nil) + +// 定义缓存前缀 +var cacheKeyPrefix = configs.ProjectName() + ":admin:" + +type Service interface { + i() + CacheKeyPrefix() (pre string) + + Create(ctx core.Context, menuData *CreateMenuData) (id int32, err error) + Modify(ctx core.Context, id int32, menuData *UpdateMenuData) (err error) + List(ctx core.Context, searchData *SearchData) (listData []*menu_repo.Menu, err error) + UpdateUsed(ctx core.Context, id int32, used int32) (err error) + Delete(ctx core.Context, id int32) (err error) + Detail(ctx core.Context, searchOneData *SearchOneData) (info *menu_repo.Menu, err error) +} + +type service struct { + db db.Repo + cache cache.Repo +} + +func New(db db.Repo, cache cache.Repo) Service { + return &service{ + db: db, + cache: cache, + } +} + +func (s *service) i() {} + +func (s *service) CacheKeyPrefix() (pre string) { + pre = cacheKeyPrefix + return +} diff --git a/internal/api/service/menu_service/service_create.go b/internal/api/service/menu_service/service_create.go new file mode 100644 index 0000000..ea3cd7d --- /dev/null +++ b/internal/api/service/menu_service/service_create.go @@ -0,0 +1,32 @@ +package menu_service + +import ( + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/menu_repo" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +type CreateMenuData struct { + Pid int32 // 父类ID + Name string // 菜单名称 + Link string // 链接地址 + Icon string // 图标 + Level int32 // 菜单类型 1:一级菜单 2:二级菜单 +} + +func (s *service) Create(ctx core.Context, menuData *CreateMenuData) (id int32, err error) { + model := menu_repo.NewModel() + model.Pid = menuData.Pid + model.Name = menuData.Name + model.Link = menuData.Link + model.Icon = menuData.Icon + model.Level = menuData.Level + model.CreatedUser = ctx.UserName() + model.IsUsed = 1 + model.IsDeleted = -1 + + id, err = model.Create(s.db.GetDbW().WithContext(ctx.RequestContext())) + if err != nil { + return 0, err + } + return +} diff --git a/internal/api/service/menu_service/service_delete.go b/internal/api/service/menu_service/service_delete.go new file mode 100644 index 0000000..6fdb0d2 --- /dev/null +++ b/internal/api/service/menu_service/service_delete.go @@ -0,0 +1,23 @@ +package menu_service + +import ( + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/menu_repo" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +func (s *service) Delete(ctx core.Context, id int32) (err error) { + model := menu_repo.NewModel() + model.Id = id + + data := map[string]interface{}{ + "is_deleted": 1, + "updated_user": ctx.UserName(), + } + + err = model.Updates(s.db.GetDbW().WithContext(ctx.RequestContext()), data) + if err != nil { + return err + } + + return +} diff --git a/internal/api/service/menu_service/service_detail.go b/internal/api/service/menu_service/service_detail.go new file mode 100644 index 0000000..e3c20e2 --- /dev/null +++ b/internal/api/service/menu_service/service_detail.go @@ -0,0 +1,33 @@ +package menu_service + +import ( + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo" + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/menu_repo" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +type SearchOneData struct { + Id int32 // 用户ID + IsUsed int32 // 是否启用 1:是 -1:否 +} + +func (s *service) Detail(ctx core.Context, searchOneData *SearchOneData) (info *menu_repo.Menu, err error) { + + qb := menu_repo.NewQueryBuilder() + qb.WhereIsDeleted(db_repo.EqualPredicate, -1) + + if searchOneData.Id != 0 { + qb.WhereId(db_repo.EqualPredicate, searchOneData.Id) + } + + if searchOneData.IsUsed != 0 { + qb.WhereIsUsed(db_repo.EqualPredicate, searchOneData.IsUsed) + } + + info, err = qb.QueryOne(s.db.GetDbR().WithContext(ctx.RequestContext())) + if err != nil { + return nil, err + } + + return +} diff --git a/internal/api/service/menu_service/service_list.go b/internal/api/service/menu_service/service_list.go new file mode 100644 index 0000000..59a6451 --- /dev/null +++ b/internal/api/service/menu_service/service_list.go @@ -0,0 +1,30 @@ +package menu_service + +import ( + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo" + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/menu_repo" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +type SearchData struct { + Pid int32 // 父类ID +} + +func (s *service) List(ctx core.Context, searchData *SearchData) (listData []*menu_repo.Menu, err error) { + + qb := menu_repo.NewQueryBuilder() + qb.WhereIsDeleted(db_repo.EqualPredicate, -1) + + if searchData.Pid != 0 { + qb.WherePid(db_repo.EqualPredicate, searchData.Pid) + } + + listData, err = qb. + OrderById(false). + QueryAll(s.db.GetDbR().WithContext(ctx.RequestContext())) + if err != nil { + return nil, err + } + + return +} diff --git a/internal/api/service/menu_service/service_modify.go b/internal/api/service/menu_service/service_modify.go new file mode 100644 index 0000000..f634092 --- /dev/null +++ b/internal/api/service/menu_service/service_modify.go @@ -0,0 +1,31 @@ +package menu_service + +import ( + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/menu_repo" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +type UpdateMenuData struct { + Name string // 菜单名称 + Link string // 链接地址 + Icon string // 图标 +} + +func (s *service) Modify(ctx core.Context, id int32, menuData *UpdateMenuData) (err error) { + model := menu_repo.NewModel() + model.Id = id + + data := map[string]interface{}{ + "name": menuData.Name, + "link": menuData.Link, + "icon": menuData.Icon, + "updated_user": ctx.UserName(), + } + + err = model.Updates(s.db.GetDbW().WithContext(ctx.RequestContext()), data) + if err != nil { + return err + } + + return +} diff --git a/internal/api/service/menu_service/service_updateused.go b/internal/api/service/menu_service/service_updateused.go new file mode 100644 index 0000000..d5b98c8 --- /dev/null +++ b/internal/api/service/menu_service/service_updateused.go @@ -0,0 +1,23 @@ +package menu_service + +import ( + "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/menu_repo" + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +func (s *service) UpdateUsed(ctx core.Context, id int32, used int32) (err error) { + model := menu_repo.NewModel() + model.Id = id + + data := map[string]interface{}{ + "is_used": used, + "updated_user": ctx.UserName(), + } + + err = model.Updates(s.db.GetDbW().WithContext(ctx.RequestContext()), data) + if err != nil { + return err + } + + return +} diff --git a/internal/router/middleware/middle_signature.go b/internal/router/middleware/middle_signature.go index 7b2cedc..2c9bb5b 100644 --- a/internal/router/middleware/middle_signature.go +++ b/internal/router/middleware/middle_signature.go @@ -9,8 +9,8 @@ import ( "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/pkg/errno" "github.com/xinliangnote/go-gin-api/pkg/signature" + "github.com/xinliangnote/go-gin-api/pkg/urltable" - "github.com/koketama/urltable" "github.com/pkg/errors" ) diff --git a/internal/router/router_api.go b/internal/router/router_api.go index ec505aa..deba941 100644 --- a/internal/router/router_api.go +++ b/internal/router/router_api.go @@ -4,6 +4,7 @@ import ( "github.com/xinliangnote/go-gin-api/internal/api/controller/admin_handler" "github.com/xinliangnote/go-gin-api/internal/api/controller/authorized_handler" "github.com/xinliangnote/go-gin-api/internal/api/controller/config_handler" + "github.com/xinliangnote/go-gin-api/internal/api/controller/menu_handler" "github.com/xinliangnote/go-gin-api/internal/api/controller/tool_handler" "github.com/xinliangnote/go-gin-api/internal/pkg/core" ) @@ -43,10 +44,23 @@ func setApiRouter(r *resource) { api.GET("/admin/info", adminHandler.Detail()) api.PATCH("/admin/modify_personal_info", adminHandler.ModifyPersonalInfo()) + // menu + menuHandler := menu_handler.New(r.logger, r.db, r.cache) + api.POST("/menu", menuHandler.Create()) + api.GET("/menu", menuHandler.List()) + api.GET("/menu/:id", menuHandler.Detail()) + api.PATCH("/menu/used", menuHandler.UpdateUsed()) + api.DELETE("/menu/:id", menuHandler.Delete()) + // tool toolHandler := tool_handler.New(r.logger, r.db, r.cache) api.GET("/tool/hashids/encode/:id", toolHandler.HashIdsEncode()) api.GET("/tool/hashids/decode/:id", toolHandler.HashIdsDecode()) + api.POST("/tool/cache/search", toolHandler.SearchCache()) + api.PATCH("/tool/cache/clear", toolHandler.ClearCache()) + api.GET("/tool/data/dbs", toolHandler.Dbs()) + api.POST("/tool/data/tables", toolHandler.Tables()) + api.POST("/tool/data/mysql", toolHandler.SearchMySQL()) // config configHandler := config_handler.New(r.logger, r.db, r.cache) diff --git a/internal/router/router_web.go b/internal/router/router_web.go index c979272..a32bf0d 100644 --- a/internal/router/router_web.go +++ b/internal/router/router_web.go @@ -58,10 +58,13 @@ func setWebRouter(r *resource) { web.GET("/admin/modify_password", adminHandler.ModifyPasswordView()) web.GET("/admin/modify_info", adminHandler.ModifyInfoView()) web.GET("/login", adminHandler.LoginView()) + web.GET("/admin/menu", adminHandler.MenuView()) // 工具箱 web.GET("/tool/hashids", toolHandler.HashIdsView()) web.GET("/tool/logs", toolHandler.LogsView()) + web.GET("/tool/cache", toolHandler.CacheView()) + web.GET("/tool/data", toolHandler.DataView()) } } diff --git a/internal/web/controller/admin_handler/func_menuview.go b/internal/web/controller/admin_handler/func_menuview.go new file mode 100644 index 0000000..201580c --- /dev/null +++ b/internal/web/controller/admin_handler/func_menuview.go @@ -0,0 +1,9 @@ +package admin_handler + +import "github.com/xinliangnote/go-gin-api/internal/pkg/core" + +func (h *handler) MenuView() core.HandlerFunc { + return func(c core.Context) { + c.HTML("menu_view", nil) + } +} diff --git a/internal/web/controller/admin_handler/handler.go b/internal/web/controller/admin_handler/handler.go index 87659ab..d46ca53 100644 --- a/internal/web/controller/admin_handler/handler.go +++ b/internal/web/controller/admin_handler/handler.go @@ -18,6 +18,7 @@ type Handler interface { LoginView() core.HandlerFunc ModifyPasswordView() core.HandlerFunc ModifyInfoView() core.HandlerFunc + MenuView() core.HandlerFunc } type handler struct { diff --git a/internal/web/controller/config_handler/func_codeview.go b/internal/web/controller/config_handler/func_codeview.go index c5dc9ec..cd50a41 100644 --- a/internal/web/controller/config_handler/func_codeview.go +++ b/internal/web/controller/config_handler/func_codeview.go @@ -12,6 +12,16 @@ import ( "github.com/spf13/cast" ) +type codes struct { + Code int `json:"code"` // 错误码 + Message string `json:"message"` // 错误码信息 +} + +type codeViewResponse struct { + SystemCodes []codes + BusinessCodes []codes +} + func (h *handler) CodeView() core.HandlerFunc { return func(c core.Context) { fs := token.NewFileSet() @@ -21,12 +31,10 @@ func (h *handler) CodeView() core.HandlerFunc { log.Fatalf("parsing package: %s: %s\n", filePath, err) } - type codes struct { - Code int `json:"code"` // 错误码 - Message string `json:"message"` // 错误码信息 - } - - var constCodes []codes + var ( + systemCodes []codes + businessCodes []codes + ) dst.Inspect(parsedFile, func(n dst.Node) bool { decl, ok := n.(*dst.GenDecl) @@ -42,15 +50,27 @@ func (h *handler) CodeView() core.HandlerFunc { codeInt := cast.ToInt(valueSpec.Values[0].(*dst.BasicLit).Value) - constCodes = append(constCodes, codes{ - Code: codeInt, - Message: code.Text(codeInt), - }) + if codeInt < 20000 { + systemCodes = append(systemCodes, codes{ + Code: codeInt, + Message: code.Text(codeInt), + }) + } else { + businessCodes = append(businessCodes, codes{ + Code: codeInt, + Message: code.Text(codeInt), + }) + } + } return true }) - c.HTML("config_code", constCodes) + obj := new(codeViewResponse) + obj.BusinessCodes = businessCodes + obj.SystemCodes = systemCodes + + c.HTML("config_code", obj) } } diff --git a/internal/web/controller/gencode_handler/func_gormview.go b/internal/web/controller/gencode_handler/func_gormview.go index ea642a8..7d274ae 100644 --- a/internal/web/controller/gencode_handler/func_gormview.go +++ b/internal/web/controller/gencode_handler/func_gormview.go @@ -21,7 +21,7 @@ func (h *handler) GormView() core.HandlerFunc { sqlTables := fmt.Sprintf("SELECT `table_name`,`table_comment` FROM `information_schema`.`tables` WHERE `table_schema`= '%s'", mysqlConf.Name) rows, err := h.db.GetDbR().Raw(sqlTables).Rows() if err != nil { - c.HTML("gormgen", tableCollect) + c.HTML("gencode_gorm", tableCollect) return } defer rows.Close() diff --git a/internal/web/controller/install_handler/func_execute.go b/internal/web/controller/install_handler/func_execute.go index 9fbf038..fd2e8e1 100644 --- a/internal/web/controller/install_handler/func_execute.go +++ b/internal/web/controller/install_handler/func_execute.go @@ -4,6 +4,7 @@ import ( "fmt" "net/http" "os" + "runtime" "github.com/xinliangnote/go-gin-api/configs" "github.com/xinliangnote/go-gin-api/internal/api/code" @@ -43,6 +44,17 @@ func (h *handler) Execute() core.HandlerFunc { return } + versionStr := runtime.Version() + version := cast.ToFloat32(versionStr[2:]) + if version < 1.15 { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ConfigGoVersionError, + code.Text(code.ConfigGoVersionError)), + ) + return + } + outPutString := "" cfg := configs.Get() @@ -187,6 +199,16 @@ func (h *handler) Execute() core.HandlerFunc { } outPutString += "初始化 MySQL 数据表:admin 默认数据成功。\n" + if err = db.Exec(mysql_table.CreateMenuTableSql()).Error; err != nil { + c.AbortWithError(errno.NewError( + http.StatusBadRequest, + code.ConfigMySQLInstallError, + "MySQL "+err.Error()).WithErr(err), + ) + return + } + outPutString += "初始化 MySQL 数据表:menu 成功。\n" + // 生成 install 完成标识 f, err := os.Create(configs.ProjectInstallFile()) if err != nil { diff --git a/internal/web/controller/install_handler/func_view.go b/internal/web/controller/install_handler/func_view.go index 2755e81..eb46a11 100644 --- a/internal/web/controller/install_handler/func_view.go +++ b/internal/web/controller/install_handler/func_view.go @@ -1,12 +1,22 @@ package install_handler import ( + "runtime" + "github.com/xinliangnote/go-gin-api/configs" "github.com/xinliangnote/go-gin-api/internal/pkg/core" ) +type viewResponse struct { + Config configs.Config + GoVersion string +} + func (h *handler) View() core.HandlerFunc { return func(c core.Context) { - c.HTML("install_view", configs.Get()) + obj := new(viewResponse) + obj.Config = configs.Get() + obj.GoVersion = runtime.Version() + c.HTML("install_view", obj) } } diff --git a/internal/web/controller/install_handler/mysql_table/table_menu.go b/internal/web/controller/install_handler/mysql_table/table_menu.go new file mode 100644 index 0000000..aef8de9 --- /dev/null +++ b/internal/web/controller/install_handler/mysql_table/table_menu.go @@ -0,0 +1,37 @@ +package mysql_table + +//CREATE TABLE `menu` ( +//`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', +//`pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父类ID', +//`name` varchar(32) NOT NULL DEFAULT '' COMMENT '菜单名称', +//`link` varchar(100) NOT NULL DEFAULT '' COMMENT '链接地址', +//`icon` varchar(60) NOT NULL DEFAULT '' COMMENT '图标', +//`level` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '菜单类型 1:一级菜单 2:二级菜单', +//`is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用 1:是 -1:否', +//`is_deleted` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否删除 1:是 -1:否', +//`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', +//`created_user` varchar(60) NOT NULL DEFAULT '' COMMENT '创建人', +//`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', +//`updated_user` varchar(60) NOT NULL DEFAULT '' COMMENT '更新人', +//PRIMARY KEY (`id`) +//) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='左侧菜单栏表'; + +func CreateMenuTableSql() (sql string) { + sql = "CREATE TABLE `menu` (" + sql += "`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键'," + sql += "`pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父类ID'," + sql += "`name` varchar(32) NOT NULL DEFAULT '' COMMENT '菜单名称'," + sql += "`link` varchar(100) NOT NULL DEFAULT '' COMMENT '链接地址'," + sql += "`icon` varchar(60) NOT NULL DEFAULT '' COMMENT '图标'," + sql += "`level` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '菜单类型 1:一级菜单 2:二级菜单'," + sql += "`is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用 1:是 -1:否'," + sql += "`is_deleted` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否删除 1:是 -1:否'," + sql += "`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'," + sql += "`created_user` varchar(60) NOT NULL DEFAULT '' COMMENT '创建人'," + sql += "`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'," + sql += "`updated_user` varchar(60) NOT NULL DEFAULT '' COMMENT '更新人'," + sql += "PRIMARY KEY (`id`)" + sql += ") ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='左侧菜单栏表';" + + return +} diff --git a/internal/web/controller/install_handler/mysql_table/table_user_demo.go b/internal/web/controller/install_handler/mysql_table/table_user_demo.go deleted file mode 100644 index eb15c5b..0000000 --- a/internal/web/controller/install_handler/mysql_table/table_user_demo.go +++ /dev/null @@ -1,27 +0,0 @@ -package mysql_table - -//CREATE TABLE `user_demo` ( -//`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', -//`user_name` varchar(32) NOT NULL DEFAULT '' COMMENT '用户名', -//`nick_name` varchar(100) NOT NULL DEFAULT '' COMMENT '昵称', -//`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号', -//`is_deleted` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否删除 1:是 -1:否', -//`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -//`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -//PRIMARY KEY (`id`) -//) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户Demo表'; - -func CreateUserDemoTableSql() (sql string) { - sql = "CREATE TABLE `user_demo` (" - sql += "`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键'," - sql += "`user_name` varchar(32) NOT NULL DEFAULT '' COMMENT '用户名'," - sql += "`nick_name` varchar(100) NOT NULL DEFAULT '' COMMENT '昵称'," - sql += "`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号'," - sql += "`is_deleted` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否删除 1:是 -1:否'," - sql += "`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'," - sql += "`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'," - sql += "PRIMARY KEY (`id`)" - sql += ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户Demo表';" - - return -} diff --git a/internal/web/controller/tool_handler/func_cacheview.go b/internal/web/controller/tool_handler/func_cacheview.go new file mode 100644 index 0000000..2374072 --- /dev/null +++ b/internal/web/controller/tool_handler/func_cacheview.go @@ -0,0 +1,11 @@ +package tool_handler + +import ( + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +func (h *handler) CacheView() core.HandlerFunc { + return func(c core.Context) { + c.HTML("tool_cache", nil) + } +} diff --git a/internal/web/controller/tool_handler/func_dataview.go b/internal/web/controller/tool_handler/func_dataview.go new file mode 100644 index 0000000..69e024a --- /dev/null +++ b/internal/web/controller/tool_handler/func_dataview.go @@ -0,0 +1,11 @@ +package tool_handler + +import ( + "github.com/xinliangnote/go-gin-api/internal/pkg/core" +) + +func (h *handler) DataView() core.HandlerFunc { + return func(c core.Context) { + c.HTML("tool_data", nil) + } +} diff --git a/internal/web/controller/tool_handler/handler.go b/internal/web/controller/tool_handler/handler.go index 7fcac95..bd3ca06 100644 --- a/internal/web/controller/tool_handler/handler.go +++ b/internal/web/controller/tool_handler/handler.go @@ -15,6 +15,8 @@ type Handler interface { HashIdsView() core.HandlerFunc LogsView() core.HandlerFunc + CacheView() core.HandlerFunc + DataView() core.HandlerFunc } type handler struct { diff --git a/pkg/errors/err.go b/pkg/errors/err.go new file mode 100644 index 0000000..aa416ae --- /dev/null +++ b/pkg/errors/err.go @@ -0,0 +1,100 @@ +package errors + +import ( + "fmt" + "io" + "runtime" + + "github.com/pkg/errors" +) + +func callers() []uintptr { + var pcs [32]uintptr + l := runtime.Callers(3, pcs[:]) + return pcs[:l] +} + +// Error a error with caller stack information +type Error interface { + error + t() +} + +var _ (Error) = (*item)(nil) +var _ (fmt.Formatter) = (*item)(nil) + +type item struct { + msg string + stack []uintptr +} + +func (i *item) Error() string { + return i.msg +} + +func (i *item) t() {} + +// Format used by go.uber.org/zap in Verbose +func (i *item) Format(s fmt.State, verb rune) { + io.WriteString(s, i.msg) + io.WriteString(s, "\n") + + for _, pc := range i.stack { + fmt.Fprintf(s, "%+v\n", errors.Frame(pc)) + } +} + +// New create a new error +func New(msg string) Error { + return &item{msg: msg, stack: callers()} +} + +// Errorf create a new error +func Errorf(format string, args ...interface{}) Error { + return &item{msg: fmt.Sprintf(format, args...), stack: callers()} +} + +// Wrap with some extra message into err +func Wrap(err error, msg string) Error { + if err == nil { + return nil + } + + e, ok := err.(*item) + if !ok { + return &item{msg: fmt.Sprintf("%s; %s", msg, err.Error()), stack: callers()} + } + + e.msg = fmt.Sprintf("%s; %s", msg, e.msg) + return e +} + +// Wrapf with some extra message into err +func Wrapf(err error, format string, args ...interface{}) Error { + if err == nil { + return nil + } + + msg := fmt.Sprintf(format, args...) + + e, ok := err.(*item) + if !ok { + return &item{msg: fmt.Sprintf("%s; %s", msg, err.Error()), stack: callers()} + } + + e.msg = fmt.Sprintf("%s; %s", msg, e.msg) + return e +} + +// WithStack add caller stack information +func WithStack(err error) Error { + if err == nil { + return nil + } + + if e, ok := err.(*item); ok { + return e + } + + return &item{msg: err.Error(), stack: callers()} +} diff --git a/pkg/errors/err_test.go b/pkg/errors/err_test.go new file mode 100644 index 0000000..5a8a6ea --- /dev/null +++ b/pkg/errors/err_test.go @@ -0,0 +1,34 @@ +package errors + +import ( + "errors" + "testing" + + "go.uber.org/zap" +) + +func TestErr(t *testing.T) { + logger, _ := zap.NewProduction() + + logger.Info("errorf", zap.Error(Errorf("%s %d", "127.0.0.1", 80))) + + err := New("a dummy err") + logger.Info("new", zap.Error(err)) + + err = Wrap(err, "ping timeout err") + logger.Info("wrap", zap.Error(err)) + + err = Wrapf(err, "ip: %s port: %d", "localhost", 80) + logger.Info("wrapf", zap.Error(err)) + + err = WithStack(err) + logger.Info("withstack", zap.Error(err)) + + logger.Info("wrap std", zap.Error(Wrap(errors.New("std err"), "some err occurs"))) + + logger.Info("wrapf std", zap.Error(Wrapf(errors.New("std err"), "ip: %s port: %d", "localhost", 80))) + + logger.Info("withstack std", zap.Error(WithStack(errors.New("std err")))) + + t.Logf("%+v", New("a dummy error")) +} diff --git a/pkg/urltable/urltable.go b/pkg/urltable/urltable.go new file mode 100644 index 0000000..8bba1c1 --- /dev/null +++ b/pkg/urltable/urltable.go @@ -0,0 +1,169 @@ +package urltable + +import ( + "net/http" + "strings" + + "github.com/xinliangnote/go-gin-api/pkg/errors" +) + +const ( + empty = "" + fuzzy = "*" + omitted = "**" + delimiter = "/" + methodView = "VIEW" +) + +// parse and validate pattern +func parse(pattern string) ([]string, error) { + const format = "[get, post, put, patch, delete, view]/{a-Z}+/{*}+/{**}" + + if pattern = strings.TrimLeft(strings.TrimSpace(pattern), delimiter); pattern == "" { + return nil, errors.Errorf("pattern illegal, should in format of %s", format) + } + + paths := strings.Split(pattern, delimiter) + if len(paths) < 2 { + return nil, errors.Errorf("pattern illegal, should in format of %s", format) + } + + for i := range paths { + paths[i] = strings.TrimSpace(paths[i]) + } + + // likes get/ get/* get/** + if len(paths) == 2 && (paths[1] == empty || paths[1] == fuzzy || paths[1] == omitted) { + return nil, errors.New("illegal wildcard") + } + + switch paths[0] = strings.ToUpper(paths[0]); paths[0] { + case http.MethodGet, + http.MethodPost, + http.MethodPut, + http.MethodPatch, + http.MethodDelete, + methodView: + default: + return nil, errors.Errorf("only supports [%s %s %s %s %s %s]", + http.MethodGet, http.MethodPost, http.MethodPut, http.MethodPatch, http.MethodDelete, methodView) + } + + for k := 1; k < len(paths); k++ { + if paths[k] == empty && k+1 != len(paths) { + return nil, errors.New("pattern contains illegal empty path") + } + + if paths[k] == omitted && k+1 != len(paths) { + return nil, errors.New("pattern contains illegal omitted path") + } + } + + return paths, nil +} + +// Format pattern +func Format(pattern string) (string, error) { + paths, err := parse(pattern) + if err != nil { + return "", err + } + + return strings.Join(paths, delimiter), nil +} + +type section struct { + leaf bool + mapping map[string]*section +} + +func newSection() *section { + return §ion{mapping: make(map[string]*section)} +} + +// Table a (thread unsafe) table to store urls +type Table struct { + size int + root *section +} + +// NewTable create a table +func NewTable() *Table { + return &Table{root: newSection()} +} + +// Size contains how many urls +func (t *Table) Size() int { + return t.size +} + +// Append pattern +func (t *Table) Append(pattern string) error { + paths, err := parse(pattern) + if err != nil { + return err + } + + insert := false + root := t.root + for i, path := range paths { + if (path == fuzzy && root.mapping[omitted] != nil) || + (path == omitted && root.mapping[fuzzy] != nil) || + (path != omitted && root.mapping[omitted] != nil) { + return errors.Errorf("conflict at %s", strings.Join(paths[:i], delimiter)) + } + + next := root.mapping[path] + if next == nil { + next = newSection() + root.mapping[path] = next + insert = true + } + root = next + } + + if insert { + t.size++ + } + + root.leaf = true + return nil +} + +// Mapping url to pattern +func (t *Table) Mapping(url string) (string, error) { + paths, err := parse(url) + if err != nil { + return "", err + } + + pattern := make([]string, 0, len(paths)) + + root := t.root + for _, path := range paths { + next := root.mapping[path] + if next == nil { + nextFuzzy := root.mapping[fuzzy] + nextOmitted := root.mapping[omitted] + if nextFuzzy == nil && nextOmitted == nil { + return "", nil + } + + if nextOmitted != nil { + pattern = append(pattern, omitted) + return strings.Join(pattern, delimiter), nil + } + + next = nextFuzzy + path = fuzzy + } + + root = next + pattern = append(pattern, path) + } + + if root.leaf { + return strings.Join(pattern, delimiter), nil + } + return "", nil +} diff --git a/pkg/urltable/urltable_test.go b/pkg/urltable/urltable_test.go new file mode 100644 index 0000000..2599a8b --- /dev/null +++ b/pkg/urltable/urltable_test.go @@ -0,0 +1,157 @@ +package urltable + +import ( + "strings" + "testing" +) + +func TestFormat(t *testing.T) { + pattern, err := Format(" view / a / b / c ") + if err != nil { + t.Fatal(err) + } + + if pattern != "VIEW/a/b/c" { + t.Fatal("format failed") + } +} + +func TestParse(t *testing.T) { + for i, pattern := range []string{ + "get/ a / b / c ", + "get/ a / b / * / ** ", + "get/ a / b / * / c / ** ", + "get/ a / b / * / * / c/ ** ", + "get/ a / b / * / * / c/ ", + } { + paths, err := parse(pattern) + if err != nil { + t.Fatal(pattern, "should be legal; err: ", err.Error()) + } + t.Log(i, strings.Join(paths, delimiter)) + } + + for _, pattern := range []string{ + " ", + " / ", + " x / ", + "get/ ", + "get/ * ", + "get/ ** ", + "get/ ** / * ", + "get/ ** / ** ", + "get/ a / ** / * ", + "get/ a / / * ", + "get/ a / / ** ", + "get/ a / / ", + "get/ a / * / / ", + "get/ a / * / ** / ", + } { + if _, err := parse(pattern); err == nil { + t.Fatal(pattern, "should be illegal") + } + } +} + +func TestAppend(t *testing.T) { + table := NewTable() + + if err := table.Append("get/a/b"); err != nil { + t.Fatal("shouldn't be err") + } + + if err := table.Append("get/a/b/*"); err != nil { + t.Fatal("shouldn't be err") + } + if err := table.Append("get/a/b/*/**"); err != nil { + t.Fatal("shouldn't be err") + } + + if err := table.Append("get/a/b/c/*"); err != nil { + t.Fatal("shouldn't be err") + } + if err := table.Append("get/a/b/c/*/**"); err != nil { + t.Fatal("shouldn't be err") + } + + t.Log(table.Size()) + if err := table.Append("get/a/b/c/*"); err != nil { + t.Fatal("shouldn't be err") + } + t.Log(table.Size()) + + if err := table.Append("get/a/b/**"); err == nil { + t.Fatal("should be err") + } + if err := table.Append("get/a/b/*/*"); err == nil { + t.Fatal("should be err") + } + if err := table.Append("get/a/b/*/c"); err == nil { + t.Fatal("should be err") + } +} + +func TestMapping(t *testing.T) { + table := NewTable() + + if err := table.Append("get/a/b"); err != nil { + t.Fatal("shouldn't be err") + } + + if err := table.Append("get/a/b/*"); err != nil { + t.Fatal("shouldn't be err") + } + if err := table.Append("get/a/b/*/**"); err != nil { + t.Fatal("shouldn't be err") + } + + if err := table.Append("get/a/b/c/*"); err != nil { + t.Fatal("shouldn't be err") + } + if err := table.Append("get/a/b/c/*/**"); err != nil { + t.Fatal("shouldn't be err") + } + + if pattern, _ := table.Mapping("get/a/b"); pattern == "" { + t.Fatal("should contains") + } else { + t.Log("get/a/b", ">>", pattern) + } + if pattern, _ := table.Mapping("get/a/b/"); pattern == "" { + t.Fatal("should contains") + } else { + t.Log("get/a/b/", ">>", pattern) + } + if pattern, _ := table.Mapping("get/a/b/x"); pattern == "" { + t.Fatal("should contains") + } else { + t.Log("get/a/b/x", ">>", pattern) + } + if pattern, _ := table.Mapping("get/a/b/x/y/z"); pattern == "" { + t.Fatal("should contains") + } else { + t.Log("get/a/b/x/y/z", ">>", pattern) + } + + if pattern, _ := table.Mapping("get/a/b/c/"); pattern == "" { + t.Fatal("should contains") + } else { + t.Log("get/a/b/c/", ">>", pattern) + } + if pattern, _ := table.Mapping("get/a/b/c/d/e/f"); pattern == "" { + t.Fatal("should contains") + } else { + t.Log("get/a/b/c/d/e/f", ">>", pattern) + } + + if pattern, _ := table.Mapping("get/a/"); pattern != "" { + t.Fatal("shouldn't contains") + } else { + t.Log("get/a/", ">>", pattern) + } + if pattern, _ := table.Mapping("get/a/c"); pattern != "" { + t.Fatal("shouldn't contains") + } else { + t.Log("get/a/c", ">>", pattern) + } +}