diff options
| author | jpl | 2017-02-01 18:42:07 +0100 | 
|---|---|---|
| committer | jpl | 2017-02-01 18:42:07 +0100 | 
| commit | 809290c656902da721fd773fef55f90f9d649c13 (patch) | |
| tree | 686a32e9d41667bc6250d2e1da3e4e36f1b23709 /app/helpers/newapplication_helper.rb | |
| parent | 2368e50d6ba65f222bb02982ed7dea39e765d09d (diff) | |
| download | chouette-core-809290c656902da721fd773fef55f90f9d649c13.tar.bz2 | |
Refs #2485: adding pageHeader helper, to keep views simple
Diffstat (limited to 'app/helpers/newapplication_helper.rb')
| -rw-r--r-- | app/helpers/newapplication_helper.rb | 155 | 
1 files changed, 155 insertions, 0 deletions
| diff --git a/app/helpers/newapplication_helper.rb b/app/helpers/newapplication_helper.rb new file mode 100644 index 000000000..2e5a716a6 --- /dev/null +++ b/app/helpers/newapplication_helper.rb @@ -0,0 +1,155 @@ +module NewapplicationHelper + +  # Table Builder +  def table_builder collection, columns, actions, cls = nil +    return unless collection.present? + +    head = content_tag :thead do +      content_tag :tr do +        hcont = [] +        columns.map do |k, v| +          # hcont << content_tag(:th, k.to_s.titleize) +          hcont << content_tag(:th, sortable_columns(collection, k)) +        end +        hcont << content_tag(:th, 'Actions', class: 'text-center') if actions.any? + +        hcont.join.html_safe +      end +    end + +    body = content_tag :tbody do +      collection.collect do |item| +        content_tag :tr do +          bcont = [] +          columns.map do |k, attribute| +            value = +              if Proc === attribute +                attribute.call(item) +              else +                item.try(attribute) +              end +            bcont << content_tag(:td, value) +          end +          bcont << content_tag(:td, links_builder(item, actions), class: 'text-center') if actions.any? + +          bcont.join.html_safe +        end +      end.join.html_safe +    end + +    content_tag :table, head + body, class: cls +  end + +  def links_builder(item, actions) +    trigger = content_tag :div, class: 'btn btn-primary dropdown-toggle', data: { toggle: 'dropdown' } do +      a = content_tag :span, '', class: 'fa fa-bars' +      b = content_tag :span, '', class: 'caret' +      a + b +    end + +    menu = content_tag :ul, class: 'dropdown-menu' do +      actions.collect do |action| +        polymorph_url = [] + +        unless [:show, :delete].include? action +          polymorph_url << action +        end + +        unless item.class.to_s == 'Calendar' +          if current_referential +            polymorph_url << current_referential +            polymorph_url << item.line if item.respond_to? :line +          elsif item.respond_to? :referential +            polymorph_url << item.referential +          elsif item.respond_to? :line_referential +            polymorph_url << item.line_referential +          end +        end + +        polymorph_url << item + +        if action == :delete +          if policy(item).present? +            if policy(item).destroy? +              content_tag :li, link_to(t("table.#{action}"), polymorph_url, method: :delete, data: { confirm: 'Etes-vous sûr(e) de vouloir effectuer cette action ?' }) +            end +          else +            content_tag :li, link_to(t("table.#{action}"), polymorph_url, method: :delete, data: { confirm: 'Etes-vous sûr(e) de vouloir effectuer cette action ?' }) +          end + +        elsif action == :edit +          if policy(item).present? +            if policy(item).update? +              content_tag :li, link_to(t("table.#{action}"), polymorph_url) +            end +          else +            content_tag :li, link_to(t("table.#{action}"), polymorph_url) +          end +        else +          content_tag :li, link_to(t("table.#{action}"), polymorph_url) +        end +      end.join.html_safe +    end + +    content_tag :div, trigger + menu, class: 'btn-group btn-group-xs' + +  end + +  def sortable_columns collection, key +    direction = (key == params[:sort] && params[:direction] == 'desc') ? 'asc' : 'desc' + +    icon = 'sort-desc' if direction == 'asc' +    icon = 'sort-asc' if direction == 'desc' + +    link_to({sort: key, direction: direction}) do +      pic = content_tag :span, '', class: "fa fa-#{icon}", style: 'margin-left:5px' +      (key.to_s.titleize + pic).html_safe +    end +  end + +  # Replacement message +  def replacement_msg text +    content_tag :div, '', class: 'alert alert-warning' do +      icon = content_tag :span, '', class: 'fa fa-lg fa-info-circle', style: 'margin-right:7px;' +      icon + text +    end +  end + +  # PageHeader builder +  def pageheader pageicon, pagetitle, desc, meta, mainaction = nil, &block + +    firstRow = content_tag :div, '', class: 'row' do +      # Left part with pageicon & pagetitle & desc +      left = content_tag :div, '', class: 'col-lg-9 col-md-8 col-sm-8 col-xs-7' do +        picon = content_tag :div, '', class: 'page-icon' do +          content_tag :span, '', class: "fa fa-lg fa-#{pageicon}" +        end +        ptitle = content_tag :div, '', class: 'page-title' do +          info = content_tag :span, '', class: 'small fa fa-info-circle', title: desc + +          content_tag :h1, pagetitle.concat(info).html_safe +        end + +        picon + ptitle +      end +      # Right part with meta & mainaction +      right = content_tag :div, '', class: 'col-lg-3 col-md-4 col-sm-4 col-xs-5 text-right' do +        content_tag :div, '', class: 'page-action' do +          a = content_tag :div, meta.html_safe, class: 'small' +          b = mainaction.try(:html_safe) + +          a + b +        end +      end + +      left + right +    end + +    content_tag :div, '', class: 'page_header' do +      content_tag :div, '', class: 'container-fluid' do +        firstRow + capture(&block) +      end +    end +  end + +end | 
