]> jfr.im git - irc/znc/coverity.git/commitdiff
Allow reordering of channels in webadmin
authornjhanley <redacted>
Thu, 3 Sep 2020 04:06:36 +0000 (00:06 -0400)
committernjhanley <redacted>
Tue, 29 Sep 2020 23:32:52 +0000 (19:32 -0400)
modules/data/webadmin/files/webadmin.js
modules/data/webadmin/tmpl/add_edit_network.tmpl
modules/webadmin.cpp
webskins/_default_/pub/_default_.css

index ba2ff6879ddb3ae6f3d29e5a4aeb4eff2d65c17c..f9774d5d00ddfa5a4bc4341afd0a8b48acf963d8 100644 (file)
@@ -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 = "";
index c0e4462d480a78c8811bd3279374616382aeecad..9a1a987051fe32c06202d54f1df35d7c302d2d20 100644 (file)
                                        <tr>
                                                <td>[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>addchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Name ESC=URL ?>"><? FORMAT "Add" ?></a>]</td>
                                <? IF ChannelLoop ?>
+                                               <th><? FORMAT "Index" ?></th>
                                                <th><? FORMAT "Save" ?></th>
                                                <th><? FORMAT "Name" ?></th>
                                                <th><? FORMAT "CurModes" ?></th>
                                        </tr>
                                        </thead>
 
-                                       <tbody>
+                                       <tbody id="channels">
                        <? LOOP ChannelLoop ?>
                                        <tr class="<? IF __EVEN__ ?>evenrow<? ELSE ?>oddrow<? ENDIF ?>">
                                                <td>
                                                        <input type="hidden" name="channel" value="<? VAR Name ?>" />
                                                        [<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>editchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Network ESC=URL ?>&amp;name=<? VAR Name ESC=URL ?>"><? FORMAT "Edit" ?></a>] [<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>delchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Network ESC=URL ?>&amp;name=<? VAR Name ESC=URL ?>"><? FORMAT "Del" ?></a>]
                                                </td>
+                                               <td><input class="channel_index" type="number" name="index_<? VAR Name ?>" min="1" max="<? VAR MaxIndex ?>" value="<? VAR Index ?>"/></td>
                                                <td><input type="checkbox" name="save_<? VAR Name ?>"<? IF InConfig ?> checked="checked"<? ENDIF ?> /></td>
                                                <td><? VAR Name ?></td>
                                                <td><? VAR CurModes ?></td>
                        <? ENDLOOP ?>
                                        </tbody>
                                </table>
+                               <script>channellist_init(jQuery);</script>
                        </div>
                </div>
                <? ENDIF ?>
index 7fada328357d28a3be99686b5c550f16db53568f..7671eb8b11ef28a2a9fd98b00f9f98bfd82e0a4c 100644 (file)
@@ -1001,6 +1001,7 @@ class CWebAdminMod : public CModule {
             }
 
             const vector<CChan*>& 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());
             }
         }
index e1cae329a8663df30302e72d3c158378f604c0ca..78528a72d9d161bfc731ccdc3ae012b1d739391d 100644 (file)
@@ -393,3 +393,8 @@ td {
 .textsection p {
        margin-bottom: 0.7em;
 }
+
+input.channel_index {
+  width: 3em;
+  min-width: unset;
+}