2019-05-15 13:48:16 +00:00
|
|
|
const clickEvent = function($el) {
|
|
|
|
['mousedown', 'mouseup', 'click']
|
|
|
|
.map(function(type) {
|
|
|
|
return new MouseEvent(type, {
|
|
|
|
bubbles: true,
|
|
|
|
cancelable: true,
|
|
|
|
view: window,
|
|
|
|
});
|
|
|
|
})
|
|
|
|
.forEach(function(event) {
|
|
|
|
$el.dispatchEvent(event);
|
|
|
|
});
|
2018-10-19 15:17:02 +00:00
|
|
|
};
|
|
|
|
export default function(closest, click = clickEvent) {
|
|
|
|
// TODO: Decide whether we should use `e` for ease
|
|
|
|
// or `target`/`el`
|
2020-04-21 14:21:52 +00:00
|
|
|
// TODO: currently, using a string stopElement to tell the func
|
|
|
|
// where to stop looking and currenlty default is 'tr' because
|
|
|
|
// it's backwards compatible.
|
|
|
|
// Long-term this func shouldn't default to 'tr'
|
|
|
|
return function(e, stopElement = 'tr') {
|
2018-10-19 15:17:02 +00:00
|
|
|
// click on row functionality
|
|
|
|
// so if you click the actual row but not a link
|
|
|
|
// find the first link and fire that instead
|
|
|
|
const name = e.target.nodeName.toLowerCase();
|
|
|
|
switch (name) {
|
|
|
|
case 'input':
|
|
|
|
case 'label':
|
|
|
|
case 'a':
|
|
|
|
case 'button':
|
|
|
|
return;
|
|
|
|
}
|
2020-04-21 14:21:52 +00:00
|
|
|
const $a = closest(stopElement, e.target).querySelector('a');
|
2018-10-19 15:17:02 +00:00
|
|
|
if ($a) {
|
2019-05-15 13:48:16 +00:00
|
|
|
click($a);
|
2018-10-19 15:17:02 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|