diff --git a/html/js/base_ts.js b/html/js/base_ts.js
index 9b492b8..5a94c30 100644
--- a/html/js/base_ts.js
+++ b/html/js/base_ts.js
@@ -7,6 +7,7 @@ var SERVER_CONNECTION = false;
var WS_AVAILABLE = false;
var ACTIVE_MENU_ID = "";
var LAST_FOCUSED_ELEMENT = null;
+var LAST_BULK_CHECKBOX = null;
// MenĂ¼
var menuItems = new Array();
menuItems.push(new MainMenuItem("playlist", "{{.mainMenu.item.playlist}}", "m3u.png", "{{.mainMenu.headline.playlist}}"));
@@ -183,6 +184,38 @@ function getAllSelectedChannels() {
}
return channels;
}
+function selectChannelRange(checkbox, event) {
+ if (BULK_EDIT == false || checkbox == undefined || checkbox == null) {
+ return;
+ }
+ var table = document.getElementById("content_table");
+ if (table == null) {
+ return;
+ }
+ var trs = table.getElementsByTagName("TR");
+ var visibleCheckboxes = new Array();
+ for (var i = 1; i < trs.length; i++) {
+ if (trs[i].style.display != "none") {
+ var bulkCheckbox = trs[i].querySelector("input.bulk");
+ if (bulkCheckbox != null) {
+ visibleCheckboxes.push(bulkCheckbox);
+ }
+ }
+ }
+ var currentIndex = visibleCheckboxes.indexOf(checkbox);
+ var previousIndex = -1;
+ if (LAST_BULK_CHECKBOX != null) {
+ previousIndex = visibleCheckboxes.indexOf(LAST_BULK_CHECKBOX);
+ }
+ if (event != undefined && event.shiftKey == true && previousIndex > -1 && currentIndex > -1) {
+ var start = Math.min(previousIndex, currentIndex);
+ var end = Math.max(previousIndex, currentIndex);
+ for (var i = start; i <= end; i++) {
+ visibleCheckboxes[i].checked = checkbox.checked;
+ }
+ }
+ LAST_BULK_CHECKBOX = checkbox;
+}
function selectAllChannels() {
var bulk = false;
var trs = document.getElementById("content_table").getElementsByTagName("TR");
@@ -201,6 +234,7 @@ function selectAllChannels() {
}
}
}
+ LAST_BULK_CHECKBOX = null;
return;
}
function bulkEdit() {
@@ -219,6 +253,7 @@ function bulkEdit() {
rows[i].className = className;
rows[i].checked = false;
}
+ LAST_BULK_CHECKBOX = null;
return;
}
function sortTable(column) {
diff --git a/html/js/menu_ts.js b/html/js/menu_ts.js
index a35911c..f4ba3f1 100644
--- a/html/js/menu_ts.js
+++ b/html/js/menu_ts.js
@@ -467,6 +467,7 @@ var Cell = /** @class */ (function () {
element.checked = this.value;
element.type = "checkbox";
element.className = "bulk hideBulk";
+ element.setAttribute("onclick", "javascript: selectChannelRange(this, event)");
break;
case "BULK_HEAD":
element = document.createElement("INPUT");
diff --git a/ts/base_ts.ts b/ts/base_ts.ts
index 302548a..2e91632 100644
--- a/ts/base_ts.ts
+++ b/ts/base_ts.ts
@@ -6,6 +6,7 @@ var UNDO = new Object()
var SERVER_CONNECTION = false
var WS_AVAILABLE = false
var ACTIVE_MENU_ID:string = ""
+var LAST_BULK_CHECKBOX:HTMLInputElement = null
// MenĂ¼
@@ -182,6 +183,46 @@ function getAllSelectedChannels():string[] {
return channels
}
+function selectChannelRange(checkbox:HTMLInputElement, event:MouseEvent) {
+
+ if (BULK_EDIT == false || checkbox == undefined || checkbox == null) {
+ return
+ }
+
+ var table = document.getElementById("content_table")
+ if (table == null) {
+ return
+ }
+
+ var trs = table.getElementsByTagName("TR")
+ var visibleCheckboxes:HTMLInputElement[] = new Array()
+
+ for (var i = 1; i < trs.length; i++) {
+ if ((trs[i] as HTMLElement).style.display != "none") {
+ var bulkCheckbox = (trs[i] as HTMLTableRowElement).querySelector("input.bulk") as HTMLInputElement
+ if (bulkCheckbox != null) {
+ visibleCheckboxes.push(bulkCheckbox)
+ }
+ }
+ }
+
+ var currentIndex = visibleCheckboxes.indexOf(checkbox)
+ var previousIndex = -1
+ if (LAST_BULK_CHECKBOX != null) {
+ previousIndex = visibleCheckboxes.indexOf(LAST_BULK_CHECKBOX)
+ }
+
+ if (event != undefined && event.shiftKey == true && previousIndex > -1 && currentIndex > -1) {
+ var start = Math.min(previousIndex, currentIndex)
+ var end = Math.max(previousIndex, currentIndex)
+ for (var i = start; i <= end; i++) {
+ visibleCheckboxes[i].checked = checkbox.checked
+ }
+ }
+
+ LAST_BULK_CHECKBOX = checkbox
+}
+
function selectAllChannels() {
var bulk:Boolean = false
@@ -211,6 +252,7 @@ function selectAllChannels() {
}
+ LAST_BULK_CHECKBOX = null
return
}
@@ -235,6 +277,7 @@ function bulkEdit() {
(rows[i] as HTMLInputElement).checked = false
}
+ LAST_BULK_CHECKBOX = null
return
}
diff --git a/ts/menu_ts.ts b/ts/menu_ts.ts
index f45943d..df5fffb 100644
--- a/ts/menu_ts.ts
+++ b/ts/menu_ts.ts
@@ -562,6 +562,7 @@ class Cell {
(element as HTMLInputElement).checked = this.value;
(element as HTMLInputElement).type = "checkbox";
(element as HTMLInputElement).className = "bulk hideBulk";
+ (element as HTMLInputElement).setAttribute("onclick", "javascript: selectChannelRange(this, event)")
break
case "BULK_HEAD":