biovision-poll 0.0.170908

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +26 -0
  5. data/app/assets/config/biovision_poll_manifest.js +2 -0
  6. data/app/assets/javascripts/biovision/poll/application.js +13 -0
  7. data/app/assets/stylesheets/biovision/poll/polls.scss +0 -0
  8. data/app/controllers/admin/poll_answers_controller.rb +23 -0
  9. data/app/controllers/admin/poll_questions_controller.rb +22 -0
  10. data/app/controllers/admin/polls_controller.rb +27 -0
  11. data/app/controllers/biovision/poll/application_controller.rb +7 -0
  12. data/app/controllers/poll_answers_controller.rb +55 -0
  13. data/app/controllers/poll_questions_controller.rb +55 -0
  14. data/app/controllers/polls_controller.rb +59 -0
  15. data/app/helpers/biovision/poll/application_helper.rb +6 -0
  16. data/app/helpers/polls_helper.rb +37 -0
  17. data/app/jobs/biovision/poll/application_job.rb +6 -0
  18. data/app/mailers/biovision/poll/application_mailer.rb +8 -0
  19. data/app/models/application_record.rb +3 -0
  20. data/app/models/biovision/poll/application_record.rb +7 -0
  21. data/app/models/poll.rb +56 -0
  22. data/app/models/poll_answer.rb +62 -0
  23. data/app/models/poll_question.rb +65 -0
  24. data/app/models/poll_vote.rb +21 -0
  25. data/app/uploaders/poll_image_uploader.rb +46 -0
  26. data/app/views/admin/poll_answers/entity/_in_list.html.erb +20 -0
  27. data/app/views/admin/poll_answers/show.html.erb +58 -0
  28. data/app/views/admin/poll_questions/_toggleable.html.erb +7 -0
  29. data/app/views/admin/poll_questions/entity/_in_list.html.erb +20 -0
  30. data/app/views/admin/poll_questions/show.html.erb +72 -0
  31. data/app/views/admin/poll_votes/entity/_in_list.html.erb +16 -0
  32. data/app/views/admin/polls/_nav_item.html.erb +6 -0
  33. data/app/views/admin/polls/_toggleable.html.erb +7 -0
  34. data/app/views/admin/polls/entity/_in_list.html.erb +20 -0
  35. data/app/views/admin/polls/index.html.erb +16 -0
  36. data/app/views/admin/polls/show.html.erb +61 -0
  37. data/app/views/layouts/biovision/poll/application.html.erb +14 -0
  38. data/app/views/poll_answers/_form.html.erb +42 -0
  39. data/app/views/poll_answers/edit.html.erb +19 -0
  40. data/app/views/poll_answers/new.html.erb +19 -0
  41. data/app/views/poll_questions/_form.html.erb +54 -0
  42. data/app/views/poll_questions/edit.html.erb +18 -0
  43. data/app/views/poll_questions/new.html.erb +18 -0
  44. data/app/views/polls/_form.html.erb +46 -0
  45. data/app/views/polls/edit.html.erb +17 -0
  46. data/app/views/polls/new.html.erb +15 -0
  47. data/config/locales/polls-ru.yml +131 -0
  48. data/config/routes.rb +18 -0
  49. data/db/migrate/20170906000001_create_polls.rb +57 -0
  50. data/db/migrate/20170906000002_create_poll_questions.rb +22 -0
  51. data/db/migrate/20170906000003_create_poll_answers.rb +20 -0
  52. data/db/migrate/20170906000004_create_poll_votes.rb +20 -0
  53. data/lib/biovision/poll.rb +7 -0
  54. data/lib/biovision/poll/engine.rb +14 -0
  55. data/lib/biovision/poll/version.rb +5 -0
  56. data/lib/tasks/biovision/poll_tasks.rake +4 -0
  57. metadata +253 -0
