diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/Address.java b/apps/syndie/java/src/net/i2p/syndie/sml/Address.java new file mode 100644 index 000000000..ef2d1cc5c --- /dev/null +++ b/apps/syndie/java/src/net/i2p/syndie/sml/Address.java @@ -0,0 +1,17 @@ +package net.i2p.syndie.sml; + +import java.util.*; +import net.i2p.data.DataHelper; + +/** contains intermediary rendering state */ +class Address { + public String name; + public String schema; + public String location; + public String protocol; + public int hashCode() { return -1; } + public boolean equals(Object o) { + Address a = (Address)o; + return DataHelper.eq(schema, a.schema) && DataHelper.eq(location, a.location) && DataHelper.eq(protocol, a.protocol) && DataHelper.eq(name, a.name); + } +} diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/ArchiveRef.java b/apps/syndie/java/src/net/i2p/syndie/sml/ArchiveRef.java new file mode 100644 index 000000000..650b7b36e --- /dev/null +++ b/apps/syndie/java/src/net/i2p/syndie/sml/ArchiveRef.java @@ -0,0 +1,19 @@ +package net.i2p.syndie.sml; + +import java.util.*; +import net.i2p.data.DataHelper; + +/** contains intermediary rendering state */ +class ArchiveRef { + public String name; + public String description; + public String locationSchema; + public String location; + public int hashCode() { return -1; } + public boolean equals(Object o) { + ArchiveRef a = (ArchiveRef)o; + return DataHelper.eq(name, a.name) && DataHelper.eq(description, a.description) + && DataHelper.eq(locationSchema, a.locationSchema) + && DataHelper.eq(location, a.location); + } +} diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/Blog.java b/apps/syndie/java/src/net/i2p/syndie/sml/Blog.java new file mode 100644 index 000000000..325a0db11 --- /dev/null +++ b/apps/syndie/java/src/net/i2p/syndie/sml/Blog.java @@ -0,0 +1,19 @@ +package net.i2p.syndie.sml; + +import java.util.*; +import net.i2p.data.DataHelper; + +/** contains intermediary rendering state */ +class Blog { + public String name; + public String hash; + public String tag; + public long entryId; + public List locations; + public int hashCode() { return -1; } + public boolean equals(Object o) { + Blog b = (Blog)o; + return DataHelper.eq(hash, b.hash) && DataHelper.eq(tag, b.tag) && DataHelper.eq(name, b.name) + && DataHelper.eq(entryId, b.entryId) && DataHelper.eq(locations, b.locations); + } +} \ No newline at end of file diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/BlogPostInfoRenderer.java b/apps/syndie/java/src/net/i2p/syndie/sml/BlogPostInfoRenderer.java index c47aabb49..1acf6a4d7 100644 --- a/apps/syndie/java/src/net/i2p/syndie/sml/BlogPostInfoRenderer.java +++ b/apps/syndie/java/src/net/i2p/syndie/sml/BlogPostInfoRenderer.java @@ -76,97 +76,103 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { } private void renderAttachments(BlogURI postURI, Attachment attachments[]) { + renderAttachments(postURI, "syndieBlogPostInfo", attachments, _bodyBuffer); + } + public static void renderAttachments(BlogURI postURI, String baseStyleName, Attachment attachments[], StringBuffer out) { if ( (attachments != null) && (attachments.length > 0) ) { - _bodyBuffer.append("
\n"); - _bodyBuffer.append("Attachments\n
    "); + out.append("
    \n"); + out.append("Attachments\n
      "); // for each attachment: //
    1. $name\n($size of type $type)
    2. for (int i = 0; i < attachments.length; i++) { - _bodyBuffer.append("
    3. "); + out.append("
    4. "); String name = attachments[i].getName(); if ( (name == null) && (name.trim().length() <= 0) ) name = "Attachment " + i; if (postURI != null) { - _bodyBuffer.append(""); + out.append(""); } - _bodyBuffer.append(HTMLRenderer.sanitizeString(name, 40)); + out.append(HTMLRenderer.sanitizeString(name, 40)); if (postURI != null) - _bodyBuffer.append(""); + out.append(""); - _bodyBuffer.append("\n("); + out.append("\n("); int bytes = attachments[i].getDataLength(); if (bytes > 10*1024*1024) - _bodyBuffer.append(bytes/(1024*1024)).append("MBytes"); + out.append(bytes/(1024*1024)).append("MBytes"); else if (bytes > 10*1024) - _bodyBuffer.append(bytes/(10*1024)).append("KBytes"); + out.append(bytes/(10*1024)).append("KBytes"); else - _bodyBuffer.append(bytes).append("Bytes"); + out.append(bytes).append("Bytes"); String type = attachments[i].getMimeType(); if (type != null) { if ("application/octet-stream".equals(type)) { - _bodyBuffer.append(", binary"); + out.append(", binary"); } else { int split = type.lastIndexOf('/'); if (split > 0) - _bodyBuffer.append(", ").append(HTMLRenderer.sanitizeString(type.substring(split+1), 30)); + out.append(", ").append(HTMLRenderer.sanitizeString(type.substring(split+1), 30)); else - _bodyBuffer.append(", ").append(HTMLRenderer.sanitizeString(type, 30)); + out.append(", ").append(HTMLRenderer.sanitizeString(type, 30)); } } - _bodyBuffer.append(")"); + out.append(")"); String desc = attachments[i].getDescription(); if ( (desc != null) && (desc.trim().length() > 0) ) - _bodyBuffer.append("
      \n").append(HTMLRenderer.sanitizeString(desc, 120)); + out.append("
      \n").append(HTMLRenderer.sanitizeString(desc, 120)); - _bodyBuffer.append("
    5. \n"); + out.append("\n"); } - _bodyBuffer.append("
    \n"); - _bodyBuffer.append("
    \n"); + out.append("
\n"); + out.append("
\n"); } } private void renderBlogs(BlogURI postURI) { - if ( (_blogs != null) && (_blogs.size() > 0) ) { - _bodyBuffer.append("
\n"); - _bodyBuffer.append("Blogs\n
    "); + renderBlogs(postURI, _user, "syndieBlogPostInfo", _blogs, _bodyBuffer); + } + public static void renderBlogs(BlogURI postURI, User user, String baseStyleName, List blogs, StringBuffer out) { + if ( (blogs != null) && (blogs.size() > 0) ) { + out.append("
    \n"); + out.append("Blogs\n
      "); // for each blog ref: //
    1. $name\n ? :) :(
    2. - for (int i = 0; i < _blogs.size(); i++) { - _bodyBuffer.append("
    3. "); - Blog blog = (Blog)_blogs.get(i); - PetNameDB db = _user.getPetNameDB(); + for (int i = 0; i < blogs.size(); i++) { + out.append("
    4. "); + Blog blog = (Blog)blogs.get(i); + PetNameDB db = user.getPetNameDB(); PetName pn = db.getByLocation(blog.hash); if ( (blog.entryId > 0) && (blog.hash != null) ) { // view a specific post in their blog (jumping to their blog, rather than keeping the // current blog's formatting... is that the right thing to do?) - _bodyBuffer.append(""); + out.append(""); if (pn != null) - _bodyBuffer.append(HTMLRenderer.sanitizeString(pn.getName())); + out.append(HTMLRenderer.sanitizeString(pn.getName())); else - _bodyBuffer.append(HTMLRenderer.sanitizeString(blog.name)); - _bodyBuffer.append(" on ").append(getEntryDate(blog.entryId)); - _bodyBuffer.append(""); + out.append(HTMLRenderer.sanitizeString(blog.name)); + out.append(" on ").append(getEntryDate(blog.entryId)); + out.append(""); } else if (blog.hash != null) { // view their full blog - _bodyBuffer.append(""); + out.append(""); if (pn != null) { // we already have a petname for this user - _bodyBuffer.append(pn.getName()).append(""); + out.append(pn.getName()).append(""); /* "); @@ -177,7 +183,7 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { // generate a new nym while ( (pn = db.getByName(blog.name)) != null) blog.name = blog.name + "."; - _bodyBuffer.append(HTMLRenderer.sanitizeString(blog.name)).append(""); + out.append(HTMLRenderer.sanitizeString(blog.name)).append(""); /* "); @@ -186,14 +192,14 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { // should probably add on some inline-bookmarking support, but we'd need requestURL for that } } - _bodyBuffer.append("
    5. \n"); + out.append("\n"); } - _bodyBuffer.append("
    \n"); + out.append("
\n"); } } - private final SimpleDateFormat _dateFormat = new SimpleDateFormat("yyyy/MM/dd", Locale.UK); - private final String getEntryDate(long when) { + private static final SimpleDateFormat _dateFormat = new SimpleDateFormat("yyyy/MM/dd", Locale.UK); + private static final String getEntryDate(long when) { synchronized (_dateFormat) { try { String str = _dateFormat.format(new Date(when)); @@ -207,73 +213,79 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { } private void renderLinks(BlogURI postURI) { - if ( (_links != null) && (_links.size() > 0) ) { - _bodyBuffer.append("
\n"); - _bodyBuffer.append("Links\n
    "); + renderLinks(postURI, _user, "syndieBlogPostInfo", _links, _bodyBuffer); + } + public static void renderLinks(BlogURI postURI, User user, String baseStyleName, List links, StringBuffer out) { + if ( (links != null) && (links.size() > 0) ) { + out.append("
    \n"); + out.append("Links\n
      "); // for each link: //
    1. $location
    2. - for (int i = 0; i < _links.size(); i++) { - _bodyBuffer.append("
    3. "); + for (int i = 0; i < links.size(); i++) { + out.append("
    4. "); - Link l = (Link)_links.get(i); + Link l = (Link)links.get(i); String schema = l.schema; - _bodyBuffer.append("").append(HTMLRenderer.sanitizeString(l.location, 40)).append(" ("); - _bodyBuffer.append(HTMLRenderer.sanitizeString(l.schema, 10)).append(")"); + out.append("location=").append(HTMLRenderer.sanitizeURL(l.location)).append("&"); + out.append("\">").append(HTMLRenderer.sanitizeString(l.location, 30)).append(" ("); + out.append(HTMLRenderer.sanitizeString(l.schema, 6)).append(")"); - _bodyBuffer.append("
    5. \n"); + out.append("\n"); } - _bodyBuffer.append("
    \n"); + out.append("
\n"); } } private void renderAddresses(BlogURI postURI) { - if ( (_addresses != null) && (_addresses.size() > 0) ) { - _bodyBuffer.append("
\n"); - _bodyBuffer.append("Addresses\n
    "); + renderAddresses(postURI, _user, "syndieBlogPostInfo", _addresses, _bodyBuffer); + } + public static void renderAddresses(BlogURI postURI, User user, String baseStyleName, List addresses, StringBuffer out) { + if ( (addresses != null) && (addresses.size() > 0) ) { + out.append("
    \n"); + out.append("Addresses\n
      "); // for each address: //
    1. $name
    2. - for (int i = 0; i < _addresses.size(); i++) { - _bodyBuffer.append("
    3. "); - Address a = (Address)_addresses.get(i); - importAddress(a); + for (int i = 0; i < addresses.size(); i++) { + out.append("
    4. "); + Address a = (Address)addresses.get(i); + importAddress(a, user); PetName pn = null; - if (_user != null) - pn = _user.getPetNameDB().getByLocation(a.location); + if (user != null) + pn = user.getPetNameDB().getByLocation(a.location); if (pn != null) { - _bodyBuffer.append(HTMLRenderer.sanitizeString(pn.getName())); + out.append(HTMLRenderer.sanitizeString(pn.getName())); } else { - _bodyBuffer.append("").append(HTMLRenderer.sanitizeString(a.name)).append(""); + out.append(AddressesServlet.PARAM_PROTO).append("=").append(HTMLRenderer.sanitizeTagParam(a.protocol)).append("&"); + out.append("\" title=\"Add this address to your addressbook\">").append(HTMLRenderer.sanitizeString(a.name)).append(""); } - _bodyBuffer.append("
    5. \n"); + out.append("\n"); } - _bodyBuffer.append("
    \n"); + out.append("
\n"); } } - public void importAddress(Address a) { - if (_user != null && _user.getImportAddresses() && !_user.getPetNameDB().containsName(a.name)) { + public static void importAddress(Address a, User user) { + if (user != null && user.getImportAddresses() && !user.getPetNameDB().containsName(a.name)) { PetName pn = new PetName(a.name, a.schema, a.protocol, a.location); - _user.getPetNameDB().add(pn); + user.getPetNameDB().add(pn); try { - _user.getPetNameDB().store(_user.getAddressbookLocation()); + user.getPetNameDB().store(user.getAddressbookLocation()); } catch (IOException ioe) { //ignore } @@ -292,38 +304,41 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { } private void renderArchives(BlogURI postURI) { - if ( (_archives != null) && (_archives.size() > 0) ) { - _bodyBuffer.append("
\n"); - _bodyBuffer.append("Archives\n
    "); + renderArchives(postURI, _user, "syndieBlogPostInfo", _archives, _bodyBuffer); + } + public static void renderArchives(BlogURI postURI, User user, String baseStyleName, List archives, StringBuffer out) { + if ( (archives != null) && (archives.size() > 0) ) { + out.append("
    \n"); + out.append("Archives\n
      "); // for each archive: //
    1. $name :)
      $description
    2. - for (int i = 0; i < _archives.size(); i++) { - _bodyBuffer.append("
    3. "); - ArchiveRef a = (ArchiveRef)_archives.get(i); - boolean authRemote = BlogManager.instance().authorizeRemote(_user); + for (int i = 0; i < archives.size(); i++) { + out.append("
    4. "); + ArchiveRef a = (ArchiveRef)archives.get(i); + boolean authRemote = BlogManager.instance().authorizeRemote(user); if (authRemote) { - _bodyBuffer.append(""); + out.append(""); } - _bodyBuffer.append(HTMLRenderer.sanitizeString(a.name)); + out.append(HTMLRenderer.sanitizeString(a.name)); if (authRemote) { - _bodyBuffer.append(""); + out.append(""); } if ( (a.description != null) && (a.description.trim().length() > 0) ) - _bodyBuffer.append(" ").append(HTMLRenderer.sanitizeString(a.description, 64)); - + out.append(" ").append(HTMLRenderer.sanitizeString(a.description, 64)); + /* _bodyBuffer.append(" bookmark it"); - - _bodyBuffer.append("
    5. \n"); + */ + out.append("\n"); } - _bodyBuffer.append("
    \n"); + out.append("
\n"); } } @@ -371,19 +386,6 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { public void receiveLeftBracket() { } public void receiveRightBracket() { } - protected static class Blog { - public String name; - public String hash; - public String tag; - public long entryId; - public List locations; - public int hashCode() { return -1; } - public boolean equals(Object o) { - Blog b = (Blog)o; - return DataHelper.eq(hash, b.hash) && DataHelper.eq(tag, b.tag) && DataHelper.eq(name, b.name) - && DataHelper.eq(entryId, b.entryId) && DataHelper.eq(locations, b.locations); - } - } /** * when we see a link to a blog, we may want to: * = view the blog entry @@ -414,19 +416,6 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { _blogs.add(b); } - protected static class ArchiveRef { - public String name; - public String description; - public String locationSchema; - public String location; - public int hashCode() { return -1; } - public boolean equals(Object o) { - ArchiveRef a = (ArchiveRef)o; - return DataHelper.eq(name, a.name) && DataHelper.eq(description, a.description) - && DataHelper.eq(locationSchema, a.locationSchema) - && DataHelper.eq(location, a.location); - } - } public void receiveArchive(String name, String description, String locationSchema, String location, String postingKey, String anchorText) { ArchiveRef a = new ArchiveRef(); @@ -438,15 +427,6 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { _archives.add(a); } - protected static class Link { - public String schema; - public String location; - public int hashCode() { return -1; } - public boolean equals(Object o) { - Link l = (Link)o; - return DataHelper.eq(schema, l.schema) && DataHelper.eq(location, l.location); - } - } public void receiveLink(String schema, String location, String text) { Link l = new Link(); l.schema = schema; @@ -455,17 +435,6 @@ public class BlogPostInfoRenderer extends EventReceiverImpl { _links.add(l); } - protected static class Address { - public String name; - public String schema; - public String location; - public String protocol; - public int hashCode() { return -1; } - public boolean equals(Object o) { - Address a = (Address)o; - return DataHelper.eq(schema, a.schema) && DataHelper.eq(location, a.location) && DataHelper.eq(protocol, a.protocol) && DataHelper.eq(name, a.name); - } - } public void receiveAddress(String name, String schema, String protocol, String location, String anchorText) { Address a = new Address(); a.name = name; diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/BlogRenderer.java b/apps/syndie/java/src/net/i2p/syndie/sml/BlogRenderer.java index c03c96d1b..75ee5b6e7 100644 --- a/apps/syndie/java/src/net/i2p/syndie/sml/BlogRenderer.java +++ b/apps/syndie/java/src/net/i2p/syndie/sml/BlogRenderer.java @@ -7,6 +7,7 @@ import net.i2p.client.naming.PetName; import net.i2p.data.*; import net.i2p.syndie.data.*; import net.i2p.syndie.web.*; +import net.i2p.syndie.*; /** * Renders posts for display within the blog view @@ -15,10 +16,21 @@ import net.i2p.syndie.web.*; public class BlogRenderer extends HTMLRenderer { private BlogInfo _blog; private BlogInfoData _data; + private boolean _isComment; public BlogRenderer(I2PAppContext ctx, BlogInfo info, BlogInfoData data) { super(ctx); _blog = info; _data = data; + _isComment = false; + } + + public void renderPost(User user, Archive archive, EntryContainer entry, Writer out, boolean cutBody, boolean showImages) throws IOException { + _isComment = false; + render(user, archive, entry, out, cutBody, showImages); + } + public void renderComment(User user, Archive archive, EntryContainer entry, Writer out) throws IOException { + _isComment = true; + render(user, archive, entry, out, false, true); } public void receiveHeaderEnd() { @@ -64,9 +76,26 @@ public class BlogRenderer extends HTMLRenderer { } _postBodyBuffer.append("Leave a comment\n"); + if (_isComment) + renderCommentMeta(); _postBodyBuffer.append("\n"); _postBodyBuffer.append("\n\n"); } + + private void renderCommentMeta() { + BlogURI postURI = null; + Attachment attachments[] = null; + if (_entry != null) { + postURI = _entry.getURI(); + attachments = _entry.getAttachments(); + } + BlogPostInfoRenderer.renderAttachments(postURI, "syndieBlogCommentInfo", attachments, _postBodyBuffer); + BlogPostInfoRenderer.renderBlogs(postURI, _user, "syndieBlogCommentInfo", _blogs, _postBodyBuffer); + BlogPostInfoRenderer.renderLinks(postURI, _user, "syndieBlogCommentInfo", _links, _postBodyBuffer); + BlogPostInfoRenderer.renderAddresses(postURI, _user, "syndieBlogCommentInfo", _addresses, _postBodyBuffer); + BlogPostInfoRenderer.renderArchives(postURI, _user, "syndieBlogCommentInfo", _archives, _postBodyBuffer); + } + private int getChildCount(ThreadNode node) { int nodes = 0; for (int i = 0; i < node.getChildCount(); i++) { diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java b/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java index f308cbf91..c1d90428f 100644 --- a/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java +++ b/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java @@ -274,19 +274,6 @@ public class HTMLRenderer extends EventReceiverImpl { _bodyBuffer.append(getSpan("rb")).append("]"); } - protected static class Blog { - public String name; - public String hash; - public String tag; - public long entryId; - public List locations; - public int hashCode() { return -1; } - public boolean equals(Object o) { - Blog b = (Blog)o; - return DataHelper.eq(hash, b.hash) && DataHelper.eq(tag, b.tag) && DataHelper.eq(name, b.name) - && DataHelper.eq(entryId, b.entryId) && DataHelper.eq(locations, b.locations); - } - } /** * when we see a link to a blog, we may want to: * = view the blog entry @@ -370,19 +357,6 @@ public class HTMLRenderer extends EventReceiverImpl { _bodyBuffer.append("] "); } - protected static class ArchiveRef { - public String name; - public String description; - public String locationSchema; - public String location; - public int hashCode() { return -1; } - public boolean equals(Object o) { - ArchiveRef a = (ArchiveRef)o; - return DataHelper.eq(name, a.name) && DataHelper.eq(description, a.description) - && DataHelper.eq(locationSchema, a.locationSchema) - && DataHelper.eq(location, a.location); - } - } public void receiveArchive(String name, String description, String locationSchema, String location, String postingKey, String anchorText) { ArchiveRef a = new ArchiveRef(); @@ -419,15 +393,6 @@ public class HTMLRenderer extends EventReceiverImpl { _bodyBuffer.append("]"); } - protected static class Link { - public String schema; - public String location; - public int hashCode() { return -1; } - public boolean equals(Object o) { - Link l = (Link)o; - return DataHelper.eq(schema, l.schema) && DataHelper.eq(location, l.location); - } - } public void receiveLink(String schema, String location, String text) { Link l = new Link(); l.schema = schema; @@ -446,39 +411,8 @@ public class HTMLRenderer extends EventReceiverImpl { append(""); } - protected static class Address { - public String name; - public String schema; - public String location; - public String protocol; - public int hashCode() { return -1; } - public boolean equals(Object o) { - Address a = (Address)o; - return DataHelper.eq(schema, a.schema) && DataHelper.eq(location, a.location) && DataHelper.eq(protocol, a.protocol) && DataHelper.eq(name, a.name); - } - } - public void importAddress(Address a) { - if (_user != null && _user.getImportAddresses() && !_user.getPetNameDB().containsName(a.name)) { - PetName pn = new PetName(a.name, a.schema, a.protocol, a.location); - _user.getPetNameDB().add(pn); - try { - _user.getPetNameDB().store(_user.getAddressbookLocation()); - } catch (IOException ioe) { - //ignore - } - } - if (BlogManager.instance().getImportAddresses() - && I2PAppContext.getGlobalContext().namingService().lookup(a.name) == null - && a.schema.equalsIgnoreCase("i2p")) { - PetName pn = new PetName(a.name, a.schema, a.protocol, a.location); - I2PAppContext.getGlobalContext().petnameDb().add(pn); - try { - I2PAppContext.getGlobalContext().petnameDb().store(); - } catch (IOException ioe) { - //ignore - } - } + BlogPostInfoRenderer.importAddress(a, _user); } public void receiveAddress(String name, String schema, String protocol, String location, String anchorText) { diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/Link.java b/apps/syndie/java/src/net/i2p/syndie/sml/Link.java new file mode 100644 index 000000000..291c83c4b --- /dev/null +++ b/apps/syndie/java/src/net/i2p/syndie/sml/Link.java @@ -0,0 +1,15 @@ +package net.i2p.syndie.sml; + +import java.util.*; +import net.i2p.data.DataHelper; + +/** contains intermediary rendering state */ +class Link { + public String schema; + public String location; + public int hashCode() { return -1; } + public boolean equals(Object o) { + Link l = (Link)o; + return DataHelper.eq(schema, l.schema) && DataHelper.eq(location, l.location); + } +} diff --git a/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java b/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java index f82db02ee..cb0ff42b7 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java @@ -558,7 +558,9 @@ public abstract class BaseServlet extends HttpServlet { } protected void renderBegin(User user, HttpServletRequest req, PrintWriter out, ThreadIndex index) throws IOException { - out.write("\n" + getTitle() + "\n"); + out.write("\n"); + out.write("\n"); + out.write("\n\n" + getTitle() + "\n"); out.write(""); out.write(""); out.write(""); @@ -381,13 +383,13 @@ public class ViewBlogServlet extends BaseServlet { if ( (posts.size() == 1) && (req.getParameter(PARAM_ENTRY) != null) ) { BlogURI uri = (BlogURI)posts.get(0); EntryContainer entry = archive.getEntry(uri); - renderer.render(user, archive, entry, out, false, true); + renderer.renderPost(user, archive, entry, out, false, true); renderComments(user, out, info, data, entry, archive, renderer); } else { for (int i = offset; i < posts.size() && i < offset + POSTS_PER_PAGE; i++) { BlogURI uri = (BlogURI)posts.get(i); EntryContainer entry = archive.getEntry(uri); - renderer.render(user, archive, entry, out, true, true); + renderer.renderPost(user, archive, entry, out, true, true); } renderNav(out, info, data, posts, offset, archive, req); @@ -412,7 +414,7 @@ public class ViewBlogServlet extends BaseServlet { out.write("
  • "); if (!shouldIgnore(user, uri)) { EntryContainer cur = archive.getEntry(uri); - renderer.render(user, archive, cur, out, false, true); + renderer.renderComment(user, archive, cur, out); // recurse renderComments(user, out, uri, archive, index, renderer); } @@ -618,12 +620,18 @@ public class ViewBlogServlet extends BaseServlet { } private static final String CSS = -"