diff options
-rw-r--r-- | nbproject/project.properties | 2 | ||||
-rw-r--r-- | src/java/Blogs.properties | 2 | ||||
-rw-r--r-- | src/java/Blogs_ru.properties | 2 | ||||
-rw-r--r-- | src/java/Global.properties | 1 | ||||
-rw-r--r-- | src/java/Global_ru.properties | 1 | ||||
-rw-r--r-- | src/java/User.properties | 1 | ||||
-rw-r--r-- | src/java/User_ru.properties | 1 | ||||
-rw-r--r-- | src/java/com/juick/http/www/Blogs.java | 41 | ||||
-rw-r--r-- | src/java/com/juick/http/www/Chats.java | 77 | ||||
-rw-r--r-- | src/java/com/juick/http/www/Login.java | 1 | ||||
-rw-r--r-- | src/java/com/juick/http/www/Main.java | 13 | ||||
-rw-r--r-- | src/java/com/juick/http/www/Map.java | 64 | ||||
-rw-r--r-- | src/java/com/juick/http/www/NewMessage.java | 1 | ||||
-rw-r--r-- | src/java/com/juick/http/www/PageTemplates.java | 134 | ||||
-rw-r--r-- | src/java/com/juick/http/www/Photos.java | 100 | ||||
-rw-r--r-- | src/java/com/juick/http/www/Tags.java | 87 | ||||
-rw-r--r-- | src/java/com/juick/http/www/User.java | 38 | ||||
-rw-r--r-- | src/java/com/juick/http/www/UserThread.java | 28 | ||||
-rw-r--r-- | web/post3.js | 7 | ||||
-rw-r--r-- | web/scripts3.js | 24 | ||||
-rw-r--r-- | web/style3.css | 112 |
21 files changed, 355 insertions, 382 deletions
diff --git a/nbproject/project.properties b/nbproject/project.properties index 3855d649..1b4e5382 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -30,7 +30,7 @@ includes=** j2ee.compile.on.save=true j2ee.deploy.on.save=true j2ee.platform=1.6-web -j2ee.platform.classpath=${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/tomcat-jdbc.jar:${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/ecj-3.7.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/tomcat-util.jar:${j2ee.server.home}/lib/tomcat-api.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/annotations-api.jar +j2ee.platform.classpath=${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/tomcat-jdbc.jar:${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/ecj-3.7.1.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/tomcat-util.jar:${j2ee.server.home}/lib/tomcat-api.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/annotations-api.jar j2ee.server.type=Tomcat jar.compress=false javac.classpath=\ diff --git a/src/java/Blogs.properties b/src/java/Blogs.properties index 3b596f77..d5c6fd26 100644 --- a/src/java/Blogs.properties +++ b/src/java/Blogs.properties @@ -7,7 +7,7 @@ Tags=Tags Search=Search My\ feed=My feed Private=Private -Incoming=Incoming +Discussions=Discussions Recommended=Recommended All\ messages=All messages Popular=Popular diff --git a/src/java/Blogs_ru.properties b/src/java/Blogs_ru.properties index f5fe415f..b42f32f5 100644 --- a/src/java/Blogs_ru.properties +++ b/src/java/Blogs_ru.properties @@ -7,7 +7,7 @@ Tags=\u0422\u0435\u0433\u0438 Search=\u041f\u043e\u0438\u0441\u043a My\ feed=\u041c\u043e\u044f \u043b\u0435\u043d\u0442\u0430 Private=\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 -Incoming=\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435 +Discussions=\u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f Recommended=\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0435 All\ messages=\u0412\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f Popular=\u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 diff --git a/src/java/Global.properties b/src/java/Global.properties index 9f618c91..b0e9525e 100644 --- a/src/java/Global.properties +++ b/src/java/Global.properties @@ -1,6 +1,7 @@ # To change this template, choose Tools | Templates # and open the template in the editor. +Search=Search Blogs=Blogs Chats=Chats Photos=Photos diff --git a/src/java/Global_ru.properties b/src/java/Global_ru.properties index f87f4c75..8d315dbf 100644 --- a/src/java/Global_ru.properties +++ b/src/java/Global_ru.properties @@ -1,6 +1,7 @@ # To change this template, choose Tools | Templates # and open the template in the editor. +Search=\u041f\u043e\u0438\u0441\u043a Blogs=\u0411\u043b\u043e\u0433\u0438 Chats=\u0427\u0430\u0442\u044b Photos=\u0424\u043e\u0442\u043e diff --git a/src/java/User.properties b/src/java/User.properties index b91d4352..4d54c498 100644 --- a/src/java/User.properties +++ b/src/java/User.properties @@ -15,3 +15,4 @@ Expand\ all=Expand all View\ as\ list=View as list View\ as\ tree=View as tree all=all +Search=Search diff --git a/src/java/User_ru.properties b/src/java/User_ru.properties index 3bf82875..6a257a49 100644 --- a/src/java/User_ru.properties +++ b/src/java/User_ru.properties @@ -15,3 +15,4 @@ Expand\ all=\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 View\ as\ list=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u043e\u043c View\ as\ tree=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e\u043c all=\u0432\u0441\u0435 +Search=\u041f\u043e\u0438\u0441\u043a diff --git a/src/java/com/juick/http/www/Blogs.java b/src/java/com/juick/http/www/Blogs.java index a1cfdeb0..ea728eab 100644 --- a/src/java/com/juick/http/www/Blogs.java +++ b/src/java/com/juick/http/www/Blogs.java @@ -98,10 +98,10 @@ public class Blogs { response.sendError(404); return; } - } else if (paramShow.equals("incoming")) { + } else if (paramShow.equals("discuss")) { if (visitor != null) { - title = rb.getString("Incoming"); - mids = MessagesQueries.getIncoming(sql, visitor.UID, paramBefore); + title = rb.getString("Discussions"); + mids = MessagesQueries.getDiscussions(sql, visitor.UID, paramBefore); } else { response.sendError(404); return; @@ -130,18 +130,27 @@ public class Blogs { try { PageTemplates.pageHead(out, title, null); PageTemplates.pageNavigation(out, locale, visitor); - PageTemplates.pageTitle(out, title); + out.println("<div id=\"topwrapper\">"); out.println("<div id=\"wrapper\">"); out.println("<div id=\"content\">"); - out.println("<ul>"); + + PageTemplates.pageFilters(out, locale, visitor); if (mids.size() > 0) { + /* + if (paramShow != null && paramShow.equals("photos")) { + PageTemplates.printPhotos(out, sql, mids, locale); + } else { + */ + out.println("<ul>"); PageTemplates.printMessages(out, sql, mids, locale); + out.println("</ul>"); + /* + } + */ } - out.println("</ul>"); - if (mids.size() == 20) { String nextpage = "?before=" + mids.get(mids.size() - 1); if (paramShow != null) { @@ -154,29 +163,33 @@ public class Blogs { } out.println("</div>"); + out.println("</div>"); // wrapper + - out.println("<div id=\"column\">"); + out.println("<div id=\"column\" class=\"stickya\">"); out.println("<h2>" + rb.getString("Lists") + "</h2>"); if (visitor != null) { out.println("<ul>"); out.println(" <li><a href=\"?show=my\">" + rb.getString("My feed") + "</a></li>"); out.println(" <li><a href=\"?show=private\">" + rb.getString("Private") + "</a></li>"); - out.println(" <li><a href=\"?show=incoming\">" + rb.getString("Incoming") + "</a></li>"); + out.println(" <li><a href=\"?show=discuss\">" + rb.getString("Discussions") + "</a></li>"); out.println(" <li><a href=\"?show=recommended\">" + rb.getString("Recommended") + "</a></li>"); out.println("</ul>"); + out.println("<hr/>"); } out.println("<ul>"); out.println(" <li><a href=\"?\">" + rb.getString("All messages") + "</a></li>"); out.println(" <li><a href=\"?show=top\">" + rb.getString("Popular") + "</a></li>"); out.println(" <li><a href=\"?show=photos\">" + rb.getString("With photos") + "</a></li>"); out.println("</ul>"); - out.println("<h2>" + rb.getString("Tags") + "</h2>"); - out.println("<p style=\"text-align: justify\">" + getTags(sql, 30) + "</p>"); - out.println("<h2>" + rb.getString("Search") + "</h2>"); - out.println("<form action=\"/\" id=\"search\"><p><input type=\"text\" name=\"search\" class=\"inp\"/></p></form>"); - out.println("</div>"); + out.println("<hr/>"); + out.println("<p>" + getTags(sql, 30) + "</p>"); out.println("</div>"); + out.println("<div id=\"rcol\"></div>"); + + out.println("</div>"); // topwrapper + PageTemplates.pageFooter(request, out, locale, visitor); } finally { out.close(); diff --git a/src/java/com/juick/http/www/Chats.java b/src/java/com/juick/http/www/Chats.java deleted file mode 100644 index d15bb271..00000000 --- a/src/java/com/juick/http/www/Chats.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Juick - * Copyright (C) 2008-2011, Ugnich Anton - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -package com.juick.http.www; - -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.Locale; -import java.util.ResourceBundle; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * - * @author Ugnich Anton - */ -public class Chats { - - protected void doGet(Connection sql, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - com.juick.User visitor = Utils.getVisitorUser(sql, request); - Locale locale = request.getLocale(); - ResourceBundle rb = ResourceBundle.getBundle("Chats", locale); - - response.setContentType("text/html; charset=UTF-8"); - PrintWriter out = response.getWriter(); - try { - PageTemplates.pageHead(out, rb.getString("Active chats"), ""); - PageTemplates.pageNavigation(out, locale, visitor); - PageTemplates.pageTitle(out, rb.getString("Active chats")); - - out.println("<div id=\"wrapper\">"); - out.println("<div id=\"content\"><ul id=\"chats\">"); - - PreparedStatement stmt = null; - ResultSet rs = null; - try { - stmt = sql.prepareStatement("SELECT chats.chat_id,chats.subject,COUNT(chat_users.user_id) AS cnt FROM chats INNER JOIN chat_users USING(chat_id) GROUP BY chat_id ORDER BY cnt DESC"); - rs = stmt.executeQuery(); - rs.beforeFirst(); - while (rs.next()) { - String chatid = Integer.toString(rs.getInt(1), Character.MAX_RADIX); - out.println("<li><b>" + Utils.encodeHTML(rs.getString(2)) + "</b><br/><i>" + rb.getString("Users online") + ": " + rs.getInt(3) + "</i><br/><a href=\"xmpp:" + chatid + "@chat.juick.com?join\">" + chatid + "@chat.juick.com</a></li>"); - } - } catch (SQLException e) { - System.err.println(e); - } finally { - Utils.finishSQL(rs, stmt); - } - - out.println("</ul></div>"); - out.println("</div>"); - - PageTemplates.pageFooter(request, out, locale, visitor); - } finally { - out.close(); - } - } -} diff --git a/src/java/com/juick/http/www/Login.java b/src/java/com/juick/http/www/Login.java index 0006f9d0..3cf4a318 100644 --- a/src/java/com/juick/http/www/Login.java +++ b/src/java/com/juick/http/www/Login.java @@ -45,7 +45,6 @@ public class Login { try { PageTemplates.pageHead(out, rb.getString("Login"), ""); PageTemplates.pageNavigation(out, locale, visitor); - PageTemplates.pageTitle(out, rb.getString("Login")); out.println("<div id=\"wrapper\">"); out.println("<div id=\"content\">"); diff --git a/src/java/com/juick/http/www/Main.java b/src/java/com/juick/http/www/Main.java index 256e70f9..055327dd 100644 --- a/src/java/com/juick/http/www/Main.java +++ b/src/java/com/juick/http/www/Main.java @@ -42,10 +42,8 @@ public class Main extends HttpServlet implements XmppListener { Connection sqlSearch; XmppConnection xmpp; Blogs blogs = new Blogs(); - Chats chats = new Chats(); - Photos photos = new Photos(); + Tags tags = new Tags(); RootRedirects rootRedirects = new RootRedirects(); - Map map = new Map(); Login login = new Login(); User pagesUser = new User(); UserThread pagesUserThread = new UserThread(); @@ -124,12 +122,9 @@ public class Main extends HttpServlet implements XmppListener { String uri = request.getRequestURI(); if (uri.equals("/")) { blogs.doGet(sql, sqlSearch, request, response); - } else if (uri.equals("/chats")) { - chats.doGet(sql, request, response); - } else if (uri.equals("/photos")) { - photos.doGet(sql, request, response); - } else if (uri.equals("/map")) { - map.doGet(sql, request, response); + } else if (uri.equals("/tags")) { + com.juick.User visitor = Utils.getVisitorUser(sql, request); + tags.doGetTags(sql, request, response, visitor); } else if (uri.equals("/post")) { com.juick.User visitor = Utils.getVisitorUser(sql, request); if (visitor != null) { diff --git a/src/java/com/juick/http/www/Map.java b/src/java/com/juick/http/www/Map.java deleted file mode 100644 index 96524ac0..00000000 --- a/src/java/com/juick/http/www/Map.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Juick - * Copyright (C) 2008-2011, Ugnich Anton - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -package com.juick.http.www; - -import java.io.IOException; -import java.io.PrintWriter; -import java.sql.Connection; -import java.util.Locale; -import java.util.ResourceBundle; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * - * @author Ugnich Anton - */ -public class Map { - - protected void doGet(Connection sql, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - com.juick.User visitor = Utils.getVisitorUser(sql, request); - Locale locale = request.getLocale(); - ResourceBundle rb = ResourceBundle.getBundle("Map", locale); - - response.setContentType("text/html; charset=UTF-8"); - PrintWriter out = response.getWriter(); - try { - PageTemplates.pageHead(out, rb.getString("Messages on map"), "<script src=\"http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAAVVtPtxkw4soCEHg44FsNChRB4OFYjAXt73He16Zkp6a_0tPs2RTU6i6UlcMs4QvPBYvIY8rWvcxqOg\" type=\"text/javascript\"></script>" - + "<script src=\"http://static.juick.com/mc.js\" type=\"text/javascript\"></script>" - + "<script src=\"http://static.juick.com/map.js?2010111500\" type=\"text/javascript\"></script>"); - PageTemplates.pageNavigation(out, locale, visitor); - PageTemplates.pageTitle(out, rb.getString("Messages on map")); - - out.println("<div id=\"wrapper\">"); - out.println("<div id=\"geomap\" style=\"height: 400px; margin: 1em 0.5em\"></div>"); - out.println("<div id=\"content\"><ul id=\"messages\"></ul></div>"); - out.println("<div id=\"column\"><h2>" + rb.getString("Popular places") + "</h2><ul id=\"places\"></ul></div>"); - out.println("</div>"); - out.println("<script type=\"text/javascript\">"); - out.println("$(document).ready(mapInit);"); - out.println("$(window).unload(GUnload);"); - out.println("</script>"); - - PageTemplates.pageFooter(request, out, locale, visitor); - } finally { - out.close(); - } - } -} diff --git a/src/java/com/juick/http/www/NewMessage.java b/src/java/com/juick/http/www/NewMessage.java index 1efb753d..1e00a553 100644 --- a/src/java/com/juick/http/www/NewMessage.java +++ b/src/java/com/juick/http/www/NewMessage.java @@ -49,7 +49,6 @@ public class NewMessage { + "<script src=\"http://static.juick.com/map.js?2010111500\" type=\"text/javascript\"></script>" + "<script src=\"http://static.juick.com/post3.js\" type=\"text/javascript\"></script>"); PageTemplates.pageNavigation(out, locale, visitor); - PageTemplates.pageTitle(out, rbnm.getString("New message")); out.println("<div id=\"wrapper\"><div id=\"content\" class=\"pagetext\">"); out.println("<form action=\"/post\" method=\"post\" id=\"postmsg\" enctype=\"multipart/form-data\">"); diff --git a/src/java/com/juick/http/www/PageTemplates.java b/src/java/com/juick/http/www/PageTemplates.java index a76e0280..08e88342 100644 --- a/src/java/com/juick/http/www/PageTemplates.java +++ b/src/java/com/juick/http/www/PageTemplates.java @@ -24,7 +24,11 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.Locale; import java.util.ResourceBundle; import java.util.regex.Matcher; @@ -39,6 +43,9 @@ import ru.sape.Sape; public class PageTemplates { public static Sape sape = null; + private static SimpleDateFormat sdfSQL = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); + private static SimpleDateFormat sdfSimple = new SimpleDateFormat("d MMM"); + private static SimpleDateFormat sdfFull = new SimpleDateFormat("d MMM yyyy"); public static void pageHead(PrintWriter out, String title, String headers) { out.println("<!DOCTYPE html>"); @@ -46,10 +53,10 @@ public class PageTemplates { out.println("<head>"); out.println(" <meta charset=\"utf-8\"/>"); out.println(" <title>" + title + "</title>"); - out.println(" <link rel=\"stylesheet\" href=\"http://static.juick.com/style3.css?20120306\"/>"); + out.println(" <link rel=\"stylesheet\" href=\"http://static.juick.com/style3.css?2012030601\"/>"); out.println(" <link rel=\"icon\" type=\"image/png\" href=\"http://static.juick.com/favicon.png\"/>"); - out.println(" <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js\"></script>"); - out.println(" <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js\"></script>"); + out.println(" <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js\"></script>"); + out.println(" <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/jquery-ui.min.js\"></script>"); out.println(" <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js\"></script>"); out.println(" <script type=\"text/javascript\" src=\"http://static.juick.com/scripts3.js?20120306\"></script>"); out.println(" <script type=\"text/javascript\" src=\"http://static.juick.com/js/jquery.autoresize.js\"></script>"); @@ -63,18 +70,16 @@ public class PageTemplates { public static void pageNavigation(PrintWriter out, Locale loc, com.juick.User user) { ResourceBundle rb = ResourceBundle.getBundle("Global", loc); + out.println("<div id=\"hwrapper\">"); out.println("<div id=\"header\">"); - out.println("<div id=\"logo\"><a href=\"" + (user != null ? "/?show=my" : "/") + "\"><img src=\"http://static.juick.com/logo3.png\" width=\"120\" height=\"40\" alt=\"Juick\"/></a></div>"); - out.println(" <ul id=\"nav\">"); - out.println(" <li><a href=\"/\">" + rb.getString("Blogs") + "</a></li>"); -// out.println(" <li><a href=\"/chats\">" + rb.getString("Chats") + "</a></li>"); - out.println(" <li><a href=\"/photos\">" + rb.getString("Photos") + "</a></li>"); - out.println(" <li><a href=\"/map\">" + rb.getString("Map") + "</a></li>"); - out.println(" </ul>"); + out.println(" <div id=\"logo\"><a href=\"" + (user != null ? "/?show=my" : "/") + "\"><img src=\"http://static.juick.com/logo3.png\" width=\"120\" height=\"40\" alt=\"Juick\"/></a></div>"); + out.println(" <form action=\"/\" id=\"search\">"); + out.println(" <div id=\"search\"><input type=\"text\" name=\"search\" class=\"text\" placeholder=\"" + rb.getString("Search") + "\"/><input type=\"submit\" class=\"submit\" value=\">\"></div>"); + out.println(" </form>"); out.println(" <ul id=\"nav-right\">"); if (user != null) { out.println(" <li><a href=\"/post\">" + rb.getString("Post") + "</a></li>"); - out.println(" <li><a href=\"#\" onclick=\"$('#nav-menu').toggle('blind'); return false\"><img src=\"http://i.juick.com/as/" + user.UID + ".png\" alt=\"" + user.UName + "\"/>" + user.UName + "</a><ul id=\"nav-menu\">"); + out.println(" <li><a href=\"#\" onclick=\"$('#nav-menu').toggle(); return false\"><img src=\"http://i.juick.com/as/" + user.UID + ".png\" alt=\"" + user.UName + "\"/>" + user.UName + "</a><ul id=\"nav-menu\">"); out.println(" <li><a href=\"/" + user.UName + "/\">" + rb.getString("Blog") + "</a></li>"); out.println(" <li><a href=\"/settings\">" + rb.getString("Settings") + "</a></li>"); out.println(" <li><a href=\"/logout\">" + rb.getString("Logout") + "</a></li>"); @@ -84,11 +89,21 @@ public class PageTemplates { } out.println(" </ul>"); out.println("</div>"); + out.println("</div>"); } - public static void pageTitle(PrintWriter out, String title) { - out.println("<div id=\"title\">"); - out.println(" <h1>" + title + "</h1>"); + public static void pageFilters(PrintWriter out, Locale loc, com.juick.User user) { + ResourceBundle rb = ResourceBundle.getBundle("Global", loc); + + out.println("<div id=\"filters\">"); + out.println("<ul>"); + out.println(" <li><a href=\"#\">Messages</a></li>"); + out.println(" <li><a href=\"#\">Photos</a></li>"); + out.println(" <li><a href=\"#\">Recommendations</a></li>"); + out.println(" <li><a href=\"#\">Private</a></li>"); + out.println(" <li><a href=\"#\">Tags</a></li>"); + out.println(" <li><a href=\"#\">Users</a></li>"); + out.println("</ul>"); out.println("</div>"); } @@ -236,7 +251,19 @@ public class PageTemplates { int days = (minsago / 1440); return days + " day" + ((days % 10 == 1) ? "" : "s") + " ago"; } else { - return fulldate; + try { + Date pDate = sdfSQL.parse(fulldate); + Calendar c = Calendar.getInstance(); + int curyear = c.get(Calendar.YEAR); + c.setTime(pDate); + if (c.get(Calendar.YEAR) == curyear) { + return sdfSimple.format(pDate); + } else { + return sdfFull.format(pDate); + } + } catch (ParseException e) { + return fulldate; + } } } @@ -355,11 +382,11 @@ public class PageTemplates { txt = formatMessage(txt); - out.print(" <li id=\"msg-" + mid + "\" class=\"msg\""); - if (mid == mids.get(0)) { - out.print(" style=\"border: 0\""); - } - out.println(">"); + out.println(" <li id=\"msg-" + mid + "\" class=\"msg\">"); + out.println(" <div class=\"msg-avatar\"><a href=\"/" + uname + "/\"><img src=\"http://i.juick.com/a/" + uid + ".png\" alt=\"" + uname + "\"/></a></div>"); + out.println(" <div class=\"msg-ts\"><a href=\"/" + uname + "/" + mid + "\" title=\"" + rs.getString(9) + "\">" + formatDate(rs.getInt(8), rs.getString(9), locale) + "</a></div>"); + out.println(" <div class=\"msg-header\"><a href=\"/" + uname + "/\">@" + uname + "</a>:" + tags + "</div>"); + out.println(" <div class=\"msg-txt\">" + txt + "</div>"); if (rs.getString(12) != null) { if (rs.getString(12).equals("jpg")) { @@ -372,15 +399,6 @@ public class PageTemplates { } } - out.println(" <div class=\"msg-avatar\"><a href=\"/" + uname + "/\"><img src=\"http://i.juick.com/a/" + uid + ".png\" alt=\"" + uname + "\"/></a></div>"); - out.println(" <div class=\"msg-ts\"><a href=\"/" + uname + "/" + mid + "\">" + formatDate(rs.getInt(8), rs.getString(9), locale) + "</a><div class=\"msg-menu\"><a href=\"#\" onclick=\"$('#msg-menu-" + mid + "').toggle('blind'); return false\"><img src=\"http://static.juick.com/message-menu-icon.png\"></a><ul id=\"msg-menu-" + mid + "\">"); - out.println(" <li><a href=\"/post?body=%21%20%23" + mid + "\">" + rb.getString("Recommend message") + "</a></li>"); - out.println(" <li><a href=\"/post?body=%40" + uname + "%20\">" + rb.getString("Send private message") + "</a></li>"); - out.println(" <li><a href=\"/post?body=BL%20%40" + uname + "\">" + rb.getString("Block user") + "</a></li>"); - out.println(" </ul></div></div>"); - out.println(" <div class=\"msg-header\"><a href=\"/" + uname + "/\">@" + uname + "</a>:" + tags + "</div>"); - out.println(" <div class=\"msg-txt\">" + txt + "</div>"); - if (rs.getInt(10) > 0) { String repliesby = rs.getString(11); if (repliesby == null) { @@ -389,7 +407,7 @@ public class PageTemplates { out.println(" <div class=\"msg-comments\"><a href=\"/" + uname + "/" + mid + "\">" + formatReplies(rs.getInt(10), locale) + "</a> " + rb.getString("(replies) by") + " " + repliesby + "</div>"); } else if (cancomment) { out.println(" <form action=\"/post\" method=\"POST\" enctype=\"multipart/form-data\"><input type=\"hidden\" name=\"mid\" value=\"" + mid + "\"/>"); - out.println(" <div class=\"msg-comment\"><textarea name=\"body\" rows=\"1\" class=\"reply\" placeholder=\"Add a comment...\" onkeypress=\"postformListener(this.form,event)\"></textarea><input type=\"submit\" value=\"OK\"/></div>"); + out.println(" <div class=\"msg-comment\"><textarea name=\"body\" rows=\"1\" class=\"reply\" placeholder=\"Add a comment...\" onkeypress=\"postformListener(this.form,event)\"></textarea></div>"); out.println(" </form>"); } out.println(" </li>"); @@ -400,4 +418,60 @@ public class PageTemplates { Utils.finishSQL(rs, stmt); } } + /* + public static void printPhotos(PrintWriter out, Connection sql, ArrayList<Integer> mids, Locale locale) { + ResourceBundle rb = ResourceBundle.getBundle("Global", locale); + + out.println("<table class=\"photos\">"); + out.println(" <tr>"); + + 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_txt.repliesby,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 IN (" + Utils.convertArray2String(mids) + ") ORDER BY messages.message_id DESC"); + rs = stmt.executeQuery(); + rs.beforeFirst(); + int cnt = 0; + while (rs.next()) { + int mid = rs.getInt(1); + int uid = rs.getInt(2); + String uname = rs.getString(3); + String tags = rs.getString(4); + String txt = rs.getString(7); + + txt = formatMessage(txt); + + if (cnt % 2 == 0 && cnt > 0) { + out.println(" </tr>"); + out.println(" <tr>"); + } + + out.print(" <td id=\"photo-" + mid + "\" class=\"photo\""); + if (mid == mids.get(0)) { + out.print(" style=\"border: 0\""); + } + out.print(">"); + + out.println("<div class=\"photowrap\">"); + out.println(" <a href=\"#\" onclick=\"return photoDetails(" + mid + ")\"><img src=\"http://i.juick.com/" + (rs.getString(12).equals("jpg") ? "photos-512" : "thumbs") + "/" + mid + ".jpg\" alt=\"\"/></a>"); + out.println(" <div class=\"photo-ts\" title=\"" + rs.getString(9) + "\">" + formatDate(rs.getInt(8), rs.getString(9), locale) + "</div>"); + out.println(" <div class=\"photo-uname\">@" + uname + "</div>"); + if (rs.getInt(10) > 0) { + out.println(" <div class=\"photo-comments\">" + rs.getInt(10) + "</div>"); + } + out.println(" <div class=\"photo-txt\">" + txt + "</div>"); + out.println(" </td>"); + + cnt++; + } + } catch (SQLException e) { + System.err.println(e); + } finally { + Utils.finishSQL(rs, stmt); + } + + out.println(" </tr>"); + out.println("</table>"); + } + */ } diff --git a/src/java/com/juick/http/www/Photos.java b/src/java/com/juick/http/www/Photos.java deleted file mode 100644 index a2665501..00000000 --- a/src/java/com/juick/http/www/Photos.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Juick - * Copyright (C) 2008-2011, Ugnich Anton - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -package com.juick.http.www; - -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.Locale; -import java.util.ResourceBundle; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * - * @author Ugnich Anton - */ -public class Photos { - - protected void doGet(Connection sql, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - com.juick.User visitor = Utils.getVisitorUser(sql, request); - Locale locale = request.getLocale(); - ResourceBundle rb = ResourceBundle.getBundle("Photos", locale); - - response.setContentType("text/html; charset=UTF-8"); - PrintWriter out = response.getWriter(); - try { - PageTemplates.pageHead(out, rb.getString("Last photos and videos"), "<script type=\"text/javascript\" src=\"http://static.juick.com/js/jquery.onImagesLoad.min.js\"></script>" - + "<script type=\"text/javascript\" src=\"http://static.juick.com/js/gallery.js\"></script>" - + "<script type=\"text/javascript\" src=\"http://static.juick.com/js/jquery.fancybox-1.3.4.js\"></script>" - + "<link rel=\"stylesheet\" href=\"http://static.juick.com/fancybox/jquery.fancybox-1.3.4.css\"/>"); - PageTemplates.pageNavigation(out, locale, visitor); - PageTemplates.pageTitle(out, rb.getString("Last photos and videos")); - - out.println("<div id=\"wrapper\">"); - out.println("<div id=\"spinner\" style=\"text-align: center\">Loading...</div>"); - out.println("<ul id=\"gallery\" style=\"display: none\">"); - - PreparedStatement stmt = null; - ResultSet rs = null; - try { - stmt = sql.prepareStatement("SELECT messages.message_id,messages.attach,users.nick FROM messages INNER JOIN users ON messages.user_id=users.id WHERE messages.attach IS NOT NULL ORDER BY message_id DESC LIMIT 20"); - rs = stmt.executeQuery(); - rs.beforeFirst(); - while (rs.next()) { - if (rs.getString(2).equals("jpg")) { - out.println("<li class=\"galleryitem\"><a href=\"/" + rs.getString(3) + "/" + rs.getInt(1) + "\" title=\"@" + rs.getString(3) + "\"><img src=\"http://i.juick.com/photos-512/" + rs.getInt(1) + ".jpg\" alt=\"\"></a></li>"); - } else { - out.println("<li class=\"galleryitem\"><a href=\"/" + rs.getString(3) + "/" + rs.getInt(1) + "\" title=\"@" + rs.getString(3) + "\"><img src=\"http://i.juick.com/thumbs/" + rs.getInt(1) + ".jpg\" alt=\"\"></a></li>"); - } - } - } catch (SQLException e) { - System.err.println(e); - } finally { - Utils.finishSQL(rs, stmt); - } - - out.println("</ul>"); - out.println("</div>"); - out.println("<script type=\"text/javascript\">"); - out.println("$('#gallery').onImagesLoad({selectorCallback: galleryResize});"); - out.println("$('.galleryitem a').click(function() {"); - out.println(" $.fancybox({"); - out.println(" 'href': $(this).children('img').attr('src'),"); - out.println(" 'link': this.href,"); - out.println(" 'title': this.title,"); - out.println(" 'orig': this,"); - out.println(" 'transitionIn': 'elastic',"); - out.println(" 'transitionOut': 'none',"); - out.println(" 'easingIn': 'easeOutBack',"); - out.println(" 'easingOut': 'easeInBack'"); - out.println(" });"); - out.println(" return false;"); - out.println("});"); - out.println("</script>"); - - PageTemplates.pageFooter(request, out, locale, visitor); - } finally { - out.close(); - } - } -} diff --git a/src/java/com/juick/http/www/Tags.java b/src/java/com/juick/http/www/Tags.java new file mode 100644 index 00000000..07cff582 --- /dev/null +++ b/src/java/com/juick/http/www/Tags.java @@ -0,0 +1,87 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.juick.http.www; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Locale; +import java.util.ResourceBundle; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * + * @author ugnich + */ +public class Tags { + + protected void doGetTags(Connection sql, HttpServletRequest request, HttpServletResponse response, com.juick.User visitor) throws ServletException, IOException { + Locale locale = request.getLocale(); + ResourceBundle rbnm = ResourceBundle.getBundle("Blogs", locale); + + response.setContentType("text/html; charset=UTF-8"); + PrintWriter out = response.getWriter(); + try { + PageTemplates.pageHead(out, rbnm.getString("Tags"), null); + PageTemplates.pageNavigation(out, locale, visitor); + + int cnt = 30; + com.juick.Tag tags[] = new com.juick.Tag[cnt]; + int maxUsageCnt = 0; + PreparedStatement stmt = null; + ResultSet rs = null; + try { + stmt = sql.prepareStatement("SELECT tags.name AS name,COUNT(DISTINCT messages.user_id) AS cnt FROM (messages INNER JOIN messages_tags ON (messages.ts>TIMESTAMPADD(DAY,-3,NOW()) AND messages.message_id=messages_tags.message_id)) INNER JOIN tags ON messages_tags.tag_id=tags.tag_id GROUP BY tags.tag_id ORDER BY cnt DESC LIMIT ?"); + stmt.setInt(1, cnt); + rs = stmt.executeQuery(); + rs.beforeFirst(); + cnt = 0; + while (rs.next()) { + tags[cnt] = new com.juick.Tag(); + tags[cnt].Name = rs.getString(1); + tags[cnt].UsageCnt = rs.getInt(2); + if (tags[cnt].UsageCnt > maxUsageCnt) { + maxUsageCnt = tags[cnt].UsageCnt; + } + cnt++; + } + } catch (SQLException e) { + System.err.println(e); + } finally { + Utils.finishSQL(rs, stmt); + } + + Arrays.sort(tags, 0, cnt); + + for (int i = 0; i < cnt; i++) { + String tag = Utils.encodeHTML(tags[i].Name); + try { + tag = "<a href=\"/?tag=" + URLEncoder.encode(tags[i].Name, "UTF-8") + "\">" + tag + "</a>"; + } catch (UnsupportedEncodingException e) { + } + + if (tags[i].UsageCnt > maxUsageCnt / 3 * 2) { + out.print("<big>" + tag + "</big> "); + } else if (tags[i].UsageCnt > maxUsageCnt / 3) { + out.print("<small>" + tag + "</small> "); + } else { + out.print(tag + " "); + } + } + + PageTemplates.pageFooter(request, out, locale, visitor); + } finally { + out.close(); + } + } +} diff --git a/src/java/com/juick/http/www/User.java b/src/java/com/juick/http/www/User.java index 73dd5827..0ddac42d 100644 --- a/src/java/com/juick/http/www/User.java +++ b/src/java/com/juick/http/www/User.java @@ -100,6 +100,7 @@ public class User { PageTemplates.pageNavigation(out, locale, visitor); PageTemplates.pageUserTitle(out, sql, locale, user, visitor); + out.println("<div id=\"topwrapper\">"); out.println("<div id=\"wrapper\">"); out.println("<div id=\"content\">"); out.println("<ul>"); @@ -122,6 +123,7 @@ public class User { pageUserColumn(out, sql, user, visitor, locale); out.println("</div>"); + out.println("</div>"); // topwrapper PageTemplates.pageFooter(request, out, locale, visitor); } finally { @@ -146,11 +148,7 @@ public class User { out.println("<div id=\"wrapper\">"); out.println("<div id=\"content\">"); - - out.print("<p>"); - pageUserTags(out, sql, user, visitor, 0); - out.print("</p>"); - + out.println("<p>" + pageUserTags(sql, user, visitor, 0) + "</p>"); out.println("</div>"); pageUserColumn(out, sql, user, visitor, locale); out.println("</div>"); @@ -219,7 +217,7 @@ public class User { try { PageTemplates.pageHead(out, "@" + user.UName + ": " + rb.getString("(Stats) I read"), null); PageTemplates.pageNavigation(out, locale, visitor); - PageTemplates.pageUserTitle(out, sql, locale, user, visitor); + //PageTemplates.pageUserTitle(out, sql, locale, user, visitor); out.println("<div id=\"wrapper\">"); out.println("<div id=\"content\">"); @@ -260,21 +258,21 @@ public class User { public static void pageUserColumn(PrintWriter out, Connection sql, com.juick.User user, com.juick.User visitor, Locale locale) { ResourceBundle rb = ResourceBundle.getBundle("User", locale); - out.println("<div id=\"column\">"); - out.println("<h2>" + rb.getString("(Menu) Messages") + "</h2>"); + out.println("<div id=\"column\" class=\"stickya\">"); out.println("<ul>"); - out.println(" <li><a href=\"?\">" + rb.getString("(Menu) Blog") + "</a></li>"); - out.println(" <li><a href=\"?show=recomm\">" + rb.getString("(Menu) Recommendations") + "</a></li>"); - out.println(" <li><a href=\"?show=photos\">" + rb.getString("(Menu) Photos") + "</a></li>"); + out.println(" <li><a href=\"./\">" + rb.getString("(Menu) Blog") + "</a></li>"); + out.println(" <li><a href=\"./?show=recomm\">" + rb.getString("(Menu) Recommendations") + "</a></li>"); + out.println(" <li><a href=\"./?show=photos\">" + rb.getString("(Menu) Photos") + "</a></li>"); out.println("</ul>"); - out.println("<h2>" + rb.getString("(Menu) Tags") + " <a href=\"./tags\">" + rb.getString("all") + "</a></h2>"); - pageUserTags(out, sql, user, visitor, 15); - out.println("<h2>" + rb.getString("(Menu) Search") + "</h2>"); - out.println("<form action=\"./\" id=\"search\"><p><input type=\"text\" name=\"search\" class=\"inp\"/></p></form>"); + out.println("<hr/>"); + out.println("<p>" + pageUserTags(sql, user, visitor, 15) + "</p>"); + out.println("<form action=\"./\" id=\"searchuser\">"); + out.println("<p><input type=\"text\" name=\"search\" class=\"inp\" placeholder=\"" + rb.getString("Search") + "\"/></p>"); + out.println("</form>"); out.println("</div>"); } - public static void pageUserTags(PrintWriter out, Connection sql, com.juick.User user, com.juick.User visitor, int cnt) { + public static String pageUserTags(Connection sql, com.juick.User user, com.juick.User visitor, int cnt) { com.juick.Tag tags[] = null; int maxUsageCnt = 0; @@ -313,6 +311,7 @@ public class User { Arrays.sort(tags, 0, cnt); } + String ret = ""; for (int i = 0; i < cnt; i++) { String tag = Utils.encodeHTML(tags[i].Name); try { @@ -321,12 +320,13 @@ public class User { } if (tags[i].UsageCnt > maxUsageCnt / 3 * 2) { - out.print("<big>" + tag + "</big> "); + ret += "<big>" + tag + "</big> "; } else if (tags[i].UsageCnt > maxUsageCnt / 3) { - out.print("<small>" + tag + "</small> "); + ret += "<small>" + tag + "</small> "; } else { - out.print(tag + " "); + ret += tag + " "; } } + return ret; } } diff --git a/src/java/com/juick/http/www/UserThread.java b/src/java/com/juick/http/www/UserThread.java index e64b4437..1680ca8e 100644 --- a/src/java/com/juick/http/www/UserThread.java +++ b/src/java/com/juick/http/www/UserThread.java @@ -71,7 +71,7 @@ public class UserThread { PageTemplates.pageNavigation(out, locale, visitor); PageTemplates.pageUserTitle(out, sql, locale, user, visitor); - + out.println("<div id=\"topwrapper\">"); out.println("<div id=\"wrapper\">"); out.println("<div id=\"content\" style=\"margin-left: 0; width: 100%\">"); @@ -80,8 +80,8 @@ public class UserThread { printReplies(out, sql, MID, locale, listview); out.println("</div>"); - out.println("</div>"); + out.println("</div>"); // topwrapper out.println("<script type=\"text/javascript\">"); out.println("$(document).ready(unfoldReply);"); @@ -143,7 +143,7 @@ public class UserThread { if (rs.getString(11) != null) { if (rs.getString(11).equals("jpg")) { - out.println(" <div class=\"msg-media\"><a href=\"http://i.juick.com/photos-1024/" + mid + ".jpg\"><img src=\"http://i.juick.com/photos-512/" + mid + ".jpg\" alt=\"\"/></a></div>"); + out.println(" <div class=\"msg-media\"><a href=\"http://i.juick.com/p/" + mid + ".jpg\"><img src=\"http://i.juick.com/photos-512/" + mid + ".jpg\" alt=\"\"/></a></div>"); } else { out.println(" <div class=\"msg-media\"><div id=\"video-" + mid + "\"><b>Attachment: <a href=\"http://i.juick.com/video/" + mid + ".mp4\">Video</a></b></div></div>"); out.println(" <script type=\"text/javascript\">"); @@ -153,17 +153,13 @@ public class UserThread { } out.println(" <div class=\"msg-avatar\"><a href=\"/" + uname + "/\"><img src=\"http://i.juick.com/a/" + uid + ".png\" alt=\"" + uname + "\"/></a></div>"); - out.println(" <div class=\"msg-ts\"><a href=\"/" + uname + "/" + mid + "\">" + PageTemplates.formatDate(rs.getInt(8), rs.getString(9), locale) + "</a><div class=\"msg-menu\"><a href=\"#\" onclick=\"$('#msg-menu-" + mid + "').toggle('blind'); return false\"><img src=\"http://static.juick.com/message-menu-icon.png\"></a><ul id=\"msg-menu-" + mid + "\">"); - out.println(" <li><a href=\"/post?body=%21%20%23" + mid + "\">" + rb.getString("Recommend message") + "</a></li>"); - out.println(" <li><a href=\"/post?body=%40" + uname + "%20\">" + rb.getString("Send private message") + "</a></li>"); - out.println(" <li><a href=\"/post?body=BL%20%40" + uname + "\">" + rb.getString("Block user") + "</a></li>"); - out.println(" </ul></div></div>"); + out.println(" <div class=\"msg-ts\"><a href=\"/" + uname + "/" + mid + "\" title=\"" + rs.getString(9) + "\">" + PageTemplates.formatDate(rs.getInt(8), rs.getString(9), locale) + "</a></div>"); out.println(" <div class=\"msg-header\"><a href=\"/" + uname + "/\">@" + uname + "</a>:" + tags + "</div>"); out.println(" <div class=\"msg-txt\">" + txt + "</div>"); if (cancomment) { out.println(" <form action=\"/post\" method=\"POST\" enctype=\"multipart/form-data\"><input type=\"hidden\" name=\"mid\" value=\"" + mid + "\"/>"); - out.println(" <div class=\"msg-comment\"><textarea name=\"body\" rows=\"1\" class=\"reply\" placeholder=\"Add a comment...\" onkeypress=\"postformListener(this.form,event)\"></textarea><input type=\"submit\" value=\"OK\"/></div>"); + out.println(" <div class=\"msg-comment\"><textarea name=\"body\" rows=\"1\" class=\"reply\" placeholder=\"Add a comment...\" onkeypress=\"postformListener(this.form,event)\"></textarea></div>"); out.println(" </form>"); } @@ -255,6 +251,10 @@ public class UserThread { public static void printTree(PrintWriter out, ArrayList<com.juick.Message> replies, int ReplyTo, int margin, Locale locale) { ResourceBundle rb = ResourceBundle.getBundle("Global", locale); + if (margin > 420) { + margin = 420; + } + for (int i = 0; i < replies.size(); i++) { com.juick.Message msg = replies.get(i); if (msg.ReplyTo == ReplyTo) { @@ -278,10 +278,7 @@ public class UserThread { } } out.println(" <div class=\"msg-avatar\"><a href=\"/" + msg.User.UName + "/\"><img src=\"http://i.juick.com/a/" + msg.User.UID + ".png\" alt=\"" + msg.User.UName + "\"/></a></div>"); - out.println(" <div class=\"msg-ts\"><a href=\"/" + msg.MID + "#" + msg.RID + "\">" + PageTemplates.formatDate(msg.MinutesAgo, msg.TimestampString, locale) + "</a><div class=\"msg-menu\"><a href=\"#\" onclick=\"$('#msg-menu-" + msg.MID + "-" + msg.RID + "').toggle('blind'); return false\"><img src=\"http://static.juick.com/message-menu-icon.png\"/></a><ul id=\"msg-menu-" + msg.MID + "-" + msg.RID + "\">"); - out.println(" <li><a href=\"/post?body=%40" + msg.User.UName + "%20\">" + rb.getString("Send private message") + "</a></li>"); - out.println(" <li><a href=\"/post?body=BL%20%40" + msg.User.UName + "\">" + rb.getString("Block user") + "</a></li>"); - out.println(" </ul></div></div>"); + out.println(" <div class=\"msg-ts\"><a href=\"/" + msg.MID + "#" + msg.RID + "\" title=\"" + msg.TimestampString + "\">" + PageTemplates.formatDate(msg.MinutesAgo, msg.TimestampString, locale) + "</a></div>"); out.println(" <div class=\"msg-header\"><a href=\"/" + msg.User.UName + "/\">@" + msg.User.UName + "</a>:</div>"); out.println(" <div class=\"msg-txt\">" + msg.Text + "</div>"); out.println(" <div class=\"msg-links\"><a href=\"#\" onclick=\"return showCommentForm(" + msg.MID + "," + msg.RID + ")\">" + rb.getString("Comment") + "</a></div>"); @@ -317,10 +314,7 @@ public class UserThread { } } out.println(" <div class=\"msg-avatar\"><a href=\"/" + msg.User.UName + "/\"><img src=\"http://i.juick.com/a/" + msg.User.UID + ".png\"></a></div>"); - out.println(" <div class=\"msg-ts\"><a href=\"/" + msg.MID + "#" + msg.RID + "\">" + PageTemplates.formatDate(msg.MinutesAgo, msg.TimestampString, locale) + "</a><div class=\"msg-menu\"><a href=\"#\" onclick=\"$('#msg-menu-" + msg.MID + "-" + msg.RID + "').toggle('blind'); return false\"><img src=\"http://static.juick.com/message-menu-icon.png\"></a><ul id=\"msg-menu-" + msg.MID + "\">"); - out.println(" <li><a href=\"/post?body=%40" + msg.User.UName + "%20\">" + rb.getString("Send private message") + "</a></li>"); - out.println(" <li><a href=\"/post?body=BL%20%40" + msg.User.UName + "\">" + rb.getString("Block user") + "</a></li>"); - out.println(" </ul></div></div>"); + out.println(" <div class=\"msg-ts\"><a href=\"/" + msg.MID + "#" + msg.RID + "\" title=\"" + msg.TimestampString + "\">" + PageTemplates.formatDate(msg.MinutesAgo, msg.TimestampString, locale) + "</a></div>"); out.println(" <div class=\"msg-header\"><a href=\"/" + msg.User.UName + "/\">@" + msg.User.UName + "</a>:</div>"); out.println(" <div class=\"msg-txt\">" + msg.Text + "</div>"); out.print(" <div class=\"msg-links\">/" + msg.RID); diff --git a/web/post3.js b/web/post3.js index 31b3f8f2..3267f9c0 100644 --- a/web/post3.js +++ b/web/post3.js @@ -25,7 +25,12 @@ function addLocation() { } function addTag(tag) { - document.forms["postmsg"].body.value='*'+tag+' '+document.forms["postmsg"].body.value; + var s = document.forms["postmsg"].body.value; + if (s.indexOf ('#') == 0) { + document.forms["postmsg"].body.value = s + ' *' + tag; + } else { + document.forms["postmsg"].body.value = '*' + tag + ' ' + s; + } return false; } diff --git a/web/scripts3.js b/web/scripts3.js index bf3da76f..580546d2 100644 --- a/web/scripts3.js +++ b/web/scripts3.js @@ -39,7 +39,7 @@ function showCommentForm(mid,rid) { var c=$('#replies #'+rid+' .msg-comment'); c.wrap('<form action="/post" method="POST" enctype="multipart/form-data"/>'); c.before('<input type="hidden" name="mid" value="'+mid+'"/><input type="hidden" name="rid" value="'+rid+'"/>'); - c.append('<textarea name="body" rows="1" class="reply" placeholder="Add a comment..." onkeypress="postformListener(this.form,event)"></textarea><input type="submit" value="OK"/>'); + c.append('<textarea name="body" rows="1" class="reply narrow" placeholder="Add a comment..." onkeypress="postformListener(this.form,event)"></textarea><input type="submit" value="OK"/>'); } // $('#replies #'+rid+' .msg-links').hide(); $('#replies #'+rid+' .msg-comment').show(); @@ -63,8 +63,28 @@ function unfoldReply() { } $(document).ready(function() { - $('textarea.reply').autoResize({ + var tareply=$('textarea.reply'); + tareply.autoResize({ extraSpace: 0, minHeight: 1 }); + tareply.click(function () { + $(this).addClass("narrow"); + $(this).after('<input type="submit" value="OK"/>'); + $(this).off('click'); + }); + + if(!!$('.stickya').offset()) { + var stickyTop = $('.stickya').offset().top; + $(window).scroll(function() { + var windowTop = $(window).scrollTop(); + if (stickyTop < windowTop) { + $('.stickya').css({ + position:'fixed' + }); + } else { + $('.stickya').css('position','absolute'); + } + }); + } }); diff --git a/web/style3.css b/web/style3.css index fac16fdc..cc74497c 100644 --- a/web/style3.css +++ b/web/style3.css @@ -3,31 +3,39 @@ body { margin: 0; padding: 0; } h1,h2 { font-weight: normal; } ul { list-style-type: none; } a { text-decoration: none; } -hr { display: none; } img { border: none; } +form { margin: 0; } /********/ -#header { width: 900px; margin: 0 auto; } -#logo { float: left; margin: 8px 16px 0 0; } +#title-container, #topwrapper { width: 100%; min-width: 1000px; max-width: 1024px; margin: 0 auto; } + +/********/ + +#hwrapper { width: 100%; } +#header { height: 48px; width: 1000px; margin: 0 auto; } +#logo { float: left; margin: 3px 0 0 30px; } #header ul { margin: 0; padding: 0; } #header a { text-decoration: none; font-size: 18px; } -#nav li { float: left; } +#search { float: left; margin: 5px 0 0 32px; } +#search .text { width: 300px; padding: 4px; border-radius: 2px; } +#search .submit { padding: 3px; margin-left: 5px; border-radius: 2px; } + #nav-right { float: right; } #nav-right li { float: left; } -#header ul a { display: block; line-height: 56px; padding: 0 20px; } +#header ul a { display: block; line-height: 48px; padding: 0 20px 0 20px; } #nav-right img { vertical-align: middle; margin: 0 4px 0 0; } #nav-menu { display: none; position: absolute; z-index: 1; } #nav-menu li { float: none; } /********/ -#title { clear: both; width: 100%; border-top: 1px solid; border-bottom: 1px solid; background: #F0F0F0; } -#title>h1 { width: 900px; margin: 20px auto; font-size: 28px; } +#title { display: none; clear: both; width: 100%; border-top: 1px solid; border-bottom: 1px solid; } +#title>h1 { margin: 20px auto; font-size: 28px; } -#title-container { width: 900px; margin: 20px auto; min-height: 100px; } +#title-container { margin: 20px auto; min-height: 100px; } #title-av { width: 100px; height: 100px; margin-left: 20px; float: left; } #title-av img { vertical-align: top; padding: 2px; } #title-stats { width: 200px; float: right; border-left: 1px solid; } @@ -37,34 +45,37 @@ img { border: none; } /********/ -#wrapper { width: 900px; margin: 0 auto; } -#content { width: 640px; margin-left: 260px; float: left; } +#topwrapper { position: relative; } +#wrapper { width: 100%; float: left; } +#content { width: 600px; margin: 0 auto; padding: 0; } #content ul { list-style-type: none; margin: 0; padding: 0; } #content li { background-repeat: no-repeat; } /********/ -#geomap { margin-top: 1em; width: 640px; height: 360px; overflow: hidden; } +#filters { display: none; margin: 15px 0; border-bottom: 1px solid; padding: 10px 0; } +#filters li { display: inline; margin-right: 10px; } + +/********/ -#content .msg { padding: 16px 0 0 0; margin: 0 0 16px 0; border-top: 1px solid; width: 640px; } -#content .msg-media { text-align: center; margin-bottom: 10px; } +#geomap { margin-top: 1em; width: 570px; height: 360px; overflow: hidden; } + +#content .msg { padding: 15px; margin: 8px 0 16px 0; width: 570px; border: 1px solid; } #content .msg-avatar { float: left; } #content .msg-avatar img { width: 48px; height: 48px; vertical-align: top; } #content .msg-ts { float: right; } -#content .msg-ts a { font-size: small; } -#content .msg-menu { margin: 0 8px; display: inline; position: relative; } -#content .msg-menu img { vertical-align: top; } -#content .msg-menu ul { display: none; position: absolute; top: 20px; right: 0; width: 300px; margin: 0; padding: 5px; } -#content .msg-menu li { margin: 0; padding: 10px 5px; } +#content .msg-ts>a { font-size: small; vertical-align: top; } #content .msg-header { margin-left: 58px; overflow: hidden; } -#content .msg-txt { margin-left: 58px; padding: 6px 0 0 0; } -#content .msg-links { font-size: small; margin: 10px 0 0 68px; } -#content .msg-comments { margin: 10px 0 0 58px; padding: 5px 20px; overflow: hidden; font-size: small; } -#content .msg-comment { margin: 10px 0 0 58px; padding: 0px 0 0 20px; } -#content .msg-comment textarea { border: 1px solid; width: 500px; padding: 2px; resize: vertical; } -#content .msg-comment input { border: 1px solid; width: 50px; margin-left: 5px; vertical-align: top; } +#content .msg-txt { margin: 8px 0 8px 58px; padding: 0; } +#content .msg-media { text-align: center; margin: 8px 0 0px 58px; } +#content .msg-links { font-size: small; margin: 8px 0 0 68px; } +#content .msg-comments { margin: 10px 0 0 58px; padding: 5px 0 0 10px; overflow: hidden; font-size: small; border-top: 1px solid; } +#content .msg-comment { margin: 8px 0 0 58px; } +#content .msg-comment textarea { border: 1px solid; width: 505px; padding: 2px; resize: vertical; } +#content .msg-comment textarea.narrow { width: 450px; } +#content .msg-comment input { border: 1px solid; width: 50px; margin-left: 6px; vertical-align: top; } -#content textarea.newmessage { border: 1px solid; width: 640px; padding: 2px; resize: vertical; } +#content textarea.newmessage { border: 1px solid; width: 570px; padding: 2px; resize: vertical; } table.users { width: 100%; margin: 10px 0; } table.users td { width: 33%; padding: 6px 0; overflow: hidden; } @@ -72,7 +83,7 @@ table.users img { width: 32px; height: 32px; vertical-align: middle; margin-righ #chats li { margin: 16px; } -.title2 { padding: 10px 20px; margin: 20px 0 10px 0; } +.title2 { padding: 10px 20px; margin: 20px 0 20px 0; } .title2-right { float: right; line-height: 24px; } .title2 h2 { margin: 0; font-size: 24px; } @@ -84,43 +95,56 @@ table.users img { width: 32px; height: 32px; vertical-align: middle; margin-righ /********/ -#column { float: left; width: 210px; margin-left: -900px; } +#column { width: 200px; position: absolute; top: 0px; padding-top: 10px; } #column ul { margin: 8px 0 0 0; padding: 0; } -#column li { margin: 0; padding: 2px 0 2px 10px; } -#column p { font-size: 14px; margin: 0 0 0 10px; } -#column .inp { width: 195px; } -#column h2 { border-bottom: 1px solid; font-size: 18px; margin: 24px 0 8px 0; padding: 0 2px 2px 2px; } +#column li { margin: 0; padding: 0; } +#column li a { display: block; padding: 3px 0 3px 10px; } +#column p { font-size: small; margin: 10px 5px 0 10px; line-height: 130%; } +#column hr { height: 1px; border: none; width: 190px; margin: 10px 0 10px 10px;} +#column .inp { width: 185px; border: 1px solid; padding: 3px; border-radius: 3px; } +#column h2 { display: none; border-bottom: 1px solid; font-size: 18px; margin: 24px 0 8px 0; padding: 0 2px 2px 2px; } #column h2>a { float: right; } /********/ -#footer { clear: both; width: 900px; margin: 0 auto; font-size: small; padding: 25px 0 10px; } +#rcol { float: left; margin-left: -200px; } + +/********/ + +#footer { clear: both; width: 590px; margin: 0 auto; font-size: small; padding: 15px 0 10px 0; } #footer-right { float: right; } /******************************************************************************/ -html { background: #FFF; color: #000; } +html { background: #EEEEE5; color: #000; } a { color: #069; } -#header li a:hover { background: #E0F0FF; } -#title { border-color: #CCC; } +#hwrapper { background: #333; } +#header a { color: #AAA; } +#header li a:hover { background: #444; } +#title { border-color: #CCC; background: #F0F0F0; } #nav-menu { background: #DDD; } #title-stats { border-color: #CCC; } - -#content .msg { border-color: #DDD; } -#content .msg-comments { background: #F5F5F5; color: #999; } -#content .msg-ts a { color: #999; } +#search .text { border: none; background-color: #EEE; } +#search .submit { border: none; background-color: #DDD; } + +#content { } +#filters { border-color: #CCC; } +#filters a { color: #999; } +#content .msg { background: #FFF; border-color: #EEE; } +#content .msg-comments { color: #AAA; border-color: #DDD; } +#content .msg-ts>a { color: #999; } #content .msg-links { color: #999; } #content .msg-comment textarea { border-color: #DDD; } #content .msg-comment input { border-color: #CCC; background-color: #EEE; color: #999; } -#content .msg-menu ul { background: #DDD; } -#content .msg-menu a { color: #000; } #content textarea.newmessage { border-color: #DDD; } -.title2 { background: #F0F0F0; } -.page { background: #F0F0F0; } +.title2 { background: #DDDDD0; } +.page { background: #E5E5DD; } -#column li:hover { background: #E0F0FF; } +#column li:hover { background: #D0E0EE; } #column h2 { border-color: #CCC; } +#column hr { background-color: #CCC; } +#column .inp { border-color: #CCC; background: #F5F5E9; } #footer { color: #999; } |