summaryrefslogtreecommitdiff
path: root/assets/js/components/list-item-selection.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/components/list-item-selection.js')
-rw-r--r--assets/js/components/list-item-selection.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/assets/js/components/list-item-selection.js b/assets/js/components/list-item-selection.js
new file mode 100644
index 00000000..45c084e3
--- /dev/null
+++ b/assets/js/components/list-item-selection.js
@@ -0,0 +1,82 @@
+document.addEventListener("DOMContentLoaded", function () {
+
+ function selectAllItems(event) {
+ event.preventDefault();
+
+ var items = document.querySelectorAll("input[data-list-item=selectable]");
+ for (var i = 0; i < items.length; i++) {
+ items[i].checked = true;
+ }
+
+ showActionMenu();
+ }
+
+ function unselectAllItems(event) {
+ event.preventDefault();
+
+ var items = document.querySelectorAll("input[data-list-item=selectable]");
+ for (var i = 0; i < items.length; i++) {
+ items[i].checked = false;
+ }
+
+ hideActionMenu();
+ }
+
+ function onItemChange(event) {
+ var selectedItems = document.querySelectorAll("input[data-list-item=selectable]:checked");
+
+ if (selectedItems.length > 0) {
+ showActionMenu();
+ }
+ }
+
+ function showActionMenu() {
+ var element = document.querySelector(".list-item-actions");
+ if (element) {
+ element.classList.remove("list-item-action-hidden");
+ }
+ }
+
+ function hideActionMenu() {
+ var element = document.querySelector(".list-item-actions");
+ if (element && ! element.classList.contains("list-item-action-hidden")) {
+ element.classList.add("list-item-action-hidden");
+ }
+ }
+
+ function onActionClick(event) {
+ event.preventDefault();
+ var selectedItems = document.querySelectorAll("input[data-list-item=selectable]:checked");
+ var taskIDs = [];
+
+ for (var i = 0; i < selectedItems.length; i++) {
+ taskIDs.push(selectedItems[i].value);
+ }
+
+ var link = event.target.href + "&task_ids=" + taskIDs.join(",");
+ KB.modal.open(link, "medium", true);
+ }
+
+ var selectAllLink = document.querySelector("a[data-list-item-selection=all]");
+ if (selectAllLink) {
+ selectAllLink.addEventListener("click", selectAllItems);
+ }
+
+ var unselectLink = document.querySelector("a[data-list-item-selection=none]");
+ if (unselectLink) {
+ unselectLink.addEventListener("click", unselectAllItems);
+ }
+
+ var items = document.querySelectorAll("input[data-list-item=selectable]");
+ for (var i = 0; i < items.length; i++) {
+ items[i].addEventListener("change", onItemChange);
+ }
+
+ KB.on('dropdown.afterRender', function () {
+ var actionLinks = document.querySelectorAll("a[data-list-item-action=modal]");
+
+ for (var i = 0; i < actionLinks.length; i++) {
+ actionLinks[i].addEventListener("click", onActionClick, false);
+ }
+ });
+});