Module: Decidim::LayoutHelper
- Includes:
- ModalHelper, TooltipHelper
- Included in:
- Accountability::HighlightedResultsForComponentCell, Accountability::ResultMetadataCell, AddressCell, Amendable::EmendationActionsCell, AuthorCell, AuthorizationModalCell, BadgesCell, BreadcrumbRootMenuItemPresenter, Budgets::BaseCell, ButtonCell, CardLCell, Conferences::MediaLinkCell, Conferences::RegistrationTypeCell, Debates::DebateCardMetadataCell, DiffCell, Elections::VotingStepNavigationCell, EndorsementButtonsCell, Forms::StepNavigationCell, GroupsCell, IconHelper, Meetings::HighlightedMeetingsForComponentCell, Meetings::MeetingCardMetadataCell, Meetings::MeetingCellsHelper, Meetings::MeetingUrlCell, Meetings::OnlineMeetingLinkCell, NotificationsCell, PhotoCell, ProfileCell, Proposals::CollaborativeDraftCellsHelper, Proposals::CostReportCell, Proposals::ProposalCellsHelper, ResourceTypesFilterCell, UploadModalCell, VersionCell, VersionsListItemCell, ViewModel, Votings::ContentBlocks::PollingStationsCell, Votings::MapHelper, WizardStepFormCell
- Defined in:
- decidim-core/app/helpers/decidim/layout_helper.rb
Overview
View helpers related to the layout.
Instance Method Summary collapse
- #_icon_classes(options = {}) ⇒ Object
- #apple_favicon ⇒ Object
- #application_path(path) ⇒ Object
- #current_user_unread_data ⇒ Object
- #extended_navigation_bar(items, max_items: 5) ⇒ Object
-
#external_icon(path, options = {}) ⇒ Object
Outputs a SVG icon from an external file.
-
#favicon ⇒ Object
Public: Generates a set of meta tags that generate the different favicon versions for an organization.
-
#icon(name, options = {}) ⇒ Object
Outputs an SVG-based icon.
- #legacy_favicon ⇒ Object
-
#organization_colors ⇒ Object
Renders a view with the customizable CSS variables in two flavours: 1.
-
#role(options = {}) ⇒ Object
Allows to create role attribute according to accessibility rules.
Methods included from TooltipHelper
Methods included from ModalHelper
Instance Method Details
#_icon_classes(options = {}) ⇒ Object
110 111 112 113 114 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 110 def _icon_classes( = {}) classes = [:remove_icon_class] ? [] : ["icon"] classes += [[:class]] classes.compact end |
#apple_favicon ⇒ Object
21 22 23 24 25 26 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 21 def apple_favicon icon_image = current_organization.attached_uploader(:favicon).variant_url(:medium, host: current_organization.host) return unless icon_image favicon_link_tag(icon_image, rel: "apple-touch-icon", type: "image/png") end |
#application_path(path) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 89 def application_path(path) # Force the path to be returned without the protocol and host even when a # custom asset host has been defined. The host parameter needs to be a # non-nil because otherwise it will be set to the asset host at # ActionView::Helpers::AssetUrlHelper#compute_asset_host. img_path = asset_pack_path(path, host: "", protocol: :relative) path = Rails.public_path.join(img_path.sub(%r{^/}, "")) return unless File.exist?(path) path rescue ::Shakapacker::Manifest::MissingEntryError nil end |
#current_user_unread_data ⇒ Object
152 153 154 155 156 157 158 159 160 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 152 def current_user_unread_data return {} if current_user.blank? {}.tap do |d| d.merge!(unread_notifications: true) if current_user.notifications.any? d.merge!(unread_conversations: true) if current_user.unread_conversations.any? d.merge!(unread_items: d.present?) end end |
#extended_navigation_bar(items, max_items: 5) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 116 def (items, max_items: 5) return unless items.any? extra_items = items.slice((max_items + 1)..-1) || [] active_item = items.find { |item| item[:active] } controller.view_context.render partial: "decidim/shared/extended_navigation_bar", locals: { items:, extra_items:, active_item:, max_items: } end |
#external_icon(path, options = {}) ⇒ Object
Outputs a SVG icon from an external file. It apparently renders an image tag, but then a JS script kicks in and replaces it with an inlined SVG version.
path - The asset’s path
Returns an <img /> tag with the SVG icon.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 74 def external_icon(path, = {}) classes = _icon_classes() + ["external-icon"] if path.split(".").last == "svg" icon_path = application_path(path) return unless icon_path attributes = { class: classes.join(" ") }.merge() asset = File.read(icon_path) asset.gsub("<svg ", "<svg#{tag_builder.(attributes)} ").html_safe else image_pack_tag(path, class: classes.join(" "), style: "display: none") end end |
#favicon ⇒ Object
Public: Generates a set of meta tags that generate the different favicon versions for an organization.
Returns a safe String with the versions.
13 14 15 16 17 18 19 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 13 def favicon return if current_organization.favicon.blank? safe_join(Decidim::OrganizationFaviconUploader::SIZES.map do |version, size| favicon_link_tag(current_organization.attached_uploader(:favicon).variant_url(version, host: current_organization.host), sizes: "#{size}x#{size}") end) end |
#icon(name, options = {}) ⇒ Object
Outputs an SVG-based icon.
name - The String with the icon name. options - The Hash options used to customize the icon (default {}):
:width - The Number of width in pixels (optional).
:height - The Number of height in pixels (optional).
:title - The title for the SVG element (optional, similar to alt for img)
:aria_label - The String to set as aria label (optional).
:aria_hidden - The Truthy value to enable aria_hidden (optional).
:role - The String to set as the role (optional).
:class - The String to add as a CSS class (optional).
Returns a String.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 49 def icon(name, = {}) default_html_properties = { "width" => "1em", "height" => "1em", "role" => "img", "aria-hidden" => "true" } html_properties = .with_indifferent_access.transform_keys(&:dasherize).slice("width", "height", "aria-label", "role", "aria-hidden", "class", "style") html_properties = default_html_properties.merge(html_properties) href = Decidim.cors_enabled ? "" : asset_pack_path("media/images/remixicon.symbol.svg") content_tag :svg, html_properties do content_tag :use, nil, "href" => "#{href}#ri-#{name}", tabindex: -1 end end |
#legacy_favicon ⇒ Object
28 29 30 31 32 33 34 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 28 def legacy_favicon variant = :favicon if current_organization.favicon.content_type != "image/vnd.microsoft.icon" icon_image = current_organization.attached_uploader(:favicon).variant_url(variant, host: current_organization.host) return unless icon_image favicon_link_tag(icon_image, rel: "icon", sizes: "any", type: nil) end |
#organization_colors ⇒ Object
Renders a view with the customizable CSS variables in two flavours:
-
as a hexadecimal valid CSS color (ie: #ff0000)
-
as a disassembled RGB components (ie: 255 0 0)
Example:
–primary: #ff0000; –primary-rgb: 255 0 0
Hexadecimal variables can be used as a normal CSS color:
color: var(–primary)
While the disassembled variant can be used where you need to manipulate the color somehow (ie: adding a background transparency):
background-color: rgba(var(–primary-rgb), 0.5)
147 148 149 150 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 147 def organization_colors css = current_organization.colors.each.map { |k, v| "--#{k}: #{v};--#{k}-rgb: #{v[1..2].hex} #{v[3..4].hex} #{v[5..6].hex};" }.join render partial: "layouts/decidim/organization_colors", locals: { css: } end |
#role(options = {}) ⇒ Object
Allows to create role attribute according to accessibility rules
Returns role attribute string if role option is specified
106 107 108 |
# File 'decidim-core/app/helpers/decidim/layout_helper.rb', line 106 def role( = {}) "role=\"#{[:role]}\" " if [:role] end |