Module: ApplicationHelper
- Includes:
- PathHelper
- Included in:
- ArticlesCsv, BankTransactionsCsv, FinancialTransactionSerializer, FinancialTransactionsCsv, InvoicesCsv, Mailer, OrdergroupsCsv, RenderPdf, UsersCsv
- Defined in:
- app/helpers/application_helper.rb
Overview
Methods added to this helper will be available to all templates in the application.
Instance Method Summary collapse
-
#base_errors(resource) ⇒ Object
render base errors in a form after failed validation railsapps.github.io/twitter-bootstrap-rails.html.
-
#bootstrap_flash_patched ⇒ String
Returns flash messages html.
-
#close_button(dismiss) ⇒ String
HTML for close button dismissing.
-
#expand(text, options = {}) ⇒ Object
Expand variables in text.
-
#foodcoop_css_path(options = {}) ⇒ String
Path to foodcoop CSS style (with MD5 parameter for caching).
-
#foodcoop_css_tag(_options = {}) ⇒ String
Stylesheet tag for foodcoop CSS style (
custom_css
foodcoop config). - #format_currency(amount) ⇒ Object
- #format_date(time = Time.now) ⇒ Object
- #format_datetime(time = Time.now) ⇒ Object
- #format_datetime_timespec(time, format) ⇒ Object
-
#format_iban(iban) ⇒ Object
Splits an IBAN into groups of 4 digits displayed with margins in between.
- #format_roles(record, icon = false) ⇒ Object
- #format_time(time = Time.now) ⇒ Object
-
#heading_helper(model, attribute, options = {}) ⇒ Object
Generates text for table heading for model attribute When the ‘short’ option is true, abbreviations will be used: When there is a non-empty model attribute ‘foo’, it looks for the model attribute translation ‘foo_short’ and use that as heading, with an abbreviation title of ‘foo’.
- #icon(name, options = {}) ⇒ Object
-
#items_per_page(options = {}) ⇒ Object
Link-collection for per_page-options when using the pagination-plugin.
- #link_to_gmaps(address) ⇒ Object
-
#link_to_top ⇒ Object
Generates a link to the top of the website.
-
#pagination_links_remote(collection, options = {}) ⇒ Object
Creates ajax-controlled-links for pagination.
-
#remote_link_to(text, options = {}) ⇒ Object
Remote links with default ‘loader’.gif during request.
- #show_title? ⇒ Boolean
-
#show_user(user = @current_user, options = {}) ⇒ Object
show a user, depending on settings.
-
#show_user_link(user = @current_user) ⇒ Object
render user presentation linking to default action (plugins can override this).
- #sort_link_helper(text, key, options = {}) ⇒ Object
- #tab_is_active?(tab) ⇒ Boolean
-
#title(page_title, show_title = true) ⇒ Object
to set a title for both the h1-tag and the title in the header.
-
#truncate(text, options = {}, &block) ⇒ Object
allow truncate to add title when tooltip option is given.
-
#weekday(dayNumber) ⇒ Object
Returns the weekday.
Methods included from PathHelper
#finance_group_transactions_path
Instance Method Details
#base_errors(resource) ⇒ Object
render base errors in a form after failed validation railsapps.github.io/twitter-bootstrap-rails.html
200 201 202 203 204 205 |
# File 'app/helpers/application_helper.rb', line 200 def base_errors(resource) return '' if resource.errors.empty? || resource.errors[:base].empty? = resource.errors[:base].map { |msg| content_tag(:li, msg) }.join render partial: 'shared/base_errors', locals: { error_messages: } end |
#bootstrap_flash_patched ⇒ String
Returns flash messages html.
Use this instead of twitter-bootstrap’s bootstrap_flash
method for safety, until CVE-2014-4920 is fixed.
185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'app/helpers/application_helper.rb', line 185 def bootstrap_flash_patched = [] flash.each do |type, | type = :success if type == 'notice' type = :error if type == 'alert' text = content_tag(:div, content_tag(:button, I18n.t('ui.marks.close').html_safe, :class => 'close', 'data-dismiss' => 'alert') + , class: "alert fade in alert-#{type}") << text if end .join("\n").html_safe end |
#close_button(dismiss) ⇒ String
Returns HTML for close button dismissing.
250 251 252 253 254 |
# File 'app/helpers/application_helper.rb', line 250 def (dismiss) content_tag :button, type: 'button', class: 'close', data: { dismiss: dismiss } do I18n.t('ui.marks.close').html_safe end end |
#expand(text, options = {}) ⇒ Object
Expand variables in text
244 245 246 |
# File 'app/helpers/application_helper.rb', line 244 def (text, = {}) Foodsoft::ExpansionVariables.(text, ) end |
#foodcoop_css_path(options = {}) ⇒ String
Returns path to foodcoop CSS style (with MD5 parameter for caching).
257 258 259 |
# File 'app/helpers/application_helper.rb', line 257 def foodcoop_css_path( = {}) super(.merge({ md5: Digest::MD5.hexdigest(FoodsoftConfig[:custom_css].to_s) })) end |
#foodcoop_css_tag(_options = {}) ⇒ String
Returns stylesheet tag for foodcoop CSS style (custom_css
foodcoop config).
263 264 265 266 267 |
# File 'app/helpers/application_helper.rb', line 263 def foodcoop_css_tag( = {}) return if FoodsoftConfig[:custom_css].blank? stylesheet_link_tag foodcoop_css_path, media: 'all' end |
#format_currency(amount) ⇒ Object
22 23 24 25 |
# File 'app/helpers/application_helper.rb', line 22 def format_currency(amount) class_name = amount < 0 ? 'negative_amout' : 'positive_amount' content_tag :span, number_to_currency(amount), class: class_name end |
#format_date(time = Time.now) ⇒ Object
10 11 12 |
# File 'app/helpers/application_helper.rb', line 10 def format_date(time = Time.now) I18n.l(time.to_date) unless time.nil? end |
#format_datetime(time = Time.now) ⇒ Object
14 15 16 |
# File 'app/helpers/application_helper.rb', line 14 def format_datetime(time = Time.now) I18n.l(time) unless time.nil? end |
#format_datetime_timespec(time, format) ⇒ Object
18 19 20 |
# File 'app/helpers/application_helper.rb', line 18 def format_datetime_timespec(time, format) I18n.l(time, format: format) unless time.nil? || format.nil? end |
#format_iban(iban) ⇒ Object
Splits an IBAN into groups of 4 digits displayed with margins in between
28 29 30 |
# File 'app/helpers/application_helper.rb', line 28 def format_iban(iban) iban && iban.scan(/..?.?.?/).map { |item| content_tag(:span, item, style: 'margin-right: 0.5em;') }.join.html_safe end |
#format_roles(record, icon = false) ⇒ Object
160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'app/helpers/application_helper.rb', line 160 def format_roles(record, icon = false) roles = %w[suppliers article_meta orders pickups finance invoices admin] roles.select! { |role| record.send "role_#{role}?" } names = roles.index_with { |r| I18n.t("helpers.application.role_#{r}") } if icon roles.map do |r| image_tag("role-#{r}.png", size: '22x22', border: 0, alt: names[r], title: names[r]) end.join(' ').html_safe else roles.map { |r| names[r] }.join(', ') end end |
#format_time(time = Time.now) ⇒ Object
6 7 8 |
# File 'app/helpers/application_helper.rb', line 6 def format_time(time = Time.now) I18n.l(time, format: :foodsoft_datetime) unless time.nil? end |
#heading_helper(model, attribute, options = {}) ⇒ Object
Generates text for table heading for model attribute When the ‘short’ option is true, abbreviations will be used:
When there is a non-empty model attribute 'foo', it looks for
the model attribute translation 'foo_short' and use that as
heading, with an abbreviation title of 'foo'. If a translation
'foo_desc' is present, that is used instead, but that can be
be overridden by the option 'desc'.
Other options are passed through to I18n.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'app/helpers/application_helper.rb', line 95 def heading_helper(model, attribute, = {}) i18nopts = { count: 2 }.merge(.select { |a| !%w[short desc].include?(a) }) s = model.human_attribute_name(attribute, i18nopts) if [:short] desc = [:desc] desc ||= model.human_attribute_name(:"#{attribute}_desc", .merge({ fallback: true, default: '', count: 2 })) desc.blank? && desc = s sshort = model.human_attribute_name(:"#{attribute}_short", .merge({ fallback: true, default: '', count: 2 })) s = raw "<abbr title='#{desc}'>#{sshort}</abbr>" if sshort.present? end s end |
#icon(name, options = {}) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'app/helpers/application_helper.rb', line 137 def icon(name, = {}) icons = { delete: { file: 'b_drop.png', alt: I18n.t('ui.delete') }, edit: { file: 'b_edit.png', alt: I18n.t('ui.edit') }, members: { file: 'b_users.png', alt: I18n.t('helpers.application.edit_user') } } [:alt] ||= icons[name][:alt] [:title] ||= icons[name][:title] .merge!({ size: '16x16', border: '0' }) image_tag icons[name][:file], end |
#items_per_page(options = {}) ⇒ Object
Link-collection for per_page-options when using the pagination-plugin
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'app/helpers/application_helper.rb', line 41 def items_per_page( = {}) = [:per_page_options] || [20, 50, 100, 500] current = [:current] || @per_page params ||= {} links = .map do |per_page| params.merge!({ per_page: per_page }) link_class = 'btn' link_class << ' disabled' if per_page == current link_to(per_page, params, remote: true, class: link_class) end if [:wrap] == false links.join.html_safe else content_tag :div, class: 'btn-group pull-right' do links.join.html_safe end end end |
#link_to_gmaps(address) ⇒ Object
173 174 175 176 |
# File 'app/helpers/application_helper.rb', line 173 def link_to_gmaps(address) link_to h(address), "http://maps.google.com/?q=#{h(address)}", title: I18n.t('helpers.application.show_google_maps'), target: '_blank', rel: 'noopener' end |
#link_to_top ⇒ Object
Generates a link to the top of the website
111 112 113 114 115 |
# File 'app/helpers/application_helper.rb', line 111 def link_to_top link_to '#' do content_tag :i, nil, class: 'icon-arrow-up icon-large' end end |
#pagination_links_remote(collection, options = {}) ⇒ Object
Creates ajax-controlled-links for pagination
33 34 35 36 37 38 |
# File 'app/helpers/application_helper.rb', line 33 def pagination_links_remote(collection, = {}) per_page = [:per_page] || @per_page params = [:params] || {} params = params.merge({ per_page: per_page }) paginate collection, params: params, remote: true end |
#remote_link_to(text, options = {}) ⇒ Object
Remote links with default ‘loader’.gif during request
151 152 153 154 155 156 157 158 |
# File 'app/helpers/application_helper.rb', line 151 def remote_link_to(text, = {}) = { before: "Element.show('loader')", success: "Element.hide('loader')", method: :get } link_to(text, [:url], .merge()) end |
#show_title? ⇒ Boolean
129 130 131 |
# File 'app/helpers/application_helper.rb', line 129 def show_title? @show_title end |
#show_user(user = @current_user, options = {}) ⇒ Object
show a user, depending on settings
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'app/helpers/application_helper.rb', line 208 def show_user(user = @current_user, = {}) if user.nil? '?' elsif FoodsoftConfig[:use_nick] if [:full] && [:markup] raw "<b>#{h user.nick}</b> (#{h user.first_name} #{h user.last_name})" elsif [:full] "#{user.nick} (#{user.first_name} #{user.last_name})" else # when use_nick was changed from false to true, users may exist without nick user.nick.nil? ? I18n.t('helpers.application.nick_fallback') : user.nick end else "#{user.first_name} #{user.last_name}" + ([:unique] ? " (##{user.id})" : '') end end |
#show_user_link(user = @current_user) ⇒ Object
render user presentation linking to default action (plugins can override this)
226 227 228 |
# File 'app/helpers/application_helper.rb', line 226 def show_user_link(user = @current_user) show_user user end |
#sort_link_helper(text, key, options = {}) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/helpers/application_helper.rb', line 62 def sort_link_helper(text, key, = {}) # Hmtl options remote = [:remote].nil? ? true : [:remote] class_name = case params[:sort] when key 'sortup' when key + '_reverse' 'sortdown' end = { title: I18n.t('helpers.application.sort_by', text: text), remote: remote, class: class_name } # Url options key += '_reverse' if params[:sort] == key per_page = [:per_page] || @per_page = params.merge(per_page: per_page, sort: key) .merge!({ page: params[:page] }) if params[:page] .merge!({ query: params[:query] }) if params[:query] link_to(text, url_for(), ) end |
#tab_is_active?(tab) ⇒ Boolean
133 134 135 |
# File 'app/helpers/application_helper.rb', line 133 def tab_is_active?(tab) tab[:active].detect { |c| controller.controller_path.match(c) } end |
#title(page_title, show_title = true) ⇒ Object
to set a title for both the h1-tag and the title in the header
124 125 126 127 |
# File 'app/helpers/application_helper.rb', line 124 def title(page_title, show_title = true) content_for(:title) { page_title.to_s } @show_title = show_title end |
#truncate(text, options = {}, &block) ⇒ Object
allow truncate to add title when tooltip option is given
231 232 233 234 235 236 237 238 239 240 |
# File 'app/helpers/application_helper.rb', line 231 def truncate(text, = {}, &block) return text if !text || text.length <= ([:length] || 30) text_truncated = super(text, , &block) if [:tooltip] content_tag :span, text_truncated, title: text else text_truncated end end |
#weekday(dayNumber) ⇒ Object
Returns the weekday. 0 is sunday, 1 is monday and so on
118 119 120 121 |
# File 'app/helpers/application_helper.rb', line 118 def weekday(dayNumber) weekdays = I18n.t('date.day_names') weekdays[dayNumber] end |