From 52c8d049af6c0963b63dd1e70f66128527a7cba5 Mon Sep 17 00:00:00 2001 From: Ugnich Anton Date: Wed, 7 Nov 2012 16:36:17 +0700 Subject: JS local time auto-expand comments --- src/java/com/juick/http/www/UserThread.java | 280 +++++++++++++++------------- 1 file changed, 148 insertions(+), 132 deletions(-) (limited to 'src/java/com/juick/http/www/UserThread.java') diff --git a/src/java/com/juick/http/www/UserThread.java b/src/java/com/juick/http/www/UserThread.java index ec3412f3..a0bb3a86 100644 --- a/src/java/com/juick/http/www/UserThread.java +++ b/src/java/com/juick/http/www/UserThread.java @@ -22,11 +22,7 @@ import com.juick.server.UserQueries; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Locale; import java.util.ResourceBundle; import javax.servlet.ServletException; @@ -70,14 +66,14 @@ public class UserThread { try { PageTemplates.pageHead(out, title, null); PageTemplates.pageNavigation(out, locale, visitor); - PageTemplates.pageUserTitle(out, sql, locale, user, visitor); + //PageTemplates.pageUserTitle(out, sql, locale, user, visitor); out.println("
"); out.println("
"); out.println("
"); - printMessage(out, sql, MID, visitor, locale); - printReplies(out, sql, MID, visitor, locale, listview); + com.juick.Message msg = printMessage(out, sql, MID, visitor, locale); + printReplies(out, sql, msg, visitor, locale, listview); out.println("
"); out.println("
"); @@ -89,154 +85,163 @@ public class UserThread { } } - public static void printMessage(PrintWriter out, Connection sql, int mid, com.juick.User visitor, Locale locale) { + public static com.juick.Message printMessage(PrintWriter out, Connection sql, int mid, com.juick.User visitor, Locale locale) { ResourceBundle rb = ResourceBundle.getBundle("Global", locale); ResourceBundle rbthread = ResourceBundle.getBundle("UserThread", locale); - PreparedStatement stmt = null; - ResultSet rs = null; - try { - stmt = sql.prepareStatement("SELECT STRAIGHT_JOIN messages.message_id,messages.user_id,users.nick,messages_txt.tags,messages.readonly,messages.privacy,messages_txt.txt,TIMESTAMPDIFF(MINUTE,messages.ts,NOW()),messages.ts,messages.replies,messages.attach,messages.place_id,places.name,messages.lat,messages.lon FROM ((messages INNER JOIN messages_txt ON messages.message_id=messages_txt.message_id) INNER JOIN users ON messages.user_id=users.id) LEFT JOIN places ON messages.place_id=places.place_id WHERE messages.message_id=?"); - stmt.setInt(1, mid); - rs = stmt.executeQuery(); - if (rs.first()) { - int uid = rs.getInt(2); - String uname = rs.getString(3); - String tags = rs.getString(4); - String txt = rs.getString(7); - // timediff - // timestamp - // replies - // attach - // pid - // pname - // lat - // lon - - boolean cancomment = visitor != null; - - tags = (tags != null) ? PageTemplates.formatTags(new ArrayList(Arrays.asList(tags.split(" ")))) : ""; - if (rs.getInt(5) == 1) { - tags += " *readonly"; - cancomment = false; - } - switch (rs.getInt(6)) { - case 2: - tags += " *public"; - break; - case -1: - tags += " *friends"; - break; - case -2: - tags += " *private"; - break; - } + com.juick.Message msg = MessagesQueries.getMessage(sql, mid); - txt = PageTemplates.formatMessage(txt); + msg.VisitorCanComment = visitor != null; - out.println(""); + return msg; } - public static void printReplies(PrintWriter out, Connection sql, int mid, com.juick.User visitor, Locale locale, boolean listview) { + public static void printReplies(PrintWriter out, Connection sql, com.juick.Message msg, com.juick.User visitor, Locale locale, boolean listview) { ResourceBundle rbuser = ResourceBundle.getBundle("User", locale); - ArrayList replies = MessagesQueries.getReplies(sql, mid); + ArrayList replies = MessagesQueries.getReplies(sql, msg.MID); + ArrayList blUIDs = new ArrayList(); for (int i = 0; i < replies.size(); i++) { - com.juick.Message msg = replies.get(i); - if (msg.ReplyTo > 0) { + com.juick.Message reply = replies.get(i); + if (reply.User.UID != msg.User.UID && !blUIDs.contains(reply.User.UID)) { + blUIDs.add(reply.User.UID); + } + if (reply.ReplyTo > 0) { boolean added = false; for (int n = 0; n < replies.size(); n++) { - if (replies.get(n).RID == msg.ReplyTo) { - replies.get(n).childs.add(msg); + if (replies.get(n).RID == reply.ReplyTo) { + replies.get(n).childs.add(reply); added = true; break; } } if (!added) { - msg.ReplyTo = 0; + reply.ReplyTo = 0; } } } if (!replies.isEmpty()) { + if (visitor != null && msg.User.UID == visitor.UID) { + for (int i = 0; i < replies.size(); i++) { + replies.get(i).VisitorCanComment = true; + } + } else if (visitor != null && msg.VisitorCanComment) { + blUIDs = UserQueries.checkBL(sql, visitor.UID, blUIDs); + for (int i = 0; i < replies.size(); i++) { + com.juick.Message reply = replies.get(i); + reply.VisitorCanComment = reply.User.UID == visitor.UID || !blUIDs.contains(reply.User.UID); + } + } else { + for (int i = 0; i < replies.size(); i++) { + replies.get(i).VisitorCanComment = false; + } + } + + boolean foldable = false; + if (replies.size() > 10) { + for (int i = 0; i < replies.size() - 1; i++) { + if (replies.get(i).getChildsCount() > 1) { + foldable = true; + break; + } + } + } out.println("
"); out.print(" "); out.println("

" + rbuser.getString("Replies") + " (" + replies.size() + ")

"); @@ -246,18 +251,18 @@ public class UserThread { if (listview) { printList(out, replies, locale); } else { - printTree(out, replies, 0, 0, locale); + printTree(out, replies, 0, 0, false, locale); } out.println(""); - } - for (int i = 0; i < replies.size(); i++) { - replies.get(i).cleanupChilds(); + for (int i = 0; i < replies.size(); i++) { + replies.get(i).cleanupChilds(); + } + replies.clear(); } - replies.clear(); } - public static void printTree(PrintWriter out, ArrayList replies, int ReplyTo, int margin, Locale locale) { + public static void printTree(PrintWriter out, ArrayList replies, int ReplyTo, int margin, boolean hidden, Locale locale) { ResourceBundle rb = ResourceBundle.getBundle("Global", locale); if (margin > 420) { @@ -273,7 +278,10 @@ public class UserThread { out.print("border: 0;"); } if (margin > 0) { - out.print("margin-left: " + margin + "px;display:none;"); + out.print("margin-left: " + margin + "px;"); + } + if (hidden) { + out.print("display:none;"); } out.println("\">"); if (msg.AttachmentType != null) { @@ -284,20 +292,26 @@ public class UserThread { } } out.println("
\""
"); - out.println(" "); + out.println(" "); out.println(" "); out.println("
" + PageTemplates.formatMessage(msg.Text) + "
"); - out.println(" "); - out.println("
"); - if (ReplyTo == 0) { - int childs = msg.getChildsCount() - 1; - if (childs > 0) { - out.println(" "); - } + if (msg.VisitorCanComment) { + out.println(" "); + out.println("
"); + } + + int childs = msg.getChildsCount(); + if (ReplyTo == 0 && childs > 1 && replies.size() > 10) { + out.println(" "); + } out.println(" "); - printTree(out, replies, msg.RID, margin + 20, locale); + if (ReplyTo == 0 && childs > 1 && replies.size() > 10) { + printTree(out, msg.childs, msg.RID, margin + 20, true, locale); + } else if (childs > 0) { + printTree(out, msg.childs, msg.RID, margin + 20, hidden, locale); + } } } } @@ -317,15 +331,17 @@ public class UserThread { } } out.println("
"); - out.println(" "); + out.println(" "); out.println(" "); out.println("
" + PageTemplates.formatMessage(msg.Text) + "
"); out.print("
/" + msg.RID); if (msg.ReplyTo > 0) { out.print(" " + rb.getString("in reply to") + " /" + msg.ReplyTo + ""); } - out.println(" · " + rb.getString("Comment") + "
"); - out.println("
"); + if (msg.VisitorCanComment) { + out.println(" · " + rb.getString("Comment") + "
"); + out.println("
"); + } out.println(" "); } } -- cgit v1.2.3