From 92d04e6ad917b30cb632e02a19099520ae21d270 Mon Sep 17 00:00:00 2001 From: njhanley Date: Thu, 3 Sep 2020 00:06:36 -0400 Subject: [PATCH] Allow reordering of channels in webadmin --- modules/data/webadmin/files/webadmin.js | 25 +++++++++++++++++++ .../data/webadmin/tmpl/add_edit_network.tmpl | 5 +++- modules/webadmin.cpp | 11 ++++++++ webskins/_default_/pub/_default_.css | 5 ++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/modules/data/webadmin/files/webadmin.js b/modules/data/webadmin/files/webadmin.js index ba2ff687..f9774d5d 100644 --- a/modules/data/webadmin/files/webadmin.js +++ b/modules/data/webadmin/files/webadmin.js @@ -165,6 +165,31 @@ function serverlist_init($) { })(); } +function channellist_init($) { + function update_rows() { + $("#channels > tr").each(function(i) { + $(this).toggleClass("evenrow", i % 2 === 1).toggleClass("oddrow", i % 2 === 0); + $(this).find(".channel_index").val(i + 1); + }); + } + $("#channels").sortable({ + axis: "y", + update: update_rows + }); + $(".channel_index").change(function() { + var src = $(this).closest("tr").detach(); + var rows = $("#channels > tr"); + var dst = rows[this.value - 1]; + + if (dst) + src.insertBefore(dst); + else + src.insertAfter(rows.last()); + + update_rows(); + }); +} + function ctcpreplies_init($) { function serialize() { var text = ""; diff --git a/modules/data/webadmin/tmpl/add_edit_network.tmpl b/modules/data/webadmin/tmpl/add_edit_network.tmpl index c0e4462d..9a1a9870 100644 --- a/modules/data/webadmin/tmpl/add_edit_network.tmpl +++ b/modules/data/webadmin/tmpl/add_edit_network.tmpl @@ -184,6 +184,7 @@ [] + @@ -196,13 +197,14 @@ - + [] [] + checked="checked" /> @@ -213,6 +215,7 @@ + diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index 7fada328..7671eb8b 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -1001,6 +1001,7 @@ class CWebAdminMod : public CModule { } const vector& Channels = pNetwork->GetChans(); + unsigned int uIndex = 1; for (const CChan* pChan : Channels) { CTemplate& l = Tmpl.AddRow("ChannelLoop"); @@ -1021,6 +1022,9 @@ class CWebAdminMod : public CModule { if (pChan->InConfig()) { l["InConfig"] = "true"; } + + l["MaxIndex"] = CString(Channels.size()); + l["Index"] = CString(uIndex++); } for (const CString& sFP : pNetwork->GetTrustedFingerprints()) { CTemplate& l = Tmpl.AddRow("TrustedFingerprints"); @@ -1157,6 +1161,13 @@ class CWebAdminMod : public CModule { for (const CString& sChan : vsArgs) { CChan* pChan = pNetwork->FindChan(sChan.TrimRight_n("\r")); if (pChan) { + CString sError; + if (!pNetwork->MoveChan( + sChan, WebSock.GetParam("index_" + sChan).ToUInt() - 1, + sError)) { + WebSock.PrintErrorPage(sError); + return true; + } pChan->SetInConfig(WebSock.GetParam("save_" + sChan).ToBool()); } } diff --git a/webskins/_default_/pub/_default_.css b/webskins/_default_/pub/_default_.css index e1cae329..78528a72 100644 --- a/webskins/_default_/pub/_default_.css +++ b/webskins/_default_/pub/_default_.css @@ -393,3 +393,8 @@ td { .textsection p { margin-bottom: 0.7em; } + +input.channel_index { + width: 3em; + min-width: unset; +}