Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'ui/widgets/tophosts/views/column.edit.js.php')
-rw-r--r--ui/widgets/tophosts/views/column.edit.js.php158
1 files changed, 158 insertions, 0 deletions
diff --git a/ui/widgets/tophosts/views/column.edit.js.php b/ui/widgets/tophosts/views/column.edit.js.php
new file mode 100644
index 00000000000..d9adf48cebf
--- /dev/null
+++ b/ui/widgets/tophosts/views/column.edit.js.php
@@ -0,0 +1,158 @@
+<?php declare(strict_types = 0);
+/*
+** Zabbix
+** Copyright (C) 2001-2022 Zabbix SIA
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+**/
+
+
+use Zabbix\Widgets\Fields\CWidgetFieldColumnsList;
+
+?>
+
+window.tophosts_column_edit_form = new class {
+
+ init({form_name, thresholds, thresholds_colors}) {
+ this._$widget_form = $(`form[name="${form_name}"]`);
+ this._$thresholds_table = this._$widget_form.find('#thresholds_table');
+
+ $('[name="data"], [name="aggregate_function"], [name="display"]', this._$widget_form).on('change', () => {
+ this._update();
+ });
+
+ colorPalette.setThemeColors(thresholds_colors);
+
+ this._$thresholds_table.dynamicRows({
+ rows: thresholds,
+ template: '#thresholds-row-tmpl',
+ dataCallback: (row_data) => {
+ if (!('color' in row_data)) {
+ const colors = this._$widget_form[0].querySelectorAll('.<?= ZBX_STYLE_COLOR_PICKER ?> input');
+ const used_colors = [];
+
+ for (const color of colors) {
+ if (color.value !== '') {
+ used_colors.push(color.value);
+ }
+ }
+
+ row_data.color = colorPalette.getNextColor(used_colors);
+ }
+ }
+ });
+
+ $('tr.form_row input[name$="[color]"]', this._$thresholds_table).each((i, colorpicker) => {
+ $(colorpicker).colorpicker({appendTo: $(colorpicker).closest('.input-color-picker')});
+ });
+
+ this._$thresholds_table
+ .on('afteradd.dynamicRows', e => {
+ const $colorpicker = $('tr.form_row:last input[name$="[color]"]', e.target);
+
+ $colorpicker.colorpicker({appendTo: $colorpicker.closest('.input-color-picker')});
+
+ this._update();
+ })
+ .on('afterremove.dynamicRows', () => this._update());
+
+ this._$widget_form.on('process.form', (e, overlay) => {
+ this.handleFormSubmit(e, overlay);
+ });
+
+ // Initialize form elements accessibility.
+ this._update();
+
+ this._$widget_form[0].style.display = '';
+ this._$widget_form[0].querySelector('[name="name"]').focus();
+ }
+
+ _update() {
+ const display_as_is = ($('[name="display"]:checked').val() == <?= CWidgetFieldColumnsList::DISPLAY_AS_IS ?>);
+ const data_item_value = ($('[name="data"]').val() == <?= CWidgetFieldColumnsList::DATA_ITEM_VALUE ?>);
+ const data_text = ($('[name="data"]').val() == <?= CWidgetFieldColumnsList::DATA_TEXT ?>);
+ const no_aggregate_function = $('[name="aggregate_function"]').val() == <?= AGGREGATE_NONE ?>;
+
+ $('#item', this._$widget_form).multiSelect(data_item_value ? 'enable' : 'disable');
+ $('[name="aggregate_function"],[name="timeshift"]', this._$widget_form).attr('disabled', !data_item_value);
+ $('[name="aggregate_interval"]', this._$widget_form).attr('disabled', !data_item_value || no_aggregate_function);
+ $('[name="display"],[name="history"]', this._$widget_form).attr('disabled', !data_item_value);
+ $('[name="text"]', this._$widget_form).attr('disabled', !data_text);
+ $('[name="min"],[name="max"]', this._$widget_form).attr('disabled', display_as_is || !data_item_value);
+ this._$thresholds_table.toggleClass('disabled', !data_item_value);
+
+ // Toggle warning icons for non-numeric items settings.
+ if (data_item_value) {
+ document.getElementById('tophosts-column-aggregate-function-warning').style.display = no_aggregate_function
+ ? 'none'
+ : '';
+ document.getElementById('tophosts-column-display-warning').style.display = display_as_is ? 'none' : '';
+ document.getElementById('tophosts-column-thresholds-warning').style.display =
+ this._$thresholds_table[0].rows.length > 2 ? '' : 'none';
+ }
+
+ // Toggle visibility of disabled form elements.
+ $('.form-grid > label', this._$widget_form).each((i, elm) => {
+ const form_field = $(elm).next();
+ const is_visible = (form_field.find(':disabled,.disabled').length == 0);
+
+ $(elm).toggle(is_visible);
+ form_field.toggle(is_visible);
+ });
+ }
+
+ handleFormSubmit(e, overlay) {
+ fetch(new Curl(e.target.getAttribute('action')).getUrl(), {
+ method: 'POST',
+ body: new URLSearchParams(new FormData(e.target))
+ })
+ .then(response => response.json())
+ .then(response => {
+ if ('error' in response) {
+ throw {error: response.error};
+ }
+
+ overlayDialogueDestroy(overlay.dialogueid);
+
+ overlay.$dialogue[0].dispatchEvent(new CustomEvent('dialogue.submit', {detail: response}));
+ })
+ .catch((exception) => {
+ const form = this._$widget_form[0];
+
+ for (const element of form.parentNode.children) {
+ if (element.matches('.msg-good, .msg-bad, .msg-warning')) {
+ element.parentNode.removeChild(element);
+ }
+ }
+
+ let title, messages;
+
+ if (typeof exception === 'object' && 'error' in exception) {
+ title = exception.error.title;
+ messages = exception.error.messages;
+ }
+ else {
+ messages = [<?= json_encode(_('Unexpected server error.')) ?>];
+ }
+
+ const message_box = makeMessageBox('bad', messages, title)[0];
+
+ form.parentNode.insertBefore(message_box, form);
+ })
+ .finally(() => {
+ overlay.unsetLoading();
+ });
+ }
+};