diff options
10 files changed, 89 insertions, 71 deletions
diff --git a/juick-www/src/main/java/com/juick/www/controllers/User.java b/juick-www/src/main/java/com/juick/www/controllers/User.java index b66c6fa1..8e22c654 100644 --- a/juick-www/src/main/java/com/juick/www/controllers/User.java +++ b/juick-www/src/main/java/com/juick/www/controllers/User.java @@ -39,10 +39,7 @@ import org.springframework.web.util.UriComponents; import ru.sape.Sape; import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.io.PrintWriter; import java.net.URLEncoder; import java.util.List; import java.util.stream.Collectors; @@ -152,7 +149,7 @@ public class User { model.addAttribute("statsReplies", userService.getStatsReplies(user.getUid())); model.addAttribute("iread", userService.getUserReadLeastPopular(user.getUid(), 8)); model.addAttribute("tagStats", tagService.getUserTagStats(user.getUid()) - .stream().map(t -> t.getTag().getName()).collect(Collectors.toList())); + .stream().sorted((e1, e2) -> Integer.compare(e2.getUsageCount(), e1.getUsageCount())).limit(20).map(t -> t.getTag().getName()).collect(Collectors.toList())); model.addAttribute("paramTag", paramTag); List<com.juick.Message> msgs = messagesService.getMessages(mids); @@ -218,76 +215,56 @@ public class User { } @GetMapping("/{uname}/friends") - protected void doGetFriends(HttpServletRequest request, HttpServletResponse response, - @PathVariable String uname) throws IOException { + protected String doGetFriends(@PathVariable String uname, ModelMap model) throws IOException { com.juick.User user = userService.getUserByName(uname); com.juick.User visitor = UserUtils.getCurrentUser(); if (visitor.isBanned()) { - throw new HttpForbiddenException(); + throw new HttpNotFoundException(); } + model.addAttribute("title", "Подписки " + user.getName()); + model.addAttribute("headers", "<meta name=\"robots\" content=\"noindex\"/>"); + model.addAttribute("visitor", visitor); + model.addAttribute("user", user); + model.addAttribute("readonly", messagesService.isReadonly()); + model.addAttribute("isSubscribed", userService.isSubscribed(visitor.getUid(), user.getUid())); + model.addAttribute("isInBL", userService.isInBL(visitor.getUid(), user.getUid())); + model.addAttribute("isInBLAny", userService.isInBLAny(user.getUid(), visitor.getUid())); + model.addAttribute("statsIRead", userService.getStatsIRead(user.getUid())); + model.addAttribute("statsMyReaders", userService.getStatsMyReaders(user.getUid())); + model.addAttribute("statsMessages", userService.getStatsMessages(user.getUid())); + model.addAttribute("statsReplies", userService.getStatsReplies(user.getUid())); + model.addAttribute("iread", userService.getUserReadLeastPopular(user.getUid(), 8)); + model.addAttribute("tagStats", tagService.getUserTagStats(user.getUid()) + .stream().map(t -> t.getTag().getName()).collect(Collectors.toList())); + model.addAttribute("users", userService.getUserFriends(user.getUid())); - response.setContentType("text/html; charset=UTF-8"); - try (PrintWriter out = response.getWriter()) { - String head = "<meta name=\"robots\" content=\"noindex\"/>"; - templates.pageHead(out, visitor, "Подписки " + user.getName(), head); - templates.pageNavigation(out, visitor, null); - //pageUserColumn(out, user, visitor); - - out.println("<section id=\"content\">"); - out.println("<table class=\"users\"><tr>"); - - List<com.juick.User> friends = userService.getUserFriends(user.getUid()); - for (int i = 0; i < friends.size(); i++) { - if (i % 3 == 0 && i > 0) { - out.print("</tr><tr>"); - } - out.print("<td><a href=\"/" + friends.get(i).getName() - + "/\"><img src=\"//i.juick.com/as/" + friends.get(i).getUid() + ".png\"/>" - + friends.get(i).getName() + "</a></td>"); - } - - out.println("</tr></table>"); - out.println("</section>"); - - templates.pageFooter(request, out, visitor, false); - templates.pageEnd(out); - } + return "views/users"; } @GetMapping("/{uname}/readers") - protected void doGetReaders(HttpServletRequest request, HttpServletResponse response, - @PathVariable String uname) throws IOException { + protected String doGetReaders(@PathVariable String uname, ModelMap model) throws IOException { com.juick.User user = userService.getUserByName(uname); com.juick.User visitor = UserUtils.getCurrentUser(); if (visitor.isBanned()) { throw new HttpForbiddenException(); } + model.addAttribute("title", "Читатели " + user.getName()); + model.addAttribute("headers", "<meta name=\"robots\" content=\"noindex\"/>"); + model.addAttribute("visitor", visitor); + model.addAttribute("user", user); + model.addAttribute("readonly", messagesService.isReadonly()); + model.addAttribute("isSubscribed", userService.isSubscribed(visitor.getUid(), user.getUid())); + model.addAttribute("isInBL", userService.isInBL(visitor.getUid(), user.getUid())); + model.addAttribute("isInBLAny", userService.isInBLAny(user.getUid(), visitor.getUid())); + model.addAttribute("statsIRead", userService.getStatsIRead(user.getUid())); + model.addAttribute("statsMyReaders", userService.getStatsMyReaders(user.getUid())); + model.addAttribute("statsMessages", userService.getStatsMessages(user.getUid())); + model.addAttribute("statsReplies", userService.getStatsReplies(user.getUid())); + model.addAttribute("iread", userService.getUserReadLeastPopular(user.getUid(), 8)); + model.addAttribute("tagStats", tagService.getUserTagStats(user.getUid()) + .stream().map(t -> t.getTag().getName()).collect(Collectors.toList())); + model.addAttribute("users", userService.getUserReaders(user.getUid())); - response.setContentType("text/html; charset=UTF-8"); - try (PrintWriter out = response.getWriter()) { - String head = "<meta name=\"robots\" content=\"noindex\"/>"; - templates.pageHead(out, visitor, "Читатели " + user.getName(), head); - templates.pageNavigation(out, visitor, null); - //pageUserColumn(out, user, visitor); - - out.println("<section id=\"content\">"); - out.println("<table class=\"users\"><tr>"); - - List<com.juick.User> readers = userService.getUserReaders(user.getUid()); - for (int i = 0; i < readers.size(); i++) { - if (i % 3 == 0 && i > 0) { - out.print("</tr><tr>"); - } - out.print("<td><a href=\"/" + readers.get(i).getName() - + "/\"><img src=\"//i.juick.com/as/" + readers.get(i).getUid() + ".png\"/>" - + readers.get(i).getName() + "</a></td>"); - } - - out.println("</tr></table>"); - out.println("</section>"); - - templates.pageFooter(request, out, visitor, false); - templates.pageEnd(out); - } + return "views/users"; } } diff --git a/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/FormatterExtension.java b/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/FormatterExtension.java index 220e0460..198e9668 100644 --- a/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/FormatterExtension.java +++ b/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/FormatterExtension.java @@ -2,6 +2,7 @@ package com.mitchellbosecke.pebble.extension; import com.mitchellbosecke.pebble.extension.filters.FormatMessageFilter; import com.mitchellbosecke.pebble.extension.filters.PrettyTimeFilter; +import com.mitchellbosecke.pebble.extension.filters.TagsListFilter; import java.util.HashMap; import java.util.Map; @@ -15,6 +16,7 @@ public class FormatterExtension extends AbstractExtension { Map<String, Filter> filters = new HashMap<>(); filters.put("formatMessage", new FormatMessageFilter()); filters.put("prettyTime", new PrettyTimeFilter()); + filters.put("tagsList", new TagsListFilter()); return filters; } } diff --git a/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/filters/TagsListFilter.java b/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/filters/TagsListFilter.java new file mode 100644 index 00000000..55c98307 --- /dev/null +++ b/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/filters/TagsListFilter.java @@ -0,0 +1,23 @@ +package com.mitchellbosecke.pebble.extension.filters; + +import com.juick.Tag; +import com.mitchellbosecke.pebble.extension.Filter; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Created by vitalyster on 23.05.2017. + */ +public class TagsListFilter implements Filter { + @Override + public Object apply(Object input, Map<String, Object> args) { + return ((List<Tag>) input).stream().map(Tag::getName).collect(Collectors.toList()); + } + + @Override + public List<String> getArgumentNames() { + return null; + } +} diff --git a/juick-www/src/main/static/style.css b/juick-www/src/main/static/style.css index d3e47dd1..d34da0e0 100644 --- a/juick-www/src/main/static/style.css +++ b/juick-www/src/main/static/style.css @@ -448,11 +448,13 @@ q { .users { margin: 10px 0; width: 100%; + display: flex; + flex-wrap: wrap; } -.users td { +.users > span { overflow: hidden; padding: 6px 0; - width: 33%; + width: 200px; } .users img { height: 32px; diff --git a/juick-www/src/main/webapp/WEB-INF/views/blog.html b/juick-www/src/main/webapp/WEB-INF/views/blog.html index 6672adff..f68ebf3e 100644 --- a/juick-www/src/main/webapp/WEB-INF/views/blog.html +++ b/juick-www/src/main/webapp/WEB-INF/views/blog.html @@ -7,9 +7,6 @@ {% if paramTag | default('') is not empty %} <p class="page"><a href="/tag/{{ paramTag.name | urlencode }}">← Все записи с тегом <b>{{ paramTag.name | escape }}</b></a></p> {% endif %} -{% if paramTag | default('') is not empty %} -<p class="page"><a href="/tag/{{ paramTag.name | urlencode }}">← Все записи с тегом <b>{{ paramTag.name | escape }}</b></a></p> -{% endif %} {% for msg in msgs %} <article data-mid="{{ msg.mid }}"> <header class="h">@<a href="/{{ msg.user.name }}/">{{ msg.user.name }}</a>: @@ -25,7 +22,7 @@ </a> </div> <div class="msg-tags"> - {{ tags(msg.user.name, msg.tags) }} + {{ tags(msg.user.name, msg.tags | tagsList) }} </div> </header> diff --git a/juick-www/src/main/webapp/WEB-INF/views/index.html b/juick-www/src/main/webapp/WEB-INF/views/index.html index 0bf2a2fd..88178cc5 100644 --- a/juick-www/src/main/webapp/WEB-INF/views/index.html +++ b/juick-www/src/main/webapp/WEB-INF/views/index.html @@ -22,7 +22,7 @@ </a> </div> <div class="msg-tags"> - {{ tags(msg.getUser().getName(), msg.getTags()) }} + {{ tags(msg.user.name, msg.tags | tagsList ) }} </div> </header> <p>{{ msg | formatMessage }}</p> diff --git a/juick-www/src/main/webapp/WEB-INF/views/macros/tags.html b/juick-www/src/main/webapp/WEB-INF/views/macros/tags.html index b34e6ecc..167f9168 100644 --- a/juick-www/src/main/webapp/WEB-INF/views/macros/tags.html +++ b/juick-www/src/main/webapp/WEB-INF/views/macros/tags.html @@ -1,5 +1,5 @@ {% macro tags(uname="", tagsList) %} {% for tag in tagsList %} -<a href="/{{ uname }}/?tag={{ tag.name | urlencode }}">{{ tag.name }}</a> +<a href="/{{ uname }}/?tag={{ tag | urlencode }}">{{ tag }}</a> {% endfor %} {% endmacro %}
\ No newline at end of file diff --git a/juick-www/src/main/webapp/WEB-INF/views/partial/usercolumn.html b/juick-www/src/main/webapp/WEB-INF/views/partial/usercolumn.html index 7e3b8a64..9024dd81 100644 --- a/juick-www/src/main/webapp/WEB-INF/views/partial/usercolumn.html +++ b/juick-www/src/main/webapp/WEB-INF/views/partial/usercolumn.html @@ -1,7 +1,7 @@ <div id="ctitle"><a href="./"> <img src="//i.juick.com/as/{{ user.uid }}.png" alt=""/>{{ user.name }}</a></div> {% if visitor is not empty and visitor.uid > 0 and visitor.uid != user.uid %} -<ul id="ctoolbar"> +<ul class="toolbar"> {% if isSubscribed %} <li> <a href="/post?body=U+%40{{ user.name }}" title="Подписан"> diff --git a/juick-www/src/main/webapp/WEB-INF/views/partial/usertags.html b/juick-www/src/main/webapp/WEB-INF/views/partial/usertags.html index 78e1416e..71d1303e 100644 --- a/juick-www/src/main/webapp/WEB-INF/views/partial/usertags.html +++ b/juick-www/src/main/webapp/WEB-INF/views/partial/usertags.html @@ -1,3 +1,3 @@ {% import "views/macros/tags" %} -{{ tags(uname=user.name, tagsStats) }} +{{ tags(user.name, tagStats) }} <a href="/{{ user.name }}/tags" rel="nofollow">...</a>
\ No newline at end of file diff --git a/juick-www/src/main/webapp/WEB-INF/views/users.html b/juick-www/src/main/webapp/WEB-INF/views/users.html new file mode 100644 index 00000000..0f66da54 --- /dev/null +++ b/juick-www/src/main/webapp/WEB-INF/views/users.html @@ -0,0 +1,17 @@ +{% extends "layouts/content" %} +{% import "views/macros/tags" %} +{% block content %} +<div class="users"> + {% for u in users %} + <span> + <a href="/{{ u.name }}/"> + <img src="//i.juick.com/as/{{ u.uid }}.png" alt="{{ u.name }}"/> + {{ u.name }} + </a> + </span> + {% endfor %} +</div> +{% endblock %} +{% block "column" %} +{% include "views/partial/usercolumn" %} +{% endblock %}
\ No newline at end of file |