54 lines
1.8 KiB
JavaScript
54 lines
1.8 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] KimaiReducedClickHandler: abstract class
|
|
*/
|
|
|
|
import jQuery from 'jquery';
|
|
import KimaiPlugin from "../KimaiPlugin";
|
|
|
|
export default class KimaiReducedClickHandler extends KimaiPlugin {
|
|
|
|
_addClickHandler(selector, callback) {
|
|
jQuery('body').on('click', selector, function(event) {
|
|
// just in case an inner element is editable, than this should not be triggered
|
|
if (event.target.parentNode.isContentEditable || event.target.isContentEditable) {
|
|
return;
|
|
}
|
|
|
|
// handles the "click" on table rows or list elements
|
|
let target = event.target;
|
|
if (event.currentTarget.matches('tr') || event.currentTarget.matches('li')) {
|
|
while (target !== null && !target.matches('body')) {
|
|
// when an element within the row is clicked, that can trigger stuff itself, we don't want the event to be processed
|
|
// don't act if a link, button or form element was clicked
|
|
if (target.matches('a') || target.matches ('button') || target.matches ('input')) {
|
|
return;
|
|
}
|
|
target = target.parentNode;
|
|
}
|
|
}
|
|
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
|
|
let href = jQuery(this).attr('data-href');
|
|
if (!href) {
|
|
href = jQuery(this).attr('href');
|
|
}
|
|
|
|
if (href === undefined || href === null || href === '') {
|
|
return;
|
|
}
|
|
|
|
callback(href);
|
|
});
|
|
}
|
|
|
|
}
|