aboutsummaryrefslogtreecommitdiff
path: root/juick-www/src/main/resources
diff options
context:
space:
mode:
Diffstat (limited to 'juick-www/src/main/resources')
-rw-r--r--juick-www/src/main/resources/templates/layouts/content.html50
-rw-r--r--juick-www/src/main/resources/templates/layouts/default.html16
-rw-r--r--juick-www/src/main/resources/templates/layouts/minimal.html10
-rw-r--r--juick-www/src/main/resources/templates/views/404.html11
-rw-r--r--juick-www/src/main/resources/templates/views/blog.html25
-rw-r--r--juick-www/src/main/resources/templates/views/blog_tags.html10
-rw-r--r--juick-www/src/main/resources/templates/views/help.html10
-rw-r--r--juick-www/src/main/resources/templates/views/index.html29
-rw-r--r--juick-www/src/main/resources/templates/views/login.html144
-rw-r--r--juick-www/src/main/resources/templates/views/macros/tags.html5
-rw-r--r--juick-www/src/main/resources/templates/views/macros/tree.html57
-rw-r--r--juick-www/src/main/resources/templates/views/partial/footer.html17
-rw-r--r--juick-www/src/main/resources/templates/views/partial/homecolumn.html23
-rw-r--r--juick-www/src/main/resources/templates/views/partial/message.html70
-rw-r--r--juick-www/src/main/resources/templates/views/partial/navigation.html24
-rw-r--r--juick-www/src/main/resources/templates/views/partial/settings_tabs.html6
-rw-r--r--juick-www/src/main/resources/templates/views/partial/tagcolumn.html33
-rw-r--r--juick-www/src/main/resources/templates/views/partial/tags.html3
-rw-r--r--juick-www/src/main/resources/templates/views/partial/thread_list.html49
-rw-r--r--juick-www/src/main/resources/templates/views/partial/thread_tree.html2
-rw-r--r--juick-www/src/main/resources/templates/views/partial/usercolumn.html89
-rw-r--r--juick-www/src/main/resources/templates/views/partial/usertags.html3
-rw-r--r--juick-www/src/main/resources/templates/views/pm_inbox.html35
-rw-r--r--juick-www/src/main/resources/templates/views/pm_sent.html33
-rw-r--r--juick-www/src/main/resources/templates/views/post.html19
-rw-r--r--juick-www/src/main/resources/templates/views/post_success.html19
-rw-r--r--juick-www/src/main/resources/templates/views/settings_about.html20
-rw-r--r--juick-www/src/main/resources/templates/views/settings_auth-email.html9
-rw-r--r--juick-www/src/main/resources/templates/views/settings_main.html151
-rw-r--r--juick-www/src/main/resources/templates/views/settings_password.html17
-rw-r--r--juick-www/src/main/resources/templates/views/settings_privacy.html9
-rw-r--r--juick-www/src/main/resources/templates/views/settings_result.html9
-rw-r--r--juick-www/src/main/resources/templates/views/signup.html41
-rw-r--r--juick-www/src/main/resources/templates/views/test.html2
-rw-r--r--juick-www/src/main/resources/templates/views/thread.html134
-rw-r--r--juick-www/src/main/resources/templates/views/users.html17
36 files changed, 1201 insertions, 0 deletions
diff --git a/juick-www/src/main/resources/templates/layouts/content.html b/juick-www/src/main/resources/templates/layouts/content.html
new file mode 100644
index 00000000..4c283116
--- /dev/null
+++ b/juick-www/src/main/resources/templates/layouts/content.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#">
+<head id="org" itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
+ <meta charset="utf-8"/>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <script type="text/javascript" src="/{{ beans.webApp.scriptsUrl }}"></script>
+ <link rel="stylesheet" type="text/css" href="/{{ beans.webApp.styleUrl }}"/>
+ {% block headers %}
+ {{ headers | default('') | raw }}
+ {% endblock %}
+ <title itemprop="name">{{ title | default('Juick') }}</title>
+ <meta itemprop="url" content="https://juick.com/" />
+ <meta property="og:type" content="{{ ogtype | default('website') }}" />
+ <meta property="fb:app_id" content="130568668304" />
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
+ <meta name="msapplication-config" content="//i.juick.com/browserconfig.xml"/>
+ <meta name="msapplication-TileColor" content="#ffffff"/>
+ <meta name="msapplication-TileImage" content="//i.juick.com/ms-icon-144x144.png"/>
+ <meta name="theme-color" content="#ffffff"/>
+ <meta name="apple-mobile-web-app-capable" content="yes" />
+ <link rel="apple-touch-icon" sizes="57x57" href="//i.juick.com/apple-icon-57x57.png"/>
+ <link rel="apple-touch-icon" sizes="60x60" href="//i.juick.com/apple-icon-60x60.png"/>
+ <link rel="apple-touch-icon" sizes="72x72" href="//i.juick.com/apple-icon-72x72.png"/>
+ <link rel="apple-touch-icon" sizes="76x76" href="//i.juick.com/apple-icon-76x76.png"/>
+ <link rel="apple-touch-icon" sizes="114x114" href="//i.juick.com/apple-icon-114x114.png"/>
+ <link rel="apple-touch-icon" sizes="120x120" href="//i.juick.com/apple-icon-120x120.png"/>
+ <link rel="apple-touch-icon" sizes="144x144" href="//i.juick.com/apple-icon-144x144.png"/>
+ <link rel="apple-touch-icon" sizes="152x152" href="//i.juick.com/apple-icon-152x152.png"/>
+ <link rel="apple-touch-icon" sizes="180x180" href="//i.juick.com/apple-icon-180x180.png"/>
+ <link itemprop="logo" href="http://juick.com/#juick-logo" itemtype="http://schema.org/ImageObject" />
+ <link rel="icon" type="image/png" sizes="32x32" href="//i.juick.com/favicon-32x32.png"/>
+ <link rel="icon" type="image/png" sizes="96x96" href="//i.juick.com/favicon-96x96.png"/>
+ <link rel="icon" type="image/png" sizes="16x16" href="//i.juick.com/favicon-16x16.png"/>
+ <link rel="manifest" href="//i.juick.com/manifest.json"/>
+ <script type="application/ld+json">
+{
+ "@context": "http://schema.org",
+ "@id": "http://juick.com/#juick-logo",
+ "@type": "ImageObject",
+ "url": "http://juick.com/logo.png",
+ "width": 110,
+ "height": 36
+}
+ </script>
+</head>
+<body id="body" {% if visitor.uid > 0 %}data-hash="{{visitor.authHash}}"{% endif %}>
+{% block body %}
+{% endblock %}
+</body>
+</html>
diff --git a/juick-www/src/main/resources/templates/layouts/default.html b/juick-www/src/main/resources/templates/layouts/default.html
new file mode 100644
index 00000000..343885c4
--- /dev/null
+++ b/juick-www/src/main/resources/templates/layouts/default.html
@@ -0,0 +1,16 @@
+{% extends "layouts/content" %}
+{% block body %}
+{% include "views/partial/navigation" %}
+<div id="wrapper">
+ <section id="content"
+ {% if msg | default('') is not empty %}data-mid="{{ msg.mid }}"{% endif %}>
+ {% block content %}
+ {% endblock %}
+ </section>
+ <aside id="column">
+ {% block column %}
+ {% endblock %}
+ </aside>
+</div>
+{% include "views/partial/footer" %}
+{% endblock %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/layouts/minimal.html b/juick-www/src/main/resources/templates/layouts/minimal.html
new file mode 100644
index 00000000..15924521
--- /dev/null
+++ b/juick-www/src/main/resources/templates/layouts/minimal.html
@@ -0,0 +1,10 @@
+{% extends "layouts/content" %}
+{% block body %}
+<div id="wrapper">
+ <section id="minimal_content">
+ {% block content %}
+ {% endblock %}
+ </section>
+</div>
+{% include "views/partial/footer" %}
+{% endblock %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/404.html b/juick-www/src/main/resources/templates/views/404.html
new file mode 100644
index 00000000..02a790e6
--- /dev/null
+++ b/juick-www/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/juick-www/src/main/resources/templates/views/blog.html b/juick-www/src/main/resources/templates/views/blog.html
new file mode 100644
index 00000000..9cf4714e
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/blog.html
@@ -0,0 +1,25 @@
+{% 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 itemscope="" itemtype="http://schema.org/Blog">
+ <meta itemprop="url" content="{{ pageUrl }}"/>
+{% 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 %}
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/usercolumn" %}
+{% if noindex %}
+<!--/noindex-->
+{% endif %}
+{% endblock %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/blog_tags.html b/juick-www/src/main/resources/templates/views/blog_tags.html
new file mode 100644
index 00000000..48e517eb
--- /dev/null
+++ b/juick-www/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/juick-www/src/main/resources/templates/views/help.html b/juick-www/src/main/resources/templates/views/help.html
new file mode 100644
index 00000000..3a022497
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/help.html
@@ -0,0 +1,10 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ {{ content | raw }}
+</article>
+{% endblock %}
+
+{% block "column" %}
+{{ navigation | raw }}
+{% endblock %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/index.html b/juick-www/src/main/resources/templates/views/index.html
new file mode 100644
index 00000000..97d726de
--- /dev/null
+++ b/juick-www/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 %}
+{% 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 %}
+{% if noindex %}
+<!--/noindex-->
+{% endif %}
+{% endblock %}
diff --git a/juick-www/src/main/resources/templates/views/login.html b/juick-www/src/main/resources/templates/views/login.html
new file mode 100644
index 00000000..a538cb26
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/login.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Juick</title>
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" defer="defer"></script>
+ <style>
+ * { margin: 0; padding: 0; }
+ html { font-family: sans-serif; font-size: 12pt; }
+ html { background: #f8f8f8; }
+ body { margin: 100px auto 0 auto; width: 1000px; }
+ a { color: #069; }
+ ul { float: left; width: 700px; height: 350px; list-style-type: none; background: url(/tagscloud.png) no-repeat; position: relative; box-shadow: 0 0 3px rgba(0,0,0,.16); }
+ ul a { position: absolute; display: block; text-indent: 100%; white-space: nowrap; overflow: hidden; }
+
+ #bottom1 { position: absolute; left: 0px; bottom: 10px; width: 100%; text-align: center; color: #555; }
+ #bottom2 { position: absolute; left: 0px; bottom: -50px; width: 100%; padding-bottom: 20px; text-align: center; font-size: small; color: #777; }
+
+ #signup,#signin { margin-left: 730px; width: 250px; }
+ #signup { padding-top: 25px; }
+ #signup>div { width: 100%; margin: 15px 0; }
+ #signup>div>a { display: block; width: 100%; height: 32px; line-height: 32px; text-indent: 37px; text-decoration: none; overflow: hidden; }
+
+ #facebook a { color: #FFF; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAADNQTFRFO1edX3ewl6bLnKrOoK3QrrrYvMXe2N7r3OLu3+Tv5urz7O/29vf6+Pn7+vv9/Pz9////ykQjsQAAAEZJREFUOMtjYBgFuAATO68ADxdOaUYuATDAqYBbAL8CFgECCjiBcqz4XMiPz3oQEKCtAgEkwEdIAQchBWyEFDAPkDdHsAIAhZkIwz/VK/UAAAAASUVORK5CYII=") no-repeat #3A569C; }
+ #vk a { color: #FFF; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAHJQTFRFbY+zbo+zbpCzb5C0cpO1c5O2dZW3dpa4e5m6gJ29gZ69lq/In7bNo7jPrcDUs8XXvs3dv87dy9fkztnlz9rm0Nrm093o1N7o1+Dq3OTt3ubu4Ofv5Orw7fH27vL28PP38vX49Pb5+vv8+/z9/Pz9////2jSYlQAAAG5JREFUOMvtkEcOgDAMBE3vvXdIyP+/iMMRKfYHmMtcRtE6AD8f1Is8pyKgAs0RGYO2HSWqMQaoBHVRgYsS3AsrtyFlrqgdJlCLb95gxQO6IkZCqL+KCjz0TQU5ejOf2a3aJXPF7BOB2PvMhp8PDzGRFgEe7xvEAAAAAElFTkSuQmCC") no-repeat #6d8fb3; }
+ #xmpp>a { color: #333; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAt9QTFRFBj5rCUFoFz5mDEFuDUNqGUJkGUNgAEprEkVtGkRhHURnHEZjAE+BIElmEEx/HEx0PUdTHE5wMEtfO0laJk5sFlN6Nk1cKFBuIlJ1R0pYRExTGF2KMVh1OFhxDGSQT1deNlx6TVhkIGKPUlphKWOFU1tiOmB+Vl1kmlAuNmaDQGpaIG6ba2Q2SGeBN2uUNW+LF3mGRmyLV3BAL3xWgmVJ2VAa2lEb0VYX11UafWlmam9mam5xy1km3lUea29y2VccvF8obHBz21gd4VcXS3ebPoVG1lwl5FkaU3iYYHaH2F0ejHFIx2Iv4V0aP4o+02As218g4l4bPYtFX351KZFaymU43mIrVYoz5mEfT4w0xGsrSo82eXqDw2s+z2k1OZVAT4SoPZU5RZM4NJVYbYc8VoSiWY43WItbuXBK52gYOI20TpM6YYSYfX98T5Q7foB9aYSZSZc8Ro21cYxH7GwdT46e0HFGeopO2HA8V5ZEf4s8528l1HM7UJs5UI+xXoyrWZhGY4ylyHdMwXhXQZS7XpdNU5tH4XJBYJZZcIuhbpJk0HdPU588kohqOZ2pVZS30XpX6XcxSaFrz4FIUqVWWqVCYZm23YBGxYRrZZ2QXpy/5YFC7IA+6oBRb6ZUcKZn44ZSgKJu54hHmJqXbbBNfKh3cq5nYqrMpJyVdrBjx5WCo56diamAjaWdyZeE8JFV8ZJWnqOlaK/Sd7Zh7pVdgbN6x52N8JdfwqCU8ZhgZLbXb7a5grtTmK+UxKKWtqahq6qhd7bHqauop6yvqqyp755pbbzRrK6rwamgib53qq+xra+sobSg86Jza8PJsLKujMVctrGwqLapv7Crr7Wr8ad1srSxj8R9uLOys7WyubSztLazkcZ/sre6tbe0r7m0tri1t7m2vri3uLq3v7m4ubu4nc9mpNBvos2UptJxtNWXtteFuNmbuNyQud2Rut6SwN+aweCbwuGdw+KeweKkF4OfHQAAAadJREFUOMtjeEoAMAwfBQ9vYJO68RCu4BYDq1bXmr2XHoMlnlzet2qGpTgX8y2EFWwensEdrW2FbUAlJ2zDKsqaYwo6eZHcIGzoor/s5IdPSfefPt3nf3Xn3HZpPU8xJAXWIvU88VOffcm78vTptrijJe4OfAmy1kgKzjMlaIfUPvvQcObp03U120ucTZQaGc8je1NZrd8g8cL7eUufPp0wfX2mvVydripKONzkTG1JXvL6TuXTR/Zb5gR6F+Vw30QNqNUss/pqn3/MvrTD7Wy1V9Y0jtXoIZnLv2nSnrfzF3bP3hDRu1wwHzOo1VWOTXn5yi/q7MTJuxTUscTFQyHNc5vfbU1btOCgjNBDbJH1UF5i9/XP6VVrJRUfYo/Nx3YcpS/euOo4Pn6MqeDx44f3LoY2SYnOXBlUfPPug8cwRQxQ6Qf39sda+HqZaQiwGydFlx+4eQ+qAqrg4b3bPqbmNhkrNm5cbGUUHply7d6Dh8hWPH744Oa186eOHDl06NDh46fP33zwEMUEiCMe3L13GwjuPbj38PHTx9jT5OPHj5G9MFQyDgA8riWAv9eLFAAAAABJRU5ErkJggg==") no-repeat #BBB; }
+ #xmppinfo { background: #FFF; padding: 10px; display: none; }
+
+ #signin { text-align: center; font-size: small; }
+ #signinform { background: #FFF; padding: 10px 15px; margin-top: 15px; display: none; }
+ input.txt { width: 212px; border: 1px solid #CCC; margin: 3px 0; padding: 3px; }
+ input.submit { width: 70px; border: 1px solid #CCC; margin: 3px 0; padding: 3px; }
+ </style>
+ <link rel="icon" href="//i.juick.com/favicon.png"/>
+ </head>
+
+<body>
+
+<ul id="tags">
+ <li><a href="/tag/juick" style="left: 359px; top: 120px; width: 311px; height: 99px">juick</a></li>
+ <li><a href="/tag/linux" style="left: 201px; top: 100px; width: 98px; height: 35px">linux</a></li>
+ <li><a href="/tag/android" style="left: 314px; top: 42px; width: 45px; height: 158px">android</a></li>
+ <li><a href="/tag/работа" style="left: 149px; top: 138px; width: 165px; height: 41px">работа</a></li>
+ <li><a href="/tag/music" style="left: 119px; top: 249px; width: 124px; height: 32px">music</a></li>
+ <li><a href="/tag/windows" style="left: 448px; top: 234px; width: 186px; height: 32px">windows</a></li>
+ <li><a href="/tag/google" style="left: 244px; top: 252px; width: 134px; height: 41px">google</a></li>
+ <li><a href="/tag/кино" style="left: 68px; top: 83px; width: 97px; height: 28px">кино</a></li>
+ <li><a href="/tag/фото" style="left: 400px; top: 266px; width: 101px; height: 29px">фото</a></li>
+ <li><a href="/tag/жизнь" style="left: 554px; top: 266px; width: 125px; height: 27px">жизнь</a></li>
+ <li><a href="/tag/еда" style="left: 46px; top: 196px; width: 71px; height: 32px">еда</a></li>
+ <li><a href="/tag/музыка" style="left: 61px; top: 111px; width: 139px; height: 27px">музыка</a></li>
+ <li><a href="/tag/прекрасное" style="left: 152px; top: 200px; width: 205px; height: 32px">прекрасное</a></li>
+ <li><a href="/tag/книги" style="left: 148px; top: 293px; width: 103px; height: 25px">книги</a></li>
+ <li><a href="/tag/цитата" style="left: 325px; top: 301px; width: 126px; height: 27px">цитата</a></li> <li><a href="/tag/games" style="left: 117px; top: 142px; width: 30px; height: 104px">games</a></li>
+ <li><a href="/tag/ubuntu" style="left: 503px; top: 2px; width: 28px; height: 102px">ubuntu</a></li>
+ <li><a href="/tag/котэ" style="left: 534px; top: 27px; width: 76px; height: 28px">котэ</a></li>
+ <li><a href="/tag/ВНЕЗАПНО" style="left: 501px; top: 293px; width: 146px; height: 23px">ВНЕЗАПНО</a></li>
+ <li><a href="/tag/юмор" style="left: 73px; top: 53px; width: 84px; height: 28px">юмор</a></li>
+ <li><a href="/tag/мысли" style="left: 202px; top: 179px; width: 102px; height: 21px">мысли</a></li>
+ <li><a href="/tag/pic" style="left: 400px; top: 78px; width: 33px; height: 38px">pic</a></li>
+ <li><a href="/tag/политота" style="left: 531px; top: 60px; width: 130px; height: 24px">политота</a></li>
+ <li><a href="/tag/WOT" style="left: 159px; top: 63px; width: 48px; height: 20px">WOT</a></li>
+ <li><a href="/tag/fail" style="left: 8px; top: 170px; width: 34px; height: 27px">fail</a></li>
+ <li><a href="/tag/погода" style="left: 670px; top: 126px; width: 24px; height: 93px">погода</a></li>
+ <li><a href="/tag/apple" style="left: 42px; top: 167px; width: 64px; height: 29px">apple</a></li>
+ <li><a href="/tag/jabber" style="left: 436px; top: 43px; width: 25px; height: 75px">jabber</a></li>
+ <li><a href="/tag/тян" style="left: 532px; top: 94px; width: 47px; height: 21px">тян</a></li>
+ <li><a href="/tag/work" style="left: 359px; top: 55px; width: 58px; height: 23px">work</a></li>
+ <li><a href="/tag/Python" style="left: 240px; top: 63px; width: 74px; height: 23px">Python</a></li>
+ <li><a href="/tag/Видео" style="left: 266px; top: 232px; width: 76px; height: 20px">Видео</a></li>
+ <li><a href="/tag/авто" style="left: 359px; top: 30px; width: 58px; height: 24px">авто</a></li>
+ <li><a href="/tag/Anime" style="left: 360px; top: 328px; width: 66px; height: 21px">Anime</a></li>
+ <li><a href="/tag/игры" style="left: 378px; top: 242px; width: 22px; height: 58px">игры</a></li>
+ <li><a href="/tag/вело" style="left: 176px; top: 9px; width: 18px; height: 54px">вело</a></li>
+ <li><a href="/tag/web" style="left: 661px; top: 219px; width: 22px; height: 47px">web</a></li>
+ <li><a href="/tag/YouTube" style="left: 498px; top: 316px; width: 81px; height: 24px">YouTube</a></li>
+ <li><a href="/tag/Вопрос" style="left: 208px; top: 18px; width: 22px; height: 72px">Вопрос</a></li>
+ <li><a href="/tag/железо" style="left: 159px; top: 318px; width: 75px; height: 16px">железо</a></li>
+ <li><a href="/tag/Microsoft" style="left: 20px; top: 146px; width: 86px; height: 21px">Microsoft</a></li>
+ <li><a href="/tag/video" style="left: 616px; top: 101px; width: 51px; height: 19px">video</a></li>
+ <li><a href="/tag/Россия" style="left: 32px; top: 242px; width: 68px; height: 16px">Россия</a></li>
+ <li><a href="/tag/java" style="left: 409px; top: 226px; width: 39px; height: 22px">java</a></li>
+ <li><a href="/tag/новости" style="left: 39px; top: 67px; width: 21px; height: 79px">новости</a></li>
+ <li><a href="/tag/интернет" style="left: 100px; top: 233px; width: 17px; height: 85px">интернет</a></li>
+ <li><a href="/tag/steam" style="left: 14px; top: 228px; width: 52px; height: 13px">steam</a></li>
+ <li><a href="/tag/слова" style="left: 501px; top: 272px; width: 51px; height: 18px">слова</a></li>
+ <li><a href="/tag/почта" style="left: 477px; top: 27px; width: 17px; height: 56px">почта</a></li>
+ <li><a href="/tag/help" style="left: 123px; top: 281px; width: 21px; height: 35px">help</a></li>
+ <li><a href="/tag/skype" style="left: 110px; top: 320px; width: 49px; height: 20px">skype</a></li>
+ <li><a href="/tag/debian" style="left: 461px; top: 47px; width: 16px; height: 51px">debian</a></li>
+ <li><a href="/tag/win" style="left: 505px; top: 104px; width: 27px; height: 16px">win</a></li>
+ <li><a href="/tag/Религия" style="left: 33px; top: 281px; width: 67px; height: 17px">Религия</a></li>
+ <li><a href="/tag/soft" style="left: 286px; top: 86px; width: 28px; height: 14px">soft</a></li>
+ <li><a href="/tag/Политика" style="left: 144px; top: 281px; width: 75px; height: 12px">Политика</a></li>
+ <li><a href="/tag/сны" style="left: 426px; top: 328px; width: 33px; height: 13px">сны</a></li>
+ <li><a href="/tag/Питер" style="left: 146px; top: 233px; width: 50px; height: 16px">Питер</a></li>
+ <li><a href="/tag/bash" style="left: 451px; top: 311px; width: 38px; height: 16px">bash</a></li>
+ <li><a href="/tag/code" style="left: 279px; top: 310px; width: 39px; height: 16px">code</a></li>
+ <li><a href="/tag/yandex" style="left: 19px; top: 263px; width: 56px; height: 18px">yandex</a></li>
+ <li><a href="/tag/firefox" style="left: 452px; top: 295px; width: 48px; height: 16px">firefox</a></li>
+ <li><a href="/tag/hardware" style="left: 230px; top: 40px; width: 67px; height: 18px">hardware</a></li>
+ <li><a href="/tag/git" style="left: 78px; top: 258px; width: 20px; height: 19px">git</a></li>
+ <li><a href="/tag/dev" style="left: 165px; top: 88px; width: 31px; height: 19px">dev</a></li>
+ <li><a href="/tag/mobile" style="left: 421px; top: 24px; width: 15px; height: 47px">mobile</a></li>
+ <li><a href="/tag/люди" style="left: 151px; top: 184px; width: 43px; height: 15px">люди</a></li>
+ <li><a href="/tag/php" style="left: 149px; top: 24px; width: 27px; height: 18px">php</a></li>
+ <li><a href="/tag/haskell" style="left: 271px; top: 293px; width: 48px; height: 16px">haskell</a></li>
+ <li><a href="/tag/стихи" style="left: 135px; top: 42px; width: 41px; height: 11px">стихи</a></li>
+ <li><a href="/tag/photo" style="left: 639px; top: 219px; width: 20px; height: 39px">photo</a></li>
+ <li><a href="/tag/чай" style="left: 448px; top: 220px; width: 27px; height: 14px">чай</a></li>
+ <li><a href="/tag/Опрос" style="left: 297px; top: 22px; width: 14px; height: 41px">Опрос</a></li>
+ <li><a href="/tag/Chrome" style="left: 311px; top: 25px; width: 48px; height: 17px">Chrome</a></li>
+ <li><a href="/tag/life" style="left: 255px; top: 311px; width: 23px; height: 16px">life</a></li>
+ <li><a href="/tag/opera" style="left: 226px; top: 232px; width: 38px; height: 14px">opera</a></li>
+ <li><a href="/tag/programming" style="left: 234px; top: 327px; width: 81px; height: 14px">programming</a></li>
+ <li><a href="/tag/дети" style="left: 15px; top: 197px; width: 31px; height: 13px">дети</a></li>
+ <li><a href="/tag/сериалы" style="left: 575px; top: 219px; width: 61px; height: 13px">сериалы</a></li>
+ <li><a href="/tag/учеба" style="left: 616px; top: 84px; width: 43px; height: 17px">учеба</a></li>
+ </ul>
+
+<div id="bottom1">juick.com &copy; 2008-2018 &nbsp; <a href="/help/ru/contacts" rel="nofollow">Контакты</a> &middot; <a href="/help/" rel="nofollow">Помощь</a></div>
+
+<div id="signup">
+ {{ i18n("messages","label.register") }}:
+ <div id="facebook"><a href="/_fblogin" rel="nofollow">Facebook</a></div>
+ <div id="vk"><a href="/_vklogin" rel="nofollow">ВКонтакте</a></div>
+ <div id="tg">
+ <script async src="https://telegram.org/js/telegram-widget.js?3"
+ data-telegram-login="Juick_bot" data-size="medium" data-radius="0"
+ data-auth-url="https://juick.com/_tglogin" data-request-access="write"></script>
+ </div>
+ </div>
+<div id="signin">
+ <a href="#" onclick="$('#signinform').toggle(); $('#nickinput').focus(); return false">
+ {{ i18n("messages","question.areRegistered") }}
+ </a>
+ <div id="signinform"><form action="/login" method="POST">
+ <input class="txt" type="text" name="username" placeholder='{{ i18n("messages","label.username") }}' id="nickinput"/>
+ <input class="txt" type="password" name="password" placeholder='{{ i18n("messages","label.password") }}'/>
+ <input class="submit" type="submit" value="OK"/>
+ </form></div>
+ </div>
+
+</body>
+</html>
diff --git a/juick-www/src/main/resources/templates/views/macros/tags.html b/juick-www/src/main/resources/templates/views/macros/tags.html
new file mode 100644
index 00000000..09278ffe
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/macros/tags.html
@@ -0,0 +1,5 @@
+{% macro tags(uname="", tagsList) %}
+{% for tag in tagsList %}
+<a href="/{{ uname }}/?tag={{ tag | urlencode }}">{{ tag | raw }}</a>
+{% endfor %}
+{% endmacro %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/macros/tree.html b/juick-www/src/main/resources/templates/views/macros/tree.html
new file mode 100644
index 00000000..71ffd74b
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/macros/tree.html
@@ -0,0 +1,57 @@
+{% macro tree(replies, visitor, level, margin, hidden) %}
+{% for msg in replies %}
+ {% if msg.replyto == level %}
+ <li id="{{ msg.rid }}" style="margin-left: {{ margin }}px;{% if hidden %}display: none;{% endif %}" class="msg">
+ <div class="msg-cont">
+ <div class="msg-header">
+{% if not msg.user.banned %}
+ <a href="/{{ msg.user.name }}/">{{ msg.user.name }}</a>
+ <div class="msg-avatar"><a href="/{{ msg.user.name }}/">
+ <img src="//i.juick.com/a/{{ msg.user.uid }}.png" 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.timestamp | timestamp | date('yyyy-MM-dd HH:mm:ss') }}Z"
+ title="{{ msg.timestamp | timestamp | date('yyyy-MM-dd HH:mm:ss') }} GMT">
+ {{ msg.timestamp | prettyTime }}
+ </time>
+ </a>
+ </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>
+{% endif %}
+
+{% if level == 0 and msg.childsCount > 1 and replies.size() > 10 %}
+ <div class="msg-comments"><a href="#">{{ msg | formatReplies }}</a></div>
+{% endif %}
+ </li>
+ {% if (level == 0 and msg.childsCount > 1 and replies.size() > 10) %}
+ {{ tree(msg.childs, visitor, msg.rid, margin + 20, true) }}
+ {% elseif (msg.childsCount > 0) %}
+ {{ tree(msg.childs, visitor, msg.rid, margin + 20, hidden) }}
+ {% endif %}
+ {% endif %}
+{% endfor %}
+{% endmacro %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/partial/footer.html b/juick-www/src/main/resources/templates/views/partial/footer.html
new file mode 100644
index 00000000..87744183
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/footer.html
@@ -0,0 +1,17 @@
+<div id="footer">
+ <div id="footer-right"> &middot;
+ <a href="/help/ru/contacts" rel="nofollow">{{ i18n("messages","link.contacts") }}</a> &middot;
+ <a href="/help/" rel="nofollow">{{ i18n("messages","link.help") }}</a> &middot;
+ <a href="/help/ru/adv" rel="nofollow">{{ i18n("messages","link.adv") }}</a>
+ </div>
+ <div id="footer-social">
+ <a href="https://twitter.com/Juick" rel="nofollow"><i data-icon="ei-sc-twitter" data-size="m"></i></a>
+ <a href="https://vk.com/juick" rel="nofollow"><i data-icon="ei-sc-vk" data-size="m"></i></a>
+ <a href="https://www.facebook.com/JuickCom" rel="nofollow"><i data-icon="ei-sc-facebook" data-size="m"></i></a>
+ </div>
+ <div id="footer-left">juick.com &copy; 2008-2018
+ {% if links | default ('') is not empty %}
+ <br/>{{ i18n("messages","label.sponsors") }}: {{ links | raw }}
+ {% endif %}
+ </div>
+</div>
diff --git a/juick-www/src/main/resources/templates/views/partial/homecolumn.html b/juick-www/src/main/resources/templates/views/partial/homecolumn.html
new file mode 100644
index 00000000..6142e9e9
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/homecolumn.html
@@ -0,0 +1,23 @@
+<ul class="toolbar">
+ <li>
+ <a href="/" title="Top">
+ <i data-icon="ei-heart" data-size="s"></i>Top
+ </a>
+ </li>
+ <li>
+ <a href="/?show=all" title="{{ i18n("messages","link.allMessages") }}">
+ <i data-icon="ei-search" data-size="s"></i>{{ i18n("messages","link.allMessages") }}
+ </a>
+ </li>
+ <li>
+ <a href="/?show=photos" title="{{ i18n("messages","link.withPhotos") }}">
+ <i data-icon="ei-camera" data-size="s"></i>{{ i18n("messages","link.withPhotos") }}
+ </a>
+ </li>
+</ul>
+<p class="tags">
+ {% include "views/partial/tags" %}
+ {% if showAdv | default(false) %}
+ <a href="http://ru.wix.com/">конструктор сайтов</a>
+ {% endif %}
+</p> \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/partial/message.html b/juick-www/src/main/resources/templates/views/partial/message.html
new file mode 100644
index 00000000..9e3ede6c
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/message.html
@@ -0,0 +1,70 @@
+<article data-mid="{{ msg.mid }}" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting" itemref="org">
+ <header class="h">
+ <span itemprop="author" itemscope="" itemtype="http://schema.org/Person">
+ <a href="/{{ msg.user.name }}/" itemprop="url" rel="author"><span itemprop="name">{{ msg.user.name }}</span></a>
+ </span>
+ <div class="msg-avatar"><a href="/{{ msg.user.name }}/">
+ <img src="//i.juick.com/a/{{ msg.user.uid }}.png" alt="{{ msg.user.name }}"/></a>
+ </div>
+ <div class="msg-ts">
+ <a href="/{{ msg.user.name }}/{{ msg.mid }}">
+ <time itemprop="datePublished dateModified" itemtype="http://schema.org/Date" datetime="{{ msg.timestamp | timestamp | date('yyyy-MM-dd HH:mm:ss') }}Z"
+ title="{{ msg.timestamp | timestamp | date('yyyy-MM-dd HH:mm:ss') }} GMT">
+ {{ msg.timestamp | prettyTime }}
+ </time>
+ </a>
+ </div>
+ <div class="msg-tags" itemprop="headline">
+ {{ tags(msg.user.name, msg.tags | tagsList) }}
+ </div>
+ </header>
+ <p itemprop="description">{{ msg | formatMessage }}</p>
+ {% 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 itemprop="image" 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 }}{% endif %}
+ </span>
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</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 }}{% endif %}
+ </span>
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</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 }}{% endif %}
+ </span>
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</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;{{ msg.Replies }}{% endif %}
+ </span>
+ <span>&nbsp;{{ i18n("messages","message.comment") }}</span>
+ </a>
+ <a href="#" class="msg-menu msg-button">
+ <i data-icon="ei-link" data-size="s"></i>
+ <span>&nbsp;{{ i18n("messages","message.share") }}</span>
+ </a>
+ {% endif %}
+ {% if msg.FriendsOnly %}
+ <a href="#" class="a-privacy">Открыть доступ</a>
+ {% endif %}
+ </nav>
+</article> \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/partial/navigation.html b/juick-www/src/main/resources/templates/views/partial/navigation.html
new file mode 100644
index 00000000..7afabcc3
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/navigation.html
@@ -0,0 +1,24 @@
+<header>
+ <div id="header_wrapper">
+ <div id="logo"><a href="/{% if visitor.uid > 0 %}?show=my{% endif %}">Juick</a></div>
+ <nav id="global">
+ <ul>
+ {% if visitor.uid > 0 %}
+ <li><a href="/?show=discuss"><i data-icon="ei-comment" data-size="s"></i>{{ i18n("messages","link.discuss") }}</a></li>
+ {% else %}
+ <li><a href="/?show=photos" rel="nofollow"><i data-icon="ei-camera" data-size="s"></i>{{ i18n("messages","link.withPhotos") }}</a></li>
+ {% endif %}
+ <li><a href="/?show=all" rel="nofollow"><i data-icon="ei-search" data-size="s"></i>{{ i18n("messages","link.allMessages") }}</a></li>
+ <li><a id="post" href="/post"><i data-icon="ei-pencil" data-size="s"></i>{{
+ i18n("messages","link.postMessage") }}</a>
+ </li>
+ </ul>
+ </nav>
+ <div id="search">
+ <form action="/">
+ <input name="search" class="text"
+ placeholder="{{ i18n('messages','label.search') }}" value="{{ search | default('') }}"/>
+ </form>
+ </div>
+ </div>
+</header>
diff --git a/juick-www/src/main/resources/templates/views/partial/settings_tabs.html b/juick-www/src/main/resources/templates/views/partial/settings_tabs.html
new file mode 100644
index 00000000..4715253e
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/settings_tabs.html
@@ -0,0 +1,6 @@
+<div id="pagetabs"><ul>
+ <li><a href="/settings">{{ i18n("messages","link.settings.main") }}</a></li>
+ <li><a href="/settings?page=password">{{ i18n("messages","link.settings.password") }}</a></li>
+ <li><a href="/settings?page=about">{{ i18n("messages","link.settings.about") }}</a></li>
+ <li><a href="/logout"><i data-icon="ei-user" data-size="s"></i>{{ i18n("messages","link.logout") }}</a></li>
+</ul></div> \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/partial/tagcolumn.html b/juick-www/src/main/resources/templates/views/partial/tagcolumn.html
new file mode 100644
index 00000000..3e61d3d3
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/tagcolumn.html
@@ -0,0 +1,33 @@
+<div id="ctitle">
+ <h2>*{{ tag.name }}</h2>
+</div>
+{% if visitor is not empty and visitor.uid > 0 %}
+<ul class="toolbar">
+ {% if isSubscribed %}
+ <li>
+ <a href="/post?body=U+%2A{{ tag.name }}" title="Подписан">
+ <i data-icon="ei-check" data-size="s"></i>Subscribed
+ </a>
+ </li>
+ {% else %}
+ <li>
+ <a href="/post?body=S+%2A{{ tag.name }}" title="Подписаться">
+ <i data-icon="ei-plus" data-size="s"></i>Subscribe
+ </a>
+ </li>
+ {% endif %}
+ {% if isInBL %}
+ <li>
+ <a href="/post?body=BL+%2A{{ tag.name }}" title="Разблокировать">
+ <i data-icon="ei-close-o" data-size="s"></i>Unblock
+ </a>
+ </li>
+ {% else %}
+ <li>
+ <a href="/post?body=BL+%2A{{ tag.name }}" title="Заблокировать">
+ <i data-icon="ei-close" data-size="s"></i>Block
+ </a>
+ </li>
+ {% endif %}
+</ul>
+{% endif %}
diff --git a/juick-www/src/main/resources/templates/views/partial/tags.html b/juick-www/src/main/resources/templates/views/partial/tags.html
new file mode 100644
index 00000000..3235213e
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/tags.html
@@ -0,0 +1,3 @@
+{% for tag in tags %}
+ <a href="/tag/{{ tag | urlencode }}" title="{{ tag }}">{{ tag | raw }}</a>
+{% endfor %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/partial/thread_list.html b/juick-www/src/main/resources/templates/views/partial/thread_list.html
new file mode 100644
index 00000000..f273dec7
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/thread_list.html
@@ -0,0 +1,49 @@
+{% for msg in replies %}
+<li id="{{ msg.rid }}" class="msg">
+ <div class="msg-cont">
+ <div class="msg-header">
+ {% if not msg.user.banned %}
+ <a href="/{{ msg.user.name }}/">{{ msg.user.name }}</a>
+ <div class="msg-avatar"><a href="/{{ msg.user.name }}/">
+ <img src="//i.juick.com/a/{{ msg.user.uid }}.png" 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.timestamp | timestamp | date('yyyy-MM-dd HH:mm:ss') }}Z"
+ title="{{ msg.timestamp | timestamp | date('yyyy-MM-dd HH:mm:ss') }} GMT">
+ {{ msg.timestamp | prettyTime }}
+ </time>
+ </a>
+ </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 %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/partial/thread_tree.html b/juick-www/src/main/resources/templates/views/partial/thread_tree.html
new file mode 100644
index 00000000..f207b8e0
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/thread_tree.html
@@ -0,0 +1,2 @@
+{% import "views/macros/tree" %}
+{{ tree(replies, visitor, 0, 0, false) }} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/partial/usercolumn.html b/juick-www/src/main/resources/templates/views/partial/usercolumn.html
new file mode 100644
index 00000000..382c3622
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/partial/usercolumn.html
@@ -0,0 +1,89 @@
+<div id="ctitle">
+ <a href="/{{ user.name }}">
+ <img src="//i.juick.com/a/{{ user.uid }}.png" alt=""/>{{ user.name }}
+ </a>
+</div>
+{% if visitor is not empty and visitor.uid > 0 and visitor.uid != user.uid %}
+<ul class="toolbar">
+ {% if isSubscribed %}
+ <li>
+ <a href="/post?body=U+%40{{ user.name }}" title="Подписан">
+ <i data-icon="ei-check" data-size="s"></i>Subscribed
+ </a>
+ </li>
+ {% else %}
+ <li>
+ <a href="/post?body=S+%40{{ user.name }}" title="Подписаться">
+ <i data-icon="ei-plus" data-size="s"></i>Subscribe
+ </a>
+ </li>
+ {% endif %}
+ {% if isInBL %}
+ <li>
+ <a href="/post?body=BL+%40{{ user.name }}" title="Разблокировать">
+ <i data-icon="ei-close-o" data-size="s"></i>Unblock
+ </a>
+ </li>
+ {% else %}
+ <li>
+ <a href="/post?body=BL+%40{{ user.name }}" title="Заблокировать">
+ <i data-icon="ei-close" data-size="s"></i>Block
+ </a>
+ </li>
+ {% endif %}
+ {% if not isInBLAny %}
+ <li>
+ <a href="/pm/sent?uname={{ user.name }}" title="Написать приватное сообщение">
+ <i data-icon="ei-envelope" data-size="s"></i>PM
+ </a>
+ </li>
+ {% endif %}
+</ul>
+{% else %}
+<hr/>
+{% endif %}
+<ul>
+ {% if visitor is not empty and visitor.uid == user.uid %}
+ <li><a href="/?show=my"><i data-icon="ei-clock" data-size="s"></i>{{ i18n("messages","link.my") }}</a></li>
+ <li><a href="/pm/inbox"><i data-icon="ei-envelope" data-size="s"></i>{{ i18n("messages","link.privateMessages") }}</a></li>
+ <li><a href="/?show=discuss"><i data-icon="ei-comment" data-size="s"></i>{{ i18n("messages","link.discuss") }}</a></li>
+ {% endif %}
+ <li><a href="/{{ user.name }}/?show=recomm" rel="nofollow"><i data-icon="ei-heart" data-size="s"></i>{{ i18n("messages","blog.recommendations") }}</a></li>
+ <li><a href="/{{ user.name }}/?show=photos" rel="nofollow"><i data-icon="ei-camera" data-size="s"></i>{{ i18n("messages","blog.photos") }}</a></li>
+ {% if visitor is not empty and visitor.uid == user.uid and false %}
+ <li><a href="/?show=mycomments" rel="nofollow">{{ i18n("messages","blog.comments") }}</a></li>
+ <li><a href="/?show=unanswered" rel="nofollow">Неотвеченные</a></li>
+ {% endif %}
+ {% if visitor is not empty and visitor.uid == user.uid %}
+ <li><a href="/settings" rel="nofollow"><i data-icon="ei-gear" data-size="s"></i>{{ i18n("messages","link.settings") }}</a></li>
+ {% endif %}
+</ul>
+<hr/>
+<form action="/{{ user.name }}/">
+ <p><input type="text" name="search" class="inp" placeholder="{{ i18n('messages','label.search') }}"/></p>
+</form>
+{% include "views/partial/usertags" %}
+<hr/>
+<div id="ustats">
+ <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>
diff --git a/juick-www/src/main/resources/templates/views/partial/usertags.html b/juick-www/src/main/resources/templates/views/partial/usertags.html
new file mode 100644
index 00000000..71d1303e
--- /dev/null
+++ b/juick-www/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/juick-www/src/main/resources/templates/views/pm_inbox.html b/juick-www/src/main/resources/templates/views/pm_inbox.html
new file mode 100644
index 00000000..d6a9b65f
--- /dev/null
+++ b/juick-www/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="//i.juick.com/a/{{ msg.user.uid }}.png" alt="{{ msg.user.name }}"/>
+ </a>
+ </div>
+ <div class="msg-ts">{{ msg.timestamp | prettyTime }}</div>
+ </div>
+
+ <div class="msg-txt">{{ msg | formatMessage }}</div>
+ <form action="/pm/send" method="POST" enctype="multipart/form-data">
+ <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/juick-www/src/main/resources/templates/views/pm_sent.html b/juick-www/src/main/resources/templates/views/pm_sent.html
new file mode 100644
index 00000000..bc42c4ab
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/pm_sent.html
@@ -0,0 +1,33 @@
+{% extends "layouts/default" %}
+{% block content %}
+<form action="/pm/send" method="POST" enctype="multipart/form-data">
+ <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="//i.juick.com/a/{{ msg.user.uid }}.png" alt="{{ msg.user.name }}"/>
+ </a>
+ </div>
+ <div class="msg-ts">{{ msg.timestamp | 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/juick-www/src/main/resources/templates/views/post.html b/juick-www/src/main/resources/templates/views/post.html
new file mode 100644
index 00000000..1f642ce1
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/post.html
@@ -0,0 +1,19 @@
+{% extends "layouts/minimal" %}
+{% import "views/macros/tags" %}
+{% block content %}
+<article>
+<form action="/post2" method="post" id="postmsg" enctype="multipart/form-data">
+ <p style="text-align: left">
+ <b>Фото:</b> <span id="attachmentfile">
+ <input style="width: 100%;" type="file" name="attach"/> <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" value=" {{ i18n("messages","postForm.submit") }} "/>
+ </p>
+</form>
+</article>
+<p style="text-align: left"><b>Теги:</b></p>
+{{ tags(visitor.name, tags) }}
+{% endblock %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/post_success.html b/juick-www/src/main/resources/templates/views/post_success.html
new file mode 100644
index 00000000..2106f3cb
--- /dev/null
+++ b/juick-www/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/juick-www/src/main/resources/templates/views/settings_about.html b/juick-www/src/main/resources/templates/views/settings_about.html
new file mode 100644
index 00000000..bbf9e772
--- /dev/null
+++ b/juick-www/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/juick-www/src/main/resources/templates/views/settings_auth-email.html b/juick-www/src/main/resources/templates/views/settings_auth-email.html
new file mode 100644
index 00000000..e906d704
--- /dev/null
+++ b/juick-www/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/juick-www/src/main/resources/templates/views/settings_main.html b/juick-www/src/main/resources/templates/views/settings_main.html
new file mode 100644
index 00000000..ef46542d
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/settings_main.html
@@ -0,0 +1,151 @@
+{% extends "layouts/default" %}
+{% block content %}
+<article>
+ <h1>Настройки</h1>
+ <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" value=" OK "/></p>
+ </fieldset>
+ </form>
+ <fieldset>
+ <legend style="background: url(//telegram.org/favicon.ico?3) no-repeat; padding-left: 58px; line-height: 48px;">
+ 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 "/>
+ </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" 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 "/>
+ </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" 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 eopts.email == email %} selected="selected" {% endif %}>
+ {{ email }}
+ </option>
+ {% endfor %}
+ </select>
+ <input type="hidden" name="page" value="email-subscr"/>
+ <input type="submit" 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" 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" 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" 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/juick-www/src/main/resources/templates/views/settings_password.html b/juick-www/src/main/resources/templates/views/settings_password.html
new file mode 100644
index 00000000..aba0b139
--- /dev/null
+++ b/juick-www/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 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/juick-www/src/main/resources/templates/views/settings_privacy.html b/juick-www/src/main/resources/templates/views/settings_privacy.html
new file mode 100644
index 00000000..83b87b93
--- /dev/null
+++ b/juick-www/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/juick-www/src/main/resources/templates/views/settings_result.html b/juick-www/src/main/resources/templates/views/settings_result.html
new file mode 100644
index 00000000..d87a5ea6
--- /dev/null
+++ b/juick-www/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/juick-www/src/main/resources/templates/views/signup.html b/juick-www/src/main/resources/templates/views/signup.html
new file mode 100644
index 00000000..44fd366f
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/signup.html
@@ -0,0 +1,41 @@
+{% 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) == 'x' %}
+ <img src="//static.juick.com/settings/xmpp.png" alt="XMPP"/>
+ {% 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>
+
+<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>
+{% endblock %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/test.html b/juick-www/src/main/resources/templates/views/test.html
new file mode 100644
index 00000000..7700be6f
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/test.html
@@ -0,0 +1,2 @@
+{% import "views/macros/tags" %}
+{{ tags("ugnich", tagsList)}} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/thread.html b/juick-www/src/main/resources/templates/views/thread.html
new file mode 100644
index 00000000..2115f442
--- /dev/null
+++ b/juick-www/src/main/resources/templates/views/thread.html
@@ -0,0 +1,134 @@
+{% extends "layouts/default" %}
+{% import "views/macros/tags" %}
+{% block content %}
+<ul id="0">
+ <li id="msg-{{ msg.mid }}" class="msg msgthread">
+ <div class="msg-cont" itemscope="" itemtype="http://schema.org/BlogPosting" itemref="org">
+ <div class="msg-header">
+ <div class="msg-avatar">
+ <a href="/{{ msg.user.name }}/">
+ <img src="//i.juick.com/a/{{ msg.user.uid }}.png" alt="{{ msg.user.name }}"/></a>
+ </div>
+ <span itemprop="author" itemscope="" itemtype="http://schema.org/Person">
+ <a itemprop="url" rel="author" href="/{{ msg.user.name }}/"><span itemprop="name">{{ msg.user.name }}</span></a>
+ </span>
+ <div class="msg-ts">
+ <a href="/{{ msg.user.name }}/{{ msg.mid }}">
+ <time itemprop="datePublished dateModified" datetime="{{ msg.timestamp | timestamp | date('yyyy-MM-dd HH:mm:ss') }}Z"
+ title="{{ msg.timestamp | timestamp | date('yyyy-MM-dd HH:mm:ss') }} GMT">
+ {{ msg.timestamp | prettyTime }}
+ </time>
+ </a>
+ </div>
+ <div class="msg-tags" itemprop="headline">
+ {{ tags(msg.user.name, msg.tags | tagsList) }}
+ </div>
+ </div>
+ <div class="msg-txt" itemprop="articleBody">{{ 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 itemprop="image" 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 }}{% endif %}
+ </span>
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</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 }}{% endif %}
+ </span>
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</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 }}{% endif %}
+ </span>
+ <span>&nbsp;{{ i18n("messages","message.recommend") }}</span>
+
+ </a>
+ {% endif %}
+ <a href="#" class="msg-menu msg-button">
+ <i data-icon="ei-link" data-size="s"></i>
+ <span>&nbsp;{{ i18n("messages","message.share") }}</span>
+ </a>
+ {% 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="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 %}
+ {% if msg.FriendsOnly %}
+ <a href="#" class="a-privacy">Открыть доступ</a>
+ {% endif %}
+ </nav>
+ {% if msg.VisitorCanComment %}
+ <form action="/comment" method="POST" enctype="multipart/form-data" 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") }} ({{ recomm.size() }}):
+ {% for rec in recomm %}
+ <a href="/{{ rec }}/">@{{ rec }}</a>{% if loop.index < (loop.length - 1) %}, {% endif %}
+ {% endfor %}
+ </div>
+ {% endif %}
+ </div>
+ </li>
+</ul>
+<div class="title2">
+ <div class="title2-right">
+ {% if listview %}
+ <a href="?view=tree" rel="nofollow">{{ i18n("messages","replies.showAsTree") }}</a>
+ {% else %}
+ {% if foldable %}
+ <span id="unfoldall"><a href="#">{{ i18n("messages","replies.unfoldAll") }}</a> &middot; </span>
+ {% endif %}
+ <a href="?view=list" rel="nofollow">{{ i18n("messages","replies.showAsList") }}</a>
+ {% endif %}
+ </div>
+ <h2>{{ i18n("messages","reply.replies") }} ({{ replies.size() }})</h2>
+</div>
+
+<ul id="replies">
+ {% if (listview) %}
+ {% include "views/partial/thread_list" %}
+ {% else %}
+ {% include "views/partial/thread_tree" %}
+ {% endif %}
+</ul>
+{% endblock %}
+{% block "column" %}
+{% include "views/partial/usercolumn" %}
+{% endblock %} \ No newline at end of file
diff --git a/juick-www/src/main/resources/templates/views/users.html b/juick-www/src/main/resources/templates/views/users.html
new file mode 100644
index 00000000..702ba6b9
--- /dev/null
+++ b/juick-www/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