2005-11-26 jrandom

* Update the sorting in Syndie to consider children 'newer' than parents,
      even if they have the same message ID (duh)
    * Cleaned up some nav links in Syndie (good idea gloin, spaetz!)
    * Added a bunch of tooltips to Syndie's fields (thanks polecat!)
    * Force support for nonvalidating XML in Jetty (so we can handle GCJ/etc
      better)
This commit is contained in:
jrandom
2005-11-26 16:51:16 +00:00
committed by zzz
parent 70c4560f02
commit d1f2b447ac
12 changed files with 148 additions and 75 deletions

View File

@ -61,7 +61,9 @@ class ThreadNodeImpl implements ThreadNode {
for (int i = 0; i < _children.size(); i++) { for (int i = 0; i < _children.size(); i++) {
ThreadNodeImpl node = (ThreadNodeImpl)_children.get(i); ThreadNodeImpl node = (ThreadNodeImpl)_children.get(i);
node.summarizeThread(); node.summarizeThread();
if (node.getMostRecentPostDate() > _mostRecentPostDate) { // >= so we can give reasonable order when a child is a reply to a parent
// (since the child must have been posted after the parent)
if (node.getMostRecentPostDate() >= _mostRecentPostDate) {
_mostRecentPostDate = node.getMostRecentPostDate(); _mostRecentPostDate = node.getMostRecentPostDate();
_mostRecentPostAuthor = node.getMostRecentPostAuthor(); _mostRecentPostAuthor = node.getMostRecentPostAuthor();
} }

View File

@ -295,9 +295,9 @@ public class ThreadedHTMLRenderer extends HTMLRenderer {
out.write("<tr class=\"postReplyOptions\">\n"); out.write("<tr class=\"postReplyOptions\">\n");
out.write(" <td colspan=\"3\">\n"); out.write(" <td colspan=\"3\">\n");
out.write(" <input type=\"submit\" value=\"Preview...\" name=\"Post\" />\n"); out.write(" <input type=\"submit\" value=\"Preview...\" name=\"Post\" />\n");
out.write(" Tags: <input type=\"text\" size=\"10\" name=\"" + PostServlet.PARAM_TAGS + "\" />\n"); out.write(" Tags: <input type=\"text\" size=\"10\" name=\"" + PostServlet.PARAM_TAGS + "\" title=\"Optional tags to categorize your response\" />\n");
out.write(" in a new thread? <input type=\"checkbox\" name=\"" + PostServlet.PARAM_IN_NEW_THREAD + "\" value=\"true\" />\n"); out.write(" in a new thread? <input type=\"checkbox\" name=\"" + PostServlet.PARAM_IN_NEW_THREAD + "\" value=\"true\" title=\"If true, this will fork a new top level thread\" />\n");
out.write(" refuse replies? <input type=\"checkbox\" name=\"" + PostServlet.PARAM_REFUSE_REPLIES + "\" value=\"true\" />\n"); out.write(" refuse replies? <input type=\"checkbox\" name=\"" + PostServlet.PARAM_REFUSE_REPLIES + "\" value=\"true\" title=\"If true, only you will be able to reply to the post\" />\n");
out.write(" attachment: <input type=\"file\" name=\"entryfile0\" />\n"); out.write(" attachment: <input type=\"file\" name=\"entryfile0\" />\n");
out.write(" </td>\n</tr>\n</form>\n"); out.write(" </td>\n</tr>\n</form>\n");
out.write("<!-- body reply end -->\n"); out.write("<!-- body reply end -->\n");

View File

@ -103,18 +103,25 @@ public class AddressesServlet extends BaseServlet {
out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_SYNDIE + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_SYNDIE + "\" />");
writeAuthActionFields(out); writeAuthActionFields(out);
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "")
out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" value=\"" + pn.getName() + "\" />" + pn.getName() + " "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + pn.getLocation() + "\" /> "); out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" value=\"" + pn.getName()
+ "\" title=\"Short, locally unique 'pet name' for the author\" />" + pn.getName() + " ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + pn.getLocation()
+ "\" title=\"Blog hash for the author\" /> ");
if (pn.isMember(FilteredThreadIndex.GROUP_FAVORITE)) if (pn.isMember(FilteredThreadIndex.GROUP_FAVORITE))
out.write("Favorite? <input type=\"checkbox\" name=\"" + PARAM_FAVORITE + "\" checked=\"true\" value=\"true\" /> "); out.write("Favorite? <input type=\"checkbox\" name=\"" + PARAM_FAVORITE
+ "\" checked=\"true\" value=\"true\" title=\"If true, their posts are highlighted\" /> ");
else else
out.write("Favorite? <input type=\"checkbox\" name=\"" + PARAM_FAVORITE + "\" value=\"true\" /> "); out.write("Favorite? <input type=\"checkbox\" name=\"" + PARAM_FAVORITE
+ "\" value=\"true\" title=\"If true, their posts are highlighted\" /> ");
if (pn.isMember(FilteredThreadIndex.GROUP_IGNORE)) { if (pn.isMember(FilteredThreadIndex.GROUP_IGNORE)) {
out.write("Ignored? <input type=\"checkbox\" name=\"" + PARAM_IGNORE + "\" checked=\"true\" value=\"true\" /> "); out.write("Ignored? <input type=\"checkbox\" name=\"" + PARAM_IGNORE
+ "\" checked=\"true\" value=\"true\" title=\"If true, their threads are hidden\" /> ");
} else { } else {
out.write("Ignored? <input type=\"checkbox\" name=\"" + PARAM_IGNORE + "\" value=\"true\" /> "); out.write("Ignored? <input type=\"checkbox\" name=\"" + PARAM_IGNORE
+ "\" value=\"true\" title=\"If true, their threads are hidden\" /> ");
out.write("<a href=\"" + getControlTarget() + "?" + ThreadedHTMLRenderer.PARAM_AUTHOR + '=' out.write("<a href=\"" + getControlTarget() + "?" + ThreadedHTMLRenderer.PARAM_AUTHOR + '='
+ pn.getLocation() + "\" title=\"View threads by the given author\">View posts</a> "); + pn.getLocation() + "\" title=\"View threads by the given author\">View posts</a> ");
} }
@ -130,18 +137,25 @@ public class AddressesServlet extends BaseServlet {
out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_BLOG + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_BLOG + "\" />");
out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_SYNDIE + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_SYNDIE + "\" />");
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "")
out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName() + "\" /> "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + newName.getLocation() + "\" /> "); out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName()
+ "\" title=\"Short, locally unique 'pet name' for the author\" /> ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + newName.getLocation()
+ "\" title=\"Blog hash for the author\" /> ");
if (newName.isMember(FilteredThreadIndex.GROUP_FAVORITE)) if (newName.isMember(FilteredThreadIndex.GROUP_FAVORITE))
out.write("Favorite? <input type=\"checkbox\" name=\"" + PARAM_FAVORITE + "\" checked=\"true\" value=\"true\" /> "); out.write("Favorite? <input type=\"checkbox\" name=\"" + PARAM_FAVORITE
+ "\" checked=\"true\" value=\"true\" title=\"If true, their posts are highlighted\" /> ");
else else
out.write("Favorite? <input type=\"checkbox\" name=\"" + PARAM_FAVORITE + "\" value=\"true\" /> "); out.write("Favorite? <input type=\"checkbox\" name=\"" + PARAM_FAVORITE
+ "\" value=\"true\" title=\"If true, their posts are highlighted\" /> ");
if (newName.isMember(FilteredThreadIndex.GROUP_IGNORE)) { if (newName.isMember(FilteredThreadIndex.GROUP_IGNORE)) {
out.write("Ignored? <input type=\"checkbox\" name=\"" + PARAM_IGNORE + "\" checked=\"true\" value=\"true\" /> "); out.write("Ignored? <input type=\"checkbox\" name=\"" + PARAM_IGNORE
+ "\" checked=\"true\" value=\"true\" title=\"If true, their threads are hidden\" /> ");
} else { } else {
out.write("Ignored? <input type=\"checkbox\" name=\"" + PARAM_IGNORE + "\" value=\"true\" /> "); out.write("Ignored? <input type=\"checkbox\" name=\"" + PARAM_IGNORE
+ "\" value=\"true\" title=\"If true, their threads are hidden\" /> ");
} }
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_BLOG + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_BLOG + "\" /> ");
@ -167,18 +181,24 @@ public class AddressesServlet extends BaseServlet {
out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_ARCHIVE + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_ARCHIVE + "\" />");
out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_SYNDIE + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_SYNDIE + "\" />");
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "")
out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + pn.getName() + "\" />" + pn.getName() + " "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"20\" value=\"" + pn.getLocation() + "\" /> "); out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + pn.getName()
+ "\" title=\"Short, locally unique 'pet name' for the remote archive\" />" + pn.getName() + " ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"20\" value=\"" + pn.getLocation()
+ "\" title=\"URL to the remote archive's archive/archive.txt\" /> ");
if (BlogManager.instance().authorizeRemote(user)) { if (BlogManager.instance().authorizeRemote(user)) {
if (BlogManager.instance().syndicationScheduled(pn.getLocation())) if (BlogManager.instance().syndicationScheduled(pn.getLocation()))
out.write("Syndicate? <input type=\"checkbox\" name=\"" + PARAM_SYNDICATE + "\" checked=\"true\" value=\"true\" />"); out.write("Syndicate? <input type=\"checkbox\" name=\"" + PARAM_SYNDICATE
+ "\" checked=\"true\" value=\"true\" title=\"If true, periodically pull down posts they have\" />");
else else
out.write("Syndicate? <input type=\"checkbox\" name=\"" + PARAM_SYNDICATE + "\" value=\"true\" />"); out.write("Syndicate? <input type=\"checkbox\" name=\"" + PARAM_SYNDICATE
+ "\" value=\"true\" title=\"If true, periodically pull down posts they have\" />");
out.write("<a href=\"" + getSyndicateLink(user, pn.getLocation()) out.write("<a href=\"" + getSyndicateLink(user, pn.getLocation())
+ "\" title=\"Synchronize manually with the peer\">Sync manually</a> "); + "\" title=\"Synchronize manually with the peer\">Sync manually</a> ");
} else {
out.write("You are not <a href=\"admin.jsp\">authorized</a> to syndicate with the archive ");
} }
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_DELETE_ARCHIVE + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_DELETE_ARCHIVE + "\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_UPDATE_ARCHIVE + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_UPDATE_ARCHIVE + "\" /> ");
@ -191,14 +211,19 @@ public class AddressesServlet extends BaseServlet {
out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_ARCHIVE + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_ARCHIVE + "\" />");
out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_SYNDIE + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_SYNDIE + "\" />");
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "")
out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName() + "\" /> "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"20\" value=\"" + newName.getLocation() + "\" /> "); out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName()
+ "\" title=\"Short, locally unique 'pet name' for the remote archive\" /> ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"20\" value=\"" + newName.getLocation()
+ "\" title=\"URL to the remote archive's archive/archive.txt\" /> ");
if (BlogManager.instance().authorizeRemote(user)) { if (BlogManager.instance().authorizeRemote(user)) {
if (BlogManager.instance().syndicationScheduled(newName.getLocation())) if (BlogManager.instance().syndicationScheduled(newName.getLocation()))
out.write("Syndicate? <input type=\"checkbox\" name=\"" + PARAM_SYNDICATE + "\" checked=\"true\" value=\"true\" />"); out.write("Syndicate? <input type=\"checkbox\" name=\"" + PARAM_SYNDICATE
+ "\" checked=\"true\" value=\"true\" title=\"If true, periodically pull down posts they have\" />");
else else
out.write("Syndicate? <input type=\"checkbox\" name=\"" + PARAM_SYNDICATE + "\" value=\"true\" />"); out.write("Syndicate? <input type=\"checkbox\" name=\"" + PARAM_SYNDICATE
+ "\" value=\"true\" title=\"If true, periodically pull down posts they have\" />");
} }
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_ARCHIVE + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_ARCHIVE + "\" /> ");
@ -225,9 +250,12 @@ public class AddressesServlet extends BaseServlet {
out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_I2PHEX + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_I2PHEX + "\" />");
out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_I2P + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_I2P + "\" />");
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "")
out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" value=\"" + pn.getName() + "\" />" + pn.getName() + " "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + pn.getLocation() + "\" /> "); out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" value=\"" + pn.getName()
+ "\" title=\"Short, locally unique 'pet name' for the I2Phex peer\" />" + pn.getName() + " ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + pn.getLocation()
+ "\" title=\"I2P destination of the I2Phex peer\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_DELETE_PEER + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_DELETE_PEER + "\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_UPDATE_PEER + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_UPDATE_PEER + "\" /> ");
@ -240,9 +268,12 @@ public class AddressesServlet extends BaseServlet {
out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_I2PHEX + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_I2PHEX + "\" />");
out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_I2P + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_I2P + "\" />");
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "")
out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName() + "\" /> "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + newName.getLocation() + "\" /> "); out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName()
+ "\" title=\"Short, locally unique 'pet name' for the I2Phex peer\" /> ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + newName.getLocation()
+ "\" title=\"I2P destination of the I2Phex peer\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_PEER + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_PEER + "\" /> ");
out.write("</td></tr>\n"); out.write("</td></tr>\n");
@ -267,9 +298,12 @@ public class AddressesServlet extends BaseServlet {
out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_EEPSITE + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_EEPSITE + "\" />");
out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_I2P + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_I2P + "\" />");
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "")
out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" value=\"" + pn.getName() + "\" />" + pn.getName() + " "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + pn.getLocation() + "\" /> "); out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" value=\"" + pn.getName()
+ "\" title=\"Short, locally unique 'pet name' for the eepsite\" />" + pn.getName() + " ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + pn.getLocation()
+ "\" title=\"I2P destination of the eepsite\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_DELETE_EEPSITE + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_DELETE_EEPSITE + "\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_UPDATE_EEPSITE + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_UPDATE_EEPSITE + "\" /> ");
@ -282,9 +316,12 @@ public class AddressesServlet extends BaseServlet {
out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_EEPSITE + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_PROTO + "\" value=\"" + PROTO_EEPSITE + "\" />");
out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_I2P + "\" />"); out.write("<input type=\"hidden\" name=\"" + PARAM_NET + "\" value=\"" + NET_I2P + "\" />");
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "")
out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName() + "\" /> "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + newName.getLocation() + "\" /> "); out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName()
+ "\" title=\"Short, locally unique 'pet name' for the eepsite\" /> ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + newName.getLocation()
+ "\" title=\"I2P destination of the eepsite\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_EEPSITE + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_EEPSITE + "\" /> ");
out.write("</td></tr>\n"); out.write("</td></tr>\n");
@ -307,11 +344,16 @@ public class AddressesServlet extends BaseServlet {
out.write("<form action=\"" + baseURI + "\" method=\"POST\">"); out.write("<form action=\"" + baseURI + "\" method=\"POST\">");
writeAuthActionFields(out); writeAuthActionFields(out);
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (pn.getIsPublic() ? " checked=\"true\" " : "")
out.write("Network: <input type=\"text\" name=\"" + PARAM_NET + "\" value=\"" + pn.getNetwork() + "\" /> "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Protocol: <input type=\"text\" name=\"" + PARAM_PROTO + "\" value=\"" + pn.getProtocol() + "\" /> "); out.write("Network: <input type=\"text\" name=\"" + PARAM_NET + "\" value=\"" + pn.getNetwork()
out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" value=\"" + pn.getName() + "\" />" + pn.getName() +" "); + "\" title=\"What network is this on - i2p, tor, internet, freenet, etc\" /> ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + pn.getLocation() + "\" /> "); out.write("Protocol: <input type=\"text\" name=\"" + PARAM_PROTO + "\" value=\"" + pn.getProtocol()
+ "\" title=\"How do we access/interact with this resource\" /> ");
out.write("Name: <input type=\"hidden\" name=\"" + PARAM_NAME + "\" value=\"" + pn.getName()
+ "\" title=\"Short, locally unique 'pet name' for the location\" />" + pn.getName() +" ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + pn.getLocation()
+ "\" title=\"URL\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_DELETE_OTHER + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_DELETE_OTHER + "\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_UPDATE_OTHER + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_UPDATE_OTHER + "\" /> ");
@ -323,11 +365,16 @@ public class AddressesServlet extends BaseServlet {
writeAuthActionFields(out); writeAuthActionFields(out);
out.write("<tr><td colspan=\"3\">"); out.write("<tr><td colspan=\"3\">");
out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "") + " />\n"); out.write("<input type=\"checkbox\" name=\"" + PARAM_IS_PUBLIC + "\" value=\"true\" " + (newName.getIsPublic() ? " checked=\"true\" " : "")
out.write("Network: <input type=\"text\" name=\"" + PARAM_NET + "\" value=\"" + newName.getNetwork() + "\" /> "); + " title=\"If checked, this name can be shared with one click when posting\" />\n");
out.write("Protocol: <input type=\"text\" name=\"" + PARAM_PROTO + "\" value=\"" + newName.getProtocol() + "\" /> "); out.write("Network: <input type=\"text\" name=\"" + PARAM_NET + "\" value=\"" + newName.getNetwork()
out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName() + "\" /> "); + "\" title=\"What network is this on - i2p, tor, internet, freenet, etc\" /> ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + newName.getLocation() + "\" /> "); out.write("Protocol: <input type=\"text\" name=\"" + PARAM_PROTO + "\" value=\"" + newName.getProtocol()
+ "\" title=\"How do we access/interact with this resource\" /> ");
out.write("Name: <input type=\"text\" name=\"" + PARAM_NAME + "\" size=\"10\" value=\"" + newName.getName()
+ "\" title=\"Short, locally unique 'pet name' for the location\" /> ");
out.write("Location: <input type=\"text\" name=\"" + PARAM_LOC + "\" size=\"3\" value=\"" + newName.getLocation()
+ "\" title=\"URL\" /> ");
out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_OTHER + "\" /> "); out.write("<input type=\"submit\" name=\"" + PARAM_ACTION + "\" value=\"" + ACTION_ADD_OTHER + "\" /> ");
out.write("</td></tr>\n"); out.write("</td></tr>\n");

