Module: DiscussionsHelper
- Included in:
- BreadcrumbsHelper
- Defined in:
- app/helpers/discussions_helper.rb
Instance Method Summary collapse
- #default_discussions_params ⇒ Object
- #discussion_count_for_status(status, discussions) ⇒ Object
- #discussion_dropdown_filter(label, filters, can_select_all = false, &block) ⇒ Object
- #discussion_filter_item(label, filter, &block) ⇒ Object
- #discussion_filter_link(label, filter, &block) ⇒ Object
- #discussion_filter_list(label, filters, &block) ⇒ Object
- #discussion_filter_params_without_page ⇒ Object
- #discussion_filter_selected?(label, filter) ⇒ Boolean
- #discussion_filter_unselect_item(label, can_select_all) ⇒ Object
- #discussion_info(discussion) ⇒ Object
- #discussion_messages_icon(discussion) ⇒ Object
- #discussion_status_filter(status, discussions_count) ⇒ Object
- #discussion_status_filter_link(status, discussions) ⇒ Object
- #discussion_update_status_button(status) ⇒ Object
- #discussion_upvotes_icon(discussion) ⇒ Object
-
#discussions_languages(discussions) ⇒ Object
TODO: this one uses a long method chain in order to take advantage of eager load Delegate it once again when polymorphic association is removed.
- #discussions_link(item, path, html_options = nil) ⇒ Object
- #discussions_link_with_teaser(item) ⇒ Object
- #discussions_reset_query_link ⇒ Object
- #discussions_statuses ⇒ Object
- #item_discussion_path(discussion, params = {}) ⇒ Object
- #item_discussions_path(item, params = {}) ⇒ Object
- #kids_read_discussions_link(item) ⇒ Object
- #new_discussion_link(teaser_text, link_text) ⇒ Object
- #others_discussions_icon(text) ⇒ Object
- #read_discussions_link(item) ⇒ Object
- #should_show_approved_for?(user, message) ⇒ Boolean
- #solve_discussion_params_for(user) ⇒ Object
- #solve_discussions_link ⇒ Object
- #user_avatar(user, image_class = '') ⇒ Object
- #user_discussions_icon(text) ⇒ Object
- #user_discussions_link ⇒ Object
Instance Method Details
#default_discussions_params ⇒ Object
47 48 49 |
# File 'app/helpers/discussions_helper.rb', line 47 def default_discussions_params {status: :solved, sort: :upvotes_count_desc} end |
#discussion_count_for_status(status, discussions) ⇒ Object
103 104 105 |
# File 'app/helpers/discussions_helper.rb', line 103 def discussion_count_for_status(status, discussions) discussions.scoped_query_by(discussion_filter_params, excluded_params: [:status], excluded_methods: [:page]).by_status(status).count end |
#discussion_dropdown_filter(label, filters, can_select_all = false, &block) ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'app/helpers/discussions_helper.rb', line 139 def discussion_dropdown_filter(label, filters, can_select_all = false, &block) if filters.present? %Q{ <div class="dropdown discussions-toolbar-filter"> <a id="dropdown-#{label}" data-toggle="dropdown" role="menu"> #{t label} #{fa_icon :'caret-down', class: 'fa-xs'} </a> <ul class="dropdown-menu" aria-labelledby="dropdown-#{label}"> #{discussion_filter_unselect_item(label, can_select_all)} #{discussion_filter_list(label, filters, &block)} </ul> </div> }.html_safe end end |
#discussion_filter_item(label, filter, &block) ⇒ Object
159 160 161 |
# File 'app/helpers/discussions_helper.rb', line 159 def discussion_filter_item(label, filter, &block) content_tag(:li, discussion_filter_link(label, filter, &block), class: ('selected' if discussion_filter_selected?(label, filter))) end |
#discussion_filter_link(label, filter, &block) ⇒ Object
175 176 177 |
# File 'app/helpers/discussions_helper.rb', line 175 def discussion_filter_link(label, filter, &block) link_to capture(filter, &block), discussion_filter_params_without_page.merge(Hash[label, filter]) end |
#discussion_filter_list(label, filters, &block) ⇒ Object
155 156 157 |
# File 'app/helpers/discussions_helper.rb', line 155 def discussion_filter_list(label, filters, &block) filters.map { |it| discussion_filter_item(label, it, &block) }.join("\n") end |
#discussion_filter_params_without_page ⇒ Object
183 184 185 |
# File 'app/helpers/discussions_helper.rb', line 183 def discussion_filter_params_without_page discussion_filter_params.except(:page) end |
#discussion_filter_selected?(label, filter) ⇒ Boolean
171 172 173 |
# File 'app/helpers/discussions_helper.rb', line 171 def discussion_filter_selected?(label, filter) filter.to_s == discussion_filter_params[label] end |
#discussion_filter_unselect_item(label, can_select_all) ⇒ Object
163 164 165 166 167 168 169 |
# File 'app/helpers/discussions_helper.rb', line 163 def discussion_filter_unselect_item(label, can_select_all) if can_select_all content_tag(:li, link_to(t(:all), discussion_filter_params_without_page.except(label)), class: ('selected' unless discussion_filter_params.include?(label))) end end |
#discussion_info(discussion) ⇒ Object
179 180 181 |
# File 'app/helpers/discussions_helper.rb', line 179 def discussion_info(discussion) "#{t(:time_since, time: time_ago_in_words(discussion.created_at))} ยท #{t(:message_count, count: discussion..size)}" end |
#discussion_messages_icon(discussion) ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'app/helpers/discussions_helper.rb', line 67 def (discussion) %Q{ <span class="discussion-icon fa-stack fa-xs"> <i class="fa fa-comment-o fa-stack-2x"></i> <i class="fa fa-stack-1x">#{discussion.}</i> </span> }.html_safe end |
#discussion_status_filter(status, discussions_count) ⇒ Object
130 131 132 133 134 135 136 137 |
# File 'app/helpers/discussions_helper.rb', line 130 def discussion_status_filter(status, discussions_count) %Q{ #{discussion_status_fa_icon(status)} <span> #{t("#{status}_count", count: discussions_count)} </span> }.html_safe end |
#discussion_status_filter_link(status, discussions) ⇒ Object
121 122 123 124 125 126 127 128 |
# File 'app/helpers/discussions_helper.rb', line 121 def discussion_status_filter_link(status, discussions) discussions_count = discussion_count_for_status(status, discussions) if status.should_be_shown?(discussions_count, current_user) discussion_filter_item(:status, status) do discussion_status_filter(status, discussions_count) end end end |
#discussion_update_status_button(status) ⇒ Object
87 88 89 90 91 92 |
# File 'app/helpers/discussions_helper.rb', line 87 def (status) t("to_#{status}"), item_discussion_path(@discussion, {status: status}), class: "btn btn-discussion-#{status}", method: :put end |
#discussion_upvotes_icon(discussion) ⇒ Object
76 77 78 79 80 81 82 83 84 85 |
# File 'app/helpers/discussions_helper.rb', line 76 def discussion_upvotes_icon(discussion) if discussion.upvotes_count > 0 %Q{ <span class="discussion-icon fa-stack fa-xs"> <i class="fa fa-star-o fa-stack-2x"></i> <i class="fa fa-stack-1x">#{discussion.upvotes_count}</i> </span> }.html_safe end end |
#discussions_languages(discussions) ⇒ Object
TODO: this one uses a long method chain in order to take advantage of eager load Delegate it once again when polymorphic association is removed
117 118 119 |
# File 'app/helpers/discussions_helper.rb', line 117 def discussions_languages(discussions) @languages ||= discussions.map { |it| it.exercise.language.name }.uniq end |
#discussions_link(item, path, html_options = nil) ⇒ Object
26 27 28 29 |
# File 'app/helpers/discussions_helper.rb', line 26 def discussions_link(item, path, = nil) return unless current_user&.can_discuss_here? link_to item, path, end |
#discussions_link_with_teaser(item) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 |
# File 'app/helpers/discussions_helper.rb', line 55 def (item) %Q{ <div> <h3>#{t(:discussions)}</h3> <p> #{t(:solve_your_doubts_teaser)} #{read_discussions_link(item)} </p> </div> }.html_safe end |
#discussions_reset_query_link ⇒ Object
107 108 109 |
# File 'app/helpers/discussions_helper.rb', line 107 def discussions_reset_query_link link_to fa_icon(:times, text: t(:reset_query)), {}, class: 'discussions-reset-query' unless discussion_filter_params.blank? end |
#discussions_statuses ⇒ Object
111 112 113 |
# File 'app/helpers/discussions_helper.rb', line 111 def discussions_statuses Mumuki::Domain::Status::Discussion::STATUSES end |
#item_discussion_path(discussion, params = {}) ⇒ Object
31 32 33 |
# File 'app/helpers/discussions_helper.rb', line 31 def item_discussion_path(discussion, params = {}) polymorphic_path([discussion.item, discussion], params) end |
#item_discussions_path(item, params = {}) ⇒ Object
35 36 37 |
# File 'app/helpers/discussions_helper.rb', line 35 def item_discussions_path(item, params = {}) polymorphic_path([item, :discussions], params) end |
#kids_read_discussions_link(item) ⇒ Object
6 7 8 |
# File 'app/helpers/discussions_helper.rb', line 6 def kids_read_discussions_link(item) discussions_link fixed_fa_icon('question-circle'), item_discussions_path(item, default_discussions_params), title: t(:solve_your_doubts), class: 'mu-kids-discussion-link' end |
#new_discussion_link(teaser_text, link_text) ⇒ Object
94 95 96 97 98 99 100 101 |
# File 'app/helpers/discussions_helper.rb', line 94 def new_discussion_link(, link_text) %Q{ <h4> <span>#{t()}</span> #{link_to t(link_text), new_exercise_discussion_path(@debatable, anchor: 'new-discussion-description-container') } </h4> }.html_safe end |
#others_discussions_icon(text) ⇒ Object
18 19 20 |
# File 'app/helpers/discussions_helper.rb', line 18 def others_discussions_icon(text) fixed_fa_icon 'comments', text: text end |
#read_discussions_link(item) ⇒ Object
2 3 4 |
# File 'app/helpers/discussions_helper.rb', line 2 def read_discussions_link(item) discussions_link others_discussions_icon(t(:solve_your_doubts)), item_discussions_path(item, default_discussions_params) end |
#should_show_approved_for?(user, message) ⇒ Boolean
187 188 189 |
# File 'app/helpers/discussions_helper.rb', line 187 def should_show_approved_for?(user, ) !user&.moderator_here? && .approved? && !.from_moderator? end |
#solve_discussion_params_for(user) ⇒ Object
39 40 41 42 43 44 45 |
# File 'app/helpers/discussions_helper.rb', line 39 def solve_discussion_params_for(user) if user&.moderator_here? {status: :pending_review, sort: :responses_count_asc, requires_moderator_response: true} else {status: :opened, sort: :responses_count_desc} end end |
#solve_discussions_link ⇒ Object
10 11 12 |
# File 'app/helpers/discussions_helper.rb', line 10 def solve_discussions_link discussions_link others_discussions_icon(t(:solve_doubts)), discussions_path(solve_discussion_params_for(current_user)) end |
#user_avatar(user, image_class = '') ⇒ Object
51 52 53 |
# File 'app/helpers/discussions_helper.rb', line 51 def user_avatar(user, image_class = '') image_tag user.profile_picture, height: 40, class: "img-circle #{image_class}" end |
#user_discussions_icon(text) ⇒ Object
22 23 24 |
# File 'app/helpers/discussions_helper.rb', line 22 def user_discussions_icon(text) fixed_fa_icon 'comment', text: text end |
#user_discussions_link ⇒ Object
14 15 16 |
# File 'app/helpers/discussions_helper.rb', line 14 def user_discussions_link discussions_link user_discussions_icon(t(:my_doubts)), user_path(anchor: 'discussions') if current_user.watched_discussions.present? end |