Module: Decidim::Proposals::ApplicationHelper
- Includes:
- CheckBoxesTreeHelper, Comments::CommentsHelper, EndorsableHelper, FollowableHelper, MapHelper, CollaborativeDraftHelper, ControlVersionHelper, MapHelper, ProposalVotesHelper, RichTextEditorHelper, PaginateHelper
- Included in:
- CollaborativeDraftCellsHelper, ProposalCellsHelper
- Defined in:
- app/helpers/decidim/proposals/application_helper.rb
Overview
Custom helpers, scoped to the proposals engine.
Instance Method Summary collapse
-
#activity_filter_values ⇒ Object
Options to filter Proposals by activity.
-
#collaborative_draft_state_badge_css_class(state) ⇒ Object
Public: The css class applied based on the collaborative draft state.
- #filter_origin_values ⇒ Object
- #filter_type_values ⇒ Object
- #form_has_address? ⇒ Boolean
-
#humanize_collaborative_draft_state(state) ⇒ Object
Public: The state of a proposal in a way a human can understand.
-
#humanize_proposal_state(state) ⇒ Object
Public: The state of a proposal in a way a human can understand.
- #minimum_votes_per_user_enabled? ⇒ Boolean
- #not_from_collaborative_draft(proposal) ⇒ Object
- #not_from_participatory_text(proposal) ⇒ Object
- #proposal_limit ⇒ Object
- #proposal_limit_enabled? ⇒ Boolean
-
#proposal_state_css_class(proposal) ⇒ Object
Public: The css class applied based on the proposal state.
-
#render_proposal_body(proposal) ⇒ Object
If the content is safe, HTML tags are sanitized, otherwise, they are stripped.
-
#safe_content? ⇒ Boolean
If the proposal is official or the rich text editor is enabled on the frontend, the proposal body is considered as safe content; that’s unless the proposal comes from a collaborative_draft or a participatory_text.
- #show_voting_rules? ⇒ Boolean
-
#text_editor_for_proposal_body(form) ⇒ Object
Returns :text_area or :editor based on the organization’ settings.
- #vote_button_for(model, from_proposals_list) ⇒ Object
- #votes_count_for(model, from_proposals_list) ⇒ Object
- #votes_given ⇒ Object
Methods included from ControlVersionHelper
Methods included from CollaborativeDraftHelper
#accept_request_button_label, #filter_collaborative_drafts_state_values, #reject_request_button_label
Methods included from MapHelper
#has_position?, #proposal_data_for_map, #proposal_preview_data_for_map, #proposals_data_for_map
Methods included from ProposalVotesHelper
#can_accumulate_supports_beyond_threshold?, #current_user_can_vote?, #remaining_votes_count_for, #threshold_per_proposal, #threshold_per_proposal_enabled?, #vote_button_classes, #vote_limit, #vote_limit_enabled?, #votes_blocked?, #votes_count_classes, #votes_enabled?
Instance Method Details
#activity_filter_values ⇒ Object
Options to filter Proposals by activity.
163 164 165 166 167 168 169 170 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 163 def activity_filter_values base = [ ["all", t(".all")], ["my_proposals", t(".my_proposals")] ] base += [["voted", t(".voted")]] if current_settings.votes_enabled? base end |
#collaborative_draft_state_badge_css_class(state) ⇒ Object
Public: The css class applied based on the collaborative draft state.
state - The String state of the collaborative draft.
Returns a String.
68 69 70 71 72 73 74 75 76 77 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 68 def collaborative_draft_state_badge_css_class(state) case state when "open" "success" when "withdrawn" "alert" when "published" "secondary" end end |
#filter_origin_values ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 172 def filter_origin_values origin_values = [] origin_values << TreePoint.new("official", t("decidim.proposals.application_helper.filter_origin_values.official")) if component_settings.official_proposals_enabled origin_values << TreePoint.new("citizens", t("decidim.proposals.application_helper.filter_origin_values.citizens")) origin_values << TreePoint.new("user_group", t("decidim.proposals.application_helper.filter_origin_values.user_groups")) if current_organization.user_groups_enabled? origin_values << TreePoint.new("meeting", t("decidim.proposals.application_helper.filter_origin_values.meetings")) TreeNode.new( TreePoint.new("", t("decidim.proposals.application_helper.filter_origin_values.all")), origin_values ) end |
#filter_type_values ⇒ Object
154 155 156 157 158 159 160 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 154 def filter_type_values [ ["all", t("decidim.proposals.application_helper.filter_type_values.all")], ["proposals", t("decidim.proposals.application_helper.filter_type_values.proposals")], ["amendments", t("decidim.proposals.application_helper.filter_type_values.amendments")] ] end |
#form_has_address? ⇒ Boolean
140 141 142 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 140 def form_has_address? @form.address.present? || @form.has_address end |
#humanize_collaborative_draft_state(state) ⇒ Object
Public: The state of a proposal in a way a human can understand.
state - The String state of the proposal.
Returns a String.
59 60 61 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 59 def humanize_collaborative_draft_state(state) I18n.t("decidim.proposals.collaborative_drafts.states.#{state}", default: :open) end |
#humanize_proposal_state(state) ⇒ Object
Public: The state of a proposal in a way a human can understand.
state - The String state of the proposal.
Returns a String.
27 28 29 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 27 def humanize_proposal_state(state) I18n.t(state, scope: "decidim.proposals.answers", default: :not_answered) end |
#minimum_votes_per_user_enabled? ⇒ Boolean
83 84 85 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 83 def minimum_votes_per_user_enabled? minimum_votes_per_user.positive? end |
#not_from_collaborative_draft(proposal) ⇒ Object
87 88 89 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 87 def not_from_collaborative_draft(proposal) proposal.linked_resources(:proposals, "created_from_collaborative_draft").empty? end |
#not_from_participatory_text(proposal) ⇒ Object
91 92 93 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 91 def not_from_participatory_text(proposal) proposal.participatory_text_level.nil? end |
#proposal_limit ⇒ Object
119 120 121 122 123 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 119 def proposal_limit return if component_settings.proposal_limit.zero? component_settings.proposal_limit end |
#proposal_limit_enabled? ⇒ Boolean
79 80 81 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 79 def proposal_limit_enabled? proposal_limit.present? end |
#proposal_state_css_class(proposal) ⇒ Object
Public: The css class applied based on the proposal state.
proposal - The proposal to evaluate.
Returns a String.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 36 def proposal_state_css_class(proposal) state = proposal.state state = proposal.internal_state if proposal.answered? && !proposal.published_state? case state when "accepted" "text-success" when "rejected" "text-alert" when "evaluating" "text-warning" when "withdrawn" "text-alert" else "text-info" end end |
#render_proposal_body(proposal) ⇒ Object
If the content is safe, HTML tags are sanitized, otherwise, they are stripped.
104 105 106 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 104 def render_proposal_body(proposal) render_sanitized_content(proposal, :body) end |
#safe_content? ⇒ Boolean
If the proposal is official or the rich text editor is enabled on the frontend, the proposal body is considered as safe content; that’s unless the proposal comes from a collaborative_draft or a participatory_text.
98 99 100 101 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 98 def safe_content? rich_text_editor_in_public_views? && not_from_collaborative_draft(@proposal) || (@proposal.official? || @proposal.official_meeting?) && not_from_participatory_text(@proposal) end |
#show_voting_rules? ⇒ Boolean
144 145 146 147 148 149 150 151 152 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 144 def show_voting_rules? return false unless votes_enabled? return true if vote_limit_enabled? return true if threshold_per_proposal_enabled? return true if proposal_limit_enabled? return true if can_accumulate_supports_beyond_threshold? return true if minimum_votes_per_user_enabled? end |
#text_editor_for_proposal_body(form) ⇒ Object
Returns :text_area or :editor based on the organization’ settings.
109 110 111 112 113 114 115 116 117 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 109 def text_editor_for_proposal_body(form) = { class: "js-hashtags", hashtaggable: true, value: form_presenter.body(extras: false).strip } text_editor_for(form, :body, ) end |
#vote_button_for(model, from_proposals_list) ⇒ Object
136 137 138 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 136 def (model, from_proposals_list) render partial: "decidim/proposals/proposals/participatory_texts/proposal_vote_button.html", locals: { proposal: model, from_proposals_list: from_proposals_list } end |
#votes_count_for(model, from_proposals_list) ⇒ Object
132 133 134 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 132 def votes_count_for(model, from_proposals_list) render partial: "decidim/proposals/proposals/participatory_texts/proposal_votes_count.html", locals: { proposal: model, from_proposals_list: from_proposals_list } end |
#votes_given ⇒ Object
125 126 127 128 129 130 |
# File 'app/helpers/decidim/proposals/application_helper.rb', line 125 def votes_given @votes_given ||= ProposalVote.where( proposal: Proposal.where(component: current_component), author: current_user ).count end |