From 591f48856d662e4884535e3ee685c8d3f741f058 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 22 Sep 2014 17:06:02 +0000
Subject: [PATCH] add sort links for details page fix tooltips on images

---
 .../org/klomp/snark/web/I2PSnarkServlet.java  | 75 +++++++++++++++++--
 .../java/src/org/klomp/snark/web/Sorters.java |  2 +-
 2 files changed, 70 insertions(+), 7 deletions(-)

diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index d19d8b7e73..f1c6658c94 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -2611,6 +2611,10 @@ public class I2PSnarkServlet extends BasicServlet {
         if (showPriority) {
             buf.append("<form action=\"").append(base).append("\" method=\"POST\">\n");
             buf.append("<input type=\"hidden\" name=\"nonce\" value=\"").append(_nonce).append("\" >\n");
+            if (sortParam != null) {
+                buf.append("<input type=\"hidden\" name=\"sort\" value=\"")
+                   .append(DataHelper.stripHTML(sortParam)).append("\" >\n");
+            }
         }
         if (snark != null) {
             // first table - torrent info
@@ -2843,7 +2847,9 @@ public class I2PSnarkServlet extends BasicServlet {
         for (int i = 0; i < ls.length; i++) {
             fileList.add(new Sorters.FileAndIndex(ls[i], storage));
         }
-        if (fileList.size() > 1) {
+
+        boolean showSort = fileList.size() > 1;
+        if (showSort) {
             int sort = 0;
             if (sortParam != null) {
                 try {
@@ -2858,17 +2864,63 @@ public class I2PSnarkServlet extends BasicServlet {
         buf.append("<tr>\n")
            .append("<th colspan=2>");
         String tx = _("Directory");
-        toThemeImg(buf, "file", tx, tx + ": " + directory);
+        // cycle through sort by name or type
+        String sort;
+        boolean isTypeSort = false;
+        if (showSort) {
+            if (sortParam == null || "0".equals(sortParam) || "1".equals(sortParam)) {
+                sort = "-1";
+            } else if ("-1".equals(sortParam)) {
+                sort = "12";
+                isTypeSort = true;
+            } else if ("12".equals(sortParam)) {
+                sort = "-12";
+                isTypeSort = true;
+            } else {
+                sort = "";
+            }
+            buf.append("<a href=\"").append(base)
+               .append(getQueryString(sort)).append("\">");
+        }
+        toThemeImg(buf, "file", tx,
+                   showSort ? _("Sort by {0}", (isTypeSort ? _("File type") : _("Name")))
+                            : tx + ": " + directory);
+        if (showSort)
+            buf.append("</a>");
         buf.append("</th>\n<th align=\"right\">");
+        if (showSort) {
+            sort = ("5".equals(sortParam)) ? "-5" : "5";
+            buf.append("<a href=\"").append(base)
+               .append(getQueryString(sort)).append("\">");
+        }
         tx = _("Size");
-        toThemeImg(buf, "size", tx, tx);
+        toThemeImg(buf, "size", tx,
+                   showSort ? _("Sort by {0}", tx) : tx);
+        if (showSort)
+            buf.append("</a>");
         buf.append("</th>\n<th class=\"headerstatus\">");
+        if (showSort) {
+            sort = ("10".equals(sortParam)) ? "-10" : "10";
+            buf.append("<a href=\"").append(base)
+               .append(getQueryString(sort)).append("\">");
+        }
         tx = _("Status");
-        toThemeImg(buf, "status", tx, tx);
+        toThemeImg(buf, "status", tx,
+                   showSort ? _("Sort by {0}", _("Remaining")) : tx);
+        if (showSort)
+            buf.append("</a>");
         if (showPriority) {
             buf.append("</th>\n<th class=\"headerpriority\">");
+            if (showSort) {
+                sort = ("13".equals(sortParam)) ? "-13" : "13";
+                buf.append("<a href=\"").append(base)
+                   .append(getQueryString(sort)).append("\">");
+            }
             tx = _("Priority");
-            toThemeImg(buf, "priority", tx, tx);
+            toThemeImg(buf, "priority", tx,
+                       showSort ? _("Sort by {0}", tx) : tx);
+            if (showSort)
+                buf.append("</a>");
         }
         buf.append("</th>\n</tr>\n</thead>\n");
         buf.append("<tr><td colspan=\"" + (showPriority ? '5' : '4') + "\" class=\"ParentDir\"><A HREF=\"");
@@ -3013,6 +3065,17 @@ public class I2PSnarkServlet extends BasicServlet {
         return buf.toString();
     }
 
+    /**
+     *  @param null ok
+     *  @return query string or ""
+     *  @since 0.9.16
+     */
+    private static String getQueryString(String so) {
+        if (so != null && !so.equals(""))
+            return "?sort=" + DataHelper.stripHTML(so);
+        return "";
+    }
+
     /**
      *  Pick an icon; try to catch the common types in an i2p environment.
      *
@@ -3147,7 +3210,7 @@ public class I2PSnarkServlet extends BasicServlet {
     private void toThemeImg(StringBuilder buf, String image, String altText, String titleText) {
         buf.append("<img alt=\"").append(altText).append("\" src=\"").append(_imgPath).append(image).append(".png\"");
         if (titleText.length() > 0)
-            buf.append(" title=\"").append(altText).append('"');
+            buf.append(" title=\"").append(titleText).append('"');
         buf.append('>');
     }
 
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java b/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java
index 24759374b1..8098520b1c 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java
@@ -368,7 +368,7 @@ class Sorters {
             } else {
                 isDirectory = file.isDirectory();
                 remaining = -1;
-                priority = 0;
+                priority = -999;
             }
             length = isDirectory ? 0 : file.length();
         }
-- 
GitLab