##// END OF EJS Templates
Changed tag description, made it plural
neko259 -
r1364:6850c2d2 default
parent child Browse files
Show More
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,492 +1,490 b''
1 # SOME DESCRIPTIVE TITLE.
1 # SOME DESCRIPTIVE TITLE.
2 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
2 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 # This file is distributed under the same license as the PACKAGE package.
3 # This file is distributed under the same license as the PACKAGE package.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5 #
5 #
6 msgid ""
6 msgid ""
7 msgstr ""
7 msgstr ""
8 "Project-Id-Version: PACKAGE VERSION\n"
8 "Project-Id-Version: PACKAGE VERSION\n"
9 "Report-Msgid-Bugs-To: \n"
9 "Report-Msgid-Bugs-To: \n"
10 "POT-Creation-Date: 2015-09-12 12:48+0300\n"
10 "POT-Creation-Date: 2015-10-09 23:21+0300\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
14 "Language: ru\n"
14 "Language: ru\n"
15 "MIME-Version: 1.0\n"
15 "MIME-Version: 1.0\n"
16 "Content-Type: text/plain; charset=UTF-8\n"
16 "Content-Type: text/plain; charset=UTF-8\n"
17 "Content-Transfer-Encoding: 8bit\n"
17 "Content-Transfer-Encoding: 8bit\n"
18 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
18 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
19 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
20
20
21 #: admin.py:22
21 #: admin.py:22
22 msgid "{} posters were banned"
22 msgid "{} posters were banned"
23 msgstr ""
23 msgstr ""
24
24
25 #: authors.py:9
25 #: authors.py:9
26 msgid "author"
26 msgid "author"
27 msgstr "автор"
27 msgstr "автор"
28
28
29 #: authors.py:10
29 #: authors.py:10
30 msgid "developer"
30 msgid "developer"
31 msgstr "разработчик"
31 msgstr "разработчик"
32
32
33 #: authors.py:11
33 #: authors.py:11
34 msgid "javascript developer"
34 msgid "javascript developer"
35 msgstr "разработчик javascript"
35 msgstr "разработчик javascript"
36
36
37 #: authors.py:12
37 #: authors.py:12
38 msgid "designer"
38 msgid "designer"
39 msgstr "дизайнер"
39 msgstr "дизайнер"
40
40
41 #: forms.py:30
41 #: forms.py:30
42 msgid "Type message here. Use formatting panel for more advanced usage."
42 msgid "Type message here. Use formatting panel for more advanced usage."
43 msgstr ""
43 msgstr ""
44 "Вводите сообщение сюда. Используйте панель для более сложного форматирования."
44 "Вводите сообщение сюда. Используйте панель для более сложного форматирования."
45
45
46 #: forms.py:31
46 #: forms.py:31
47 msgid "music images i_dont_like_tags"
47 msgid "music images i_dont_like_tags"
48 msgstr "музыка картинки теги_не_нужны"
48 msgstr "музыка картинки теги_не_нужны"
49
49
50 #: forms.py:33
50 #: forms.py:33
51 msgid "Title"
51 msgid "Title"
52 msgstr "Заголовок"
52 msgstr "Заголовок"
53
53
54 #: forms.py:34
54 #: forms.py:34
55 msgid "Text"
55 msgid "Text"
56 msgstr "Текст"
56 msgstr "Текст"
57
57
58 #: forms.py:35
58 #: forms.py:35
59 msgid "Tag"
59 msgid "Tag"
60 msgstr "Метка"
60 msgstr "Метка"
61
61
62 #: forms.py:36 templates/boards/base.html:40 templates/search/search.html:7
62 #: forms.py:36 templates/boards/base.html:40 templates/search/search.html:7
63 msgid "Search"
63 msgid "Search"
64 msgstr "Поиск"
64 msgstr "Поиск"
65
65
66 #: forms.py:139
66 #: forms.py:139
67 msgid "File"
67 msgid "File"
68 msgstr "Файл"
68 msgstr "Файл"
69
69
70 #: forms.py:142
70 #: forms.py:142
71 msgid "File URL"
71 msgid "File URL"
72 msgstr "URL файла"
72 msgstr "URL файла"
73
73
74 #: forms.py:148
74 #: forms.py:148
75 msgid "e-mail"
75 msgid "e-mail"
76 msgstr ""
76 msgstr ""
77
77
78 #: forms.py:151
78 #: forms.py:151
79 msgid "Additional threads"
79 msgid "Additional threads"
80 msgstr "Дополнительные темы"
80 msgstr "Дополнительные темы"
81
81
82 #: forms.py:162
82 #: forms.py:162
83 #, python-format
83 #, python-format
84 msgid "Title must have less than %s characters"
84 msgid "Title must have less than %s characters"
85 msgstr "Заголовок должен иметь меньше %s символов"
85 msgstr "Заголовок должен иметь меньше %s символов"
86
86
87 #: forms.py:172
87 #: forms.py:172
88 #, python-format
88 #, python-format
89 msgid "Text must have less than %s characters"
89 msgid "Text must have less than %s characters"
90 msgstr "Текст должен быть короче %s символов"
90 msgstr "Текст должен быть короче %s символов"
91
91
92 #: forms.py:192
92 #: forms.py:192
93 msgid "Invalid URL"
93 msgid "Invalid URL"
94 msgstr "Неверный URL"
94 msgstr "Неверный URL"
95
95
96 #: forms.py:213
96 #: forms.py:213
97 msgid "Invalid additional thread list"
97 msgid "Invalid additional thread list"
98 msgstr "Неверный список дополнительных тем"
98 msgstr "Неверный список дополнительных тем"
99
99
100 #: forms.py:258
100 #: forms.py:258
101 msgid "Either text or file must be entered."
101 msgid "Either text or file must be entered."
102 msgstr "Текст или файл должны быть введены."
102 msgstr "Текст или файл должны быть введены."
103
103
104 #: forms.py:317 templates/boards/all_threads.html:148
104 #: forms.py:317 templates/boards/all_threads.html:153
105 #: templates/boards/rss/post.html:10 templates/boards/tags.html:6
105 #: templates/boards/rss/post.html:10 templates/boards/tags.html:6
106 msgid "Tags"
106 msgid "Tags"
107 msgstr "Метки"
107 msgstr "Метки"
108
108
109 #: forms.py:324
109 #: forms.py:324
110 msgid "Inappropriate characters in tags."
110 msgid "Inappropriate characters in tags."
111 msgstr "Недопустимые символы в метках."
111 msgstr "Недопустимые символы в метках."
112
112
113 #: forms.py:338
113 #: forms.py:344
114 msgid "Need at least one section."
114 msgid "Need at least one section."
115 msgstr "Нужен хотя бы один раздел."
115 msgstr "Нужен хотя бы один раздел."
116
116
117 #: forms.py:350
117 #: forms.py:356
118 msgid "Theme"
118 msgid "Theme"
119 msgstr "Тема"
119 msgstr "Тема"
120
120
121 #: forms.py:351
121 #: forms.py:357
122 msgid "Image view mode"
122 msgid "Image view mode"
123 msgstr "Режим просмотра изображений"
123 msgstr "Режим просмотра изображений"
124
124
125 #: forms.py:352
125 #: forms.py:358
126 msgid "User name"
126 msgid "User name"
127 msgstr "Имя пользователя"
127 msgstr "Имя пользователя"
128
128
129 #: forms.py:353
129 #: forms.py:359
130 msgid "Time zone"
130 msgid "Time zone"
131 msgstr "Часовой пояс"
131 msgstr "Часовой пояс"
132
132
133 #: forms.py:359
133 #: forms.py:365
134 msgid "Inappropriate characters."
134 msgid "Inappropriate characters."
135 msgstr "Недопустимые символы."
135 msgstr "Недопустимые символы."
136
136
137 #: templates/boards/404.html:6
137 #: templates/boards/404.html:6
138 msgid "Not found"
138 msgid "Not found"
139 msgstr "Не найдено"
139 msgstr "Не найдено"
140
140
141 #: templates/boards/404.html:12
141 #: templates/boards/404.html:12
142 msgid "This page does not exist"
142 msgid "This page does not exist"
143 msgstr "Этой страницы не существует"
143 msgstr "Этой страницы не существует"
144
144
145 #: templates/boards/all_threads.html:35
145 #: templates/boards/all_threads.html:35
146 msgid "Related message"
146 msgid "Related message"
147 msgstr "Связанное сообщение"
147 msgstr "Связанное сообщение"
148
148
149 #: templates/boards/all_threads.html:69
149 #: templates/boards/all_threads.html:69
150 msgid "Edit tag"
150 msgid "Edit tag"
151 msgstr "Изменить метку"
151 msgstr "Изменить метку"
152
152
153 #: templates/boards/all_threads.html:75
153 #: templates/boards/all_threads.html:76
154 #, python-format
154 #, python-format
155 msgid ""
155 msgid "%(count)s active thread"
156 "This tag has %(thread_count)s threads (%(active_thread_count)s active) and "
156 msgid_plural "%(count)s active threads"
157 "%(post_count)s posts."
157 msgstr[0] "%(count)s активная тема"
158 msgstr ""
158 msgstr[1] "%(count)s активные темы"
159 "С этой меткой есть %(thread_count)s тем (%(active_thread_count)s активных) и "
159 msgstr[2] "%(count)s активных тем"
160 "%(post_count)s сообщений."
161
160
162 #: templates/boards/all_threads.html:77
161 #: templates/boards/all_threads.html:77
163 msgid "Related tags:"
162 #, python-format
164 msgstr "Похожие метки:"
163 msgid "%(count)s archived thread"
164 msgid_plural "%(count)s archived thread"
165 msgstr[0] "%(count)s архивная тема"
166 msgstr[1] "%(count)s архивные темы"
167 msgstr[2] "%(count)s архивных тем"
165
168
166 #: templates/boards/all_threads.html:90 templates/boards/feed.html:30
169 #: templates/boards/all_threads.html:78 templates/boards/post.html:102
170 #, python-format
171 #| msgid "%(count)s message"
172 #| msgid_plural "%(count)s messages"
173 msgid "%(count)s message"
174 msgid_plural "%(count)s messages"
175 msgstr[0] "%(count)s сообщение"
176 msgstr[1] "%(count)s сообщения"
177 msgstr[2] "%(count)s сообщений"
178
179 #: templates/boards/all_threads.html:95 templates/boards/feed.html:30
167 #: templates/boards/notifications.html:17 templates/search/search.html:26
180 #: templates/boards/notifications.html:17 templates/search/search.html:26
168 msgid "Previous page"
181 msgid "Previous page"
169 msgstr "Предыдущая страница"
182 msgstr "Предыдущая страница"
170
183
171 #: templates/boards/all_threads.html:104
184 #: templates/boards/all_threads.html:109
172 #, python-format
185 #, python-format
173 #| msgid "Skipped %(count)s replies. Open thread to see all replies."
174 msgid "Skipped %(count)s reply. Open thread to see all replies."
186 msgid "Skipped %(count)s reply. Open thread to see all replies."
175 msgid_plural "Skipped %(count)s replies. Open thread to see all replies."
187 msgid_plural "Skipped %(count)s replies. Open thread to see all replies."
176 msgstr[0] ""
188 msgstr[0] "Пропущен %(count)s ответ. Откройте тред, чтобы увидеть все ответы."
177 "Пропущен %(count)s ответ. Откройте тред, чтобы увидеть все ответы."
178 msgstr[1] ""
189 msgstr[1] ""
179 "Пропущено %(count)s ответа. Откройте тред, чтобы увидеть все ответы."
190 "Пропущено %(count)s ответа. Откройте тред, чтобы увидеть все ответы."
180 msgstr[2] ""
191 msgstr[2] ""
181 "Пропущено %(count)s ответов. Откройте тред, чтобы увидеть все ответы."
192 "Пропущено %(count)s ответов. Откройте тред, чтобы увидеть все ответы."
182
193
183 #: templates/boards/all_threads.html:122 templates/boards/feed.html:40
194 #: templates/boards/all_threads.html:127 templates/boards/feed.html:40
184 #: templates/boards/notifications.html:27 templates/search/search.html:37
195 #: templates/boards/notifications.html:27 templates/search/search.html:37
185 msgid "Next page"
196 msgid "Next page"
186 msgstr "Следующая страница"
197 msgstr "Следующая страница"
187
198
188 #: templates/boards/all_threads.html:127
199 #: templates/boards/all_threads.html:132
189 msgid "No threads exist. Create the first one!"
200 msgid "No threads exist. Create the first one!"
190 msgstr "Нет тем. Создайте первую!"
201 msgstr "Нет тем. Создайте первую!"
191
202
192 #: templates/boards/all_threads.html:133
203 #: templates/boards/all_threads.html:138
193 msgid "Create new thread"
204 msgid "Create new thread"
194 msgstr "Создать новую тему"
205 msgstr "Создать новую тему"
195
206
196 #: templates/boards/all_threads.html:138 templates/boards/preview.html:16
207 #: templates/boards/all_threads.html:143 templates/boards/preview.html:16
197 #: templates/boards/thread_normal.html:51
208 #: templates/boards/thread_normal.html:51
198 msgid "Post"
209 msgid "Post"
199 msgstr "Отправить"
210 msgstr "Отправить"
200
211
201 #: templates/boards/all_threads.html:139 templates/boards/preview.html:6
212 #: templates/boards/all_threads.html:144 templates/boards/preview.html:6
202 #: templates/boards/staticpages/help.html:21
213 #: templates/boards/staticpages/help.html:21
203 #: templates/boards/thread_normal.html:52
214 #: templates/boards/thread_normal.html:52
204 msgid "Preview"
215 msgid "Preview"
205 msgstr "Предпросмотр"
216 msgstr "Предпросмотр"
206
217
207 #: templates/boards/all_threads.html:144
218 #: templates/boards/all_threads.html:149
208 msgid "Tags must be delimited by spaces. Text or image is required."
219 msgid "Tags must be delimited by spaces. Text or image is required."
209 msgstr ""
220 msgstr ""
210 "Метки должны быть разделены пробелами. Текст или изображение обязательны."
221 "Метки должны быть разделены пробелами. Текст или изображение обязательны."
211
222
212 #: templates/boards/all_threads.html:147 templates/boards/thread_normal.html:58
223 #: templates/boards/all_threads.html:152 templates/boards/thread_normal.html:58
213 msgid "Text syntax"
224 msgid "Text syntax"
214 msgstr "Синтаксис текста"
225 msgstr "Синтаксис текста"
215
226
216 #: templates/boards/all_threads.html:161 templates/boards/feed.html:53
227 #: templates/boards/all_threads.html:166 templates/boards/feed.html:53
217 msgid "Pages:"
228 msgid "Pages:"
218 msgstr "Страницы: "
229 msgstr "Страницы: "
219
230
220 #: templates/boards/authors.html:6 templates/boards/authors.html.py:12
231 #: templates/boards/authors.html:6 templates/boards/authors.html.py:12
221 msgid "Authors"
232 msgid "Authors"
222 msgstr "Авторы"
233 msgstr "Авторы"
223
234
224 #: templates/boards/authors.html:26
235 #: templates/boards/authors.html:26
225 msgid "Distributed under the"
236 msgid "Distributed under the"
226 msgstr "Распространяется под"
237 msgstr "Распространяется под"
227
238
228 #: templates/boards/authors.html:28
239 #: templates/boards/authors.html:28
229 msgid "license"
240 msgid "license"
230 msgstr "лицензией"
241 msgstr "лицензией"
231
242
232 #: templates/boards/authors.html:30
243 #: templates/boards/authors.html:30
233 msgid "Repository"
244 msgid "Repository"
234 msgstr "Репозиторий"
245 msgstr "Репозиторий"
235
246
236 #: templates/boards/base.html:14 templates/boards/base.html.py:41
247 #: templates/boards/base.html:14 templates/boards/base.html.py:41
237 msgid "Feed"
248 msgid "Feed"
238 msgstr "Лента"
249 msgstr "Лента"
239
250
240 #: templates/boards/base.html:31
251 #: templates/boards/base.html:31
241 msgid "All threads"
252 msgid "All threads"
242 msgstr "Все темы"
253 msgstr "Все темы"
243
254
244 #: templates/boards/base.html:37
255 #: templates/boards/base.html:37
245 msgid "Add tags"
256 msgid "Add tags"
246 msgstr "Добавить метки"
257 msgstr "Добавить метки"
247
258
248 #: templates/boards/base.html:39
259 #: templates/boards/base.html:39
249 msgid "Tag management"
260 msgid "Tag management"
250 msgstr "Управление метками"
261 msgstr "Управление метками"
251
262
252 #: templates/boards/base.html:39
263 #: templates/boards/base.html:39
253 msgid "tags"
264 msgid "tags"
254 msgstr "метки"
265 msgstr "метки"
255
266
256 #: templates/boards/base.html:40
267 #: templates/boards/base.html:40
257 msgid "search"
268 msgid "search"
258 msgstr "поиск"
269 msgstr "поиск"
259
270
260 #: templates/boards/base.html:41 templates/boards/feed.html:11
271 #: templates/boards/base.html:41 templates/boards/feed.html:11
261 msgid "feed"
272 msgid "feed"
262 msgstr "лента"
273 msgstr "лента"
263
274
264 #: templates/boards/base.html:42 templates/boards/random.html:6
275 #: templates/boards/base.html:42 templates/boards/random.html:6
265 msgid "Random images"
276 msgid "Random images"
266 msgstr "Случайные изображения"
277 msgstr "Случайные изображения"
267
278
268 #: templates/boards/base.html:42
279 #: templates/boards/base.html:42
269 msgid "random"
280 msgid "random"
270 msgstr "случайные"
281 msgstr "случайные"
271
282
272 #: templates/boards/base.html:45 templates/boards/base.html.py:46
283 #: templates/boards/base.html:44
284 msgid "favorites"
285 msgstr "избранное"
286
287 #: templates/boards/base.html:48 templates/boards/base.html.py:49
273 #: templates/boards/notifications.html:8
288 #: templates/boards/notifications.html:8
274 msgid "Notifications"
289 msgid "Notifications"
275 msgstr "Уведомления"
290 msgstr "Уведомления"
276
291
277 #: templates/boards/base.html:53 templates/boards/settings.html:8
292 #: templates/boards/base.html:56 templates/boards/settings.html:8
278 msgid "Settings"
293 msgid "Settings"
279 msgstr "Настройки"
294 msgstr "Настройки"
280
295
281 #: templates/boards/base.html:79
296 #: templates/boards/base.html:59
297 msgid "Loading..."
298 msgstr "Загрузка..."
299
300 #: templates/boards/base.html:71
282 msgid "Admin"
301 msgid "Admin"
283 msgstr "Администрирование"
302 msgstr "Администрирование"
284
303
285 #: templates/boards/base.html:81
304 #: templates/boards/base.html:73
286 #, python-format
305 #, python-format
287 msgid "Speed: %(ppd)s posts per day"
306 msgid "Speed: %(ppd)s posts per day"
288 msgstr "Скорость: %(ppd)s сообщений в день"
307 msgstr "Скорость: %(ppd)s сообщений в день"
289
308
290 #: templates/boards/base.html:83
309 #: templates/boards/base.html:75
291 msgid "Up"
310 msgid "Up"
292 msgstr "Вверх"
311 msgstr "Вверх"
293
312
294 #: templates/boards/feed.html:45
313 #: templates/boards/feed.html:45
295 msgid "No posts exist. Create the first one!"
314 msgid "No posts exist. Create the first one!"
296 msgstr "Нет сообщений. Создайте первое!"
315 msgstr "Нет сообщений. Создайте первое!"
297
316
298 #: templates/boards/post.html:32
317 #: templates/boards/post.html:33
299 msgid "Open"
318 msgid "Open"
300 msgstr "Открыть"
319 msgstr "Открыть"
301
320
302 #: templates/boards/post.html:34 templates/boards/post.html.py:45
321 #: templates/boards/post.html:35 templates/boards/post.html.py:46
303 msgid "Reply"
322 msgid "Reply"
304 msgstr "Ответить"
323 msgstr "Ответить"
305
324
306 #: templates/boards/post.html:40
325 #: templates/boards/post.html:41
307 msgid " in "
326 msgid " in "
308 msgstr " в "
327 msgstr " в "
309
328
310 #: templates/boards/post.html:50
329 #: templates/boards/post.html:51
311 msgid "Edit"
330 msgid "Edit"
312 msgstr "Изменить"
331 msgstr "Изменить"
313
332
314 #: templates/boards/post.html:52
333 #: templates/boards/post.html:53
315 msgid "Edit thread"
334 msgid "Edit thread"
316 msgstr "Изменить тему"
335 msgstr "Изменить тему"
317
336
318 #: templates/boards/post.html:94
337 #: templates/boards/post.html:91
319 msgid "Replies"
338 msgid "Replies"
320 msgstr "Ответы"
339 msgstr "Ответы"
321
340
322 #: templates/boards/post.html:105
341 #: templates/boards/post.html:103
323 #, python-format
324 msgid "%(count)s message"
325 msgid_plural "%(count)s messages"
326 msgstr[0] "%(count)s сообщение"
327 msgstr[1] "%(count)s сообщения"
328 msgstr[2] "%(count)s сообщений"
329
330 #, python-format
331 msgid "Please wait %(delay)d second before sending message"
332 msgid_plural "Please wait %(delay)d seconds before sending message"
333 msgstr[0] "Пожалуйста подождите %(delay)d секунду перед отправкой сообщения"
334 msgstr[1] "Пожалуйста подождите %(delay)d секунды перед отправкой сообщения"
335 msgstr[2] "Пожалуйста подождите %(delay)d секунд перед отправкой сообщения"
336
337 #: templates/boards/post.html:106
338 #, python-format
342 #, python-format
339 msgid "%(count)s image"
343 msgid "%(count)s image"
340 msgid_plural "%(count)s images"
344 msgid_plural "%(count)s images"
341 msgstr[0] "%(count)s изображение"
345 msgstr[0] "%(count)s изображение"
342 msgstr[1] "%(count)s изображения"
346 msgstr[1] "%(count)s изображения"
343 msgstr[2] "%(count)s изображений"
347 msgstr[2] "%(count)s изображений"
344
348
345 #: templates/boards/rss/post.html:5
349 #: templates/boards/rss/post.html:5
346 msgid "Post image"
350 msgid "Post image"
347 msgstr "Изображение сообщения"
351 msgstr "Изображение сообщения"
348
352
349 #: templates/boards/settings.html:15
353 #: templates/boards/settings.html:15
350 msgid "You are moderator."
354 msgid "You are moderator."
351 msgstr "Вы модератор."
355 msgstr "Вы модератор."
352
356
353 #: templates/boards/settings.html:19
357 #: templates/boards/settings.html:19
354 msgid "Hidden tags:"
358 msgid "Hidden tags:"
355 msgstr "Скрытые метки:"
359 msgstr "Скрытые метки:"
356
360
357 #: templates/boards/settings.html:25
361 #: templates/boards/settings.html:25
358 msgid "No hidden tags."
362 msgid "No hidden tags."
359 msgstr "Нет скрытых меток."
363 msgstr "Нет скрытых меток."
360
364
361 #: templates/boards/settings.html:34
365 #: templates/boards/settings.html:34
362 msgid "Save"
366 msgid "Save"
363 msgstr "Сохранить"
367 msgstr "Сохранить"
364
368
365 #: templates/boards/staticpages/banned.html:6
369 #: templates/boards/staticpages/banned.html:6
366 msgid "Banned"
370 msgid "Banned"
367 msgstr "Заблокирован"
371 msgstr "Заблокирован"
368
372
369 #: templates/boards/staticpages/banned.html:11
373 #: templates/boards/staticpages/banned.html:11
370 msgid "Your IP address has been banned. Contact the administrator"
374 msgid "Your IP address has been banned. Contact the administrator"
371 msgstr "Ваш IP адрес был заблокирован. Свяжитесь с администратором"
375 msgstr "Ваш IP адрес был заблокирован. Свяжитесь с администратором"
372
376
373 #: templates/boards/staticpages/help.html:6
377 #: templates/boards/staticpages/help.html:6
374 #: templates/boards/staticpages/help.html:10
378 #: templates/boards/staticpages/help.html:10
375 msgid "Syntax"
379 msgid "Syntax"
376 msgstr "Синтаксис"
380 msgstr "Синтаксис"
377
381
378 #: templates/boards/staticpages/help.html:11
382 #: templates/boards/staticpages/help.html:11
379 msgid "Italic text"
383 msgid "Italic text"
380 msgstr "Курсивный текст"
384 msgstr "Курсивный текст"
381
385
382 #: templates/boards/staticpages/help.html:12
386 #: templates/boards/staticpages/help.html:12
383 msgid "Bold text"
387 msgid "Bold text"
384 msgstr "Полужирный текст"
388 msgstr "Полужирный текст"
385
389
386 #: templates/boards/staticpages/help.html:13
390 #: templates/boards/staticpages/help.html:13
387 msgid "Spoiler"
391 msgid "Spoiler"
388 msgstr "Спойлер"
392 msgstr "Спойлер"
389
393
390 #: templates/boards/staticpages/help.html:14
394 #: templates/boards/staticpages/help.html:14
391 msgid "Link to a post"
395 msgid "Link to a post"
392 msgstr "Ссылка на сообщение"
396 msgstr "Ссылка на сообщение"
393
397
394 #: templates/boards/staticpages/help.html:15
398 #: templates/boards/staticpages/help.html:15
395 msgid "Strikethrough text"
399 msgid "Strikethrough text"
396 msgstr "Зачеркнутый текст"
400 msgstr "Зачеркнутый текст"
397
401
398 #: templates/boards/staticpages/help.html:16
402 #: templates/boards/staticpages/help.html:16
399 msgid "Comment"
403 msgid "Comment"
400 msgstr "Комментарий"
404 msgstr "Комментарий"
401
405
402 #: templates/boards/staticpages/help.html:17
406 #: templates/boards/staticpages/help.html:17
403 #: templates/boards/staticpages/help.html:18
407 #: templates/boards/staticpages/help.html:18
404 msgid "Quote"
408 msgid "Quote"
405 msgstr "Цитата"
409 msgstr "Цитата"
406
410
407 #: templates/boards/staticpages/help.html:21
411 #: templates/boards/staticpages/help.html:21
408 msgid "You can try pasting the text and previewing the result here:"
412 msgid "You can try pasting the text and previewing the result here:"
409 msgstr "Вы можете попробовать вставить текст и проверить результат здесь:"
413 msgstr "Вы можете попробовать вставить текст и проверить результат здесь:"
410
414
411 #: templates/boards/tags.html:17
415 #: templates/boards/tags.html:17
412 msgid "Sections:"
416 msgid "Sections:"
413 msgstr "Разделы:"
417 msgstr "Разделы:"
414
418
415 #: templates/boards/tags.html:30
419 #: templates/boards/tags.html:30
416 msgid "Other tags:"
420 msgid "Other tags:"
417 msgstr "Другие метки:"
421 msgstr "Другие метки:"
418
422
419 #: templates/boards/tags.html:43
423 #: templates/boards/tags.html:43
420 msgid "All tags..."
424 msgid "All tags..."
421 msgstr "Все метки..."
425 msgstr "Все метки..."
422
426
423 #: templates/boards/thread.html:15
427 #: templates/boards/thread.html:14
424 msgid "Normal"
428 msgid "Normal"
425 msgstr "Нормальный"
429 msgstr "Нормальный"
426
430
427 #: templates/boards/thread.html:16
431 #: templates/boards/thread.html:15
428 msgid "Gallery"
432 msgid "Gallery"
429 msgstr "Галерея"
433 msgstr "Галерея"
430
434
431 #: templates/boards/thread.html:17
435 #: templates/boards/thread.html:16
432 msgid "Tree"
436 msgid "Tree"
433 msgstr "Дерево"
437 msgstr "Дерево"
434
438
435 #: templates/boards/thread.html:36
439 #: templates/boards/thread.html:35
436 msgid "message"
440 msgid "message"
437 msgid_plural "messages"
441 msgid_plural "messages"
438 msgstr[0] "сообщение"
442 msgstr[0] "сообщение"
439 msgstr[1] "сообщения"
443 msgstr[1] "сообщения"
440 msgstr[2] "сообщений"
444 msgstr[2] "сообщений"
441
445
442 #: templates/boards/thread.html:39
446 #: templates/boards/thread.html:38
443 msgid "image"
447 msgid "image"
444 msgid_plural "images"
448 msgid_plural "images"
445 msgstr[0] "изображение"
449 msgstr[0] "изображение"
446 msgstr[1] "изображения"
450 msgstr[1] "изображения"
447 msgstr[2] "изображений"
451 msgstr[2] "изображений"
448
452
449 #: templates/boards/thread.html:41
453 #: templates/boards/thread.html:40
450 msgid "Last update: "
454 msgid "Last update: "
451 msgstr "Последнее обновление: "
455 msgstr "Последнее обновление: "
452
456
453 #: templates/boards/thread_gallery.html:36
457 #: templates/boards/thread_gallery.html:36
454 msgid "No images."
458 msgid "No images."
455 msgstr "Нет изображений."
459 msgstr "Нет изображений."
456
460
457 #: templates/boards/thread_normal.html:30
461 #: templates/boards/thread_normal.html:30
458 msgid "posts to bumplimit"
462 msgid "posts to bumplimit"
459 msgstr "сообщений до бамплимита"
463 msgstr "сообщений до бамплимита"
460
464
461 #: templates/boards/thread_normal.html:44
465 #: templates/boards/thread_normal.html:44
462 msgid "Reply to thread"
466 msgid "Reply to thread"
463 msgstr "Ответить в тему"
467 msgstr "Ответить в тему"
464
468
465 #: templates/boards/thread_normal.html:44
469 #: templates/boards/thread_normal.html:44
466 msgid "to message "
470 msgid "to message "
467 msgstr "на сообщение"
471 msgstr "на сообщение"
468
472
469 #: templates/boards/thread_normal.html:59
473 #: templates/boards/thread_normal.html:59
470 msgid "Close form"
474 msgid "Close form"
471 msgstr "Закрыть форму"
475 msgstr "Закрыть форму"
472
476
473 #: templates/search/search.html:17
477 #: templates/search/search.html:17
474 msgid "Ok"
478 msgid "Ok"
475 msgstr "Ок"
479 msgstr "Ок"
476
480
477 #: utils.py:102
481 #: utils.py:120
478 #, python-format
482 #, python-format
479 msgid "File must be less than %s bytes"
483 msgid "File must be less than %s bytes"
480 msgstr "Файл должен быть менее %s байт"
484 msgstr "Файл должен быть менее %s байт"
481
485
482 msgid "favorites"
486 msgid "Please wait %(delay)d second before sending message"
483 msgstr "избранное"
487 msgid_plural "Please wait %(delay)d seconds before sending message"
484
488 msgstr[0] "Пожалуйста подождите %(delay)d секунду перед отправкой сообщения"
485 msgid "Loading..."
489 msgstr[1] "Пожалуйста подождите %(delay)d секунды перед отправкой сообщения"
486 msgstr "Загрузка..."
490 msgstr[2] "Пожалуйста подождите %(delay)d секунд перед отправкой сообщения"
487
488 msgid "Category:"
489 msgstr "Категория:"
490
491 msgid "Subcategories:"
492 msgstr "Подкатегории:"
@@ -1,134 +1,137 b''
1 import hashlib
1 import hashlib
2 from django.template.loader import render_to_string
2 from django.template.loader import render_to_string
3 from django.db import models
3 from django.db import models
4 from django.db.models import Count
4 from django.db.models import Count
5 from django.core.urlresolvers import reverse
5 from django.core.urlresolvers import reverse
6
6
7 from boards.models.base import Viewable
7 from boards.models.base import Viewable
8 from boards.utils import cached_result
8 from boards.utils import cached_result
9 import boards
9 import boards
10
10
11 __author__ = 'neko259'
11 __author__ = 'neko259'
12
12
13
13
14 RELATED_TAGS_COUNT = 5
14 RELATED_TAGS_COUNT = 5
15
15
16
16
17 class TagManager(models.Manager):
17 class TagManager(models.Manager):
18
18
19 def get_not_empty_tags(self):
19 def get_not_empty_tags(self):
20 """
20 """
21 Gets tags that have non-archived threads.
21 Gets tags that have non-archived threads.
22 """
22 """
23
23
24 return self.annotate(num_threads=Count('thread_tags')).filter(num_threads__gt=0)\
24 return self.annotate(num_threads=Count('thread_tags')).filter(num_threads__gt=0)\
25 .order_by('-required', 'name')
25 .order_by('-required', 'name')
26
26
27 def get_tag_url_list(self, tags: list) -> str:
27 def get_tag_url_list(self, tags: list) -> str:
28 """
28 """
29 Gets a comma-separated list of tag links.
29 Gets a comma-separated list of tag links.
30 """
30 """
31
31
32 return ', '.join([tag.get_view() for tag in tags])
32 return ', '.join([tag.get_view() for tag in tags])
33
33
34
34
35 class Tag(models.Model, Viewable):
35 class Tag(models.Model, Viewable):
36 """
36 """
37 A tag is a text node assigned to the thread. The tag serves as a board
37 A tag is a text node assigned to the thread. The tag serves as a board
38 section. There can be multiple tags for each thread
38 section. There can be multiple tags for each thread
39 """
39 """
40
40
41 objects = TagManager()
41 objects = TagManager()
42
42
43 class Meta:
43 class Meta:
44 app_label = 'boards'
44 app_label = 'boards'
45 ordering = ('name',)
45 ordering = ('name',)
46
46
47 name = models.CharField(max_length=100, db_index=True, unique=True)
47 name = models.CharField(max_length=100, db_index=True, unique=True)
48 required = models.BooleanField(default=False, db_index=True)
48 required = models.BooleanField(default=False, db_index=True)
49 description = models.TextField(blank=True)
49 description = models.TextField(blank=True)
50
50
51 parent = models.ForeignKey('Tag', null=True, related_name='children')
51 parent = models.ForeignKey('Tag', null=True, related_name='children')
52
52
53 def __str__(self):
53 def __str__(self):
54 return self.name
54 return self.name
55
55
56 def is_empty(self) -> bool:
56 def is_empty(self) -> bool:
57 """
57 """
58 Checks if the tag has some threads.
58 Checks if the tag has some threads.
59 """
59 """
60
60
61 return self.get_thread_count() == 0
61 return self.get_thread_count() == 0
62
62
63 def get_thread_count(self, archived=None) -> int:
63 def get_thread_count(self, archived=None) -> int:
64 threads = self.get_threads()
64 threads = self.get_threads()
65 if archived is not None:
65 if archived is not None:
66 threads = threads.filter(archived=archived)
66 threads = threads.filter(archived=archived)
67 return threads.count()
67 return threads.count()
68
68
69 def get_active_thread_count(self) -> int:
69 def get_active_thread_count(self) -> int:
70 return self.get_thread_count(archived=False)
70 return self.get_thread_count(archived=False)
71
71
72 def get_archived_thread_count(self) -> int:
73 return self.get_thread_count(archived=True)
74
72 def get_absolute_url(self):
75 def get_absolute_url(self):
73 return reverse('tag', kwargs={'tag_name': self.name})
76 return reverse('tag', kwargs={'tag_name': self.name})
74
77
75 def get_threads(self):
78 def get_threads(self):
76 return self.thread_tags.order_by('-bump_time')
79 return self.thread_tags.order_by('-bump_time')
77
80
78 def is_required(self):
81 def is_required(self):
79 return self.required
82 return self.required
80
83
81 def get_view(self):
84 def get_view(self):
82 link = '<a class="tag" href="{}">{}</a>'.format(
85 link = '<a class="tag" href="{}">{}</a>'.format(
83 self.get_absolute_url(), self.name)
86 self.get_absolute_url(), self.name)
84 if self.is_required():
87 if self.is_required():
85 link = '<b>{}</b>'.format(link)
88 link = '<b>{}</b>'.format(link)
86 return link
89 return link
87
90
88 def get_search_view(self, *args, **kwargs):
91 def get_search_view(self, *args, **kwargs):
89 return render_to_string('boards/tag.html', {
92 return render_to_string('boards/tag.html', {
90 'tag': self,
93 'tag': self,
91 })
94 })
92
95
93 @cached_result()
96 @cached_result()
94 def get_post_count(self):
97 def get_post_count(self):
95 return self.get_threads().aggregate(num_posts=Count('multi_replies'))['num_posts']
98 return self.get_threads().aggregate(num_posts=Count('multi_replies'))['num_posts']
96
99
97 def get_description(self):
100 def get_description(self):
98 return self.description
101 return self.description
99
102
100 def get_random_image_post(self, archived=False):
103 def get_random_image_post(self, archived=False):
101 posts = boards.models.Post.objects.annotate(images_count=Count(
104 posts = boards.models.Post.objects.annotate(images_count=Count(
102 'images')).filter(images_count__gt=0, threads__tags__in=[self])
105 'images')).filter(images_count__gt=0, threads__tags__in=[self])
103 if archived is not None:
106 if archived is not None:
104 posts = posts.filter(thread__archived=archived)
107 posts = posts.filter(thread__archived=archived)
105 return posts.order_by('?').first()
108 return posts.order_by('?').first()
106
109
107 def get_first_letter(self):
110 def get_first_letter(self):
108 return self.name and self.name[0] or ''
111 return self.name and self.name[0] or ''
109
112
110 def get_related_tags(self):
113 def get_related_tags(self):
111 return set(Tag.objects.filter(thread_tags__in=self.get_threads()).exclude(
114 return set(Tag.objects.filter(thread_tags__in=self.get_threads()).exclude(
112 id=self.id).order_by('?')[:RELATED_TAGS_COUNT])
115 id=self.id).order_by('?')[:RELATED_TAGS_COUNT])
113
116
114 @cached_result()
117 @cached_result()
115 def get_color(self):
118 def get_color(self):
116 """
119 """
117 Gets color hashed from the tag name.
120 Gets color hashed from the tag name.
118 """
121 """
119 return hashlib.md5(self.name.encode()).hexdigest()[:6]
122 return hashlib.md5(self.name.encode()).hexdigest()[:6]
120
123
121 def get_parent(self):
124 def get_parent(self):
122 return self.parent
125 return self.parent
123
126
124 def get_all_parents(self):
127 def get_all_parents(self):
125 parents = list()
128 parents = list()
126 parent = self.get_parent()
129 parent = self.get_parent()
127 if parent and parent not in parents:
130 if parent and parent not in parents:
128 parents.insert(0, parent)
131 parents.insert(0, parent)
129 parents = parent.get_all_parents() + parents
132 parents = parent.get_all_parents() + parents
130
133
131 return parents
134 return parents
132
135
133 def get_children(self):
136 def get_children(self):
134 return self.children
137 return self.children
@@ -1,187 +1,191 b''
1 {% extends "boards/base.html" %}
1 {% extends "boards/base.html" %}
2
2
3 {% load i18n %}
3 {% load i18n %}
4 {% load board %}
4 {% load board %}
5 {% load static %}
5 {% load static %}
6 {% load tz %}
6 {% load tz %}
7
7
8 {% block head %}
8 {% block head %}
9 <meta name="robots" content="noindex">
9 <meta name="robots" content="noindex">
10
10
11 {% if tag %}
11 {% if tag %}
12 <title>{{ tag.name }} - {{ site_name }}</title>
12 <title>{{ tag.name }} - {{ site_name }}</title>
13 {% else %}
13 {% else %}
14 <title>{{ site_name }}</title>
14 <title>{{ site_name }}</title>
15 {% endif %}
15 {% endif %}
16
16
17 {% if prev_page_link %}
17 {% if prev_page_link %}
18 <link rel="prev" href="{{ prev_page_link }}" />
18 <link rel="prev" href="{{ prev_page_link }}" />
19 {% endif %}
19 {% endif %}
20 {% if next_page_link %}
20 {% if next_page_link %}
21 <link rel="next" href="{{ next_page_link }}" />
21 <link rel="next" href="{{ next_page_link }}" />
22 {% endif %}
22 {% endif %}
23
23
24 {% endblock %}
24 {% endblock %}
25
25
26 {% block content %}
26 {% block content %}
27
27
28 {% get_current_language as LANGUAGE_CODE %}
28 {% get_current_language as LANGUAGE_CODE %}
29 {% get_current_timezone as TIME_ZONE %}
29 {% get_current_timezone as TIME_ZONE %}
30
30
31 {% for banner in banners %}
31 {% for banner in banners %}
32 <div class="post">
32 <div class="post">
33 <div class="title">{{ banner.title }}</div>
33 <div class="title">{{ banner.title }}</div>
34 <div>{{ banner.text }}</div>
34 <div>{{ banner.text }}</div>
35 <div>{% trans 'Related message' %}: <a href="{{ banner.post.get_absolute_url }}">>>{{ banner.post.id }}</a></div>
35 <div>{% trans 'Related message' %}: <a href="{{ banner.post.get_absolute_url }}">>>{{ banner.post.id }}</a></div>
36 </div>
36 </div>
37 {% endfor %}
37 {% endfor %}
38
38
39 {% if tag %}
39 {% if tag %}
40 <div class="tag_info" style="border-bottom: solid .5ex #{{ tag.get_color }}">
40 <div class="tag_info" style="border-bottom: solid .5ex #{{ tag.get_color }}">
41 {% if random_image_post %}
41 {% if random_image_post %}
42 <div class="tag-image">
42 <div class="tag-image">
43 {% with image=random_image_post.images.first %}
43 {% with image=random_image_post.images.first %}
44 <a href="{{ random_image_post.get_absolute_url }}"><img
44 <a href="{{ random_image_post.get_absolute_url }}"><img
45 src="{{ image.image.url_200x150 }}"
45 src="{{ image.image.url_200x150 }}"
46 width="{{ image.pre_width }}"
46 width="{{ image.pre_width }}"
47 height="{{ image.pre_height }}"/></a>
47 height="{{ image.pre_height }}"/></a>
48 {% endwith %}
48 {% endwith %}
49 </div>
49 </div>
50 {% endif %}
50 {% endif %}
51 <div class="tag-text-data">
51 <div class="tag-text-data">
52 <h2>
52 <h2>
53 <form action="{% url 'tag' tag.name %}" method="post" class="post-button-form">
53 <form action="{% url 'tag' tag.name %}" method="post" class="post-button-form">
54 {% if is_favorite %}
54 {% if is_favorite %}
55 <button name="method" value="unsubscribe" class="fav"></button>
55 <button name="method" value="unsubscribe" class="fav"></button>
56 {% else %}
56 {% else %}
57 <button name="method" value="subscribe" class="not_fav"></button>
57 <button name="method" value="subscribe" class="not_fav"></button>
58 {% endif %}
58 {% endif %}
59 </form>
59 </form>
60 <form action="{% url 'tag' tag.name %}" method="post" class="post-button-form">
60 <form action="{% url 'tag' tag.name %}" method="post" class="post-button-form">
61 {% if is_hidden %}
61 {% if is_hidden %}
62 <button name="method" value="unhide" class="fav">H</button>
62 <button name="method" value="unhide" class="fav">H</button>
63 {% else %}
63 {% else %}
64 <button name="method" value="hide" class="not_fav">H</button>
64 <button name="method" value="hide" class="not_fav">H</button>
65 {% endif %}
65 {% endif %}
66 </form>
66 </form>
67 {{ tag.get_view|safe }}
67 {{ tag.get_view|safe }}
68 {% if moderator %}
68 {% if moderator %}
69 <span class="moderator_info">| <a href="{% url 'admin:boards_tag_change' tag.id %}">{% trans 'Edit tag' %}</a></span>
69 <span class="moderator_info">| <a href="{% url 'admin:boards_tag_change' tag.id %}">{% trans 'Edit tag' %}</a></span>
70 {% endif %}
70 {% endif %}
71 </h2>
71 </h2>
72 {% if tag.get_description %}
72 {% if tag.get_description %}
73 <p>{{ tag.get_description|safe }}</p>
73 <p>{{ tag.get_description|safe }}</p>
74 {% endif %}
74 {% endif %}
75 <p>{% blocktrans with active_thread_count=tag.get_active_thread_count thread_count=tag.get_thread_count post_count=tag.get_post_count %}This tag has {{ thread_count }} threads ({{ active_thread_count}} active) and {{ post_count }} posts.{% endblocktrans %}</p>
75 <p>
76 {% blocktrans count count=tag.get_active_thread_count %}{{ count }} active thread{% plural %}active threads{% endblocktrans %},
77 {% blocktrans count count=tag.get_archived_thread_count %}{{ count }} archived thread{% plural %}archived threads{% endblocktrans %},
78 {% blocktrans count count=tag.get_post_count %}{{ count }} message{% plural %}messages{% endblocktrans %}.
79 </p>
76 {% if tag.get_all_parents %}
80 {% if tag.get_all_parents %}
77 <p>
81 <p>
78 {% for parent in tag.get_all_parents %}
82 {% for parent in tag.get_all_parents %}
79 {{ parent.get_view|safe }} &gt;
83 {{ parent.get_view|safe }} &gt;
80 {% endfor %}
84 {% endfor %}
81 {{ tag.get_view|safe }}
85 {{ tag.get_view|safe }}
82 </p>
86 </p>
83 {% endif %}
87 {% endif %}
84 </div>
88 </div>
85 </div>
89 </div>
86 {% endif %}
90 {% endif %}
87
91
88 {% if threads %}
92 {% if threads %}
89 {% if prev_page_link %}
93 {% if prev_page_link %}
90 <div class="page_link">
94 <div class="page_link">
91 <a href="{{ prev_page_link }}">{% trans "Previous page" %}</a>
95 <a href="{{ prev_page_link }}">{% trans "Previous page" %}</a>
92 </div>
96 </div>
93 {% endif %}
97 {% endif %}
94
98
95 {% for thread in threads %}
99 {% for thread in threads %}
96 <div class="thread">
100 <div class="thread">
97 {% post_view thread.get_opening_post moderator=moderator thread=thread truncated=True need_open_link=True %}
101 {% post_view thread.get_opening_post moderator=moderator thread=thread truncated=True need_open_link=True %}
98 {% if not thread.archived %}
102 {% if not thread.archived %}
99 {% with last_replies=thread.get_last_replies %}
103 {% with last_replies=thread.get_last_replies %}
100 {% if last_replies %}
104 {% if last_replies %}
101 {% with skipped_replies_count=thread.get_skipped_replies_count %}
105 {% with skipped_replies_count=thread.get_skipped_replies_count %}
102 {% if skipped_replies_count %}
106 {% if skipped_replies_count %}
103 <div class="skipped_replies">
107 <div class="skipped_replies">
104 <a href="{% url 'thread' thread.get_opening_post_id %}">
108 <a href="{% url 'thread' thread.get_opening_post_id %}">
105 {% blocktrans count count=skipped_replies_count %}Skipped {{ count }} reply. Open thread to see all replies.{% plural %}Skipped {{ count }} replies. Open thread to see all replies.{% endblocktrans %}
109 {% blocktrans count count=skipped_replies_count %}Skipped {{ count }} reply. Open thread to see all replies.{% plural %}Skipped {{ count }} replies. Open thread to see all replies.{% endblocktrans %}
106 </a>
110 </a>
107 </div>
111 </div>
108 {% endif %}
112 {% endif %}
109 {% endwith %}
113 {% endwith %}
110 <div class="last-replies">
114 <div class="last-replies">
111 {% for post in last_replies %}
115 {% for post in last_replies %}
112 {% post_view post moderator=moderator truncated=True %}
116 {% post_view post moderator=moderator truncated=True %}
113 {% endfor %}
117 {% endfor %}
114 </div>
118 </div>
115 {% endif %}
119 {% endif %}
116 {% endwith %}
120 {% endwith %}
117 {% endif %}
121 {% endif %}
118 </div>
122 </div>
119 {% endfor %}
123 {% endfor %}
120
124
121 {% if next_page_link %}
125 {% if next_page_link %}
122 <div class="page_link">
126 <div class="page_link">
123 <a href="{{ next_page_link }}">{% trans "Next page" %}</a>
127 <a href="{{ next_page_link }}">{% trans "Next page" %}</a>
124 </div>
128 </div>
125 {% endif %}
129 {% endif %}
126 {% else %}
130 {% else %}
127 <div class="post">
131 <div class="post">
128 {% trans 'No threads exist. Create the first one!' %}</div>
132 {% trans 'No threads exist. Create the first one!' %}</div>
129 {% endif %}
133 {% endif %}
130
134
131 <div class="post-form-w">
135 <div class="post-form-w">
132 <script src="{% static 'js/panel.js' %}"></script>
136 <script src="{% static 'js/panel.js' %}"></script>
133 <div class="post-form">
137 <div class="post-form">
134 <div class="form-title">{% trans "Create new thread" %}</div>
138 <div class="form-title">{% trans "Create new thread" %}</div>
135 <div class="swappable-form-full">
139 <div class="swappable-form-full">
136 <form enctype="multipart/form-data" method="post" id="form">{% csrf_token %}
140 <form enctype="multipart/form-data" method="post" id="form">{% csrf_token %}
137 {{ form.as_div }}
141 {{ form.as_div }}
138 <div class="form-submit">
142 <div class="form-submit">
139 <input type="submit" value="{% trans "Post" %}"/>
143 <input type="submit" value="{% trans "Post" %}"/>
140 <button id="preview-button" onclick="return false;">{% trans 'Preview' %}</button>
144 <button id="preview-button" onclick="return false;">{% trans 'Preview' %}</button>
141 </div>
145 </div>
142 </form>
146 </form>
143 </div>
147 </div>
144 <div>
148 <div>
145 {% trans 'Tags must be delimited by spaces. Text or image is required.' %}
149 {% trans 'Tags must be delimited by spaces. Text or image is required.' %}
146 </div>
150 </div>
147 <div id="preview-text"></div>
151 <div id="preview-text"></div>
148 <div><a href="{% url "staticpage" name="help" %}">{% trans 'Text syntax' %}</a></div>
152 <div><a href="{% url "staticpage" name="help" %}">{% trans 'Text syntax' %}</a></div>
149 <div><a href="{% url "tags" "required" %}">{% trans 'Tags' %}</a></div>
153 <div><a href="{% url "tags" "required" %}">{% trans 'Tags' %}</a></div>
150 </div>
154 </div>
151 </div>
155 </div>
152
156
153 <script src="{% static 'js/form.js' %}"></script>
157 <script src="{% static 'js/form.js' %}"></script>
154 <script src="{% static 'js/thread_create.js' %}"></script>
158 <script src="{% static 'js/thread_create.js' %}"></script>
155
159
156 {% endblock %}
160 {% endblock %}
157
161
158 {% block metapanel %}
162 {% block metapanel %}
159
163
160 <span class="metapanel">
164 <span class="metapanel">
161 <b><a href="{% url "authors" %}">{{ site_name }}</a> {{ version }}</b>
165 <b><a href="{% url "authors" %}">{{ site_name }}</a> {{ version }}</b>
162 {% trans "Pages:" %}
166 {% trans "Pages:" %}
163 [
167 [
164 {% with dividers=paginator.get_dividers %}
168 {% with dividers=paginator.get_dividers %}
165 {% for page in paginator.get_divided_range %}
169 {% for page in paginator.get_divided_range %}
166 {% if page in dividers %}
170 {% if page in dividers %}
167 …,
171 …,
168 {% endif %}
172 {% endif %}
169 <a
173 <a
170 {% ifequal page current_page.number %}
174 {% ifequal page current_page.number %}
171 class="current_page"
175 class="current_page"
172 {% endifequal %}
176 {% endifequal %}
173 href="
177 href="
174 {% if tag %}
178 {% if tag %}
175 {% url "tag" tag_name=tag.name %}?page={{ page }}
179 {% url "tag" tag_name=tag.name %}?page={{ page }}
176 {% else %}
180 {% else %}
177 {% url "index" %}?page={{ page }}
181 {% url "index" %}?page={{ page }}
178 {% endif %}
182 {% endif %}
179 ">{{ page }}</a>
183 ">{{ page }}</a>
180 {% if not forloop.last %},{% endif %}
184 {% if not forloop.last %},{% endif %}
181 {% endfor %}
185 {% endfor %}
182 {% endwith %}
186 {% endwith %}
183 ]
187 ]
184 [<a href="rss/">RSS</a>]
188 [<a href="rss/">RSS</a>]
185 </span>
189 </span>
186
190
187 {% endblock %}
191 {% endblock %}
General Comments 0
You need to be logged in to leave comments. Login now