luci-app-ssr-plus: feat server list draggable (#3889)

This commit is contained in:
soandsoso 2020-03-19 20:41:32 +08:00 committed by GitHub
parent 2b09def652
commit 7087aca688
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -48,4 +48,70 @@ local dsp = require "luci.dispatcher"
for (let i = 0; i < 10; i++) {
thread()
}
</script>
// move
function cbi_row_drop(fromId, toId, store) {
var fromNode = document.getElementById(fromId);
var toNode = document.getElementById(toId);
if (!fromNode || !toNode) return false;
var table = fromNode.parentNode;
while (table && table.nodeName.toLowerCase() != "table")
table = table.parentNode;
if (!table) return false;
var ids = [];
for (var idx = 2; idx < table.rows.length; idx++) {
if (table.rows[idx] === fromNode) {
toNode.parentNode.insertBefore(toNode, fromNode);
} else if (table.rows[idx] === toNode) {
fromNode.parentNode.insertBefore(fromNode, toNode);
}
table.rows[idx].className = table.rows[idx].className.replace(
/cbi-rowstyle-[12]/,
"cbi-rowstyle-" + (1 + (idx % 2))
);
if (table.rows[idx].id && table.rows[idx].id.match(/-([^\-]+)$/))
ids.push(RegExp.$1);
}
var input = document.getElementById(store);
if (input) input.value = ids.join(" ");
return false;
}
// set tr draggable
function enableDragForTable(table_selecter, store) {
var trs = document.querySelectorAll(table_selecter + " tr");
function ondragstart(ev) {
ev.dataTransfer.setData("Text", ev.target.id);
}
function ondrop(ev) {
var from = ev.dataTransfer.getData("Text");
cbi_row_drop(from, this.id, store);
}
function ondragover(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = "move";
}
for (let index = 2; index < trs.length; index++) {
const el = trs[index];
el.setAttribute("draggable", true);
el.ondragstart = ondragstart;
el.ondrop = ondrop;
el.ondragover = ondragover;
}
}
// enable
enableDragForTable(
"#cbi-shadowsocksr-servers table",
"cbi.sts.shadowsocksr.servers"
);
</script>