From 011e91140cb376a42c481812c00ef2f11d273f56 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sat, 27 Apr 2013 13:14:43 +0000
Subject: [PATCH]  * i2psnark: Improve page nav

---
 .../src/org/klomp/snark/SnarkManager.java     |   4 +-
 .../org/klomp/snark/web/I2PSnarkServlet.java  |  51 +++++++++++++++---
 .../snark/light/images/control_back_blue.png  | Bin 0 -> 807 bytes
 .../snark/light/images/control_play_blue.png  | Bin 0 -> 717 bytes
 .../ubergine/images/control_back_blue.png     | Bin 0 -> 807 bytes
 .../ubergine/images/control_play_blue.png     | Bin 0 -> 717 bytes
 .../vanilla/images/control_back_blue.png      | Bin 0 -> 807 bytes
 .../vanilla/images/control_play_blue.png      | Bin 0 -> 717 bytes
 8 files changed, 47 insertions(+), 8 deletions(-)
 create mode 100644 installer/resources/themes/snark/light/images/control_back_blue.png
 create mode 100644 installer/resources/themes/snark/light/images/control_play_blue.png
 create mode 100644 installer/resources/themes/snark/ubergine/images/control_back_blue.png
 create mode 100644 installer/resources/themes/snark/ubergine/images/control_play_blue.png
 create mode 100644 installer/resources/themes/snark/vanilla/images/control_back_blue.png
 create mode 100644 installer/resources/themes/snark/vanilla/images/control_play_blue.png

diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index 16b0e6010a..a874480967 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -547,7 +547,9 @@ public class SnarkManager implements CompleteListener {
                 int size = Integer.parseInt(pageSize.trim());
                 if (size <= 0)
                     size = 999999;
-                if (size != getPageSize() && size >= 5) {
+                else if (size < 5)
+                    size = 5;
+                if (size != getPageSize()) {
                     changed = true;
                     pageSize = Integer.toString(size);
                     _config.setProperty(PROP_PAGE_SIZE, pageSize);
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 33854b8f38..eec53a3518 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -522,23 +522,60 @@ public class I2PSnarkServlet extends BasicServlet {
         } else /** if (snarks.size() > 1) */ {
             out.write("<tfoot><tr>\n" +
                       "    <th align=\"left\" colspan=\"6\">");
+            // Page nav
             if (start > 0) {
-                int prev = Math.max(0, start - pageSize);
-                out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + prev);
+                // First
+                out.write("&nbsp;<a href=\"" + _contextPath);
                 if (peerParam != null)
-                    out.write("&p=" + peerParam);
+                    out.write("?p=" + peerParam);
                 out.write("\">" +
-                          "<img alt=\"" + _("Prev") + "\" title=\"" + _("Previous page") + "\" border=\"0\" src=\"" +
+                          "<img alt=\"" + _("First") + "\" title=\"" + _("First page") + "\" border=\"0\" src=\"" +
                           _imgPath + "control_rewind_blue.png\">" +
                           "</a>&nbsp;");
+                int prev = Math.max(0, start - pageSize);
+                if (prev > 0) {
+                    // Back
+                    out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + prev);
+                    if (peerParam != null)
+                        out.write("&p=" + peerParam);
+                    out.write("\">" +
+                          "<img alt=\"" + _("Prev") + "\" title=\"" + _("Previous page") + "\" border=\"0\" src=\"" +
+                          _imgPath + "control_back_blue.png\">" +
+                          "</a>&nbsp;");
+                }
             }
-            if (start + pageSize < snarks.size()) {
+            // Page count
+            int total = snarks.size();
+            int pages = 1 + (total / pageSize);
+            if (pages == 1 && start > 0)
+                pages = 2;
+            if (pages > 1) {
+                int page;
+                if (start + pageSize >= total)
+                    page = pages;
+                else
+                    page = 1 + (start / pageSize);
+                out.write("&nbsp;" + _("Page {0}", page) + thinsp(noThinsp) + pages + "&nbsp;");
+            }
+            if (start + pageSize < total) {
                 int next = start + pageSize;
-                out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + next);
+                if (next + pageSize < total) {
+                    // Next
+                    out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + next);
+                    if (peerParam != null)
+                        out.write("&p=" + peerParam);
+                    out.write("\">" +
+                          "<img alt=\"" + _("Next") + "\" title=\"" + _("Next page") + "\" border=\"0\" src=\"" +
+                          _imgPath + "control_play_blue.png\">" +
+                          "</a>&nbsp;");
+                }
+                // Last
+                int last = ((total - 1) / pageSize) * pageSize;
+                out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + last);
                 if (peerParam != null)
                     out.write("&p=" + peerParam);
                 out.write("\">" +
-                          "<img alt=\"" + _("Next") + "\" title=\"" + _("Next page") + "\" border=\"0\" src=\"" +
+                          "<img alt=\"" + _("Last") + "\" title=\"" + _("Last page") + "\" border=\"0\" src=\"" +
                           _imgPath + "control_fastforward_blue.png\">" +
                           "</a>&nbsp;");
             }
