diff options
Diffstat (limited to 'src/java')
-rw-r--r-- | src/java/com/juick/http/www/PageTemplates.java | 114 |
1 files changed, 64 insertions, 50 deletions
diff --git a/src/java/com/juick/http/www/PageTemplates.java b/src/java/com/juick/http/www/PageTemplates.java index f0a87c42..afffc334 100644 --- a/src/java/com/juick/http/www/PageTemplates.java +++ b/src/java/com/juick/http/www/PageTemplates.java @@ -40,13 +40,13 @@ import ru.sape.Sape; * @author Ugnich Anton */ public class PageTemplates { - + public static Sape sape = null; private static final SimpleDateFormat sdfSQL = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static SimpleDateFormat sdfSimple = new SimpleDateFormat("d MMM"); private static SimpleDateFormat sdfFull = new SimpleDateFormat("d MMM yyyy"); private static String tagsHTML = null; - + public static void pageHead(PrintWriter out, String title, String headers) { out.println("<!DOCTYPE html>"); out.print("<html>"); @@ -67,7 +67,7 @@ public class PageTemplates { out.flush(); out.println("<body>"); } - + public static void pageNavigation(PrintWriter out, com.juick.User visitor, String search) { out.println("<header>"); out.println(" <div id=\"logo\"><a href=\"/\">Juick</a></div>"); @@ -100,7 +100,7 @@ public class PageTemplates { out.println(" </section>"); out.println("</header>"); } - + public static void pageYandexAd728(PrintWriter out, int YandexID) { /* out.println("<div id=\"yandex_ad_728\"></div>"); @@ -137,12 +137,12 @@ public class PageTemplates { out.println("(adsbygoogle = window.adsbygoogle || []).push({})"); out.println("</script>"); } - + public static void pageHomeColumn(PrintWriter out, Connection sql, com.juick.User visitor) { if (tagsHTML == null) { tagsHTML = PageTemplates.getPopularTags(sql, 80); } - + out.println("<aside id=\"column\">"); out.println(" <p class=\"tags\">" + tagsHTML + "</p>"); // if (visitor != null) { @@ -150,10 +150,10 @@ public class PageTemplates { // } out.println("</aside>"); } - + public static String getPopularTags(Connection sql, int cnt) { String ret = ""; - + PreparedStatement stmt = null; ResultSet rs = null; try { @@ -168,23 +168,23 @@ public class PageTemplates { ret += "<a href=\"/tag/" + URLEncoder.encode(rs.getString(1), "UTF-8") + "\">" + Utils.encodeHTML(rs.getString(1)) + "</a>"; } catch (UnsupportedEncodingException e) { } - + } } catch (SQLException e) { System.err.println(e); } finally { Utils.finishSQL(rs, stmt); } - + return ret; } - + public static void printContestRating(PrintWriter out, Connection sql) { out.println("<hr/>"); out.println("<!--noindex-->"); out.println("<p style=\"font-size: 14pt\">Кто <a href=\"/help/ru/contest\">выиграет iPod</a>?</p>"); out.println("<table width=\"100%\">"); - + int i = 0; PreparedStatement stmt = null; ResultSet rs = null; @@ -206,11 +206,11 @@ public class PageTemplates { } finally { Utils.finishSQL(rs, stmt); } - + out.println("</table>"); out.println("<!--/noindex-->"); } - + public static void pageFooter(HttpServletRequest request, PrintWriter out, com.juick.User visitor, boolean sapeon) { out.println("<div id=\"footer\">"); out.println(" <div id=\"footer-right\"><a href=\"/settings\" rel=\"nofollow\">Настройки</a> · <a href=\"/help/ru/contacts\" rel=\"nofollow\">Контакты</a> · <a href=\"/help/\" rel=\"nofollow\">Справка</a> · <a href=\"/help/ru/adv\" rel=\"nofollow\">Реклама</a></div>"); @@ -220,7 +220,7 @@ public class PageTemplates { out.print("<a href=\"https://www.facebook.com/JuickCom\" rel=\"nofollow\" class=\"ico32-fb\">Facebook</a>"); out.println("</div>"); out.print(" <div id=\"footer-left\">juick.com © 2008-2014"); - + String queryString = request.getQueryString(); String requestURI = request.getRequestURI(); if (sapeon && sape != null && (visitor == null || visitor.UID == 1) && queryString == null) { @@ -232,16 +232,16 @@ public class PageTemplates { if ((visitor == null || visitor.UID == 1) && queryString != null && requestURI != null && requestURI.equals("/")) { out.print("<br/><a href=\"http://siam.li/\">сиам</a>"); } - + out.println("</div>"); out.println("</div>"); - + if (visitor != null) { out.println("<script type=\"text/javascript\">"); out.println("var hash=\"" + visitor.AuthHash + "\";"); out.println("</script>"); } - + out.println("<script>"); out.println("(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){"); out.println("(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),"); @@ -250,7 +250,7 @@ public class PageTemplates { out.println("ga('create','UA-385578-4','juick.com');"); out.println("ga('require','displayfeatures');"); out.println("ga('send','pageview');"); - + if (sapeon) { out.println("var _acic={dataProvider:10};"); out.println("(function(){"); @@ -258,14 +258,32 @@ public class PageTemplates { out.println("var t=document.getElementsByTagName('script')[0];t.parentNode.insertBefore(e,t);"); out.println("})();"); } - + out.println("</script>"); } - + public static void pageEnd(PrintWriter out) { out.println("</body></html>"); } - + + public static String formatTags(ArrayList<com.juick.Tag> tags) { + String ret = ""; + for (int i = 0; i < tags.size(); i++) { + com.juick.Tag tag = tags.get(i); + String tagName = tag.Name.replaceAll("<", "<").replaceAll(">", ">"); + if (tag.UsageCnt > 1) { + try { + ret += " *<a href=\"/tag/" + URLEncoder.encode(tag.Name, "utf-8") + "\">" + tagName + "</a>"; + } catch (UnsupportedEncodingException e) { + } + } else { + ret += " *" + tagName; + } + } + + return ret; + } + public static String formatTags(ArrayList<String> tags, com.juick.User user) { String ret = ""; for (int i = 0; i < tags.size(); i++) { @@ -283,10 +301,10 @@ public class PageTemplates { } catch (UnsupportedEncodingException e) { } } - + return ret; } - + public static String formatDate(int minutes, String fulldate) { if (minutes < 1) { return "сейчас"; @@ -345,7 +363,7 @@ public class PageTemplates { return ret; } } - + public static String formatJSLocalTime(String ts) { String ret = ""; synchronized (sdfSQL) { @@ -361,7 +379,7 @@ public class PageTemplates { } return ret; } - + public static String formatReplies(int replies) { int ld = replies % 10; int lh = replies % 100; @@ -374,7 +392,7 @@ public class PageTemplates { } } private static Pattern regexLinks2 = Pattern.compile("((?<=\\s)|(?<=\\A))([\\[\\{]|<)((?:ht|f)tps?://(?:www\\.)?([^\\/\\s\\\"\\)\\!]+)/?(?:[^\\]\\}](?<!>))*)([\\]\\}]|>)"); - + public static String formatMessageCode(String msg) { msg = msg.replaceAll("&", "&"); msg = msg.replaceAll("<", "<"); @@ -394,10 +412,10 @@ public class PageTemplates { } m.appendTail(sb); msg = sb.toString(); - + return "<pre>" + msg + "</pre>"; } - + public static String formatMessage(String msg) { msg = msg.replaceAll("&", "&"); msg = msg.replaceAll("<", "<"); @@ -462,14 +480,14 @@ public class PageTemplates { // > citate msg = msg.replaceAll("(?:(?<=\\n)|(?<=\\A))> *(.*)?(\\n|(?=\\Z))", "<blockquote>$1</blockquote>"); msg = msg.replaceAll("</blockquote><blockquote>", "\n"); - + msg = msg.replaceAll("\n", "<br/>\n"); return msg; } - + public static void printMessages(PrintWriter out, Connection sql, com.juick.User user, ArrayList<Integer> mids, com.juick.User visitor, int YandexID, int ad_mid) { ArrayList<com.juick.Message> msgs = MessagesQueries.getMessages(sql, mids); - + for (int i = 0; i < msgs.size(); i++) { com.juick.Message msg = msgs.get(i); if (msg.MID == ad_mid) { @@ -478,7 +496,7 @@ public class PageTemplates { break; } } - + ArrayList<Integer> blUIDs = new ArrayList<Integer>(20); if (visitor != null) { for (int i = 0; i < msgs.size(); i++) { @@ -486,41 +504,37 @@ public class PageTemplates { } blUIDs = UserQueries.checkBL(sql, visitor.UID, blUIDs); } - + for (int i = 0; i < msgs.size(); i++) { - + if (i == 0 && YandexID > 0 && ad_mid == 0) { pageYandexAd728(out, YandexID); } - + com.juick.Message msg = msgs.get(i); - - String tags; - if (user == null) { - tags = msg.Tags.isEmpty() ? "" : formatTags(msg.Tags, null); - } else { - tags = msg.Tags.isEmpty() ? "" : formatTags(msg.Tags, null); //msg.User); - } + + ArrayList<com.juick.Tag> tags = MessagesQueries.getMessageTags(sql, msg.MID); + String tagsStr = formatTags(tags); if (msg.ReadOnly) { - tags += " *readonly"; + tagsStr += " *readonly"; } if (msg.Privacy < 0) { - tags += " *friends"; + tagsStr += " *friends"; } if (msg.MID == ad_mid) { - tags += " *реклама"; + tagsStr += " *реклама"; } - + String txt; if (!msg.Tags.isEmpty() && msg.Tags.contains("code")) { txt = formatMessageCode(msg.Text); } else { txt = formatMessage(msg.Text); } - + out.println("<article data-mid=\"" + msg.MID + "\">"); out.println(" <aside><a href=\"/" + msg.User.UName + "/\"><img src=\"//i.juick.com/a/" + msg.User.UID + ".png\" alt=\"" + msg.User.UName + "\"/></a></aside>"); - out.println(" <header class=\"u\">@<a href=\"/" + msg.User.UName + "/\">" + msg.User.UName + "</a>:" + tags + "</header>"); + out.println(" <header class=\"u\">@<a href=\"/" + msg.User.UName + "/\">" + msg.User.UName + "</a>:" + tagsStr + "</header>"); out.println(" <header class=\"t\"><a href=\"/" + msg.User.UName + "/" + msg.MID + "\"><time datetime=\"" + msg.TimestampString + "Z\" title=\"" + msg.TimestampString + " GMT\">" + formatDate(msg.TimeAgo, msg.TimestampString) + "</time></a></header>"); if (msg.AttachmentType != null) { String fname = msg.MID + "." + msg.AttachmentType; @@ -547,7 +561,7 @@ public class PageTemplates { out.print(" <a href=\"#\" onclick=\"return setPopular(this," + msg.MID + ",-2)\">x</a>"); } out.println("</nav>"); - + out.print(" <nav class=\"s\">"); if (msg.Likes > 0) { out.print("<a href=\"/" + msg.User.UName + "/" + msg.MID + "\" class=\"likes\">" + msg.Likes + "</a>"); |