View File

@ -494,6 +494,7 @@ public abstract class BaseServlet extends HttpServlet {
//out.write("<tr class=\"topNav\"><td class=\"topNav_user\" colspan=\"2\" nowrap=\"true\">\n"); //out.write("<tr class=\"topNav\"><td class=\"topNav_user\" colspan=\"2\" nowrap=\"true\">\n");
out.write("<tr class=\"topNav\"><td colspan=\"3\" nowrap=\"true\"><span class=\"topNav_user\">\n"); out.write("<tr class=\"topNav\"><td colspan=\"3\" nowrap=\"true\"><span class=\"topNav_user\">\n");
out.write("<!-- nav bar begin -->\n"); out.write("<!-- nav bar begin -->\n");
out.write("<a href=\"threads.jsp\" title=\"Syndie home\">Home</a> ");
if (user.getAuthenticated() && (user.getBlog() != null) ) { if (user.getAuthenticated() && (user.getBlog() != null) ) {
out.write("Logged in as <a href=\"" + getProfileLink(req, user.getBlog()) + "\" title=\"Edit your profile\">"); out.write("Logged in as <a href=\"" + getProfileLink(req, user.getBlog()) + "\" title=\"Edit your profile\">");
out.write(user.getUsername()); out.write(user.getUsername());
@ -504,8 +505,8 @@ public abstract class BaseServlet extends HttpServlet {
} else { } else {
out.write("<form action=\"" + req.getRequestURI() + "\" method=\"POST\">\n"); out.write("<form action=\"" + req.getRequestURI() + "\" method=\"POST\">\n");
writeAuthActionFields(out); writeAuthActionFields(out);
out.write("Login: <input type=\"text\" name=\"login\" />\n"); out.write("Login: <input type=\"text\" name=\"login\" title=\"Login name for your Syndie account\" />\n");
out.write("Password: <input type=\"password\" name=\"password\" />\n"); out.write("Password: <input type=\"password\" name=\"password\" title=\"Password to get into your Syndie account\" />\n");
out.write("<input type=\"submit\" name=\"action\" value=\"Login\" /></form>\n"); out.write("<input type=\"submit\" name=\"action\" value=\"Login\" /></form>\n");
} }
//out.write("</td><td class=\"topNav_admin\">\n"); //out.write("</td><td class=\"topNav_admin\">\n");
@ -594,10 +595,16 @@ public abstract class BaseServlet extends HttpServlet {
} }
out.write("</select>\n"); out.write("</select>\n");
out.write("Tags: <input type=\"text\" name=\"" + ThreadedHTMLRenderer.PARAM_TAGS + "\" size=\"10\" value=\"" + tags + "\" />\n"); out.write("Tags: <input type=\"text\" name=\"" + ThreadedHTMLRenderer.PARAM_TAGS + "\" size=\"10\" value=\"" + tags
+ "\" title=\"Threads are filtered to include only ones with posts containing these tags\" />\n");
out.write("<input type=\"submit\" name=\"action\" value=\"Go\" />\n"); out.write("<input type=\"submit\" name=\"action\" value=\"Go\" />\n");
out.write("</td><td class=\"controlBarRight\" width=\"1%\"><a href=\"#threads\" title=\"Jump to the thread navigation\">Threads</a></td>\n"); out.write("</td><td class=\"controlBarRight\" width=\"1%\">");
if ( (req.getParameter(ThreadedHTMLRenderer.PARAM_VIEW_POST) != null) ||
(req.getParameter(ThreadedHTMLRenderer.PARAM_VIEW_THREAD) != null) )
out.write("<a href=\"#threads\" title=\"Jump to the thread navigation\">Threads</a>");
out.write("</td>\n");
out.write("<!-- control bar end -->\n"); out.write("<!-- control bar end -->\n");
out.write("</tr>\n"); out.write("</tr>\n");
out.write("</form>\n"); out.write("</form>\n");

View File

@ -211,28 +211,30 @@ public class PostServlet extends BaseServlet {
out.write("<tr><td colspan=\"3\">\n"); out.write("<tr><td colspan=\"3\">\n");
out.write("<span class=\"b_postField\">Post subject:</span> "); out.write("<span class=\"b_postField\">Post subject:</span> ");
out.write("<input type=\"text\" class=\"b_postSubject\" size=\"80\" name=\"" + PARAM_SUBJECT out.write("<input type=\"text\" class=\"b_postSubject\" size=\"80\" name=\"" + PARAM_SUBJECT
+ "\" value=\"" + HTMLRenderer.sanitizeTagParam(subject) + "\" /><br />\n"); + "\" value=\"" + HTMLRenderer.sanitizeTagParam(subject) + "\" title=\"One line summary\" /><br />\n");
out.write("<span class=\"b_postField\">Post content (in raw <a href=\"smlref.jsp\" target=\"_blank\">SML</a>, no headers):</span><br />\n"); out.write("<span class=\"b_postField\">Post content (in raw <a href=\"smlref.jsp\" target=\"_blank\">SML</a>, no headers):</span><br />\n");
out.write("<textarea class=\"b_postText\" rows=\"6\" cols=\"80\" name=\"" + PARAM_TEXT + "\">" + getParam(req, PARAM_TEXT) + "</textarea><br />\n"); out.write("<textarea class=\"b_postText\" rows=\"6\" cols=\"80\" name=\"" + PARAM_TEXT + "\">" + getParam(req, PARAM_TEXT) + "</textarea><br />\n");
out.write("<span class=\"b_postField\">SML post headers:</span><br />\n"); out.write("<span class=\"b_postField\">SML post headers:</span><br />\n");
out.write("<textarea class=\"b_postHeaders\" rows=\"3\" cols=\"80\" name=\"" + PARAM_HEADERS + "\">" + getParam(req, PARAM_HEADERS) + "</textarea><br />\n"); out.write("<textarea class=\"b_postHeaders\" rows=\"2\" cols=\"80\" name=\"" + PARAM_HEADERS + "\" title=\"Most people can leave this empty\" >" + getParam(req, PARAM_HEADERS) + "</textarea><br />\n");
if ( (parentURI != null) && (parentURI.trim().length() > 0) ) if ( (parentURI != null) && (parentURI.trim().length() > 0) )
out.write("<input type=\"hidden\" name=\"" + PARAM_PARENT + "\" value=\"" + parentURI + "\" />\n"); out.write("<input type=\"hidden\" name=\"" + PARAM_PARENT + "\" value=\"" + parentURI + "\" />\n");
out.write(" Tags: <input type=\"text\" size=\"10\" name=\"" + PARAM_TAGS + "\" value=\"" + getParam(req, PARAM_TAGS) + "\" /><br />\n"); out.write(" Tags: <input type=\"text\" size=\"10\" name=\"" + PARAM_TAGS + "\" value=\"" + getParam(req, PARAM_TAGS) + "\" title=\"Optional tags to categorize your response\" /><br />\n");
boolean inNewThread = getInNewThread(req); boolean inNewThread = getInNewThread(req);
boolean refuseReplies = getRefuseReplies(req); boolean refuseReplies = getRefuseReplies(req);
out.write("In a new thread? <input type=\"checkbox\" value=\"true\" name=\"" + PARAM_IN_NEW_THREAD + out.write("In a new thread? <input type=\"checkbox\" value=\"true\" name=\"" + PARAM_IN_NEW_THREAD +
(inNewThread ? "\" checked=\"true\" " : "\" " ) + " /><br />\n"); (inNewThread ? "\" checked=\"true\" " : "\" " )
+ " title=\"If true, this will fork a new top level thread\" /><br />\n");
out.write("Refuse replies? <input type=\"checkbox\" value=\"true\" name=\"" + PARAM_REFUSE_REPLIES + out.write("Refuse replies? <input type=\"checkbox\" value=\"true\" name=\"" + PARAM_REFUSE_REPLIES +
(refuseReplies ? "\" checked=\"true\" " : "\" " ) + " /><br />\n"); (refuseReplies ? "\" checked=\"true\" " : "\" " )
+ " title=\"If true, only you will be able to reply to the post\" /><br />\n");
out.write("<span class=\"b_postField\">Include public names?</span> "); out.write("<span class=\"b_postField\">Include public names?</span> ");
out.write("<input class=\"b_postNames\" type=\"checkbox\" name=\"" + PARAM_INCLUDENAMES out.write("<input class=\"b_postNames\" type=\"checkbox\" name=\"" + PARAM_INCLUDENAMES
+ "\" value=\"true\" /><br />\n"); + "\" value=\"true\" title=\"If true, everything marked 'public' in your addressbook is shared\" /><br />\n");
out.write(ATTACHMENT_FIELDS); out.write(ATTACHMENT_FIELDS);

View File

@ -362,6 +362,7 @@ public class RemoteArchiveBean {
ArchiveIndex i = new ArchiveIndex(I2PAppContext.getGlobalContext(), false); ArchiveIndex i = new ArchiveIndex(I2PAppContext.getGlobalContext(), false);
if (notModified) { if (notModified) {
_statusMessages.add("Archive unchanged since last fetch."); _statusMessages.add("Archive unchanged since last fetch.");
_statusMessages.add("If you want to force a refetch, make a trivial modification to the URL, such as adding a \"?\"");
} else { } else {
try { try {
i.load(_archiveFile); i.load(_archiveFile);

View File

@ -111,12 +111,12 @@ public class SyndicateServlet extends BaseServlet {
out.write("</select>\n"); out.write("</select>\n");
out.write("<span class=\"b_remoteChooserField\">Proxy</span>\n"); out.write("<span class=\"b_remoteChooserField\">Proxy</span>\n");
out.write("<input class=\"b_remoteChooserHost\" type=\"text\" size=\"10\" name=\"proxyhost\" value=\""); out.write("<input class=\"b_remoteChooserHost\" type=\"text\" size=\"12\" name=\"proxyhost\" value=\"");
out.write(BlogManager.instance().getDefaultProxyHost()); out.write(BlogManager.instance().getDefaultProxyHost());
out.write("\" />\n"); out.write("\" title=\"hostname that your HTTP proxy is on, or blank for no proxy\" />\n");
out.write("<input class=\"b_remoteChooserPort\" type=\"text\" size=\"4\" name=\"proxyport\" value=\""); out.write("<input class=\"b_remoteChooserPort\" type=\"text\" size=\"4\" name=\"proxyport\" value=\"");
out.write(BlogManager.instance().getDefaultProxyPort()); out.write(BlogManager.instance().getDefaultProxyPort());
out.write("\" /><br />\n"); out.write("\" title=\"port number that your HTTP proxy is on, or blank for no proxy\" /><br />\n");
out.write("<span class=\"b_remoteChooserField\">Bookmarked archives:</span>\n"); out.write("<span class=\"b_remoteChooserField\">Bookmarked archives:</span>\n");
out.write("<select class=\"b_remoteChooserPN\" name=\"" + PARAM_PETNAME + "\">"); out.write("<select class=\"b_remoteChooserPN\" name=\"" + PARAM_PETNAME + "\">");
out.write("<option value=\"\">Custom location</option>"); out.write("<option value=\"\">Custom location</option>");
@ -136,7 +136,7 @@ public class SyndicateServlet extends BaseServlet {
String reqLoc = req.getParameter("location"); String reqLoc = req.getParameter("location");
if (reqLoc != null) if (reqLoc != null)
out.write(reqLoc); out.write(reqLoc);
out.write("\" />\n"); out.write("\" title=\"full URL to the remote location, to be sent to your HTTP proxy\" />\n");
out.write("<input class=\"b_remoteChooserContinue\" type=\"submit\" name=\"action\" value=\"Continue...\" /><br />\n"); out.write("<input class=\"b_remoteChooserContinue\" type=\"submit\" name=\"action\" value=\"Continue...\" /><br />\n");
out.write("</span>\n"); out.write("</span>\n");
} }

View File

@ -290,14 +290,10 @@ public class ViewThreadedServlet extends BaseServlet {
} }
out.write("</a>\n"); out.write("</a>\n");
out.write(" <a href=\"");
out.write(getViewThreadLink(req, node, user));
out.write("\" title=\"View all posts in the thread\">full thread</a>\n");
} else {
out.write("<a href=\"");
out.write(getViewPostLink(req, node, user, false));
out.write("\" title=\"View the post\">view post</a>\n");
} }
out.write(" <a href=\"");
out.write(getViewThreadLink(req, node, user));
out.write("\" title=\"View all posts in the thread\">full thread</a>\n");
out.write("</span>"); out.write("</span>");
out.write("</td></tr>\n"); out.write("</td></tr>\n");

View File

@ -20,4 +20,13 @@ on new installs). You can also use the <a href="http://forum.i2p.net/">I2P
forums</a> if you're having trouble getting Syndie to work, and people are forums</a> if you're having trouble getting Syndie to work, and people are
almost always around on the <a href="http://forum.i2p.net/viewtopic.php?t=952">#i2p irc almost always around on the <a href="http://forum.i2p.net/viewtopic.php?t=952">#i2p irc
channel</a>.</p> channel</a>.</p>
<p>One FAQ which might keep people from getting more posts into their Syndie
node regards cookies. If you get "internal errors" when using the <a
href="syndicate.jsp">syndicate form</a>, you probably have cookies disabled.
Syndie needs cookies to help maintain state, and while its good practice to
disable cookies in general, you should be able to tell your web browser to make
an exception and allow cookies to "localhost" (or wherever your Syndie instance
is). Further FAQs should be found
<a href="threads.jsp?tags=syndie.faq">within syndie</a></p>
</body></html> </body></html>

View File

@ -1,4 +1,12 @@
$Id: history.txt,v 1.331 2005/11/26 04:16:25 jrandom Exp $ $Id: history.txt,v 1.332 2005/11/26 06:39:33 jrandom Exp $
2005-11-26 jrandom
* Update the sorting in Syndie to consider children 'newer' than parents,
even if they have the same message ID (duh)
* Cleaned up some nav links in Syndie (good idea gloin, spaetz!)
* Added a bunch of tooltips to Syndie's fields (thanks polecat!)
* Force support for nonvalidating XML in Jetty (so we can handle GCJ/etc
better)
2005-11-26 jrandom 2005-11-26 jrandom
* Be more explicit about what messages we will handle through a client * Be more explicit about what messages we will handle through a client

View File

@ -51,6 +51,7 @@ wrapper.java.library.path.2=lib
wrapper.java.additional.1=-DloggerFilenameOverride=logs/log-router-@.txt wrapper.java.additional.1=-DloggerFilenameOverride=logs/log-router-@.txt
wrapper.java.additional.2=-Dorg.mortbay.http.Version.paranoid=true wrapper.java.additional.2=-Dorg.mortbay.http.Version.paranoid=true
wrapper.java.additional.3=-Dorg.mortbay.util.FileResource.checkAliases=false wrapper.java.additional.3=-Dorg.mortbay.util.FileResource.checkAliases=false
wrapper.java.additional.4=-Dorg.mortbay.xml.XmlParser.NotValidating=true
# Initial Java Heap Size (in MB) # Initial Java Heap Size (in MB)
#wrapper.java.initmemory=4 #wrapper.java.initmemory=4

View File

@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
* *
*/ */
public class RouterVersion { public class RouterVersion {
public final static String ID = "$Revision: 1.299 $ $Date: 2005/11/26 04:16:13 $"; public final static String ID = "$Revision: 1.300 $ $Date: 2005/11/26 06:39:32 $";
public final static String VERSION = "0.6.1.5"; public final static String VERSION = "0.6.1.5";
public final static long BUILD = 10; public final static long BUILD = 11;
public static void main(String args[]) { public static void main(String args[]) {
System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
System.out.println("Router ID: " + RouterVersion.ID); System.out.println("Router ID: " + RouterVersion.ID);