diff --git a/resources/js/src/server/status/monitor.ts b/resources/js/src/server/status/monitor.ts
index a77c46a859..480d005486 100644
--- a/resources/js/src/server/status/monitor.ts
+++ b/resources/js/src/server/status/monitor.ts
@@ -117,7 +117,6 @@ AJAX.registerTeardown('server/status/monitor.js', function () {
$('#monitorChartRefreshRateSelect').off('change');
$('#monitorAddNewChartButton').off('click');
$('#monitorExportConfigButton').off('click');
- $('#monitorImportConfigButton').off('click');
$('#monitorResetConfigButton').off('click');
$('#monitorPauseResumeButton').off('click');
$('#monitorInstructionsButton').off('click');
@@ -677,99 +676,71 @@ AJAX.registerOnload('server/status/monitor.js', function () {
}, 100);
});
- $('#monitorImportConfigButton').on('click', function () {
- $('#emptyDialog').dialog({
- classes: {
- 'ui-dialog-titlebar-close': 'btn-close'
- },
- title: window.Messages.strImportDialogTitle
- });
+ function monitorImportConfigImportEventHandler () {
+ var input = ($('#monitorImportConfigModal').find('#import_file') as JQuery)[0];
+ var reader = new FileReader();
- $('#emptyDialog').html(window.Messages.strImportDialogMessage + '
');
-
- var dlgBtns = {
- [window.Messages.strImport]: {
- text: window.Messages.strImport,
- class: 'btn btn-primary',
- },
- [window.Messages.strCancel]: {
- text: window.Messages.strCancel,
- class: 'btn btn-secondary',
- },
+ reader.onerror = function (event) {
+ alert(window.Messages.strFailedParsingConfig + '\n' + event.target.error.code);
};
- // @ts-ignore
- dlgBtns[window.Messages.strImport].click = function () {
- var input = ($('#emptyDialog').find('#import_file') as JQuery)[0];
- var reader = new FileReader();
+ reader.onload = function (e) {
+ var data = (e.target.result as string);
+ var json = null;
+ // Try loading config
+ try {
+ json = JSON.parse(data);
+ } catch (err) {
+ alert(window.Messages.strFailedParsingConfig);
+ window.bootstrap.Modal.getOrCreateInstance('#monitorImportConfigModal').hide();
- reader.onerror = function (event) {
- alert(window.Messages.strFailedParsingConfig + '\n' + event.target.error.code);
- };
-
- reader.onload = function (e) {
- var data = (e.target.result as string);
- var json = null;
- // Try loading config
- try {
- json = JSON.parse(data);
- } catch (err) {
- alert(window.Messages.strFailedParsingConfig);
- $('#emptyDialog').dialog('close');
-
- return;
- }
-
- // Basic check, is this a monitor config json?
- if (! json || ! json.monitorCharts || ! json.monitorCharts) {
- alert(window.Messages.strFailedParsingConfig);
- $('#emptyDialog').dialog('close');
-
- return;
- }
-
- // If json ok, try applying config
- try {
- if (isStorageSupported('localStorage')) {
- window.localStorage.monitorCharts = JSON.stringify(json.monitorCharts);
- window.localStorage.monitorSettings = JSON.stringify(json.monitorSettings);
- }
-
- rebuildGrid();
- } catch (err) {
- alert(window.Messages.strFailedBuildingGrid);
- // If an exception is thrown, load default again
- if (isStorageSupported('localStorage')) {
- window.localStorage.removeItem('monitorCharts');
- window.localStorage.removeItem('monitorSettings');
- }
-
- rebuildGrid();
- }
-
- $('#emptyDialog').dialog('close');
- };
-
- if (input.files[0]) {
- reader.readAsText(input.files[0]);
+ return;
}
+
+ // Basic check, is this a monitor config json?
+ if (! json || ! json.monitorCharts || ! json.monitorCharts) {
+ alert(window.Messages.strFailedParsingConfig);
+ window.bootstrap.Modal.getOrCreateInstance('#monitorImportConfigModal').hide();
+
+ return;
+ }
+
+ // If json ok, try applying config
+ try {
+ if (isStorageSupported('localStorage')) {
+ window.localStorage.monitorCharts = JSON.stringify(json.monitorCharts);
+ window.localStorage.monitorSettings = JSON.stringify(json.monitorSettings);
+ }
+
+ rebuildGrid();
+ } catch (err) {
+ alert(window.Messages.strFailedBuildingGrid);
+ // If an exception is thrown, load default again
+ if (isStorageSupported('localStorage')) {
+ window.localStorage.removeItem('monitorCharts');
+ window.localStorage.removeItem('monitorSettings');
+ }
+
+ rebuildGrid();
+ }
+
+ window.bootstrap.Modal.getOrCreateInstance('#monitorImportConfigModal').hide();
};
- // @ts-ignore
- dlgBtns[window.Messages.strCancel].click = function () {
- $(this).dialog('close');
- };
+ if (input.files[0]) {
+ reader.readAsText(input.files[0]);
+ }
+ }
- $('#emptyDialog').dialog({
- classes: {
- 'ui-dialog-titlebar-close': 'btn-close'
- },
- width: 'auto',
- height: 'auto',
- // @ts-ignore
- buttons: dlgBtns
- });
+ const monitorImportConfigModal = document.getElementById('monitorImportConfigModal');
+ monitorImportConfigModal.addEventListener('shown.bs.modal', function () {
+ const monitorImportConfigImportButton = document.getElementById('monitorImportConfigImportButton');
+ monitorImportConfigImportButton?.addEventListener('click', monitorImportConfigImportEventHandler);
+ });
+
+ monitorImportConfigModal.addEventListener('hidden.bs.modal', function () {
+ const monitorImportConfigImportButton = document.getElementById('monitorImportConfigImportButton');
+ monitorImportConfigImportButton?.removeEventListener('click', monitorImportConfigImportEventHandler);
});
$('#monitorResetConfigButton').on('click', function () {
diff --git a/resources/templates/server/status/monitor/index.twig b/resources/templates/server/status/monitor/index.twig
index 4b801b73c4..2a6fb7dd27 100644
--- a/resources/templates/server/status/monitor/index.twig
+++ b/resources/templates/server/status/monitor/index.twig
@@ -50,7 +50,28 @@
{{ t('The arrangement of the charts is stored to the browsers local storage. You may want to export it if you have a complicated set up.') }}
-
+
+
+
diff --git a/src/Controllers/JavaScriptMessagesController.php b/src/Controllers/JavaScriptMessagesController.php
index a83f9f5852..f0f46090ab 100644
--- a/src/Controllers/JavaScriptMessagesController.php
+++ b/src/Controllers/JavaScriptMessagesController.php
@@ -324,8 +324,6 @@ final class JavaScriptMessagesController implements InvocableController
'strFailedBuildingGrid' => __(
'Failed building chart grid with imported config. Resetting to default config…',
),
- 'strImport' => __('Import'),
- 'strImportDialogTitle' => __('Import monitor configuration'),
'strImportDialogMessage' => __('Please select the file you want to import:'),
'strTableNameDialogMessage' => __('Please enter a valid table name.'),
'strDBNameDialogMessage' => __('Please enter a valid database name.'),