mirror of
https://github.com/kevinpapst/kimai2.git
synced 2025-04-30 15:30:11 +00:00
89 lines
3.3 KiB
JavaScript
89 lines
3.3 KiB
JavaScript
/*
|
|
* This file is part of the Kimai time-tracking app.
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
/*!
|
|
* [KIMAI] KimaiMultiUpdateForm: handle the multi update checkbox list and form
|
|
*/
|
|
|
|
import KimaiPlugin from '../KimaiPlugin';
|
|
|
|
export default class KimaiMultiUpdateTable extends KimaiPlugin {
|
|
|
|
init()
|
|
{
|
|
if (document.getElementById('multi_update_all') === null) {
|
|
return;
|
|
}
|
|
|
|
// we have to attach it to the "page-body" div, because section.content can be replaced
|
|
// via KimaiDatable and everything inside will be removed, including event listeners
|
|
const element = document.querySelector('div.page-body');
|
|
element.addEventListener('change', (event) => {
|
|
if (event.target.matches('#multi_update_all')) {
|
|
// the "check all" checkbox in the upper start corner of the table
|
|
const checked = event.target.checked;
|
|
for (const element of document.querySelectorAll('.multi_update_single')) {
|
|
element.checked = checked;
|
|
}
|
|
this._toggleForm();
|
|
event.stopPropagation();
|
|
} else if (event.target.matches('.multi_update_single')) {
|
|
// single checkboxes in front of each row
|
|
this._toggleForm();
|
|
event.stopPropagation();
|
|
}
|
|
});
|
|
|
|
element.addEventListener('click', (event) => {
|
|
if (event.target.matches('.multi_update_table_action')) {
|
|
const selectedItem = event.target;
|
|
const ids = this._getSelectedIds();
|
|
const form = document.getElementById('multi_update_form');
|
|
const question = form.dataset['question'].replace(/%action%/, selectedItem.textContent).replace(/%count%/, ids.length.toString());
|
|
|
|
/** @type {KimaiAlert} ALERT */
|
|
const ALERT = this.getPlugin('alert');
|
|
ALERT.question(question, function(value) {
|
|
if (value) {
|
|
const form = document.getElementById('multi_update_form');
|
|
form.action = selectedItem.dataset['href'];
|
|
form.submit();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
_getSelectedIds()
|
|
{
|
|
let ids = [];
|
|
for (const box of document.querySelectorAll('input.multi_update_single:checked')) {
|
|
ids.push(box.value);
|
|
}
|
|
|
|
return ids;
|
|
}
|
|
|
|
_toggleForm()
|
|
{
|
|
const ids = this._getSelectedIds();
|
|
document.getElementById('multi_update_table_entities').value = ids.join(',');
|
|
|
|
if (ids.length > 0) {
|
|
for (const element of document.getElementsByClassName('multi_update_form_hide')) {
|
|
element.style.setProperty('display', 'none', 'important');
|
|
}
|
|
document.getElementById('multi_update_form').style.display = null;//'block';
|
|
} else {
|
|
document.getElementById('multi_update_form').style.setProperty('display', 'none', 'important');
|
|
for (const element of document.getElementsByClassName('multi_update_form_hide')) {
|
|
element.style.display = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|