Module: Decidim::ApplicationHelper

Overview

Main module to add application-wide helpers.

Constant Summary

Constants included from AmendmentsHelper

Decidim::AmendmentsHelper::TOTAL_STEPS

Instance Method Summary collapse

Methods included from CacheHelper

#cache

Methods included from AmendmentsHelper

#accept_and_reject_buttons_for, #action_button_card_for, #allowed_to_accept_and_reject?, #allowed_to_promote?, #amend_button_for, #amendments_enabled?, #amendments_form_field_for, #amendments_form_fields_label, #amendments_form_fields_value, #can_participate_in_private_space?, #can_react_to_emendation?, #current_step, #emendation_actions_for, #emendation_announcement_for, #promote_button_for, #render_emendation_body, #total_steps, #wizard_aside_back_url, #wizard_header_title

Methods included from RichTextEditorHelper

included, #text_editor_for

Methods included from ContextualHelpHelper

#floating_help

Methods included from ScopesHelper

#has_visible_scopes?, #scope_name_for_picker, #scopes_picker_field, #scopes_picker_filter, #scopes_select_field, #scopes_select_tag

Methods included from TranslatableAttributes

#default_locale?

Methods included from DecidimFormHelper

#areas_for_select, #base_error_messages, #decidim_form_for, #decidim_form_slug_url, #editor_field_tag, #form_field_has_error?, #form_required_explanation, #name_with_locale, #ordered_scopes_descendants, #ordered_scopes_descendants_for_select, #scopes_picker_field_tag, #tab_element_class_for, #translated_field_tag

Methods included from OmniauthHelper

#normalize_provider_name, #oauth_icon, #provider_name

Instance Method Details

#add_body_classes(*class_names) ⇒ Object



113
114
115
# File 'app/helpers/decidim/application_helper.rb', line 113

def add_body_classes(*class_names)
  content_for :body_class, class_names.map { |class_name| " #{class_name.strip}" }.join
end

#cell(name, model, options = {}) ⇒ Object

Public: Overwrites the ‘cell` helper method to automatically set some common context.

name - the name of the cell to render model - the cell model options - a Hash with options

Renders the cell contents.



100
101
102
103
# File 'app/helpers/decidim/application_helper.rb', line 100

def cell(name, model, options = {}, &)
  options = { context: { view_context: self, current_user: } }.deep_merge(options)
  super(name, model, options, &)
end

Generates a link to be added to the global Edit link so admins can easily manage data without having to look for it at the admin panel when they are at a public page.

link_url - The String with the URL. action - The Symbol action to check the permissions for. subject - The Symbol subject to perform the action to. extra_context - An optional Hash to check the permissions. link_options - An optional Hash to change the default name and icon link. link_options - An optional String to be used as the label of the link. link_options - An optional String with the identifier name of the icon. link_options - An optional String to add as a css class to the link wrapper.

Returns nothing.



60
61
62
63
64
65
66
67
# File 'app/helpers/decidim/application_helper.rb', line 60

def edit_link(link_url, action, subject, extra_context = {}, link_options = {})
  return unless current_user
  return unless admin_allowed_to?(action, subject, extra_context)
  return if content_for?(:edit_link)

  cell_html = raw(cell("decidim/navbar_admin_link", link_url:, link_options:))
  content_for(:edit_link, cell_html)
end

Generates a second link to be added to the global admin action link so admins can easily manage data without having to look for it at the admin panel when they are at a public page.

link_url - The String with the URL. action - The Symbol action to check the permissions for. subject - The Symbol subject to perform the action to. extra_context - An optional Hash to check the permissions. link_options - An optional Hash to change the default name and icon link. link_options - An optional String to be used as the label of the link. link_options - An optional String with the identifier name of the icon. link_options - An optional String to add as a css class to the link wrapper.

Returns nothing.



83
84
85
86
87
88
89
90
# File 'app/helpers/decidim/application_helper.rb', line 83

def extra_admin_link(link_url, action, subject, extra_context = {}, link_options = {})
  return unless current_user
  return unless admin_allowed_to?(action, subject, extra_context)
  return if content_for?(:extra_admin_link)

  cell_html = raw(cell("decidim/navbar_admin_link", link_url:, link_options:))
  content_for(:extra_admin_link, cell_html)
end

#html_truncate(text, options = {}) ⇒ Object

Truncates a given text respecting its HTML tags.

text - The String text to be truncated. options - A Hash with the options to truncate the text (default: {}):

:length - An Integer number with the max length of the text.
:separator - A String to append to the text when it is being
truncated.

Returns a String.



21
22
23
24
25
26
27
28
29
# File 'app/helpers/decidim/application_helper.rb', line 21

def html_truncate(text, options = {})
  options[:max_length] = options.delete(:length) || options[:max_length]
  options[:tail] = options.delete(:separator) || options[:tail] || ""
  options[:count_tags] ||= false
  options[:count_tail] ||= false
  options[:tail_before_final_tag] = true unless options.has_key?(:tail_before_final_tag)

  Decidim::HtmlTruncation.new(text, options).perform
end

#present(object, presenter_class: nil) {|presenter| ... } ⇒ Object

Yields:

  • (presenter)


31
32
33
34
35
36
37
38
# File 'app/helpers/decidim/application_helper.rb', line 31

def present(object, presenter_class: nil)
  presenter_class ||= resolve_presenter_class(object, presenter_class:)
  presenter = presenter_class.new(object)

  yield(presenter) if block_given?

  presenter
end

#prevent_timeout_secondsObject



105
106
107
# File 'app/helpers/decidim/application_helper.rb', line 105

def prevent_timeout_seconds
  0
end

#resolve_presenter_class(object, presenter_class: nil) ⇒ Object



40
41
42
43
44
# File 'app/helpers/decidim/application_helper.rb', line 40

def resolve_presenter_class(object, presenter_class: nil)
  presenter_class || "#{object.class.name}Presenter".constantize
rescue StandardError
  ::Decidim::NilPresenter
end

#text_initials(name) ⇒ Object



109
110
111
# File 'app/helpers/decidim/application_helper.rb', line 109

def text_initials(name)
  name.split(/[\s.]+/).map(&:chr).slice(0, 2).join.upcase
end