Skip to content

Commit f06fb19

Browse files
action-list.js: Use vanilla js
1 parent 7f27443 commit f06fb19

1 file changed

Lines changed: 44 additions & 47 deletions

File tree

public/js/action-list.js

Lines changed: 44 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -42,74 +42,71 @@
4242
}
4343

4444
onClick(event) {
45-
var _this = event.data.self;
46-
var $activeItems;
47-
var $target = $(event.currentTarget);
48-
var $item = $target.closest('[data-action-item]');
49-
var $list = $item.closest('.action-list');
45+
let _this = event.data.self;
46+
let activeItems;
47+
let target = event.currentTarget;
48+
let item = target.closest('[data-action-item]');
49+
let list = target.closest('.action-list');
5050

51-
if ($target.is('a') && !$target.is('.subject')) {
51+
if (target.matches('a') && ! target.matches('.subject')) {
5252
return true;
5353
}
5454

5555
event.preventDefault();
5656
event.stopImmediatePropagation();
5757
event.stopPropagation();
5858

59-
if ($list.is('[data-icinga-multiselect-url]')) {
59+
if (list.matches('[data-icinga-multiselect-url]')) {
6060
if (event.ctrlKey || event.metaKey) {
61-
$item.toggleClass('active');
61+
item.classList.toggle('active');
6262
} else if (event.shiftKey) {
6363
document.getSelection().removeAllRanges();
64+
let allItems = Array.from(list.children);
65+
activeItems = list.querySelectorAll('[data-action-item].active');
6466

65-
$activeItems = $list.find('[data-action-item].active');
66-
67-
var $firstActiveItem = $activeItems.first();
68-
69-
$activeItems.removeClass('active');
67+
_this.clearSelection(activeItems);
7068

71-
$firstActiveItem.addClass('active');
72-
$item.addClass('active');
69+
let startIndex = allItems.indexOf(item);
70+
let endIndex = allItems.indexOf(activeItems[0]);
7371

74-
if ($item.index() > $firstActiveItem.index()) {
75-
$item.prevUntil($firstActiveItem).addClass('active');
72+
if (startIndex > endIndex) {
73+
for (let i = startIndex; i >= endIndex; i--) {
74+
_this.setActive(allItems[i]);
75+
}
7676
} else {
77-
var $lastActiveItem = $activeItems.last();
78-
79-
$lastActiveItem.addClass('active');
80-
$item.nextUntil($lastActiveItem).addClass('active');
77+
endIndex = allItems.indexOf(activeItems[activeItems.length - 1]);
78+
for (let i = startIndex; i <= endIndex; i++) {
79+
_this.setActive(allItems[i]);
80+
}
8181
}
8282
} else {
83-
$list.find('[data-action-item].active').removeClass('active');
84-
$item.addClass('active');
83+
_this.clearSelection(list.querySelectorAll('[data-action-item].active'));
84+
_this.setActive(item);
8585
}
8686
} else {
87-
$list.find('[data-action-item].active').removeClass('active');
88-
$item.addClass('active');
87+
_this.clearSelection(list.querySelectorAll('[data-action-item].active'));
88+
_this.setActive(item);
8989
}
9090

91-
$activeItems = $list.find('[data-action-item].active');
92-
if ($item.hasClass('active')) {
93-
_this.setLastActivatedItemUrl($item.data('icingaDetailFilter'));
91+
activeItems = list.querySelectorAll('[data-action-item].active');
92+
if (item.classList.contains('active')) {
93+
_this.setLastActivatedItemUrl(item.dataset.icingaDetailFilter);
9494
} else {
9595
_this.setLastActivatedItemUrl(
96-
$activeItems.length
97-
? $activeItems.last().data('icingaDetailFilter')
96+
activeItems.length
97+
? activeItems[activeItems.length - 1].dataset.icingaDetailFilter
9898
: null
9999
);
100100
}
101101

102-
_this.addSelectionCountToFooter($list[0]);
102+
_this.addSelectionCountToFooter(list);
103103

104-
if ($activeItems.length === 0) {
105-
if (_this.icinga.loader.getLinkTargetFor($target).attr('id') === 'col2') {
104+
if (activeItems.length === 0) {
105+
if (_this.icinga.loader.getLinkTargetFor($(target)).attr('id') === 'col2') {
106106
_this.icinga.ui.layout1col();
107107
}
108108
} else {
109-
_this.loadDetailUrl(
110-
$list[0],
111-
$target.is('a') ? $target.attr('href') : null
112-
);
109+
_this.loadDetailUrl(list, target.matches('a') ? target.href : null);
113110
}
114111
}
115112

@@ -468,7 +465,7 @@
468465
event.stopPropagation();
469466
event.preventDefault();
470467

471-
event.data.self.loadMore($(event.target));
468+
event.data.self.loadMore(event.target);
472469

473470
return false;
474471
}
@@ -482,14 +479,14 @@
482479
/**
483480
* Load more list items based on the given anchor
484481
*
485-
* @param $anchor
482+
* @param anchor
486483
*
487484
* @returns {*|{getAllResponseHeaders: function(): *|null, abort: function(*): this, setRequestHeader: function(*, *): this, readyState: number, getResponseHeader: function(*): null|*, overrideMimeType: function(*): this, statusCode: function(*): this}|jQuery|boolean}
488485
*/
489-
loadMore($anchor) {
490-
var $showMore = $anchor.parent();
486+
loadMore(anchor) {
487+
let showMore = anchor.parentElement;
491488
var progressTimer = this.icinga.timer.register(function () {
492-
var label = $anchor.html();
489+
var label = anchor.innerText;
493490

494491
var dots = label.substr(-3);
495492
if (dots.slice(0, 1) !== '.') {
@@ -505,14 +502,14 @@
505502
}
506503
}
507504

508-
$anchor.html(label + dots);
505+
anchor.innerText = label + dots;
509506
}, null, 250);
510507

511-
var url = $anchor.attr('href');
512-
var req = this.icinga.loader.loadUrl(
508+
let url = anchor.href;
509+
let req = this.icinga.loader.loadUrl(
513510
// Add showCompact, we don't want controls in paged results
514511
this.icinga.utils.addUrlFlag(url, 'showCompact'),
515-
$showMore.parent(),
512+
$(showMore.parentElement),
516513
undefined,
517514
undefined,
518515
'append',
@@ -521,7 +518,7 @@
521518
);
522519
req.addToHistory = false;
523520
req.done(function () {
524-
$showMore.remove();
521+
showMore.remove();
525522

526523
// Set data-icinga-url to make it available for Icinga.History.getCurrentState()
527524
req.$target.closest('.container').data('icingaUrl', url);

0 commit comments

Comments
 (0)