Source
xxxxxxxxxx
map.updateFilter([this.bar.querySelectorAll('input[type="checkbox"]:checked')].map(n => n.value));
/*
** Copyright (C) 2001-2025 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** 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 Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/
/**
* 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) {
this._geomap_filter_div = L.DomUtil.create('div', 'leaflet-bar leaflet-control');
const btn = L.DomUtil.create('a', 'geomap-filter-button ' + ZBX_ICON_FILTER, this._geomap_filter_div);
btn.ariaLabel = t('Severity filter');
btn.title = t('Severity filter');
btn.role = 'button';
btn.href = '#';
if (!this._disabled) {
this.bar = L.DomUtil.create('ul', 'checkbox-list geomap-filter', this._geomap_filter_div);
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;
label.htmlFor = chBoxId;
}