diff --git a/installer/resources/themes/snark/light/images/control_back_blue.png b/installer/resources/themes/snark/light/images/control_back_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f9e6fde420cb3f9454c692bc69b1d39efa280
GIT binary patch
literal 807
zcmV+?1K9kDP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^00PfRL_t(I%cYY~Zxd$_hoAl9_1al`Q<6Aw3~mr$
zZPP?elSmxk7@>Xx5LYg_!YAO`I|oF?g;S12s*tcyTlIj7>b9v$UB_vnh+>Dt3AQ)h
zwY}bbUk-K<Qn__5BaLPrjpjE$MM}wsaqT{{Kn|D!>`}Q5G=N%ho%)CU$|>O5eJsFP
zo@`!T$+YKZt^QIvE*wQs@CJIN?wgyXgLL_qH|ZBZrMOP#JzzBa<;@GbYtBUXM*i$<
zA!Ut`Fk=Ap`XQd*<*;#7EgvN|9=^;z1AZ^A)6qwpIM?U4*Dj5B?<{=gSXRQo>qoeL
zhys{~%Jf7U+e#Kx<=;EE7WR4gGTQ}8+Vh#av!ACA)>c2M-&$Q>%vuS9db3Xu3Z#JN
zTP-qnoNf@29*dDqr3@`N&Nh2m?du=oH5JHRH1_86b8`hNVetC6hY%7e;pb|LN5v{q
zf{<|J2AFZ3%+zFIHPfC4aw;%oiKC@6<2J4zB1WPNhbu@a5DbBl0Iwf0mQ0XM_LhJt
z6|iH%b8IV)+YJ#yvc2!K@xvY<0f`WjXrxvz5SVeDq&{!}TLl;l2K0gmF<NyoZxQx=
zG|d1&N|160IhFl1t3bOGXqCgJN6OTYQsQ<a9^Ae{81&Gz7(xyqLP+8<m5v|a_SFi|
zR)NNGXm7r*?PDc$gcvrq{qQ|R2uUO)LV{)LxNe8qiLnVZRG{{XOXWZR__g}#O`D6^
zB$1Q|0WB}&!R@Pv(E;<5Ce4!`JG;Bp(xF`jYTC|scTet>&d79FAMEe_wK6%KGtSSX
z&@_cmNJ0VQV=-pN;~cg;UX*_8{L{9+`KfXK`{FuVr=M6UX<sFl{U<#B_VJB{FIEcq
zb2(-vQs|mO)AiZfX|P@WyLu2#Z#-=+J_9NrHB(M(UCxH(d7HOOrqXwGT_aGE6;ID>
l)>Nmw6MXt#GyNYszXLURd+~xeV<7+l002ovPDHLkV1hXobVL9E

literal 0
HcmV?d00001

diff --git a/installer/resources/themes/snark/light/images/control_play_blue.png b/installer/resources/themes/snark/light/images/control_play_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8c8ec683edd6a974eacc253332f903d643dbe41
GIT binary patch
literal 717
zcmV;;0y6!HP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Ur9tkR5;6}
zlTB|DQ51&z1N;U24p_Q$!>*bxx-)TO!p6i!Q&%N5)kR|pVJuNho7M&@5o@ZpsgYXg
z6pCpqAEgW*0v6~{n89ISU>M4A&V?DNy7MOQX68Ka`MBqf0l?U(ZY+X9l}VLZ)#Om-
z;Wxvd@uT21RmKNz1dH$Bj0zp6>Db9B7mX*l{i7uPYA;7kd3g)QVC)rxA$;8vC|jea
zS%$3%AWB_OF8f4{mJFo|55c22v$T`7VytGO85j|cC%=pBjskcjxd*)11x{77(<9$R
zNrwG!M09PX(8Nd#urDkdGiz{FkfHKZhPUAguyq;A^$wKyj&8EE8)WXSvDl6Q4NN}z
z2Zd#i!U*1a7=Vq#3W3jRZ6Z9$+&MVBAqrVEFbBV-XzUqFMNrFnb9RsDb%-T!q1pza
zrNBj9g5~vhG_q(g8Ht^6IILQuOJK}c<k~9ynP}os2>dY)autaf$;u_Hxz{;liNSF+
zP7JVo4aPtM&mF+{jGz3=veK}ME-bIS)D6sEz9#6p*nx(m=)Gd##2kGE&YZW%&7_NU
zaJbxh3nsTeLlsIj==Xtu`3s4ZJ3jM?zzC+xEl8DG(CzhM_b>rg=Lda=hWnnX#UBVW
zoG_R&W<w#Yfyq*nB*>`Q?ax-3JI?gr8ns1oY(%Y_9|I!G4+85=MXv^z2{WgQJlI?w
zaoVx<dyz(0dEOniu6j3_P$UBdRv<IMo)dWvwgXX^cPuee_V<6U^5|o_`yy|deZEaS
zSzMtVPo3O?o#GzbT=cZfN8P59|9(vW^PGPH9e5R2%)*`}00000NkvXXu0mjf?3qID

literal 0
HcmV?d00001

diff --git a/installer/resources/themes/snark/ubergine/images/control_back_blue.png b/installer/resources/themes/snark/ubergine/images/control_back_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f9e6fde420cb3f9454c692bc69b1d39efa280
GIT binary patch
literal 807
zcmV+?1K9kDP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^00PfRL_t(I%cYY~Zxd$_hoAl9_1al`Q<6Aw3~mr$
zZPP?elSmxk7@>Xx5LYg_!YAO`I|oF?g;S12s*tcyTlIj7>b9v$UB_vnh+>Dt3AQ)h
zwY}bbUk-K<Qn__5BaLPrjpjE$MM}wsaqT{{Kn|D!>`}Q5G=N%ho%)CU$|>O5eJsFP
zo@`!T$+YKZt^QIvE*wQs@CJIN?wgyXgLL_qH|ZBZrMOP#JzzBa<;@GbYtBUXM*i$<
zA!Ut`Fk=Ap`XQd*<*;#7EgvN|9=^;z1AZ^A)6qwpIM?U4*Dj5B?<{=gSXRQo>qoeL
zhys{~%Jf7U+e#Kx<=;EE7WR4gGTQ}8+Vh#av!ACA)>c2M-&$Q>%vuS9db3Xu3Z#JN
zTP-qnoNf@29*dDqr3@`N&Nh2m?du=oH5JHRH1_86b8`hNVetC6hY%7e;pb|LN5v{q
zf{<|J2AFZ3%+zFIHPfC4aw;%oiKC@6<2J4zB1WPNhbu@a5DbBl0Iwf0mQ0XM_LhJt
z6|iH%b8IV)+YJ#yvc2!K@xvY<0f`WjXrxvz5SVeDq&{!}TLl;l2K0gmF<NyoZxQx=
zG|d1&N|160IhFl1t3bOGXqCgJN6OTYQsQ<a9^Ae{81&Gz7(xyqLP+8<m5v|a_SFi|
zR)NNGXm7r*?PDc$gcvrq{qQ|R2uUO)LV{)LxNe8qiLnVZRG{{XOXWZR__g}#O`D6^
zB$1Q|0WB}&!R@Pv(E;<5Ce4!`JG;Bp(xF`jYTC|scTet>&d79FAMEe_wK6%KGtSSX
z&@_cmNJ0VQV=-pN;~cg;UX*_8{L{9+`KfXK`{FuVr=M6UX<sFl{U<#B_VJB{FIEcq
zb2(-vQs|mO)AiZfX|P@WyLu2#Z#-=+J_9NrHB(M(UCxH(d7HOOrqXwGT_aGE6;ID>
l)>Nmw6MXt#GyNYszXLURd+~xeV<7+l002ovPDHLkV1hXobVL9E

literal 0
HcmV?d00001

diff --git a/installer/resources/themes/snark/ubergine/images/control_play_blue.png b/installer/resources/themes/snark/ubergine/images/control_play_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8c8ec683edd6a974eacc253332f903d643dbe41
GIT binary patch
literal 717
zcmV;;0y6!HP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Ur9tkR5;6}
zlTB|DQ51&z1N;U24p_Q$!>*bxx-)TO!p6i!Q&%N5)kR|pVJuNho7M&@5o@ZpsgYXg
z6pCpqAEgW*0v6~{n89ISU>M4A&V?DNy7MOQX68Ka`MBqf0l?U(ZY+X9l}VLZ)#Om-
z;Wxvd@uT21RmKNz1dH$Bj0zp6>Db9B7mX*l{i7uPYA;7kd3g)QVC)rxA$;8vC|jea
zS%$3%AWB_OF8f4{mJFo|55c22v$T`7VytGO85j|cC%=pBjskcjxd*)11x{77(<9$R
zNrwG!M09PX(8Nd#urDkdGiz{FkfHKZhPUAguyq;A^$wKyj&8EE8)WXSvDl6Q4NN}z
z2Zd#i!U*1a7=Vq#3W3jRZ6Z9$+&MVBAqrVEFbBV-XzUqFMNrFnb9RsDb%-T!q1pza
zrNBj9g5~vhG_q(g8Ht^6IILQuOJK}c<k~9ynP}os2>dY)autaf$;u_Hxz{;liNSF+
zP7JVo4aPtM&mF+{jGz3=veK}ME-bIS)D6sEz9#6p*nx(m=)Gd##2kGE&YZW%&7_NU
zaJbxh3nsTeLlsIj==Xtu`3s4ZJ3jM?zzC+xEl8DG(CzhM_b>rg=Lda=hWnnX#UBVW
zoG_R&W<w#Yfyq*nB*>`Q?ax-3JI?gr8ns1oY(%Y_9|I!G4+85=MXv^z2{WgQJlI?w
zaoVx<dyz(0dEOniu6j3_P$UBdRv<IMo)dWvwgXX^cPuee_V<6U^5|o_`yy|deZEaS
zSzMtVPo3O?o#GzbT=cZfN8P59|9(vW^PGPH9e5R2%)*`}00000NkvXXu0mjf?3qID

literal 0
HcmV?d00001

diff --git a/installer/resources/themes/snark/vanilla/images/control_back_blue.png b/installer/resources/themes/snark/vanilla/images/control_back_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f9e6fde420cb3f9454c692bc69b1d39efa280
GIT binary patch
literal 807
zcmV+?1K9kDP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^00PfRL_t(I%cYY~Zxd$_hoAl9_1al`Q<6Aw3~mr$
zZPP?elSmxk7@>Xx5LYg_!YAO`I|oF?g;S12s*tcyTlIj7>b9v$UB_vnh+>Dt3AQ)h
zwY}bbUk-K<Qn__5BaLPrjpjE$MM}wsaqT{{Kn|D!>`}Q5G=N%ho%)CU$|>O5eJsFP
zo@`!T$+YKZt^QIvE*wQs@CJIN?wgyXgLL_qH|ZBZrMOP#JzzBa<;@GbYtBUXM*i$<
zA!Ut`Fk=Ap`XQd*<*;#7EgvN|9=^;z1AZ^A)6qwpIM?U4*Dj5B?<{=gSXRQo>qoeL
zhys{~%Jf7U+e#Kx<=;EE7WR4gGTQ}8+Vh#av!ACA)>c2M-&$Q>%vuS9db3Xu3Z#JN
zTP-qnoNf@29*dDqr3@`N&Nh2m?du=oH5JHRH1_86b8`hNVetC6hY%7e;pb|LN5v{q
zf{<|J2AFZ3%+zFIHPfC4aw;%oiKC@6<2J4zB1WPNhbu@a5DbBl0Iwf0mQ0XM_LhJt
z6|iH%b8IV)+YJ#yvc2!K@xvY<0f`WjXrxvz5SVeDq&{!}TLl;l2K0gmF<NyoZxQx=
zG|d1&N|160IhFl1t3bOGXqCgJN6OTYQsQ<a9^Ae{81&Gz7(xyqLP+8<m5v|a_SFi|
zR)NNGXm7r*?PDc$gcvrq{qQ|R2uUO)LV{)LxNe8qiLnVZRG{{XOXWZR__g}#O`D6^
zB$1Q|0WB}&!R@Pv(E;<5Ce4!`JG;Bp(xF`jYTC|scTet>&d79FAMEe_wK6%KGtSSX
z&@_cmNJ0VQV=-pN;~cg;UX*_8{L{9+`KfXK`{FuVr=M6UX<sFl{U<#B_VJB{FIEcq
zb2(-vQs|mO)AiZfX|P@WyLu2#Z#-=+J_9NrHB(M(UCxH(d7HOOrqXwGT_aGE6;ID>
l)>Nmw6MXt#GyNYszXLURd+~xeV<7+l002ovPDHLkV1hXobVL9E

literal 0
HcmV?d00001

diff --git a/installer/resources/themes/snark/vanilla/images/control_play_blue.png b/installer/resources/themes/snark/vanilla/images/control_play_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8c8ec683edd6a974eacc253332f903d643dbe41
GIT binary patch
literal 717
zcmV;;0y6!HP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Ur9tkR5;6}
zlTB|DQ51&z1N;U24p_Q$!>*bxx-)TO!p6i!Q&%N5)kR|pVJuNho7M&@5o@ZpsgYXg
z6pCpqAEgW*0v6~{n89ISU>M4A&V?DNy7MOQX68Ka`MBqf0l?U(ZY+X9l}VLZ)#Om-
z;Wxvd@uT21RmKNz1dH$Bj0zp6>Db9B7mX*l{i7uPYA;7kd3g)QVC)rxA$;8vC|jea
zS%$3%AWB_OF8f4{mJFo|55c22v$T`7VytGO85j|cC%=pBjskcjxd*)11x{77(<9$R
zNrwG!M09PX(8Nd#urDkdGiz{FkfHKZhPUAguyq;A^$wKyj&8EE8)WXSvDl6Q4NN}z
z2Zd#i!U*1a7=Vq#3W3jRZ6Z9$+&MVBAqrVEFbBV-XzUqFMNrFnb9RsDb%-T!q1pza
zrNBj9g5~vhG_q(g8Ht^6IILQuOJK}c<k~9ynP}os2>dY)autaf$;u_Hxz{;liNSF+
zP7JVo4aPtM&mF+{jGz3=veK}ME-bIS)D6sEz9#6p*nx(m=)Gd##2kGE&YZW%&7_NU
zaJbxh3nsTeLlsIj==Xtu`3s4ZJ3jM?zzC+xEl8DG(CzhM_b>rg=Lda=hWnnX#UBVW
zoG_R&W<w#Yfyq*nB*>`Q?ax-3JI?gr8ns1oY(%Y_9|I!G4+85=MXv^z2{WgQJlI?w
zaoVx<dyz(0dEOniu6j3_P$UBdRv<IMo)dWvwgXX^cPuee_V<6U^5|o_`yy|deZEaS
zSzMtVPo3O?o#GzbT=cZfN8P59|9(vW^PGPH9e5R2%)*`}00000NkvXXu0mjf?3qID

literal 0
HcmV?d00001

-- 
GitLab