Source
xxxxxxxxxx
map.updateFilter([this.bar.querySelectorAll('input[type="checkbox"]:checked')].map(n => n.value));
/*
** Zabbix
** Copyright (C) 2001-2023 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.
**/
/**
* Extend Leaflet Map with functions necessary for Zabbix "Geomap" widget.
*
* @type {L.Map}
*/
L.Map.include({
_center: null,
navigateHomeControl: null,
severityFilterControl: null,
setDefaultView: function(latLng, zoom) {
this._center = {
latLng: latLng,
zoom: zoom
};
},
updateFilter: function(filter_data) {
this.getContainer().dispatchEvent(new CustomEvent('filter', {detail: filter_data}));
},
elmntCounter: (function() {
let counter = 0;
return function() {
return ++counter;
}
})()
});
/**
* Leaflet extension to provide severity filter in "Geomap" widget.
*
* @type {L.Control}
*/
L.Control.severityFilterFilterControl = L.Control.extend({
_severity_levels: null,
_filter_checked: [],
initialize: function({checked, severity_levels, disabled}) {
this._filter_checked = checked;
this._severity_levels = severity_levels;
this._disabled = disabled;
},
onAdd: function(map) {
const div = L.DomUtil.create('div', 'leaflet-bar leaflet-control');
const btn = L.DomUtil.create('a', 'geomap-filter-button', div);
this.bar = L.DomUtil.create('ul', 'checkbox-list geomap-filter', div);
btn.ariaLabel = t('Severity filter');
btn.title = t('Severity filter');
btn.role = 'button';
btn.href = '#';
if (!this._disabled) {
for (const [severity, prop] of this._severity_levels) {
const li = L.DomUtil.create('li', '', this.bar);
const chbox = L.DomUtil.create('input', '', li);
const label = L.DomUtil.create('label', '', li);
const span = L.DomUtil.create('span', '');
const chBoxId = 'filter_severity_' + map.elmntCounter();
label.append(span, document.createTextNode(prop.name));
chbox.checked = this._filter_checked.includes(severity.toString(10));
chbox.classList.add('checkbox-radio');
chbox.type = 'checkbox';
chbox.value = severity;
chbox.id = chBoxId;