null-open-security-community/swachalit

View on GitHub
app/helpers/application_helper.rb

Summary

Maintainability
A
1 hr
Test Coverage
module ApplicationHelper
  def title(t)
    page_title(t)
  end

  def page_title(page_title)
    content_for(:title) { page_title }
  end

  def page_description(desc)
    content_for(:description) { desc }
  end

  def page_image(img_path)
    content_for(:image_url) { img_path }
  end

  def content_for_or_default(key, default)
    if content_for?(key)
      content_for(key)
    else
      default
    end
  end

  def resource_error_messages!(resource)
    return '' if resource.errors.empty?

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
    sentence = I18n.t('errors.messages.not_saved',
      count: resource.errors.count,
      resource: resource.class.model_name.human.downcase)

    html = <<-HTML
    <div class="alert alert-danger alert-block">
      <button type="button" class="close" data-dismiss="alert">x</button>
      <h4>#{sentence}</h4>
      #{messages}
    </div>
    HTML

    html.html_safe
  end

  def markdown_html(text)
    options = {}
    options[:fenced_code_blocks] = true
    options[:hard_wrap] = true

    r = Redcarpet::Render::HTML.new(options)
    md = Redcarpet::Markdown.new(r)
    md.render(text.to_s).html_safe
  end

  def safe_markdown_html(text, opts = {})
    s_options = {
      :filter_html => true,
      :hard_wrap => true,
      :no_images => true,
      :no_styles => true,
      :fenced_code_blocks => true,
      :link_attributes => { :target => '_blank' },
      :safe_links_only => true
    }.merge(opts)

    r = Redcarpet::Render::HTML.new(s_options)
    md =  Redcarpet::Markdown.new(r)
    md.render(text.to_s).html_safe
  end

  def sm_icon_with_link(icon, link, size = '40x40')
    link_to(link, :target => '_blank') do
      image_tag("sm_icons/#{icon}.png", :size => size)
    end
  end

  def twitter_icon(url = 'http://www.null.co.in', size = '40x40')
    sm_icon_with_link('twitter', url, size)
  end

  def facebook_icon(url = 'http://www.null.co.in', size = '40x40')
    sm_icon_with_link('facebook', url, size)
  end

  def group_icon(url, size = '40x40')
    sm_icon_with_link('group', url, size)
  end

  def safe_url(s)
    s = s.to_s
    return '#' if s.empty?

    s = s.gsub(/(\r|\n|\s)/, '')

    return '#' if s =~ /\Ajavascript/i
    return '#' if s =~ /\Achrome/i
    return '#' if s =~ /\Aabout/i
    return "http://#{s}" if s !~ /\Ahttp/i   # Force protocol

    return s
  end

  def user_attendance_brief(user)
    t = user.event_registrations.absent.count > 0 ? 'danger' : 'info'
    ("<span class='label label-#{t}'>A:%d/T:%d</span>" %
      [user.event_registrations.absent.count, user.event_registrations.count]).html_safe
  end

  def exif_warning
    content_tag(:small) do
      %q|The file will be uploaded and stored "as is" without processing.
      Ensure EXIF data is not exposing sensitve information.|
    end
  end

end