aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources/templates/views
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2021-03-31 00:44:49 +0300
committerGravatar Vitaly Takmazov2021-03-31 00:44:49 +0300
commit93fe99d9bfc9ae00f4164ea0ba32290722dff4dd (patch)
treef0637a6ad99ae7033e2fee4d100ed1fc63e64728 /src/main/resources/templates/views
parentfbe50e415fbb3da5a7fa151338b00e6a94dc8d5d (diff)
Resource filtering is handled by Spring Boot Maven plugin
Diffstat (limited to 'src/main/resources/templates/views')
-rw-r--r--src/main/resources/templates/views/404.html11
-rw-r--r--src/main/resources/templates/views/blog.html24
-rw-r--r--src/main/resources/templates/views/blog_tags.html10
-rw-r--r--src/main/resources/templates/views/help.html12
-rw-r--r--src/main/resources/templates/views/index.html29
-rw-r--r--src/main/resources/templates/views/login_success.html13
-rw-r--r--src/main/resources/templates/views/macros/tags.html11
-rw-r--r--src/main/resources/templates/views/partial/footer.html11
-rw-r--r--src/main/resources/templates/views/partial/homecolumn.html25
-rw-r--r--src/main/resources/templates/views/partial/message.html87
-rw-r--r--src/main/resources/templates/views/partial/navigation.html43
-rw-r--r--src/main/resources/templates/views/partial/settings_tabs.html11
-rw-r--r--src/main/resources/templates/views/partial/tagcolumn.html26
-rw-r--r--src/main/resources/templates/views/partial/tags.html3
-rw-r--r--src/main/resources/templates/views/partial/usercolumn.html93
-rw-r--r--src/main/resources/templates/views/partial/usertags.html3
-rw-r--r--src/main/resources/templates/views/pm_inbox.html35
-rw-r--r--src/main/resources/templates/views/pm_sent.html33
-rw-r--r--src/main/resources/templates/views/post.html22
-rw-r--r--src/main/resources/templates/views/post_success.html19
-rw-r--r--src/main/resources/templates/views/settings_about.html20
-rw-r--r--src/main/resources/templates/views/settings_auth-email.html9
-rw-r--r--src/main/resources/templates/views/settings_main.html154
-rw-r--r--src/main/resources/templates/views/settings_password.html17
-rw-r--r--src/main/resources/templates/views/settings_privacy.html9
-rw-r--r--src/main/resources/templates/views/settings_result.html9
-rw-r--r--src/main/resources/templates/views/signup.html43
-rw-r--r--src/main/resources/templates/views/signup_result.html6
-rw-r--r--src/main/resources/templates/views/thread.html188
-rw-r--r--src/main/resources/templates/views/users.html17
30 files changed, 993 insertions, 0 deletions
diff --git a/src/main/resources/templates/views/404.html b/src/main/resources/templates/views/404.html
new file mode 100644
index 00000000..02a790e6
--- /dev/null
+++ b/src/main/resources/templates/views/404.html
@@ -0,0 +1,11 @@
+{% extends "layouts/default" %}
+{% block content %}
+ <article>
+ <h1>Страница не найдена</h1>
+ <p>Сожалеем, но страницу с этим адресом удалил её автор, либо её никогда не существовало.</p>
+ </article>
+{% endblock %}
+
+{% block "column" %}
+{% include "views/partial/homecolumn" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/blog.html b/src/main/resources/templates/views/blog.html
new file mode 100644
index 00000000..8d6a6581
--- /dev/null
+++ b/src/main/resources/templates/views/blog.html
@@ -0,0 +1,24 @@
+{% extends "layouts/default" %}
+{% import "views/macros/tags" %}
+{% block content %}
+{% if noindex %}
+<!--noindex-->
+{% endif %}
+{% if paramTag | default('') is not empty %}
+<p class="page"><a href="/tag/{{ paramTag.name | urlencode }}">← {{ i18n("messages","blog.allPostsWithTag") }} <b>{{ paramTag.name | escape }}</b></a></p>
+{% endif %}
+<div>
+{% for msg in msgs %}
+{% include "views/partial/message" %}
+{% endfor %}
+</div>
+{% if nextpage | default('') is not empty %}
+<p class="page"><a href="{{ nextpage | raw }}" rel="prev">{{ i18n("messages","messages.next") }} →</a></p>
+{% endif %}
+{% if noindex %}
+<!--/noindex-->
+{% endif %}
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/usercolumn" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/blog_tags.html b/src/main/resources/templates/views/blog_tags.html
new file mode 100644
index 00000000..48e517eb
--- /dev/null
+++ b/src/main/resources/templates/views/blog_tags.html
@@ -0,0 +1,10 @@
+{% extends "layouts/default" %}
+{% import "views/macros/tags" %}
+{% block content %}
+<p>
+ {{ tags(user.name, tags) }}
+</p>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/usercolumn" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/help.html b/src/main/resources/templates/views/help.html
new file mode 100644
index 00000000..169ccb3f
--- /dev/null
+++ b/src/main/resources/templates/views/help.html
@@ -0,0 +1,12 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ {{ content | raw }}
+</article>
+{% endblock %}
+
+{% block "column" %}
+<div class="toolbar">
+{{ navigation | raw }}
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/index.html b/src/main/resources/templates/views/index.html
new file mode 100644
index 00000000..e85a3aa1
--- /dev/null
+++ b/src/main/resources/templates/views/index.html
@@ -0,0 +1,29 @@
+{% extends "layouts/default" %}
+{% import "views/macros/tags" %}
+{% block content %}
+{% if noindex %}
+<!--noindex-->
+{% endif %}
+{% for msg in msgs %}
+{% include "views/partial/message" %}
+{% endfor %}
+{% if nextpage | default('') is not empty %}
+<p class="page"><a href="{{ nextpage | raw }}" rel="prev">{{ i18n("messages","messages.next") }} →</a></p>
+{% endif %}
+{% if noindex %}
+<!--/noindex-->
+{% endif %}
+{% endblock %}
+{% block "column" %}
+{% if tag | default('') is not empty %}
+{% include "views/partial/tagcolumn" %}
+{% elseif visitor.uid > 0 %}
+{% if discover %}
+{% include "views/partial/homecolumn" %}
+{% else %}
+{% include "views/partial/usercolumn" %}
+{% endif %}
+{% else %}
+{% include "views/partial/homecolumn" %}
+{% endif %}
+{% endblock %}
diff --git a/src/main/resources/templates/views/login_success.html b/src/main/resources/templates/views/login_success.html
new file mode 100644
index 00000000..ee71f12f
--- /dev/null
+++ b/src/main/resources/templates/views/login_success.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>Blank window</title>
+</head>
+<body>
+ <script type="text/javascript">
+ window.opener.postMessage("{{ hash }}", "*");
+ window.close();
+ </script>
+</body>
+</html>
diff --git a/src/main/resources/templates/views/macros/tags.html b/src/main/resources/templates/views/macros/tags.html
new file mode 100644
index 00000000..08687f5a
--- /dev/null
+++ b/src/main/resources/templates/views/macros/tags.html
@@ -0,0 +1,11 @@
+{% macro tags(uname="", tagsList) %}
+{% for tag in tagsList %}
+<a href="/{{ uname }}/?tag={{ tag | urlencode }}">{{ tag }}</a>
+{% endfor %}
+{% endmacro %}
+
+{% macro allTags(baseUri, tagsList) %}
+{% for tag in tagsList %}
+<a href="{{ baseUri }}tag/{{ tag | urlencode }}">#{{ tag }}</a>
+{% endfor %}
+{% endmacro %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/partial/footer.html b/src/main/resources/templates/views/partial/footer.html
new file mode 100644
index 00000000..9a627373
--- /dev/null
+++ b/src/main/resources/templates/views/partial/footer.html
@@ -0,0 +1,11 @@
+<div id="footer" class="desktop">
+ <div id="footer-left">juick.com &copy; 2008-2021
+ {% if links | default ('') is not empty %}
+ <br/>{{ i18n("messages","label.sponsors") }}: {{ links | raw }}
+ {% endif %}
+ </div>
+ <div id="footer-right"> &middot;
+ <a href="/help/contacts" rel="nofollow">{{ i18n("messages","link.contacts") }}</a> &middot;
+ <a href="/help/tos" rel="nofollow">{{ i18n("messages","link.tos") }}</a>
+ </div>
+</div>
diff --git a/src/main/resources/templates/views/partial/homecolumn.html b/src/main/resources/templates/views/partial/homecolumn.html
new file mode 100644
index 00000000..a4cca153
--- /dev/null
+++ b/src/main/resources/templates/views/partial/homecolumn.html
@@ -0,0 +1,25 @@
+<div class="toolbar">
+ <a href="/?show=top" title="Top">
+ <i data-icon="ei-heart" data-size="s"></i>
+ <span class="desktop">Top</span>
+ </a>
+ <a href="/?show=all" title="{{ i18n("messages", "link.allMessages") }}">
+ <i data-icon="ei-search" data-size="s"></i>
+ <span class="desktop">{{ i18n("messages","link.allMessages") }}</span>
+ </a>
+ <a href="/?show=photos" title="{{ i18n("messages", "link.withPhotos") }}">
+ <i data-icon="ei-camera" data-size="s"></i>
+ <span class="desktop">{{ i18n("messages", "link.withPhotos") }}</span>
+ </a>
+</div>
+<div class="tags desktop">
+ <h4>{{ i18n("messages","link.trends") }}</h4>
+ {% include "views/partial/tags" %}
+ {% if showAdv | default(false) %}
+ <h4>Наши друзья</h4>
+ <a target="_blank" href="https://ru.jooble.org">
+ <img src="https://ru.jooble.org/css/images/logos/jooble_80x30.png" alt="Работа в России"/>
+ </a>
+ {% endif %}
+</div>
+{% include "views/partial/footer" %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/partial/message.html b/src/main/resources/templates/views/partial/message.html
new file mode 100644
index 00000000..47dfb6c5
--- /dev/null
+++ b/src/main/resources/templates/views/partial/message.html
@@ -0,0 +1,87 @@
+<article class="msg-cont" data-mid="{{ msg.mid }}">
+ <header class="h">
+ <span>
+ <a href="/{{ msg.user.name }}/"><span>{{ msg.user.name }}</span></a>
+ </span>
+ <div class="msg-avatar"><a href="/{{ msg.user.name }}/">
+ <img src="{{ msg.user.avatar }}" alt="{{ msg.user.name }}"/></a>
+ </div>
+ <div class="msg-ts">
+ {% if msg.FriendsOnly %}
+ <i data-icon="ei-lock" data-size="s"></i> &middot;
+ {% endif %}
+ <a href="/{{ msg.user.name }}/{{ msg.mid }}">
+ <time datetime="{{ msg.created | timestamp | date('yyyy-MM-dd HH:mm:ss') }}Z"
+ title="{{ msg.created | timestamp | date('yyyy-MM-dd HH:mm:ss') }} GMT">
+ {{ msg.created | prettyTime }}
+ </time>
+ </a>
+ {% if msg.created != msg.updatedAt %}
+ &middot; Edited
+ {% endif %}
+ </div>
+ </header>
+ <div class="msg-txt">
+ <span class="msg-tags">
+ {{ tags(msg.user.name, msg.tags | tagsList) }}
+ </span>
+ {{ msg | formatMessage }}
+ </div>
+ {% if msg.AttachmentType is not empty %}
+ <p class="ir"><a href="//i.juick.com/p/{{ msg.mid }}.{{ msg.AttachmentType }}" data-fname="{{ msg.mid }}.{{ msg.AttachmentType }}">
+ <img src="//i.juick.com/photos-512/{{ msg.mid }}.{{ msg.AttachmentType }}" alt=""/></a>
+ </p>
+ {% endif %}
+ <nav class="l">
+ {% if visitor.uid == msg.user.uid %}
+ <a href="/{{ msg.mid }}" class="a-like msg-button">
+ <span class="msg-button-icon">
+ <i data-icon="ei-heart" data-size="s"></i>
+ {% if msg.likes > 0 %}&nbsp;{{ msg.likes }}
+ {% else %}
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</span>
+ {% endif %}
+ </span>
+ </a>
+ {% elseif visitor.uid > 0 %}
+ <a href="/post?body=!+%23{{ msg.mid }}" class="a-like msg-button">
+ <span class="msg-button-icon">
+ <i data-icon="ei-heart" data-size="s"></i>
+ {% if msg.likes > 0 %}&nbsp;{{ msg.likes }}
+ {% else %}
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</span>
+ {% endif %}
+ </span>
+ </a>
+ {% else %}
+ <a href="/login" class="a-login msg-button">
+ <span class="msg-button-icon">
+ <i data-icon="ei-heart" data-size="s"></i>
+ {% if msg.likes > 0 %}
+ {{ msg.likes }}
+ {% else %}
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</span>
+ {% endif %}
+ </span>
+
+ </a>
+ {% endif %}
+ {% if (not msg.ReadOnly) or (visitor.uid == msg.user.uid) %}
+ <a href="/{{ msg.mid }}" class="a-comment msg-button">
+ <span class="msg-button-icon">
+ <i data-icon="ei-comment" data-size="s"></i>
+ {% if msg.Replies > 0 %}&nbsp;
+ {% if msg.unread %}
+ <span class="badge">{{ msg.Replies }}</span>
+ {% else %}
+ {{ msg.Replies }}
+ {% endif %}
+ {% else %}
+ <span>&nbsp;{{ i18n("messages","message.comment") }}</span>
+ {% endif %}
+ </span>
+
+ </a>
+ {% endif %}
+ </nav>
+</article> \ No newline at end of file
diff --git a/src/main/resources/templates/views/partial/navigation.html b/src/main/resources/templates/views/partial/navigation.html
new file mode 100644
index 00000000..184c8f2b
--- /dev/null
+++ b/src/main/resources/templates/views/partial/navigation.html
@@ -0,0 +1,43 @@
+<div id="header">
+ <div id="header_wrapper">
+ {% if visitor.uid > 0 %}
+ <div id="ctitle">
+ <a href="/{{ visitor.name }}/">
+ <img src="{{ visitor.avatar }}" alt=""/>{{ visitor.name }}
+ {% if not visitor.verified %}
+ <span style="color: red;"><i data-icon="ei-exclamation" data-size="s"></i></span>
+ {% endif %}
+ </a>
+ </div>
+ {% else %}
+ <div id="logo"><a href="/{% if visitor.uid > 0 %}?show=my{% endif %}">Juick</a></div>
+ {% endif %}
+ <div id="search" class="desktop">
+ <form action="/">
+ <input name="search" class="text"
+ placeholder="{{ i18n('messages','label.search') }}" value="{{ search | default('') }}"/>
+ </form>
+ </div>
+ <nav id="global">
+ <a href="/">
+ <i data-icon="ei-bell" data-size="s"></i>
+ <span class="icon-title desktop">{{ i18n("messages","link.discuss") }}</span>{% if visitor.unreadCount > 0 %}<span class="badge">{{ visitor.unreadCount }}</span>{% endif %}
+ </a>
+ <a href="/?show=all" rel="nofollow">
+ <i data-icon="ei-search" data-size="s"></i>
+ <span class="icon-title desktop">{{ i18n("messages","link.allMessages") }}</span>
+ </a>
+ {% if visitor.uid > 0 %}
+ <a id="post" href="/post">
+ <i data-icon="ei-pencil" data-size="s"></i>
+ <span class="icon-title desktop">{{ i18n("messages","link.postMessage") }}</span>
+ </a>
+ {% else %}
+ <a class="a-login" href="/login" rel="nofollow">
+ <i data-icon="ei-user" data-size="s"></i>
+ <span class="icon-title desktop">{{ i18n("messages", "link.Login") }}</span>
+ </a>
+ {% endif %}
+ </nav>
+ </div>
+</div>
diff --git a/src/main/resources/templates/views/partial/settings_tabs.html b/src/main/resources/templates/views/partial/settings_tabs.html
new file mode 100644
index 00000000..00f7068a
--- /dev/null
+++ b/src/main/resources/templates/views/partial/settings_tabs.html
@@ -0,0 +1,11 @@
+<div id="pagetabs">
+ <div class="toolbar">
+ <a href="/settings">{{ i18n("messages","link.settings.main") }}</a>
+ <a href="/settings?page=password">{{ i18n("messages","link.settings.password") }}</a>
+ <a href="/settings?page=about">{{ i18n("messages","link.settings.about") }}</a>
+ <a href="/logout"><i data-icon="ei-user" data-size="s"></i>{{ i18n("messages","link.logout") }}</a>
+ </div>
+</div>
+<span class="desktop">
+ {% include "views/partial/footer" %}
+</span> \ No newline at end of file
diff --git a/src/main/resources/templates/views/partial/tagcolumn.html b/src/main/resources/templates/views/partial/tagcolumn.html
new file mode 100644
index 00000000..a7728ef3
--- /dev/null
+++ b/src/main/resources/templates/views/partial/tagcolumn.html
@@ -0,0 +1,26 @@
+<div id="ctitle">
+ <h2>*{{ tag.name }}</h2>
+</div>
+{% if visitor is not empty and visitor.uid > 0 %}
+<div class="toolbar">
+ {% if isSubscribed %}
+ <a href="/post?body=U+%2A{{ tag.name }}" title="Подписан">
+ <i data-icon="ei-check" data-size="s"></i>Subscribed
+ </a>
+ {% else %}
+ <a href="/post?body=S+%2A{{ tag.name }}" title="Подписаться">
+ <i data-icon="ei-plus" data-size="s"></i>Subscribe
+ </a>
+ {% endif %}
+ {% if isInBL %}
+ <a href="/post?body=BL+%2A{{ tag.name }}" title="Разблокировать">
+ <i data-icon="ei-close-o" data-size="s"></i>Unblock
+ </a>
+ {% else %}
+ <a href="/post?body=BL+%2A{{ tag.name }}" title="Заблокировать">
+ <i data-icon="ei-close" data-size="s"></i>Block
+ </a>
+ {% endif %}
+</div>
+{% endif %}
+{% include "views/partial/footer" %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/partial/tags.html b/src/main/resources/templates/views/partial/tags.html
new file mode 100644
index 00000000..4d05b7fb
--- /dev/null
+++ b/src/main/resources/templates/views/partial/tags.html
@@ -0,0 +1,3 @@
+{% for tag in tags %}
+ <a href="/tag/{{ tag | urlencode }}" title="{{ tag }}">{{ tag }}</a>
+{% endfor %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/partial/usercolumn.html b/src/main/resources/templates/views/partial/usercolumn.html
new file mode 100644
index 00000000..ee9ab267
--- /dev/null
+++ b/src/main/resources/templates/views/partial/usercolumn.html
@@ -0,0 +1,93 @@
+<div class="toolbar">
+ {% if visitor is not empty and visitor.uid > 0 and visitor.uid != user.uid %}
+ <div id="ctitle">
+ <a href="/{{ user.name }}">
+ <img src="{{ user.avatar }}" alt="" />{{ user.name }}
+ </a>
+ </div>
+ {% if isSubscribed %}
+ <a href="/post?body=U+%40{{ user.name }}" title="Подписан">
+ <i data-icon="ei-check" data-size="s"></i>
+ <span class="desktop">Subscribed</span>
+ </a>
+ {% else %}
+ <a href="/post?body=S+%40{{ user.name }}" title="Подписаться">
+ <i data-icon="ei-plus" data-size="s"></i>
+ <span class="desktop">Subscribe</span>
+ </a>
+ {% endif %}
+ {% if isInBL %}
+ <a href="/post?body=BL+%40{{ user.name }}" title="Разблокировать">
+ <i data-icon="ei-close-o" data-size="s"></i>
+ <span class="dekstop">Unblock</span>
+ </a>
+ {% else %}
+ <a href="/post?body=BL+%40{{ user.name }}" title="Заблокировать">
+ <i data-icon="ei-close" data-size="s"></i>
+ <span class="desktop">Block</span>
+ </a>
+ {% endif %}
+ {% if not isInBLAny %}
+ <a href="/pm/sent?uname={{ user.name }}" title="Написать приватное сообщение">
+ <i data-icon="ei-envelope" data-size="s"></i>
+ <span class="desktop">PM</span>
+ </a>
+ {% endif %}
+ {% endif %}
+ {% if visitor is not empty and visitor.uid == user.uid %}
+ <a href="/?show=my"><i data-icon="ei-clock" data-size="s"></i>
+ <span class="desktop">{{ i18n("messages","link.my") }}</span>
+ </a>
+ <a href="/pm/inbox"><i data-icon="ei-envelope" data-size="s"></i>
+ <span class="desktop">{{ i18n("messages","link.privateMessages") }}</span>
+ </a>
+ <a href="/?show=discuss"><i data-icon="ei-bell" data-size="s"></i>
+ <span class="desktop">{{ i18n("messages","link.discuss") }}</span>
+ </a>
+ {% endif %}
+ {% if visitor is not empty and visitor.uid == user.uid and false %}
+ <a href="/?show=mycomments" rel="nofollow">{{ i18n("messages","blog.comments") }}</a>
+ <a href="/?show=unanswered" rel="nofollow">Неотвеченные</a>
+ {% endif %}
+ {% if visitor is not empty and visitor.uid == user.uid %}
+
+ <a href="/settings" rel="nofollow">
+ <i data-icon="ei-gear" data-size="s"></i>
+ {% if not visitor.verified %}
+ <span style="color: red;"><i data-icon="ei-exclamation" data-size="s"></i></span>
+ {% else %}
+ <span class="desktop">{{ i18n("messages","link.settings") }}</span>
+ {% endif %}
+ </a>
+ {% endif %}
+</div>
+<form action="/{{ user.name }}/" class="desktop" style="padding: 6px;">
+ <p><input type="text" name="search" class="inp" placeholder="{{ i18n('messages','label.search') }}" /></p>
+</form>
+<span class="desktop" style="padding: 6px;">
+ {% include "views/partial/usertags" %}
+</span>
+<div id="ustats" class="desktop" style="padding: 6px;">
+ <ul>
+ <li><a href="/{{ user.name }}/friends">{{ i18n("messages","blog.iread") }}: {{ statsIRead }}</a></li>
+ <li><a href="/{{ user.name }}/readers">{{ i18n("messages","blog.readers") }}: {{ statsMyReaders }}</a></li>
+ {% if statsMyBL > 0 and visitor.uid == user.uid %}
+ <li><a href="/{{ user.name }}/bl">{{ i18n("messages","blog.bl") }}: {{ statsMyBL }}</a></li>
+ {% endif %}
+ <li>{{ i18n("messages","blog.messages") }}: {{ statsMessages }}</li>
+ <li>{{ i18n("messages","blog.comments") }}: {{ statsReplies }}</li>
+ </ul>
+ {% if iread is not empty %}
+ <div class="iread">
+ {% for u in iread %}
+ <span>
+ <a href="/{{ u.name }}/">
+ <img src="//i.juick.com/as/{{ u.uid }}.png" alt="{{ u.name }}" />
+ </a>
+ </span>
+ {% endfor %}
+ </div>
+ {% endif %}
+
+</div>
+{% include "views/partial/footer" %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/partial/usertags.html b/src/main/resources/templates/views/partial/usertags.html
new file mode 100644
index 00000000..71d1303e
--- /dev/null
+++ b/src/main/resources/templates/views/partial/usertags.html
@@ -0,0 +1,3 @@
+{% import "views/macros/tags" %}
+{{ tags(user.name, tagStats) }}
+<a href="/{{ user.name }}/tags" rel="nofollow">...</a> \ No newline at end of file
diff --git a/src/main/resources/templates/views/pm_inbox.html b/src/main/resources/templates/views/pm_inbox.html
new file mode 100644
index 00000000..f89b2923
--- /dev/null
+++ b/src/main/resources/templates/views/pm_inbox.html
@@ -0,0 +1,35 @@
+{% extends "layouts/default" %}
+{% block content %}
+{% if not msgs.isEmpty() %}
+<ul id="private-messages">
+ {% for msg in msgs %}
+ <li class="msg">
+ <div class="msg-cont">
+ <div class="msg-header">
+ @<a href="/{{ msg.user.name }}/">{{ msg.user.name }}</a>:
+ <div class="msg-avatar">
+ <a href="/{{ msg.user.name }}/">
+ <img src="{{ msg.user.avatar }}" alt="{{ msg.user.name }}"/>
+ </a>
+ </div>
+ <div class="msg-ts">{{ msg.created | prettyTime }}</div>
+ </div>
+
+ <div class="msg-txt">{{ msg | formatMessage }}</div>
+ <form class="pmmsg">
+ <input type="hidden" name="uname" value="{{ msg.user.name }}"/>
+ <div class="msg-comment">
+ <div class="ta-wrapper">
+ <textarea name="body" rows="1" class="replypm" placeholder="Написать ответ"></textarea>
+ </div>
+ </div>
+ </form>
+ </div>
+ </li>
+ {% endfor %}
+</ul>
+{% endif %}
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/usercolumn" %}
+{% endblock %}
diff --git a/src/main/resources/templates/views/pm_sent.html b/src/main/resources/templates/views/pm_sent.html
new file mode 100644
index 00000000..f0af71d3
--- /dev/null
+++ b/src/main/resources/templates/views/pm_sent.html
@@ -0,0 +1,33 @@
+{% extends "layouts/default" %}
+{% block content %}
+<form class="pmmsg">
+ <div class="newpm">
+ <div class="newpm-to">To: <input type="text" name="uname" placeholder="username" value="{{ uname }}"/></div>
+ <div class="newpm-body"><textarea name="body" rows="2"></textarea></div>
+ <div class="newpm-send"><input type="submit" value="OK"/></div>
+ </div>
+</form>
+{% if not msgs.isEmpty() %}
+<ul id="private-messages">
+ {% for msg in msgs %}
+ <li class="msg">
+ <div class="msg-cont">
+ <div class="msg-header">
+ @<a href="/{{ msg.user.name }}/">{{ msg.user.name }}</a>:
+ <div class="msg-avatar">
+ <a href="/{{ msg.user.name }}/">
+ <img src="{{ msg.user.avatar }}" alt="{{ msg.user.name }}"/>
+ </a>
+ </div>
+ <div class="msg-ts">{{ msg.created | prettyTime }}</div>
+ </div>
+ <div class="msg-txt">{{ msg | formatMessage }}</div>
+ </div>
+ </li>
+ {% endfor %}
+</ul>
+{% endif %}
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/usercolumn" %}
+{% endblock %}
diff --git a/src/main/resources/templates/views/post.html b/src/main/resources/templates/views/post.html
new file mode 100644
index 00000000..a77fa3bd
--- /dev/null
+++ b/src/main/resources/templates/views/post.html
@@ -0,0 +1,22 @@
+{% extends "layouts/default" %}
+{% import "views/macros/tags" %}
+{% block content %}
+<article>
+<form id="postmsg">
+ <p style="text-align: left;">
+ <b>Фото:</b> <span id="attachmentfile">
+ <input style="width: 100%;" type="file" name="attach" accept="image/jpeg,image/png"/> <i>({{ i18n("messages","postForm.imageFormats") }})</i></span>
+ </p>
+ <p>
+ <textarea name="body" class="newmessage" rows="7" cols="10" placeholder="*weather It's very cold today!">{{ body }}</textarea>
+ <br/>
+ <input type="submit" class="subm Button" value=" {{ i18n("messages","postForm.submit") }} "/>
+ </p>
+</form>
+</article>
+<p style="text-align: left;"><b>Теги:</b></p>
+{{ tags(visitor.name, tags) }}
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/usercolumn" %}
+{% endblock %}
diff --git a/src/main/resources/templates/views/post_success.html b/src/main/resources/templates/views/post_success.html
new file mode 100644
index 00000000..2106f3cb
--- /dev/null
+++ b/src/main/resources/templates/views/post_success.html
@@ -0,0 +1,19 @@
+{% extends "layouts/minimal" %}
+{% block content %}
+<h1>Сообщение опубликовано</h1>
+<p>Поделитесь своим новым постом в социальных сетях:</p>
+{% if sharetwi | default('') is not empty %}
+<p class="social">
+ <a href="https://twitter.com/intent/tweet?text={{ sharetwi }}"
+ class="sharenew"><i data-icon="ei-sc-twitter" data-size="m"></i>Отправить в Twitter</a></p>
+{% endif %}
+<p class="social">
+ <a href="https://vk.com/share.php?url={{ url | urlencode }}"
+ class="sharenew"><i data-icon="ei-sc-vk" data-size="m"></i>Отправить в ВКонтакте</a></p>
+{% if facebook | default('') is not empty %}
+<p class="social">
+ <a href="https://www.facebook.com/sharer/sharer.php?u={{ url | urlencode }}"
+ class="sharenew"><i data-icon="ei-sc-facebook" data-size="m"></i>Отправить в Facebook</a></p>
+{% endif %}
+<p>Ссылка на сообщение: <a href="{{ url | raw }}">{{ url }}</a></p>
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/settings_about.html b/src/main/resources/templates/views/settings_about.html
new file mode 100644
index 00000000..5e308671
--- /dev/null
+++ b/src/main/resources/templates/views/settings_about.html
@@ -0,0 +1,20 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ <form action="/settings" method="POST" enctype="multipart/form-data">
+ <p>Full name: <input type="text" name="fullname" value="{{ userinfo.fullName }}"/></p>
+ <p>Country: <input type="text" name="country" value="{{ userinfo.country }}"/></p>
+ <p>URL: <input type="text" name="url" value="{{ userinfo.url }}" size="32"/><br/>
+ <small>Please, start with &quot;http://&quot;</small></p>
+ <p>About:<br/>
+ <input type="text" name="descr" value="{{ userinfo.description }}" style="width: 100%;"/><br/>
+ <small>Max. 255 symbols</small></p>
+ <p>Avatar: <input type="file" name="avatar"/><br/>
+ <small>Recommendations: PNG, 96x96, &lt;50Kb. Also, JPG and GIF supported.</small></p>
+ <p><input type="hidden" name="page" value="about"/><input type="submit" value=" OK "/></p>
+ </form>
+</article>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/settings_tabs" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/settings_auth-email.html b/src/main/resources/templates/views/settings_auth-email.html
new file mode 100644
index 00000000..e906d704
--- /dev/null
+++ b/src/main/resources/templates/views/settings_auth-email.html
@@ -0,0 +1,9 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ <p>{{ result }}</p><p><a href="/settings">Settings</a>.</p>
+</article>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/settings_tabs" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/settings_main.html b/src/main/resources/templates/views/settings_main.html
new file mode 100644
index 00000000..a6cca7a3
--- /dev/null
+++ b/src/main/resources/templates/views/settings_main.html
@@ -0,0 +1,154 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ <h1>Настройки</h1>
+ {%if not visitor.verified %}
+ <h2 style="color: red; padding: 20px;">Verify your account by adding email or social account</h2>
+ {% endif %}
+ <form action="/settings" method="POST" enctype="multipart/form-data">
+ <fieldset>
+ <legend>Notification options</legend>
+ <p><input type="checkbox" name="jnotify" value="1" {% if notify_options.repliesEnabled %}
+ checked="checked" {% endif %}/> Reply notifications (&quot;Message posted&quot;)</p>
+ <p><input type="checkbox" name="subscr_notify" value="1" {% if notify_options.subscriptionsEnabled %}
+ checked="checked" {% endif %}/> Subscriptions notifications (&quot;@user subscribed...&quot;)</p>
+ <p><input type="checkbox" name="recomm" value="1" {% if notify_options.recommendationsEnabled %}
+ checked="checked" {% endif %}/> Posts recommendations (&quot;Recommended by @user&quot;)</p>
+ <p><input type="hidden" name="page" value="main"/><input type="submit" class="Button" value=" OK "/></p>
+ </fieldset>
+ </form>
+ <fieldset>
+ <legend style="background: url(/durov.png) no-repeat; padding-left: 58px; line-height: 48px; background-size: contain;">
+ Telegram</legend>
+ {% if telegram_name is not empty %}
+ <form action="/settings" method="post">
+ <div>Telegram: <b>{{ telegram_name }}</b> &mdash;
+ <input type="hidden" name="page" value="telegram-del"/>
+ <input type="submit" value=" Disable " class="Button" />
+ </div>
+ </form>
+ {% else %}
+ <p>To connect Telegram account: send any text message to <a href="https://telegram.me/Juick_bot">@Juick_bot</a>
+ </p>
+ {% endif %}
+ </fieldset>
+ {% if jids | length > 0 %}
+ <form action="/settings" method="POST" enctype="multipart/form-data">
+ <fieldset>
+ <legend style="background: url(//static.juick.com/settings/xmpp.png) no-repeat; padding-left: 58px; line-height: 48px;">
+ XMPP accounts
+ </legend>
+ <p>Your accounts:</p>
+ <p>
+ {% for jid in jids %}
+ <label><input type="radio" name="delete" value="xmpp;{{ jid }}">{{ jid }}</label><br/>
+ {% endfor %}
+ {% for auth in auths %}
+ <label><input type="radio" name="delete"
+ value="xmpp-unauth;{{ auth.account }}">{{ auth.account }}</label>
+ &mdash; <a href="#"
+ onclick="alert('To confirm, please send &quot;AUTH {{ auth.getAuthCode() }}&quot; (without quotes) from this account to &quot;juick@juick.com&quot;.'); return false;">Confirm</a><br/>
+ {% endfor %}
+ </p>
+ {% if jids | length > 1 %}
+ <p><input type="hidden" name="page" value="jid-del"/><input type="submit" class="Button" value=" Delete "/></p>
+ {% endif %}
+ <p>To add new jabber account: send any text message to <a href="xmpp:juick@juick.com?message;body=login">juick@juick.com</a>
+ </p>
+ </fieldset>
+ </form>
+ {% endif %}
+ <fieldset>
+ <legend style="background: url(//static.juick.com/settings/email.png) no-repeat; padding-left: 58px; line-height: 48px;">
+ E-mail
+ </legend>
+ <form action="/settings" method="POST" enctype="multipart/form-data">
+ <p>Add account:<br/>
+ <input type="text" name="account"/>
+ <input type="hidden" name="page" value="email-add"/>
+ <input type="submit" value=" Add " class="Button" />
+ </p>
+ </form>
+ <form action="/settings" method="POST" enctype="multipart/form-data">
+ <p>Your accounts:</p>
+ <p>
+ {% for email in emails %}
+ <label><input type="radio" name="account" value="{{ email }}">{{ email }}</label><br/>
+ {% endfor %}
+ {% if emails is empty %}
+ - </p>
+ {% else %}
+ </p>
+ {% if jids | length > 1 %}
+ <p><input type="hidden" name="page" value="email-del"/><input type="submit" class="Button" value=" Delete "/></p>
+ {% endif %}
+ {% endif %}
+ </form>
+ {% if emails is not empty %}
+ <!--email_off-->
+ <form action="/settings" method="POST" enctype="multipart/form-data">
+ <p>You can receive notifications to email:<br/>
+ Sent to <select name="account">
+ <option value="">Disabled</option>
+ {% for email in emails %}
+ <option value="{{ email }}" {% if email_active == email %} selected="selected" {% endif %}>
+ {{ email }}
+ </option>
+ {% endfor %}
+ </select>
+ <input type="hidden" name="page" value="email-subscr"/>
+ <input type="submit" class="Button" value="OK"/></p>
+ </form>
+ <!--/email_off-->
+ {% endif %}
+ <p>&nbsp;</p>
+ <p>You can post to Juick via e-mail. Send your <span style="text-decoration: underline;">plain text</span>
+ messages to <span><a href="mailto:juick@juick.com">juick@juick.com</a></span>. You can attach one photo or video file.</p>
+ </fieldset>
+ <fieldset>
+ <legend style="background: url(//static.juick.com/settings/facebook.png) no-repeat; padding-left: 58px; line-height: 48px;">
+ Facebook
+ </legend>
+ {% if fbstatus.connected %}
+ {% if fbstatus.crosspostEnabled %}
+ <form action="/settings" method="post">
+ <div>
+ Facebook: <b>Enabled</b> &mdash;
+ <input type="hidden" name="page" value="facebook-disable"/>
+ <input type="submit" class="Button" value=" Disable "/>
+ </div>
+ </form>
+ {% else %}
+ <form action="/settings" method="post">
+ <div>
+ Facebook: <b>Disabled</b> &mdash;
+ <input type="hidden" name="page" value="facebook-enable"/>
+ <input type="submit" class="Button" value=" Enable "/>
+ </div>
+ </form>
+ {% endif %}
+ {% else %}
+ <p>Cross-posting to Facebook: <a href="/_fblogin"><img src="//static.juick.com/facebook-connect.png" alt="Connect to Facebook"/></a></p>
+ {% endif %}
+ </fieldset>
+ <fieldset>
+ <legend style="background: url(//static.juick.com/settings/twitter.png) no-repeat; padding-left: 58px; line-height: 48px;">
+ Twitter</legend>
+ {% if twitter_name is not empty %}
+ <form action="/settings" method="post">
+ <div>Twitter: <b>{{ twitter_name }}</b> &mdash;
+ <input type="hidden" name="page" value="twitter-del"/>
+ <input type="submit" class="Button" value=" Disable "/>
+ </div>
+ </form>
+ {% else %}
+ <p>Cross-posting to Twitter: <a href="/_twitter"><img src="//static.juick.com/twitter-connect.png"
+ alt="Connect to Twitter"/></a></p>
+ {% endif %}
+ </fieldset>
+
+</article>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/settings_tabs" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/settings_password.html b/src/main/resources/templates/views/settings_password.html
new file mode 100644
index 00000000..99c1676e
--- /dev/null
+++ b/src/main/resources/templates/views/settings_password.html
@@ -0,0 +1,17 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ <fieldset>
+ <legend>Changing your password</legend>
+ <form action="/settings" method="post">
+ <input type="hidden" name="page" value="password"/>
+ <p>Change password: <input type="password" name="password" size="8"/> <input class="Button" type="submit"
+ value=" Update "/><br/>
+ <i>(max. length - 16 symbols)</i></p>
+ </form>
+ </fieldset>
+</article>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/settings_tabs" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/settings_privacy.html b/src/main/resources/templates/views/settings_privacy.html
new file mode 100644
index 00000000..83b87b93
--- /dev/null
+++ b/src/main/resources/templates/views/settings_privacy.html
@@ -0,0 +1,9 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ <p>Privacy</p>
+</article>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/settings_tabs" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/settings_result.html b/src/main/resources/templates/views/settings_result.html
new file mode 100644
index 00000000..d87a5ea6
--- /dev/null
+++ b/src/main/resources/templates/views/settings_result.html
@@ -0,0 +1,9 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ <p>{{ result | raw }}</p>
+</article>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/settings_tabs" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/signup.html b/src/main/resources/templates/views/signup.html
new file mode 100644
index 00000000..d6eb921f
--- /dev/null
+++ b/src/main/resources/templates/views/signup.html
@@ -0,0 +1,43 @@
+{% extends "layouts/default" %}
+{% block content %}
+<h1 class="signup-h1">
+ {% if type | slice(0, 1) == 'f' %}
+ <img src="//static.juick.com/settings/facebook.png" alt="Facebook"/>
+ {% elseif type | slice(0, 1) == 'v' %}
+ <img src="//static.juick.com/settings/vk.png" alt="VKontakte"/>
+ {% elseif type | slice(0, 1) == 'e' %}
+ <img src="//static.juick.com/settings/email.png" alt="Email"/>
+ {% elseif type | slice(0, 1) == 'd' %}
+ <img src="//telegram.org/favicon.ico?3" alt="Telegram"/>
+ {% endif %}
+ {{ account | raw }}</h1>
+
+<h2 class="signup-h2">Связать с существующим аккаунтом Juick</h2>
+<form action="/signup" method="post">
+ <input type="hidden" name="action" value="link"/>
+ <input type="hidden" name="type" value="{{ type }}"/>
+ <input type="hidden" name="hash" value="{{ hash }}"/>
+ {% if visitor.getUID() > 0 %}
+ <input type="submit" value="Связать с этим аккаунтом"/>
+ {% else %}
+ <p>Имя пользователя: <input type="text" name="username"/></p>
+ <p>Пароль: <input type="password" name="password"/></p>
+ <p><input type="submit" value=" OK "/></p>
+ {% endif %}
+</form>
+
+{% if type != "xmpp" %}
+<hr class="signup-hr"/>
+
+<h2 class="signup-h2">Создать новый аккаунт Juick</h2>
+<form action="/signup" method="post">
+ <input type="hidden" name="action" value="new"/>
+ <input type="hidden" name="type" value="{{ type }}"/>
+ <input type="hidden" name="hash" value="{{ hash }}"/>
+ <p>Имя пользователя: <input type="text" name="username" id="username"/><br/><i>(От 2-х до 16-и латинских символов
+ и/или цифр, дефис)</i></p>
+ <p>Пароль: <input type="password" name="password"/><br/><i>(от 6-и до 32-х символов)</i></p>
+ <p><input type="submit" value=" OK "/></p>
+</form>
+{% endif %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/signup_result.html b/src/main/resources/templates/views/signup_result.html
new file mode 100644
index 00000000..b204e1b8
--- /dev/null
+++ b/src/main/resources/templates/views/signup_result.html
@@ -0,0 +1,6 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ <p>{{ result | raw }}</p>
+</article>
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/thread.html b/src/main/resources/templates/views/thread.html
new file mode 100644
index 00000000..f1563a7c
--- /dev/null
+++ b/src/main/resources/templates/views/thread.html
@@ -0,0 +1,188 @@
+{% extends "layouts/default" %}
+{% import "views/macros/tags" %}
+{% block content %}
+<ul id="0">
+ <li id="msg-{{ msg.mid }}" class="msg msgthread">
+ <div class="msg-cont">
+ <div class="msg-header">
+ <div class="msg-avatar">
+ <a href="/{{ msg.user.name }}/"><img src="{{ msg.user.avatar }}" alt="{{ msg.user.name }}"/></a>
+ </div>
+ <span>
+ <a href="/{{ msg.user.name }}/"><span>{{ msg.user.name }}</span></a>
+ </span>
+ <div class="msg-ts">
+ {% if msg.FriendsOnly %}
+ <i data-icon="ei-lock" data-size="s"></i> &middot;
+ {% endif %}
+ <a href="/{{ msg.user.name }}/{{ msg.mid }}">
+ <time datetime="{{ msg.created | timestamp | date('yyyy-MM-dd HH:mm:ss') }}Z"
+ title="{{ msg.created | timestamp | date('yyyy-MM-dd HH:mm:ss') }} GMT">
+ {{ msg.created | prettyTime }}
+ </time>
+ </a>
+ {% if msg.updatedAt != msg.created %}
+ &middot; Edited
+ {% endif %}
+ </div>
+ </div>
+ <div class="msg-txt">
+ <span class="msg-tags">
+ {{ tags(msg.user.name, msg.tags | tagsList) }}
+ </span>
+ {{ msg | formatMessage }}
+ </div>
+ {% if msg.AttachmentType is not empty %}
+ <div class="msg-media">
+ <a href="//i.juick.com/p/{{ msg.mid }}.{{ msg.AttachmentType }}" data-fname="{{ msg.mid }}.{{ msg.AttachmentType }}">
+ <img src="//i.juick.com/photos-512/{{ msg.mid }}.{{ msg.AttachmentType }}" alt=""/>
+ </a>
+ </div>
+ {% endif %}
+ <nav class="l">
+ {% if visitor.uid == msg.user.uid %}
+ <a href="/{{ msg.mid }}" class="a-like msg-button">
+ <span class="msg-button-icon">
+ <i data-icon="ei-heart" data-size="s"></i>
+ {% if msg.Likes > 0 %}&nbsp;{{ msg.Likes }}
+ {% else %}
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</span>
+ {% endif %}
+ </span>
+ </a>
+ {% elseif visitor.uid > 0 %}
+ <a href="/post?body=!+%23{{ msg.mid }}" class="a-like msg-button">
+ <span class="msg-button-icon">
+ <i data-icon="ei-heart" data-size="s"></i>
+ {% if msg.Likes > 0 %}&nbsp;{{ msg.Likes }}
+ {% else %}
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</span>
+ {% endif %}
+ </span>
+ </a>
+ {% else %}
+ <a href="/login" class="a-login msg-button">
+ <span class="msg-button-icon">
+ <i data-icon="ei-heart" data-size="s"></i>
+ {% if msg.Likes > 0 %}&nbsp;{{ msg.Likes }}
+ {%else %}
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</span>
+ {% endif %}
+ </span>
+ </a>
+ {% endif %}
+ {% if visitor.uid > 0 %}
+ {% if visitor.uid != msg.user.uid %}
+ {% if visitorSubscribed %}
+ <a href="/post?body=U+%23{{ msg.mid }}" class="msg-button">
+ <i data-icon="ei-check" data-size="s"></i>
+ <span>&nbsp;{{ i18n("messages","message.subscribed") }}</span>
+ </a>
+ {% else %}
+ <a href="/post?body=S+%23{{ msg.mid }}" class="a-sub msg-button">
+ <i data-icon="ei-eye" data-size="s"></i>
+ <span>&nbsp;{{ i18n("messages","message.subscribe") }}</span>
+ </a>
+ {% endif %}
+ {% else %}
+ <a href="/post?body=D+%23{{ msg.mid }}" class="msg-button">
+ <i data-icon="ei-close" data-size="s"></i>
+ <span>&nbsp;{{ i18n("messages","message.delete") }}</span>
+ </a>
+ {% endif %}
+ {% endif %}
+ </nav>
+ {% if msg.VisitorCanComment %}
+ <form class="msg-comment-target">
+ <input type="hidden" name="mid" value="{{ msg.mid }}"/>
+ <div class="msg-comment">
+ <div class="ta-wrapper">
+ <textarea name="body" rows="1" class="reply" placeholder="{{ i18n("messages","message.writeComment") }}"></textarea>
+ </div>
+ </div>
+ </form>
+ {% endif %}
+ {% if recomm is not empty %}
+ <div class="msg-recomms">{{ i18n("messages","message.recommendedBy") }}
+ {% for rec in recomm %}
+ {% if rec.uri.toString() is empty %}
+ <a href="/{{ rec.name }}/">@{{ rec.name }}</a>{% if loop.index < (loop.length - 1) %}, {% endif %}
+ {% else %}
+ <a href="{{ rec.uri }}" data-user-uri="1">@{{ rec.name }}</a>{% if loop.index < (loop.length - 1) %}, {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% if msg.likes > recomm.size() %}
+ &nbsp;{{ i18n("messages","message.recommendedOthers", msg.likes - recomm.size()) }}
+ {% endif %}
+ </div>
+ {% endif %}
+ </div>
+ </li>
+</ul>
+<div class="title2">
+ {% if visitor.uid > 0 %}
+ <img src="/api/thread/mark_read/{{ msg.mid }}-{{ msg.rid }}.gif?hash={{visitor.authHash}}" />
+ {% endif %}
+ <h2>{{ i18n("messages","reply.replies") }} ({{ replies.size() }})</h2>
+</div>
+
+<ul id="replies">
+ {% for msg in replies %}
+ <li id="{{ msg.rid }}" class="msg">
+ <div class="msg-cont">
+ <div class="msg-header" data-uri="{{ msg.user.uri }}">
+ {% if not msg.user.banned %}
+ <a class="a-username" href="/{{ msg.user.name }}/">{{ msg.user.name }}</a>
+ <div class="msg-avatar">
+ <a class="a-username" href="/{{ msg.user.name }}/">
+ <img src="{{ msg.user.avatar }}" alt="{{ msg.user.name }}"/>
+ </a>
+ </div>
+ {% else %}
+ [удалено]:
+ <div class="msg-avatar">
+ <img src="//i.juick.com/av-96.png"/>
+ </div>
+ {% endif %}
+ <div class="msg-ts">
+ <a href="/{{ msg.mid }}#{{ msg.rid }}">
+ <time datetime="{{ msg.created | timestamp | date('yyyy-MM-dd HH:mm:ss') }}Z"
+ title="{{ msg.created | timestamp | date('yyyy-MM-dd HH:mm:ss') }} GMT">
+ {{ msg.created | prettyTime }}
+ </time>
+ </a>
+ {% if msg.updatedAt != msg.created %}
+ &middot; Edited
+ {% endif %}
+ </div>
+ </div>
+ <div class="msg-txt">{{ msg | formatMessage }}</div>
+ {% if msg.AttachmentType is not empty %}
+ <div class="msg-media">
+ <a href="//i.juick.com/p/{{ msg.mid }}-{{ msg.rid }}.{{ msg.AttachmentType }}" data-fname="{{ msg.mid }}-{{ msg.rid }}.{{ msg.AttachmentType }}">
+ <img src="//i.juick.com/photos-512/{{ msg.mid }}-{{ msg.rid }}.{{ msg.AttachmentType }}" alt=""/>
+ </a>
+ </div>
+ {% endif %}
+ <div class="msg-links">/{{ msg.rid }}
+ {% if msg.replyto > 0 %}
+ {{ i18n("messages","reply.inReplyTo") }} <a href="#{{ msg.replyto }}">/{{ msg.replyto }}</a>
+ {% endif %}
+ {% if msg.VisitorCanComment %}
+ &middot; <a href="/post?body=%23{{ msg.mid }}/{{ msg.rid }}%20" class="a-thread-comment">{{ i18n("messages","reply.reply") }}</a>
+ </div>
+ <div class="msg-comment-target msg-comment-hidden"></div>
+ {% elseif visitor.uid == 0 %}
+ &middot; <a href="#" class="a-login">{{ i18n("messages","reply.reply") }}</a>
+ </div>
+ {% else %}
+ </div>
+ {% endif %}
+ </div>
+ </li>
+ {% endfor %}
+</ul>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/usercolumn" %}
+{% endblock %} \ No newline at end of file
diff --git a/src/main/resources/templates/views/users.html b/src/main/resources/templates/views/users.html
new file mode 100644
index 00000000..702ba6b9
--- /dev/null
+++ b/src/main/resources/templates/views/users.html
@@ -0,0 +1,17 @@
+{% extends "layouts/default" %}
+{% 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