@@ -0,0 +1,6 @@
1
+ <div>
2
+ <%= link_to t('.text'), admin_editable_pages_path %>
3
+ </div>
4
+ <div class="description">
5
+ <%= t('.description') %>
6
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="toggleable" data-url="<%= toggle_admin_poll_path(entity) %>">
2
+ <% Poll.toggleable_attributes.each do |flag| %>
3
+ <span class="<%= entity.attributes[flag.to_s] ? 'active' : 'inactive' %>" data-flag="<%= flag %>">
4
+ <%= t("activerecord.attributes.poll.#{flag}") %>
5
+ </span>
6
+ <% end %>
7
+ </div>
@@ -0,0 +1,20 @@
1
+ <div class="image">
2
+ <%= poll_image_preview(entity) %>
3
+ </div>
4
+ <div class="data">
5
+ <div><%= admin_poll_link(entity) %></div>
6
+ <% unless entity.description.blank? %>
7
+ <div class="info">
8
+ <%= entity.description %>
9
+ </div>
10
+ <% end %>
11
+ <div class="secondary info">
12
+ <%= t(:poll_question_count, count: entity.poll_questions_count) %>
13
+ </div>
14
+
15
+ <%= redner partial: 'admin/polls/toggleable', locals: { entity: entity } %>
16
+
17
+ <ul class="actions">
18
+ <li><%= edit_icon(edit_poll_path(entity)) %></li>
19
+ </ul>
20
+ </div>
@@ -0,0 +1,16 @@
1
+ <% content_for :meta_title, t('.title', page: current_page) %>
2
+ <% content_for :breadcrumbs do %>
3
+ <span><%= t('admin.polls.nav_item.text') %></span>
4
+ <% end %>
5
+
6
+ <article>
7
+ <h1><%= t('.heading') %></h1>
8
+ <ul class="actions">
9
+ <li><%= back_icon(admin_path) %></li>
10
+ <li><%= create_icon(new_poll_path) %></li>
11
+ </ul>
12
+
13
+ <%= paginate @collection %>
14
+ <%= render partial: 'shared/admin/list', locals: { collection: @collection } %>
15
+ <%= paginate @collection %>
16
+ </article>
@@ -0,0 +1,61 @@
1
+ <% content_for :meta_title, t('.title', name: @entity.name) %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= link_to(t('admin.polls.nav_item.text'), admin_polls_path) %>
4
+ <span><%= @entity.name %></span>
5
+ <% end %>
6
+
7
+ <article>
8
+ <h1><%= @entity.name %></h1>
9
+
10
+ <ul class="actions">
11
+ <li><%= back_icon(admin_polls_path) %></li>
12
+ <li><%= edit_icon(edit_poll_path(@entity.id)) %></li>
13
+ </ul>
14
+
15
+ <% unless @entity.image.blank? %>
16
+ <figure>
17
+ <%= poll_image_medium(@entity) %>
18
+ <figcaption><%= t('activerecord.attributes.poll.image') %></figcaption>
19
+ </figure>
20
+ <% end %>
21
+
22
+ <dl>
23
+ <dt><%= t(:created_at) %></dt>
24
+ <dd>
25
+ <%= time_tag(@entity.created_at) %>
26
+ </dd>
27
+
28
+ <dt><%= t(:updated_at) %></dt>
29
+ <dd>
30
+ <%= time_tag(@entity.updated_at) %>
31
+ </dd>
32
+
33
+ <dt><%= t('activerecord.attributes.poll.name') %></dt>
34
+ <dd>
35
+ <%= @entity.name %>
36
+ </dd>
37
+
38
+ <% unless @entity.description.blank? %>
39
+ <dt><%= t('activerecord.attributes.poll.description') %></dt>
40
+ <dd>
41
+ <%= @entity.description %>
42
+ </dd>
43
+ <% end %>
44
+ </dl>
45
+
46
+ <%= redner partial: 'admin/polls/toggleable', locals: { entity: @entity } %>
47
+
48
+ <section>
49
+ <h2><%= t(:poll_question_count, count: @entity.poll_questions_count) %></h2>
50
+
51
+ <%= render partial: 'shared/admin/list_with_priority', locals: { collection: @entity.poll_questions.ordered_by_priority } %>
52
+ </section>
53
+
54
+ <% if @entity.poll_questions.count < 10 %>
55
+ <section>
56
+ <h2><%= t('poll_questions.new.heading') %></h2>
57
+
58
+ <%= render partial: 'poll_questions/form', locals: { entity: @entity.poll_questions.new } %>
59
+ </section>
60
+ <% end %>
61
+ </article>
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Biovision poll</title>
5
+ <%= stylesheet_link_tag "biovision/poll/application", media: "all" %>
6
+ <%= javascript_include_tag "biovision/poll/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,42 @@
1
+ <%= render partial: 'shared/list_of_errors', locals: { entity: entity } %>
2
+
3
+ <%= form_for entity do |f| %>
4
+ <!--
5
+ <figure class="preview" id="poll-answer-image">
6
+ <% if entity.image.blank? %>
7
+ <% image_path = 'biovision/base/placeholders/image.svg' %>
8
+ <% else %>
9
+ <% image_path = entity.image.url %>
10
+ <% end %>
11
+ <%= label_tag(:poll_answer_image, image_tag(image_path, alt: t('activerecord.attributes.poll.image'))) %>
12
+ <figcaption>
13
+ <%= f.label :image %>
14
+ <%= f.file_field :image, accept: 'image/jpeg,image/png', data: { image: 'poll-answer-image' } %>
15
+ <div class="guideline"><%= t('.guidelines.image') %></div>
16
+ </figcaption>
17
+ </figure>
18
+ -->
19
+
20
+ <dl>
21
+ <% unless entity.id.nil? %>
22
+ <dt><%= t('activerecord.attributes.poll_answer.poll_question_id') %></dt>
23
+ <dd><%= admin_poll_question_link(entity.poll_question) %></dd>
24
+ <% end %>
25
+
26
+ <dt><%= f.label :priority %></dt>
27
+ <dd>
28
+ <%= f.number_field :priority, in: PollAnswer::PRIORITY_RANGE, required: true %>
29
+ </dd>
30
+
31
+ <dt><%= f.label :text %></dt>
32
+ <dd>
33
+ <%= f.text_field :text, required: true, size: nil, maxlength: PollAnswer::TEXT_LIMIT, placeholder: t('.placeholders.text') %>
34
+ <div class="guideline"><%= t('.guidelines.text') %></div>
35
+ </dd>
36
+ </dl>
37
+
38
+ <div class="buttons">
39
+ <%= f.hidden :poll_question_id if entity.id.nil? %>
40
+ <%= f.button t(:save), type: :submit %>
41
+ </div>
42
+ <% end %>
@@ -0,0 +1,19 @@
1
+ <% content_for :meta_title, t('.title') %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= link_to(t('admin.polls.nav_item.text'), admin_polls_path) %>
4
+ <%= admin_poll_link(@entity.poll) %>
5
+ <%= admin_poll_question_link(@entity.poll_question) %>
6
+ <%= admin_poll_answer_link(@entity) %>
7
+ <span><%= t(:edit) %></span>
8
+ <% end %>
9
+
10
+ <article class="entity-page">
11
+ <h1><%= t('.heading') %></h1>
12
+
13
+ <ul class="actions">
14
+ <li><%= return_icon(admin_poll_answer_path(@entity.id)) %></li>
15
+ <li class="danger"><%= destroy_icon(@entity) %></li>
16
+ </ul>
17
+
18
+ <%= render partial: 'form', locals: { entity: @entity } %>
19
+ </article>
@@ -0,0 +1,19 @@
1
+ <% content_for :meta_title, t('.title') %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= link_to(t('admin.polls.nav_item.text'), admin_polls_path) %>
4
+ <%= admin_poll_link(@entity.poll) unless @entity.poll.nil? %>
5
+ <%= admin_poll_question_link(@entity.poll_question) unless @entity.poll_question.nil? %>
6
+ <span><%= t('.heading') %></span>
7
+ <% end %>
8
+
9
+ <article>
10
+ <h1><%= t('.title') %></h1>
11
+
12
+ <% unless @entity.poll_id.nil? %>
13
+ <ul class="actions">
14
+ <li><%= return_icon(admin_poll_question_path(@entity.poll_question_id)) %></li>
15
+ </ul>
16
+ <% end %>
17
+
18
+ <%= render partial: 'form', locals: { entity: @entity } %>
19
+ </article>
@@ -0,0 +1,54 @@
1
+ <%= render partial: 'shared/list_of_errors', locals: { entity: entity } %>
2
+
3
+ <%= form_for entity do |f| %>
4
+ <!--
5
+ <figure class="preview" id="poll-question-image">
6
+ <% if entity.image.blank? %>
7
+ <% image_path = 'biovision/base/placeholders/image.svg' %>
8
+ <% else %>
9
+ <% image_path = entity.image.url %>
10
+ <% end %>
11
+ <%= label_tag(:poll_question_image, image_tag(image_path, alt: t('activerecord.attributes.poll.image'))) %>
12
+ <figcaption>
13
+ <%= f.label :image %>
14
+ <%= f.file_field :image, accept: 'image/jpeg,image/png', data: { image: 'poll-question-image' } %>
15
+ <div class="guideline"><%= t('.guidelines.image') %></div>
16
+ </figcaption>
17
+ </figure>
18
+ -->
19
+
20
+ <dl>
21
+ <% unless entity.id.nil? %>
22
+ <dt><%= t('activerecord.attributes.poll_question.poll_id') %></dt>
23
+ <dd><%= admin_poll_link(entity.poll) %></dd>
24
+ <% end %>
25
+
26
+ <dt><%= f.label :priority %></dt>
27
+ <dd>
28
+ <%= f.number_field :priority, in: PollQuestion::PRIORITY_RANGE, required: true %>
29
+ </dd>
30
+
31
+ <dt><%= f.label :text %></dt>
32
+ <dd>
33
+ <%= f.text_field :text, required: true, size: nil, maxlength: PollQuestion::TEXT_LIMIT, placeholder: t('.placeholders.text') %>
34
+ <div class="guideline"><%= t('.guidelines.text') %></div>
35
+ </dd>
36
+
37
+ <dt><%= f.label :comment %></dt>
38
+ <dd>
39
+ <%= f.text_field :comment, size: nil, maxlength: PollQuestion::COMMENT_LIMIT, placeholder: t('.placeholders.comment') %>
40
+ <div class="guideline"><%= t('.guidelines.comment') %></div>
41
+ </dd>
42
+ </dl>
43
+
44
+ <ul class="flags">
45
+ <% PollQuestion.toggleable_attributes.each do |flag| %>
46
+ <li><%= f.check_box flag %><%= f.label flag %></li>
47
+ <% end %>
48
+ </ul>
49
+
50
+ <div class="buttons">
51
+ <%= f.hidden :poll_id if entity.id.nil? %>
52
+ <%= f.button t(:save), type: :submit %>
53
+ </div>
54
+ <% end %>
@@ -0,0 +1,18 @@
1
+ <% content_for :meta_title, t('.title') %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= link_to(t('admin.polls.nav_item.text'), admin_polls_path) %>
4
+ <%= admin_poll_link(@entity.poll) %>
5
+ <%= admin_poll_question_link(@entity) %>
6
+ <span><%= t(:edit) %></span>
7
+ <% end %>
8
+
9
+ <article class="entity-page">
10
+ <h1><%= t('.heading') %></h1>
11
+
12
+ <ul class="actions">
13
+ <li><%= return_icon(admin_poll_question_path(@entity.id)) %></li>
14
+ <li class="danger"><%= destroy_icon(@entity) %></li>
15
+ </ul>
16
+
17
+ <%= render partial: 'form', locals: { entity: @entity } %>
18
+ </article>
@@ -0,0 +1,18 @@
1
+ <% content_for :meta_title, t('.title') %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= link_to(t('admin.polls.nav_item.text'), admin_polls_path) %>
4
+ <%= admin_poll_link(@entity.poll) unless @entity.poll.nil? %>
5
+ <span><%= t('.heading') %></span>
6
+ <% end %>
7
+
8
+ <article>
9
+ <h1><%= t('.title') %></h1>
10
+
11
+ <% unless @entity.poll_id.nil? %>
12
+ <ul class="actions">
13
+ <li><%= return_icon(admin_poll_path(@entity.poll_id)) %></li>
14
+ </ul>
15
+ <% end %>
16
+
17
+ <%= render partial: 'form', locals: { entity: @entity } %>
18
+ </article>
@@ -0,0 +1,46 @@
1
+ <%= render partial: 'shared/list_of_errors', locals: { entity: entity } %>
2
+
3
+ <%= form_for entity do |f| %>
4
+ <figure class="preview" id="poll-image">
5
+ <% if entity.image.blank? %>
6
+ <% image_path = 'biovision/base/placeholders/image.svg' %>
7
+ <% else %>
8
+ <% image_path = entity.image.url %>
9
+ <% end %>
10
+ <%= label_tag(:poll_image, image_tag(image_path, alt: t('activerecord.attributes.poll.image'))) %>
11
+ <figcaption>
12
+ <%= f.label :image %>
13
+ <%= f.file_field :image, accept: 'image/jpeg,image/png', data: { image: 'poll-image' } %>
14
+ <div class="guideline"><%= t('.guidelines.image') %></div>
15
+ </figcaption>
16
+ </figure>
17
+
18
+ <dl>
19
+ <dt><%= f.label :name %></dt>
20
+ <dd>
21
+ <%= f.text_field :name, required: true, size: nil, maxlength: Poll::NAME_LIMIT, placeholder: t('.placeholders.name') %>
22
+ <div class="guideline"><%= t('.guidelines.name') %></div>
23
+ </dd>
24
+
25
+ <dt><%= f.label :description %></dt>
26
+ <dd>
27
+ <%= f.text_field :description, size: nil, maxlength: Poll::DESCRIPTION_LIMIT, placeholder: t('.placeholders.description') %>
28
+ <div class="guideline"><%= t('.guidelines.description') %></div>
29
+ </dd>
30
+
31
+ <dt><%= f.label :end_date %></dt>
32
+ <dd>
33
+ <%= f.date_field :end_date %>
34
+ </dd>
35
+ </dl>
36
+
37
+ <ul class="flags">
38
+ <% Poll.toggleable_attributes.each do |flag| %>
39
+ <li><%= f.check_box flag %><%= f.label flag %></li>
40
+ <% end %>
41
+ </ul>
42
+
43
+ <div class="buttons">
44
+ <%= f.button t(:save), type: :submit %>
45
+ </div>
46
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <% content_for :meta_title, t('.title') %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= link_to(t('admin.polls.nav_item.text'), admin_polls_path) %>
4
+ <%= admin_poll_link(@entity) %>
5
+ <span><%= t(:edit) %></span>
6
+ <% end %>
7
+
8
+ <article class="entity-page">
9
+ <h1><%= t('.heading') %></h1>
10
+
11
+ <ul class="actions">
12
+ <li><%= return_icon(admin_poll_path(@entity.id)) %></li>
13
+ <li class="danger"><%= destroy_icon(@entity) %></li>
14
+ </ul>
15
+
16
+ <%= render partial: 'form', locals: { entity: @entity } %>
17
+ </article>
@@ -0,0 +1,15 @@
1
+ <% content_for :meta_title, t('.title') %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= link_to(t('admin.polls.nav_item.text'), admin_polls_path) %>
4
+ <span><%= t(:create) %></span>
5
+ <% end %>
6
+
7
+ <article>
8
+ <h1><%= t('.title') %></h1>
9
+
10
+ <ul class="actions">
11
+ <li><%= back_icon(admin_polls_path) %></li>
12
+ </ul>
13
+
14
+ <%= render partial: 'form', locals: { entity: @entity } %>
15
+ </article>
@@ -0,0 +1,131 @@
1
+ ru:
2
+ poll_question_count:
3
+ zero: "вопросов нет"
4
+ one: "%{count} вопрос"
5
+ few: "%{count} вопроса"
6
+ many: "%{count} вопросов"
7
+ other: "%{count} вопросов"
8
+ poll_answer_count:
9
+ zero: "ответов нет"
10
+ one: "%{count} ответ"
11
+ few: "%{count} ответа"
12
+ many: "%{count} ответов"
13
+ other: "%{count} ответов"
14
+ poll_vote_count:
15
+ zero: "голосов нет"
16
+ one: "%{count} голос"
17
+ few: "%{count} голоса"
18
+ many: "%{count} голосов"
19
+ other: "%{count} голосов"
20
+ activerecord:
21
+ models:
22
+ poll: "Опрос"
23
+ poll_answer: "Ответ на вопрос"
24
+ poll_question: "Вопрос"
25
+ poll_vote: "Голос в опросе"
26
+ attributes:
27
+ poll:
28
+ active: "Можно голосовать"
29
+ anonymous_votes: "Разрешить анонммные голоса"
30
+ description: "Описание"
31
+ end_date: "Дата окончания"
32
+ image: "Картинка"
33
+ name: "Название"
34
+ open_results: "Результаты видны всем"
35
+ pollable_id: "Связанный объект"
36
+ pollable_type: "Тип связанного объекта"
37
+ region: "Регион"
38
+ region_id: "Регион"
39
+ show_on_homepage: "Показывать на главной"
40
+ user: "Пользователь"
41
+ user_id: "Пользователь"
42
+ visible: "Показывать"
43
+ poll_answer:
44
+ image: "Картинка"
45
+ poll_question: "Вопрос"
46
+ poll_question_id: "Вопрос"
47
+ priority: "Порядок сортировки"
48
+ text: "Текст"
49
+ poll_question:
50
+ comment: "Комментарий"
51
+ image: "Картинка"
52
+ multiple_choice: "Множественный выбор"
53
+ poll: "Опрос"
54
+ poll_id: "Опрос"
55
+ priority: "Порядок сортировки"
56
+ text: "Текст"
57
+ poll_vote:
58
+ footprint: "Отпечаток"
59
+ poll_answer: "Ответ"
60
+ user: "Пользователь"
61
+ admin:
62
+ polls:
63
+ nav_item:
64
+ description: "Управление опросами"
65
+ text: "Опросы"
66
+ index:
67
+ heading: "Опросы"
68
+ title: "Опросы, страница %{page}"
69
+ show:
70
+ title: "Опрос «%{name}»"
71
+ poll_questions:
72
+ show:
73
+ title: "Опрос «%{poll}»: %{question}"
74
+ poll_answers:
75
+ show:
76
+ title: "Опрос «%{poll}»: %{question} — «%{answer}»"
77
+ polls:
78
+ new:
79
+ heading: "Новый опрос"
80
+ title: "Новый опрос"
81
+ edit:
82
+ heading: "Редактирование опроса"
83
+ title: "Редактирование опроса"
84
+ update:
85
+ success: "Опрос успешно изменён"
86
+ destroy:
87
+ success: "Опрос успешно удалён"
88
+ form:
89
+ guidelines:
90
+ description: "Отображается перед вопросами. Максимум 255 символов."
91
+ image: "Картинка в формате JPG или PNG размером около 640×640 для иллюстрации."
92
+ name: "Суть опроса. Максимум 140 символов."
93
+ placeholders:
94
+ description: "Нужно проголосовать за лучший вариант"
95
+ name: "О принятии какого-либо решения"
96
+ poll_questions:
97
+ new:
98
+ heading: "Новый вопрос"
99
+ title: "Новый вопрос"
100
+ edit:
101
+ heading: "Редактирование вопроса"
102
+ title: "Редактирование вопроса"
103
+ update:
104
+ success: "Вопрос успешно изменён"
105
+ destroy:
106
+ success: "Вопрос успешно удалён"
107
+ form:
108
+ guidelines:
109
+ comment: "Максимум 140 символов."
110
+ image: "Картинка в формате JPG или PNG размером около 640×640 для иллюстрации."
111
+ text: "Максимум 140 символов."
112
+ placeholders:
113
+ comment: "Цветовая гамма — часть общего стиля"
114
+ text: "В какой цвет красить забор?"
115
+ poll_answers:
116
+ new:
117
+ heading: "Новый ответ на вопрос"
118
+ title: "Новый ответ на вопрос"
119
+ edit:
120
+ heading: "Редактирование ответа на вопрос"
121
+ title: "Редактирование ответа на вопрос"
122
+ update:
123
+ success: "Ответ на вопрос успешно изменён"
124
+ destroy:
125
+ success: "Ответ на вопрос успешно удалён"
126
+ form:
127
+ guidelines:
128
+ image: "Картинка в формате JPG или PNG размером около 640×640 для иллюстрации."
129
+ text: "Максимум 140 символов."
130
+ placeholders:
131
+ text: "Идеологически правильный вариант"