From 559ae343aa72db04e12b94acfa0bec30ed9a11f1 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Fri, 9 Dec 2016 16:14:27 +0300 Subject: juick-spring-www: merge some work from develop branch, port some templates to Thymeleaf --- .../com/juick/www/controllers/HelpController.java | 58 ++++++- .../com/juick/www/controllers/IndexController.java | 117 +++++++++++++-- .../juick/www/controllers/SettingsController.java | 66 +++++++- .../com/juick/www/controllers/TagController.java | 86 ++++++++++- .../java/com/juick/www/helpers/QueryString.java | 14 ++ .../com/juick/www/helpers/QueryStringResolver.java | 31 ++++ .../main/java/com/juick/www/util/EncodeUtils.java | 10 ++ .../WEB-INF/templates/layout/mainLayout.html | 48 +----- .../webapp/WEB-INF/templates/layout/sponsors.html | 8 - .../main/webapp/WEB-INF/templates/views/help.html | 18 +++ .../WEB-INF/templates/views/partial/footer.html | 34 +++++ .../templates/views/partial/homecolumn.html | 6 + .../templates/views/partial/navigation.html | 37 +++++ .../templates/views/partial/settings_tabs.html | 5 + .../WEB-INF/templates/views/partial/tags.html | 3 + .../WEB-INF/templates/views/settings_about.html | 31 ++++ .../templates/views/settings_auth-email.html | 20 +++ .../WEB-INF/templates/views/settings_main.html | 167 +++++++++++++++++++++ .../WEB-INF/templates/views/settings_password.html | 26 ++++ .../WEB-INF/templates/views/settings_result.html | 18 +++ 20 files changed, 735 insertions(+), 68 deletions(-) create mode 100644 juick-spring-www/src/main/java/com/juick/www/helpers/QueryString.java create mode 100644 juick-spring-www/src/main/java/com/juick/www/helpers/QueryStringResolver.java create mode 100644 juick-spring-www/src/main/java/com/juick/www/util/EncodeUtils.java delete mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/layout/sponsors.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/help.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/footer.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/homecolumn.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/navigation.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/settings_tabs.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/tags.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_about.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_auth-email.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_main.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_password.html create mode 100644 juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_result.html (limited to 'juick-spring-www') diff --git a/juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java b/juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java index dad3ff9f..49e24c8c 100644 --- a/juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java +++ b/juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java @@ -1,12 +1,68 @@ package com.juick.www.controllers; +import com.juick.User; +import com.juick.server.util.HttpNotFoundException; +import com.juick.service.UserService; +import com.juick.util.UserUtils; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import javax.inject.Inject; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.Principal; +import java.util.Optional; +import java.util.stream.Collectors; + /** * Created by aalexeev on 11/21/16. */ @Controller -@RequestMapping("/help") public class HelpController { + @Inject + UserService userService; + + @RequestMapping({"/help", "/help/{lang}", "/help/{lang}/{page}"}) + protected String doGetHelp( + Principal principal, + @PathVariable("lang") Optional lang, + @PathVariable("page") Optional page, + ModelMap model) throws IOException, URISyntaxException { + String name = UserUtils.getUsername(principal, null); + User visitor = userService.getUserByName(name); + + lang.ifPresent(l -> { + if (l.length() != 2 || !l.matches("^[a-z]+$")) { + throw new HttpNotFoundException(); + } + }); + if (!lang.isPresent()) { + lang = Optional.of("ru"); + } + + page.ifPresent(p -> { + if (!p.matches("^[a-zA-Z0-9\\-]*$") || p.equals("navigation") || p.equals("index")) { + throw new HttpNotFoundException(); + } + }); + if (!page.isPresent()) { + page = Optional.of("index"); + } + + String filePath = "help/" + lang.get() + "/" + page.get(); + String navigationPath = "help/" + lang.get() + "/navigation"; + + model.addAttribute("title", "Помощь"); + model.addAttribute("visitor", visitor); + model.addAttribute("help_nav", Files.readAllLines(Paths.get(new ClassPathResource(navigationPath).getURI())) + .stream().collect(Collectors.joining())); + model.addAttribute("help_data", Files.readAllLines(Paths.get(new ClassPathResource(filePath).getURI())) + .stream().collect(Collectors.joining())); + return "views/help"; + } } diff --git a/juick-spring-www/src/main/java/com/juick/www/controllers/IndexController.java b/juick-spring-www/src/main/java/com/juick/www/controllers/IndexController.java index 2973bf30..91efd8aa 100644 --- a/juick-spring-www/src/main/java/com/juick/www/controllers/IndexController.java +++ b/juick-spring-www/src/main/java/com/juick/www/controllers/IndexController.java @@ -1,9 +1,26 @@ package com.juick.www.controllers; +import com.juick.Message; +import com.juick.User; +import com.juick.service.MessagesService; +import com.juick.service.TagService; +import com.juick.service.UserService; +import com.juick.util.UserUtils; +import com.juick.www.util.EncodeUtils; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; + +import javax.inject.Inject; +import java.io.IOException; +import java.net.URLEncoder; +import java.security.Principal; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; /** * Created by aalexeev on 11/21/16. @@ -11,14 +28,94 @@ import org.springframework.web.bind.annotation.RequestParam; @Controller public class IndexController { - @RequestMapping("/") - public String index( - java.security.Principal userPrincipal, - @RequestParam(required = false, defaultValue = "0") int before, - Model model) { + @Inject + UserService userService; + @Inject + MessagesService messagesService; + @Inject + TagService tagService; + + @RequestMapping(value = "/", method = RequestMethod.GET) + protected String doGet( + Principal principal, + @CookieValue("ref") Optional ref, + @RequestHeader("Referer") Optional referer, + @RequestParam("show") Optional paramShow, + @RequestParam("tag") Optional paramTagStr, + @RequestParam(value = "before", required = false) Integer paramBefore, + @RequestParam(value = "search", required = false) String paramSearch, + ModelMap model) throws IOException { + + if (paramTagStr.isPresent()) { + return "redirect:/tag/" + URLEncoder.encode(paramTagStr.get(), "UTF-8"); + } + + if (StringUtils.isNotEmpty(paramSearch) && paramSearch.length() > 64) { + paramSearch = ""; + } + + String name = UserUtils.getUsername(principal, null); + User visitor = userService.getUserByName(name); - model.addAttribute("currentUser", userPrincipal); + String title; + if (visitor.getUid() > 0) { + title = "Популярные"; + } else { + title = "Микроблоги Juick: популярные записи"; + } + List mids = new ArrayList<>(); - return "index"; + if (StringUtils.isNotEmpty(paramSearch)) { + title = "Поиск: " + StringEscapeUtils.escapeHtml4(paramSearch); + mids = messagesService.getSearch(EncodeUtils.encodeSphinx(paramSearch), + paramBefore); + } else if (!paramShow.isPresent()) { + mids = messagesService.getPopular(visitor.getUid(), paramBefore); + } else if (paramShow.get().equals("top")) { + return "redirect:/"; + } else if (paramShow.get().equals("my") && visitor.getUid() > 0) { + title = "Моя лента"; + mids = messagesService.getMyFeed(visitor.getUid(), paramBefore); + } else if (paramShow.get().equals("private") && visitor.getUid() > 0) { + title = "Приватные"; + mids = messagesService.getPrivate(visitor.getUid(), paramBefore); + } else if (paramShow.get().equals("discuss") && visitor.getUid() > 0) { + title = "Обсуждения"; + mids = messagesService.getDiscussions(visitor.getUid(), paramBefore); + } else if (paramShow.get().equals("recommended") && visitor.getUid() > 0) { + title = "Рекомендации"; + mids = messagesService.getRecommended(visitor.getUid(), paramBefore); + } else if (paramShow.get().equals("photos")) { + title = "Фотографии"; + mids = messagesService.getPhotos(visitor.getUid(), paramBefore); + } else if (paramShow.get().equals("all")) { + title = "Все сообщения"; + mids = messagesService.getAll(visitor.getUid(), paramBefore); + } + model.addAttribute("title", title); + model.addAttribute("visitor", visitor); + model.addAttribute("tags", tagService.getPopularTags()); + model.addAttribute("showAdv", true); + List msgs = messagesService.getMessages(mids); + List blUIDs = userService.checkBL(visitor.getUid(), + msgs.stream().map(m -> m.getUser().getUid()).collect(Collectors.toList())); + model.addAttribute("msgs", + msgs.stream().map(msg -> { + msg.ReadOnly |= blUIDs.contains(msg.getUser().getUid()); + return msg; + }).collect(Collectors.toList()) + ); + if (mids.size() >= 20) { + String nextpage = "?before=" + mids.get(mids.size() - 1); + if (paramShow.isPresent()) { + nextpage += "&show=" + paramShow.get(); + } + if (StringUtils.isNotEmpty(paramSearch)) { + nextpage += "&search=" + paramSearch; + } + model.addAttribute("nextpage", nextpage); + } + //model.addAttribute("isModerator", userService.getModerators().contains(visitor.getUid())); + return "blog/index"; } } diff --git a/juick-spring-www/src/main/java/com/juick/www/controllers/SettingsController.java b/juick-spring-www/src/main/java/com/juick/www/controllers/SettingsController.java index eef41c38..a038389f 100644 --- a/juick-spring-www/src/main/java/com/juick/www/controllers/SettingsController.java +++ b/juick-spring-www/src/main/java/com/juick/www/controllers/SettingsController.java @@ -1,16 +1,76 @@ package com.juick.www.controllers; +import com.juick.User; +import com.juick.service.*; +import com.juick.util.UserUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.inject.Inject; +import javax.servlet.ServletException; +import java.io.IOException; +import java.security.Principal; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * Created by aalexeev on 11/21/16. */ @Controller public class SettingsController { + @Inject + UserService userService; + @Inject + TagService tagService; + @Inject + CrosspostService crosspostService; + @Inject + SubscriptionService subscriptionService; + @Inject + EmailService emailService; - @RequestMapping("/settings") - public String showSettings() { - return "index"; + @RequestMapping("settings") + public String showSettings( + Principal principal, + @RequestParam(required = false) String page, + @RequestParam(required = false) String code, + ModelMap context + ) throws ServletException, IOException { + String name = UserUtils.getUsername(principal, null); + User visitor = userService.getUserByName(name); + if (visitor.getUid() == 0) { + return "redirect:/login"; + } + List pages = Arrays.asList("main", "password", "about", "auth-email", "privacy"); + if (StringUtils.isEmpty(page) || !pages.contains(page)) { + page = "main"; + } + context.put("title", "Настройки"); + context.put("visitor", visitor); + context.put("tags", tagService.getPopularTags()); + context.put("auths", userService.getAuthCodes(visitor)); + context.put("eopts", userService.getEmailOpts(visitor)); + context.put("ehash", userService.getEmailHash(visitor)); + context.put("emails", userService.getEmails(visitor)); + context.put("jids", userService.getAllJIDs(visitor)); + List hours = IntStream.rangeClosed(0, 23).boxed() + .map(i -> StringUtils.leftPad(String.format("%d", i), 2, "0")).collect(Collectors.toList()); + context.put("hours", hours); + context.put("fbstatus", crosspostService.getFbCrossPostStatus(visitor.getUid())); + context.put("twitter_name", crosspostService.getTwitterName(visitor.getUid())); + context.put("telegram_name", crosspostService.getTelegramName(visitor.getUid())); + context.put("notify_options", subscriptionService.getNotifyOptions(visitor)); + context.put("userinfo", userService.getUserInfo(visitor)); + if (page.equals("auth-email")) { + String response = emailService.verifyAddressByCode(visitor.getUid(), code) ? + "OK!" : "Sorry, code unknown."; + context.put("result", response); + } + return String.format("views/settings_%s", page); } } diff --git a/juick-spring-www/src/main/java/com/juick/www/controllers/TagController.java b/juick-spring-www/src/main/java/com/juick/www/controllers/TagController.java index 5c3b6287..0961f683 100644 --- a/juick-spring-www/src/main/java/com/juick/www/controllers/TagController.java +++ b/juick-spring-www/src/main/java/com/juick/www/controllers/TagController.java @@ -1,14 +1,28 @@ package com.juick.www.controllers; +import com.juick.Message; +import com.juick.User; +import com.juick.server.util.HttpNotFoundException; +import com.juick.service.AdsService; import com.juick.service.MessagesService; import com.juick.service.TagService; +import com.juick.service.UserService; +import com.juick.util.UserUtils; +import com.juick.www.helpers.QueryString; +import org.apache.commons.lang3.StringEscapeUtils; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.inject.Inject; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.Principal; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; /** * Created by aalexeev on 11/21/16. @@ -19,15 +33,75 @@ public class TagController { private TagService tagService; @Inject private MessagesService messagesService; + @Inject + private AdsService adsService; + @Inject + private UserService userService; @RequestMapping("/tag/{tagName}") - public String showTags( - @PathVariable String tagName, - @RequestParam(required = false, defaultValue = "0") int before, - Model model) { + protected String doGet( + Principal principal, + @PathVariable("tagName") String paramTagStr, + @RequestParam(value = "before", required = false, defaultValue = "0") Integer paramBefore, + @QueryString Optional queryString, + ModelMap model) throws UnsupportedEncodingException { + String name = UserUtils.getUsername(principal, null); + User visitor = userService.getUserByName(name); + + com.juick.Tag paramTag = tagService.getTag(paramTagStr, false); + if (paramTag == null) { + throw new HttpNotFoundException(); + } else if (paramTag.SynonymID > 0 && paramTag.TID != paramTag.SynonymID) { + com.juick.Tag synTag = tagService.getTag(paramTag.SynonymID); + String url = "/tag/" + URLEncoder.encode(synTag.getName(), "UTF-8"); + if (queryString.isPresent()) { + url += "?" + queryString.get(); + } + return "redirect:" + url; + } else if (!paramTag.getName().equals(paramTagStr)) { + String url = "/tag/" + URLEncoder.encode(paramTag.getName(), "UTF-8"); + if (queryString.isPresent()) { + url += "?" + queryString.get(); + } + return "redirect:" + url; + } + + int visitor_uid = visitor != null ? visitor.getUid() : 0; - return "index"; + String title = "*" + StringEscapeUtils.escapeHtml4(paramTag.getName()); + List mids = messagesService.getTag(paramTag.TID, visitor_uid, paramBefore, (visitor == null) ? 40 : 20); + model.addAttribute("title", title); + if (tagService.getTagNoIndex(paramTag.TID)) { + model.addAttribute("headers", ""); + } else if (paramBefore > 0 || mids.size() < 5) { + model.addAttribute("headers", ""); + } + if (mids.size() > 0) { + int vuid = visitor != null ? visitor.getUid() : 0; + int ad_mid = adsService.getAdMid(vuid); + if (ad_mid > 0 && mids.indexOf(ad_mid) == -1) { + mids.add(0, ad_mid); + adsService.logAdMid(vuid, ad_mid); + } else { + ad_mid = 0; + } + } + model.addAttribute("visitor", visitor); + List msgs = messagesService.getMessages(mids); + List blUIDs = userService.checkBL(visitor_uid, + msgs.stream().map(m -> m.getUser().getUid()).collect(Collectors.toList())); + model.addAttribute("msgs", + msgs.stream().map(msg -> { + msg.ReadOnly |= blUIDs.contains(msg.getUser().getUid()); + return msg; + }).collect(Collectors.toList()) + ); + if (mids.size() >= 20) { + String nextpage = "/tag/" + URLEncoder.encode(paramTag.getName(), "UTF-8") + "?before=" + mids.get(mids.size() - 1); + model.addAttribute("nextpage", nextpage); + } + return "blog/index"; } @RequestMapping("/tag") diff --git a/juick-spring-www/src/main/java/com/juick/www/helpers/QueryString.java b/juick-spring-www/src/main/java/com/juick/www/helpers/QueryString.java new file mode 100644 index 00000000..0eb6c76f --- /dev/null +++ b/juick-spring-www/src/main/java/com/juick/www/helpers/QueryString.java @@ -0,0 +1,14 @@ +package com.juick.www.helpers; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by vt on 22/03/16. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface QueryString { +} \ No newline at end of file diff --git a/juick-spring-www/src/main/java/com/juick/www/helpers/QueryStringResolver.java b/juick-spring-www/src/main/java/com/juick/www/helpers/QueryStringResolver.java new file mode 100644 index 00000000..812c4497 --- /dev/null +++ b/juick-spring-www/src/main/java/com/juick/www/helpers/QueryStringResolver.java @@ -0,0 +1,31 @@ +package com.juick.www.helpers; + +import org.springframework.core.MethodParameter; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import javax.servlet.http.HttpServletRequest; +import java.lang.annotation.Annotation; +import java.util.Optional; + +public class QueryStringResolver implements HandlerMethodArgumentResolver { + @Override + public boolean supportsParameter(MethodParameter parameter) { + Annotation[] parameterAnnotations = parameter.getParameterAnnotations(); + for (Annotation parameterAnnotation : parameterAnnotations) { + if (QueryString.class.isInstance(parameterAnnotation)) { + return true; + } + } + + return false; + } + + @Override + public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { + HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); + return Optional.ofNullable(request.getQueryString()); + } +} \ No newline at end of file diff --git a/juick-spring-www/src/main/java/com/juick/www/util/EncodeUtils.java b/juick-spring-www/src/main/java/com/juick/www/util/EncodeUtils.java new file mode 100644 index 00000000..a444ec4d --- /dev/null +++ b/juick-spring-www/src/main/java/com/juick/www/util/EncodeUtils.java @@ -0,0 +1,10 @@ +package com.juick.www.util; + +/** + * Created by vitalyster on 09.12.2016. + */ +public class EncodeUtils { + public static String encodeSphinx(String str) { + return str.replaceAll("@", "\\\\@"); + } +} diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/layout/mainLayout.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/layout/mainLayout.html index bbee7f6a..61062a3b 100644 --- a/juick-spring-www/src/main/webapp/WEB-INF/templates/layout/mainLayout.html +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/layout/mainLayout.html @@ -11,53 +11,21 @@ Juick.com - + - -
+
Navigation block
+
+

Main content

+ -
-
- - - - -
+
Footer
\ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/layout/sponsors.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/layout/sponsors.html deleted file mode 100644 index 6c68a867..00000000 --- a/juick-spring-www/src/main/webapp/WEB-INF/templates/layout/sponsors.html +++ /dev/null @@ -1,8 +0,0 @@ - - - -
- Спонсоры: -
- - \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/help.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/help.html new file mode 100644 index 00000000..0500839b --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/help.html @@ -0,0 +1,18 @@ + + + + Help title + + + +
+
Help text
+
+ + + + \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/footer.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/footer.html new file mode 100644 index 00000000..6978a2c0 --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/footer.html @@ -0,0 +1,34 @@ + + \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/homecolumn.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/homecolumn.html new file mode 100644 index 00000000..5293918d --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/homecolumn.html @@ -0,0 +1,6 @@ +

+ {% include "views/partial/tags.html" %} + {% if showAdv %} + конструктор сайтов + {% endif %} +

\ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/navigation.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/navigation.html new file mode 100644 index 00000000..2863d0c3 --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/navigation.html @@ -0,0 +1,37 @@ +
+ + + +
+ {% if visitor.getUID() > 0 %} + + + {% else %} +

Чтобы добавлять сообщения и комментарии, представьтесь. +

+ {% endif %} +
+
diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/settings_tabs.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/settings_tabs.html new file mode 100644 index 00000000..d7901d5e --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/settings_tabs.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/tags.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/tags.html new file mode 100644 index 00000000..4d05b7fb --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/partial/tags.html @@ -0,0 +1,3 @@ +{% for tag in tags %} + {{ tag }} +{% endfor %} \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_about.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_about.html new file mode 100644 index 00000000..ff82b542 --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_about.html @@ -0,0 +1,31 @@ + + + + Settings title + + + +
+
+
+

Full name:

+

Country:

+

URL:
+ Please, start with "http://"

+

About:
+
+ Max. 255 symbols

+

Avatar:
+ Recommendations: PNG, 96x96, <50Kb. Also, JPG and GIF supported.

+

+
+
+
+ + + + \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_auth-email.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_auth-email.html new file mode 100644 index 00000000..d4788fd6 --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_auth-email.html @@ -0,0 +1,20 @@ + + + + Settings title + + + +
+ +
+ + + + \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_main.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_main.html new file mode 100644 index 00000000..42eff2e3 --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_main.html @@ -0,0 +1,167 @@ + + + + Settings title + + + +
+
+

Настройки

+
+
+ Notification options +

Reply notifications ("Message posted")

+

Subscriptions notifications ("@user subscribed...")

+

Posts recommendations ("Recommended by @user")

+

+
+
+
+ + Telegram + {% if telegram_name is not empty %} +
+
Telegram: {{ telegram_name }} — + + +
+
+ {% else %} +

To connect Telegram account: send any text message to @Juick_bot +

+ {% endif %} +
+
+
+ + XMPP accounts + +

Your accounts:

+

+ {% for jid in jids %} +
+ {% endfor %} + {% for auth in auths %} + + — Confirm
+ {% endfor %} +

+ {% if jids is not empty %} +

+ {% endif %} +

To add new jabber account: send any text message to juick@juick.com +

+
+
+
+ + E-mail + +
+

Add account:
+ + + +

+
+
+

Your accounts:

+

+ {% for email in emails %} +
+ {% endfor %} + {% if emails is empty %} + -

+ {% else %} +

+

+ {% endif %} +
+ {% if emails is not empty %} +
+

You can receive all your subscriptions by email:
+ Sent to every day at + +

+
+ {% endif %} +

 

+

You can post to Juick via e-mail. Send your plain text + messages to special secret e-mail. You can attach one photo or video file.

+

Secret email: {% if ehash is not empty %} {{ ehash }} {% else %}-{% endif %}

+
+

+
+
+
+ + Facebook + + {% if fbstatus.isConnected() %} + {% if fbstatus.isCrosspostEnabled() %} +
+
+ Facebook: Enabled — + + +
+
+ {% else %} +
+
+ Facebook: Disabled — + + +
+
+ {% endif %} + {% else %} +

Cross-posting to Facebook: Connect to Facebook

+ {% endif %} +
+
+ + Twitter + {% if twitter_name is not empty %} +
+
Twitter: {{ twitter_name }} — + + +
+
+ {% else %} +

Cross-posting to Twitter: Connect to Twitter

+ {% endif %} +
+ +
+
+ + + + \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_password.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_password.html new file mode 100644 index 00000000..4c6e0d4d --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_password.html @@ -0,0 +1,26 @@ + + + + Settings title + + + +
+
+ Changing your password +
+ +

Change password:
+ (max. length - 16 symbols)

+
+
+
+ + + + \ No newline at end of file diff --git a/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_result.html b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_result.html new file mode 100644 index 00000000..ddde1baf --- /dev/null +++ b/juick-spring-www/src/main/webapp/WEB-INF/templates/views/settings_result.html @@ -0,0 +1,18 @@ + + + + Settings title + + + +
+

Settings update status

+
+ + + + \ No newline at end of file -- cgit v1.2.3