# encoding: utf-8 # # Methods added to this helper will be available to all templates in the application. module ApplicationHelper def format_time(time = Time.now) I18n.l(time, :format => "%d.%m.%Y %H:%M") unless time.nil? end def format_date(time = Time.now) I18n.l(time.to_date) unless time.nil? end def format_datetime(time = Time.now) I18n.l(time) unless time.nil? end def format_datetime_timespec(time, format) I18n.l(time, :format => format) unless (time.nil? or format.nil?) end # Creates ajax-controlled-links for pagination def pagination_links_remote(collection, options = {}) per_page = options[:per_page] || @per_page params = options[:params] || {} params = params.merge({:per_page => per_page}) paginate collection, :params => params, :remote => true end # Link-collection for per_page-options when using the pagination-plugin def items_per_page(options = {}) per_page_options = options[:per_page_options] || [20, 50, 100] current = options[:current] || @per_page params = params || {} links = per_page_options.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 content_tag :div, class: 'btn-group pull-right' do links.join.html_safe end end def sort_link_helper(text, key, options = {}) # Hmtl options remote = options[:remote].nil? ? true : options[:remote] class_name = case params[:sort] when key then 'sortup' when key + '_reverse' then 'sortdown' else nil end html_options = { :title => I18n.t('helpers.application.sort_by', text: text), :remote => remote, :class => class_name } # Url options key += "_reverse" if params[:sort] == key per_page = options[:per_page] || @per_page url_options = params.merge(per_page: per_page, sort: key) url_options.merge!({page: params[:page]}) if params[:page] url_options.merge!({query: params[:query]}) if params[:query] link_to(text, url_for(url_options), html_options) end # 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'. # Other options are passed through to I18n. def heading_helper(model, attribute, options = {}) i18nopts = options.select {|a| !['short'].include?(a) } s = model.human_attribute_name(attribute, i18nopts) if options[:short] sshort = model.human_attribute_name("#{attribute}_short".to_sym, options.merge({defaults: ''})) s = raw "#{sshort}" unless sshort.empty? end s end # Generates a link to the top of the website def link_to_top link_to '#' do content_tag :i, nil, class: 'icon-arrow-up icon-large' end end # Returns the weekday. 0 is sunday, 1 is monday and so on def weekday(dayNumber) weekdays = I18n.t('date.day_names') return weekdays[dayNumber] end # to set a title for both the h1-tag and the title in the header def title(page_title, show_title = true) content_for(:title) { page_title.to_s } @show_title = show_title end def show_title? @show_title end def tab_is_active?(tab) tab[:active].detect {|c| controller.controller_path.match(c) } end def icon(name, options={}) 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')} } options[:alt] ||= icons[name][:alt] options[:title] ||= icons[name][:title] options.merge!({:size => '16x16',:border => "0"}) image_tag icons[name][:file], options end # Remote links with default 'loader'.gif during request def remote_link_to(text, options={}) remote_options = { :before => "Element.show('loader')", :success => "Element.hide('loader')", :method => :get } link_to(text, options[:url], remote_options.merge(options)) end def format_roles(record) roles = [] roles << I18n.t('helpers.application.role_admin') if record.role_admin? roles << I18n.t('helpers.application.role_finance') if record.role_finance? roles << I18n.t('helpers.application.role_suppliers') if record.role_suppliers? roles << I18n.t('helpers.application.role_article_meta') if record.role_article_meta? roles << I18n.t('helpers.application.role_orders') if record.role_orders? roles.join(', ') end 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" end def bootstrap_flash flash_messages = [] flash.each do |type, message| 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") + message, :class => "alert fade in alert-#{type}") flash_messages << text if message end flash_messages.join("\n").html_safe end # render base errors in a form after failed validation # http://railsapps.github.io/twitter-bootstrap-rails.html def base_errors resource return '' if (resource.errors.empty?) or (resource.errors[:base].empty?) messages = resource.errors[:base].map { |msg| content_tag(:li, msg) }.join render :partial => 'shared/base_errors', :locals => {:error_messages => messages} end # show a user, depending on settings def show_user(user=@current_user, options = {}) if user.nil? "?" elsif FoodsoftConfig[:use_nick] if options[:full] and options[:markup] raw "#{h user.nick} (#{h user.first_name} #{h user.last_name})" elsif options[: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}" + (options[:unique] ? " (\##{user.id})" : '') end end # render user presentation linking to default action (write message) def show_user_link(user=@current_user) if user.nil? show_user user else link_to show_user(user), new_message_path('message[mail_to]' => user.id), :title => I18n.t('helpers.application.write_message') end end end