highlight snark table rows on hover

This commit is contained in:
zzz
2013-08-31 15:19:00 +00:00
parent 6ca797ec1f
commit d6c4e411be
2 changed files with 40 additions and 37 deletions

View File

@ -1245,10 +1245,10 @@ public class I2PSnarkServlet extends BasicServlet {
String statusString; String statusString;
if (snark.isChecking()) { if (snark.isChecking()) {
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Checking") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Checking") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Checking"); "<td class=\"snarkTorrentStatus\">" + _("Checking");
} else if (snark.isAllocating()) { } else if (snark.isAllocating()) {
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Allocating") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Allocating") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Allocating"); "<td class=\"snarkTorrentStatus\">" + _("Allocating");
} else if (err != null && curPeers == 0) { } else if (err != null && curPeers == 0) {
// Also don't show if seeding... but then we won't see the not-registered error // Also don't show if seeding... but then we won't see the not-registered error
// && remaining != 0 && needed != 0) { // && remaining != 0 && needed != 0) {
@ -1262,18 +1262,18 @@ public class I2PSnarkServlet extends BasicServlet {
//else if (isRunning) //else if (isRunning)
if (isRunning) if (isRunning)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error") + "<td class=\"snarkTorrentStatus\">" + _("Tracker Error") +
": " + curPeers + thinsp(noThinsp) + ": " + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers); ngettext("1 peer", "{0} peers", knownPeers);
else { else {
if (err.length() > MAX_DISPLAYED_ERROR_LENGTH) if (err.length() > MAX_DISPLAYED_ERROR_LENGTH)
err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "&hellip;"; err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "&hellip;";
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error"); "<td class=\"snarkTorrentStatus\">" + _("Tracker Error");
} }
} else if (snark.isStarting()) { } else if (snark.isStarting()) {
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Starting") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Starting") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Starting"); "<td class=\"snarkTorrentStatus\">" + _("Starting");
} else if (remaining == 0 || needed == 0) { // < 0 means no meta size yet } else if (remaining == 0 || needed == 0) { // < 0 means no meta size yet
// partial complete or seeding // partial complete or seeding
if (isRunning) { if (isRunning) {
@ -1289,60 +1289,60 @@ public class I2PSnarkServlet extends BasicServlet {
} }
if (curPeers > 0 && !showPeers) if (curPeers > 0 && !showPeers)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + img + ".png\" title=\"" + txt + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + img + ".png\" title=\"" + txt + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + txt + "<td class=\"snarkTorrentStatus\">" + txt +
": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" + ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" +
curPeers + thinsp(noThinsp) + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
else else
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + img + ".png\" title=\"" + txt + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + img + ".png\" title=\"" + txt + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + txt + "<td class=\"snarkTorrentStatus\">" + txt +
": " + curPeers + thinsp(noThinsp) + ": " + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers); ngettext("1 peer", "{0} peers", knownPeers);
} else { } else {
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "complete.png\" title=\"" + _("Complete") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "complete.png\" title=\"" + _("Complete") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Complete"); "<td class=\"snarkTorrentStatus\">" + _("Complete");
} }
} else { } else {
if (isRunning && curPeers > 0 && downBps > 0 && !showPeers) if (isRunning && curPeers > 0 && downBps > 0 && !showPeers)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "downloading.png\" title=\"" + _("OK") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "downloading.png\" title=\"" + _("OK") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("OK") + "<td class=\"snarkTorrentStatus\">" + _("OK") +
": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" + ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" +
curPeers + thinsp(noThinsp) + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
else if (isRunning && curPeers > 0 && downBps > 0) else if (isRunning && curPeers > 0 && downBps > 0)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "downloading.png\" title=\"" + _("OK") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "downloading.png\" title=\"" + _("OK") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("OK") + "<td class=\"snarkTorrentStatus\">" + _("OK") +
": " + curPeers + thinsp(noThinsp) + ": " + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers); ngettext("1 peer", "{0} peers", knownPeers);
else if (isRunning && curPeers > 0 && !showPeers) else if (isRunning && curPeers > 0 && !showPeers)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Stalled") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Stalled") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Stalled") + "<td class=\"snarkTorrentStatus\">" + _("Stalled") +
": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" + ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" +
curPeers + thinsp(noThinsp) + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
else if (isRunning && curPeers > 0) else if (isRunning && curPeers > 0)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Stalled") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Stalled") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Stalled") + "<td class=\"snarkTorrentStatus\">" + _("Stalled") +
": " + curPeers + thinsp(noThinsp) + ": " + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers); ngettext("1 peer", "{0} peers", knownPeers);
else if (isRunning && knownPeers > 0) else if (isRunning && knownPeers > 0)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "nopeers.png\" title=\"" + _("No Peers") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "nopeers.png\" title=\"" + _("No Peers") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("No Peers") + "<td class=\"snarkTorrentStatus\">" + _("No Peers") +
": 0" + thinsp(noThinsp) + knownPeers ; ": 0" + thinsp(noThinsp) + knownPeers ;
else if (isRunning) else if (isRunning)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "nopeers.png\" title=\"" + _("No Peers") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "nopeers.png\" title=\"" + _("No Peers") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("No Peers"); "<td class=\"snarkTorrentStatus\">" + _("No Peers");
else else
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stopped.png\" title=\"" + _("Stopped") + "\"></td>" + statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stopped.png\" title=\"" + _("Stopped") + "\"></td>" +
"<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Stopped"); "<td class=\"snarkTorrentStatus\">" + _("Stopped");
} }
out.write("<tr class=\"" + rowClass + "\">"); out.write("<tr class=\"" + rowClass + "\">");
out.write("<td class=\"center " + rowClass + "\">"); out.write("<td class=\"center\">");
out.write(statusString + "</td>\n\t"); out.write(statusString + "</td>\n\t");
// (i) icon column // (i) icon column
out.write("<td class=\"" + rowClass + "\">"); out.write("<td>");
if (isValid && meta.getAnnounce() != null) { if (isValid && meta.getAnnounce() != null) {
// Link to local details page - note that trailing slash on a single-file torrent // Link to local details page - note that trailing slash on a single-file torrent
// gets us to the details page instead of the file. // gets us to the details page instead of the file.
@ -1361,7 +1361,7 @@ public class I2PSnarkServlet extends BasicServlet {
String encodedBaseName = urlEncode(snark.getBaseName()); String encodedBaseName = urlEncode(snark.getBaseName());
// File type icon column // File type icon column
out.write("</td>\n<td class=\"" + rowClass + "\">"); out.write("</td>\n<td>");
if (isValid) { if (isValid) {
// Link to local details page - note that trailing slash on a single-file torrent // Link to local details page - note that trailing slash on a single-file torrent
// gets us to the details page instead of the file. // gets us to the details page instead of the file.
@ -1388,7 +1388,7 @@ public class I2PSnarkServlet extends BasicServlet {
} }
// Torrent name column // Torrent name column
out.write("</td><td class=\"snarkTorrentName " + rowClass + "\">"); out.write("</td><td class=\"snarkTorrentName\">");
if (remaining == 0 || isMultiFile) { if (remaining == 0 || isMultiFile) {
StringBuilder buf = new StringBuilder(128); StringBuilder buf = new StringBuilder(128);
buf.append("<a href=\"").append(encodedBaseName); buf.append("<a href=\"").append(encodedBaseName);
@ -1406,11 +1406,11 @@ public class I2PSnarkServlet extends BasicServlet {
if (remaining == 0 || isMultiFile) if (remaining == 0 || isMultiFile)
out.write("</a>"); out.write("</a>");
out.write("<td align=\"right\" class=\"snarkTorrentETA " + rowClass + "\">"); out.write("<td align=\"right\" class=\"snarkTorrentETA\">");
if(isRunning && remainingSeconds > 0 && !snark.isChecking()) if(isRunning && remainingSeconds > 0 && !snark.isChecking())
out.write(DataHelper.formatDuration2(Math.max(remainingSeconds, 10) * 1000)); // (eta 6h) out.write(DataHelper.formatDuration2(Math.max(remainingSeconds, 10) * 1000)); // (eta 6h)
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"right\" class=\"snarkTorrentDownloaded " + rowClass + "\">"); out.write("<td align=\"right\" class=\"snarkTorrentDownloaded\">");
if (remaining > 0) if (remaining > 0)
out.write(formatSize(total-remaining) + thinsp(noThinsp) + formatSize(total)); out.write(formatSize(total-remaining) + thinsp(noThinsp) + formatSize(total));
else if (remaining == 0) else if (remaining == 0)
@ -1418,7 +1418,7 @@ public class I2PSnarkServlet extends BasicServlet {
//else //else
// out.write("??"); // no meta size yet // out.write("??"); // no meta size yet
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"right\" class=\"snarkTorrentUploaded " + rowClass + "\">"); out.write("<td align=\"right\" class=\"snarkTorrentUploaded\">");
if(isRunning && isValid) if(isRunning && isValid)
out.write(formatSize(uploaded)); out.write(formatSize(uploaded));
out.write("</td>\n\t"); out.write("</td>\n\t");
@ -1430,7 +1430,7 @@ public class I2PSnarkServlet extends BasicServlet {
if(isRunning && isValid) if(isRunning && isValid)
out.write(formatSize(upBps) + "ps"); out.write(formatSize(upBps) + "ps");
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"center\" class=\"snarkTorrentAction " + rowClass + "\">"); out.write("<td align=\"center\" class=\"snarkTorrentAction\">");
String b64 = Base64.encode(snark.getInfoHash()); String b64 = Base64.encode(snark.getInfoHash());
if (snark.isChecking()) { if (snark.isChecking()) {
// show no buttons // show no buttons
@ -1511,7 +1511,7 @@ public class I2PSnarkServlet extends BasicServlet {
if (!peer.isConnected()) if (!peer.isConnected())
continue; continue;
out.write("<tr class=\"" + rowClass + "\"><td></td>"); out.write("<tr class=\"" + rowClass + "\"><td></td>");
out.write("<td colspan=\"4\" align=\"right\" class=\"" + rowClass + "\">"); out.write("<td colspan=\"4\" align=\"right\">");
String ch = peer.toString().substring(0, 4); String ch = peer.toString().substring(0, 4);
String client; String client;
if ("AwMD".equals(ch)) if ("AwMD".equals(ch))
@ -1536,9 +1536,9 @@ public class I2PSnarkServlet extends BasicServlet {
if (showDebug) if (showDebug)
out.write(" inactive " + (peer.getInactiveTime() / 1000) + "s"); out.write(" inactive " + (peer.getInactiveTime() / 1000) + "s");
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td class=\"snarkTorrentStatus\">");
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"right\" class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td align=\"right\" class=\"snarkTorrentStatus\">");
float pct; float pct;
if (isValid) { if (isValid) {
pct = (float) (100.0 * peer.completed() / meta.getPieces()); pct = (float) (100.0 * peer.completed() / meta.getPieces());
@ -1556,9 +1556,9 @@ public class I2PSnarkServlet extends BasicServlet {
//out.write("??"); //out.write("??");
} }
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td class=\"snarkTorrentStatus\">");
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"right\" class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td align=\"right\" class=\"snarkTorrentStatus\">");
if (needed > 0) { if (needed > 0) {
if (peer.isInteresting() && !peer.isChoked()) { if (peer.isInteresting() && !peer.isChoked()) {
out.write("<span class=\"unchoked\">"); out.write("<span class=\"unchoked\">");
@ -1580,7 +1580,7 @@ public class I2PSnarkServlet extends BasicServlet {
//} //}
} }
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"right\" class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td align=\"right\" class=\"snarkTorrentStatus\">");
if (isValid && pct < 100.0) { if (isValid && pct < 100.0) {
if (peer.isInterested() && !peer.isChoking()) { if (peer.isInterested() && !peer.isChoking()) {
out.write("<span class=\"unchoked\">"); out.write("<span class=\"unchoked\">");
@ -1596,10 +1596,10 @@ public class I2PSnarkServlet extends BasicServlet {
} }
} }
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td class=\"snarkTorrentStatus\">");
out.write("</td></tr>\n\t"); out.write("</td></tr>\n\t");
if (showDebug) if (showDebug)
out.write("<tr class=\"" + rowClass + "\"><td></td><td colspan=\"10\" align=\"right\" class=\"" + rowClass + "\">" + peer.getSocket() + "</td></tr>"); out.write("<tr class=\"" + rowClass + "\"><td></td><td colspan=\"10\" align=\"right\">" + peer.getSocket() + "</td></tr>");
} }
} }
} }
@ -2553,8 +2553,7 @@ public class I2PSnarkServlet extends BasicServlet {
path=addPaths(path,"/"); path=addPaths(path,"/");
String icon = toIcon(item); String icon = toIcon(item);
buf.append("<TD class=\"snarkFileIcon ") buf.append("<TD class=\"snarkFileIcon\">");
.append(rowClass).append("\">");
if (complete) { if (complete) {
buf.append("<a href=\"").append(path).append("\">"); buf.append("<a href=\"").append(path).append("\">");
// thumbnail ? // thumbnail ?
@ -2569,17 +2568,16 @@ public class I2PSnarkServlet extends BasicServlet {
} else { } else {
buf.append(toImg(icon)); buf.append(toImg(icon));
} }
buf.append("</TD><TD class=\"snarkFileName ") buf.append("</TD><TD class=\"snarkFileName\">");
.append(rowClass).append("\">");
if (complete) if (complete)
buf.append("<a href=\"").append(path).append("\">"); buf.append("<a href=\"").append(path).append("\">");
buf.append(item.getName()); buf.append(item.getName());
if (complete) if (complete)
buf.append("</a>"); buf.append("</a>");
buf.append("</TD><TD ALIGN=right class=\"").append(rowClass).append(" snarkFileSize\">"); buf.append("</TD><TD ALIGN=right class=\"snarkFileSize\">");
if (!item.isDirectory()) if (!item.isDirectory())
buf.append(DataHelper.formatSize2(length)).append('B'); buf.append(DataHelper.formatSize2(length)).append('B');
buf.append("</TD><TD class=\"").append(rowClass).append(" snarkFileStatus\">"); buf.append("</TD><TD class=\"snarkFileStatus\">");
//buf.append(dfmt.format(new Date(item.lastModified()))); //buf.append(dfmt.format(new Date(item.lastModified())));
buf.append(status); buf.append(status);
buf.append("</TD>"); buf.append("</TD>");

View File

@ -353,10 +353,15 @@ td:first-child {
border-left: 0 !important; border-left: 0 !important;
border-right: 0 !important; border-right: 0 !important;
} }
.snarkTorrentOdd td, .snarkTorrentEven td { .snarkTorrentOdd td, .snarkTorrentEven td {
border-top: 1px dotted #313 !important; border-top: 1px dotted #313 !important;
} }
table.snarkTorrents tbody tr:hover, table.snarkDirInfo tbody tr:hover {
background: #382010 !important;
}
.snarkFileIcon { .snarkFileIcon {
width: 16px; width: 16px;
} }