diff options
| author | jpl | 2016-11-22 16:44:45 +0100 | 
|---|---|---|
| committer | jpl | 2016-11-22 17:59:37 +0100 | 
| commit | 540b2b720791875b8a774cd53d9a49c29c610e37 (patch) | |
| tree | 5d66346eedbc3c5053e950450eb645f98cc770bb | |
| parent | f12aad6a79ba71d59f30c1ae977babfa8d0d248f (diff) | |
| download | chouette-core-540b2b720791875b8a774cd53d9a49c29c610e37.tar.bz2 | |
Refs #2019: Create table helper for views
| -rw-r--r-- | app/controllers/chouette_controller.rb | 13 | ||||
| -rw-r--r-- | app/helpers/application_helper.rb | 2 | ||||
| -rw-r--r-- | app/helpers/newfront_helper.rb | 69 | ||||
| -rw-r--r-- | app/helpers/refobjects_helper.rb | 62 | ||||
| -rw-r--r-- | app/views/referential_networks/_networks.html.slim | 52 | 
5 files changed, 108 insertions, 90 deletions
| diff --git a/app/controllers/chouette_controller.rb b/app/controllers/chouette_controller.rb index 46691b13e..074fc0515 100644 --- a/app/controllers/chouette_controller.rb +++ b/app/controllers/chouette_controller.rb @@ -2,15 +2,18 @@ class ChouetteController < BreadcrumbController    include ApplicationHelper    include BreadcrumbHelper -   +    before_action :switch_referential -   +    def switch_referential      Apartment::Tenant.switch!(referential.slug) -  end  +  end    def referential -    @referential ||= current_organisation.referentials.find params[:referential_id]   -  end  +    @referential ||= current_organisation.referentials.find params[:referential_id] +  end +  alias_method :current_referential, :referential +  helper_method :current_referential +  end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 132b7dcaa..49bc67ce7 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,6 +1,6 @@  module ApplicationHelper -  include RefobjectsHelper +  include NewfrontHelper    def font_awesome_classic_tag(name)      name = "fa-file-text-o" if name == "fa-file-csv-o" diff --git a/app/helpers/newfront_helper.rb b/app/helpers/newfront_helper.rb new file mode 100644 index 000000000..5bdf674b9 --- /dev/null +++ b/app/helpers/newfront_helper.rb @@ -0,0 +1,69 @@ +module NewfrontHelper + +  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) +        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 = [] + +        polymorph_url << action if action != :show +        if current_referential +          polymorph_url << current_referential +        elsif item.respond_to? :referential +          polymorph_url << item.referential +        end + +        polymorph_url << item + +        content_tag :li, link_to(action, polymorph_url) +      end.join.html_safe +    end + +    content_tag :div, trigger + menu, class: 'btn-group btn-group-xs' + +  end + +end diff --git a/app/helpers/refobjects_helper.rb b/app/helpers/refobjects_helper.rb deleted file mode 100644 index aac40b944..000000000 --- a/app/helpers/refobjects_helper.rb +++ /dev/null @@ -1,62 +0,0 @@ -module RefobjectsHelper - -  def table_builder collection, columns, actions = [], cls = nil -    return unless collection.present? - -    head = content_tag :thead do -      content_tag :tr do -        attributes_head = columns.collect do |col| -          content_tag :th, col.to_s.titleize -        end.join.html_safe -        links_head = content_tag :th, "Actions" if actions.any? -        attributes_head + links_head -      end -    end - -    body = content_tag :tbody do -      collection.collect { |item| -        content_tag :tr do -          attributes = columns.collect { |col| -            content_tag(:td, item.try(col)) -          }.join.html_safe - -          # Build links -          links = content_tag :td, autolinks_builder(item, actions, :xs), class: 'text-center' if actions.any? - -          attributes + links -        end -      }.join.html_safe -    end - -    # content_tag :table, head + body, class: cls -    content_tag :table, "pouet" -  end - -  def autolinks_builder(item, actions, cls) -    link = [] - -    actions.each do |action| -      if action == "show" -        showlink = link_to(company_path(item), class: 'btn btn-default') do -          content_tag :span, "", class: 'fa fa-eye' -        end -        link << showlink -      elsif action == "edit" -        editlink = link_to(edit_company_path(item), class: 'btn btn-default') do -          content_tag :span, "", class: 'fa fa-pencil' -        end -        link << editlink -      elsif action == "delete" -        deletelink = link_to(company_path(item), method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-default') do -          content_tag :span, "", class: 'fa fa-trash-o' -        end -        link << deletelink -      end -    end - -    content_tag :div, class: "btn-group btn-group-#{cls}" do -      link.join().html_safe -    end -  end - -end diff --git a/app/views/referential_networks/_networks.html.slim b/app/views/referential_networks/_networks.html.slim index 8177be318..d2db33662 100644 --- a/app/views/referential_networks/_networks.html.slim +++ b/app/views/referential_networks/_networks.html.slim @@ -1,4 +1,10 @@  .networks +  = table_builder @networks, +    { 'Oid' => Proc.new { |n| n.objectid.local_id }, Chouette::Network.human_attribute_name(:name) => 'name' }, +    [:show, :edit], +    'table table-bordered' + +    table.table.table-bordered.table-hover      thead        tr @@ -6,26 +12,28 @@          th.text-center = "Actions"      tbody -      - @networks.each do |network| -        tr -          td -            span.label.label-default style='margin-right:5px' -              = network.objectid.local_id -            = network.name -           -          / Actions -          td.text-center -            .btn-group.btn-group-xs -              .btn-primary.btn.dropdown-toggle data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" -                span.fa.fa-bars -                span.caret -               -              ul.dropdown-menu -                li = link_to 'Voir', referential_network_path(@referential, network) -                - if policy(network).update? -                  li = link_to 'Editer', edit_referential_network_path(@referential, network) -                - if policy(network).destroy? -                  li = link_to 'Supprimer', referential_network_path(@referential, network), method: :delete, data: { confirm: t('networks.actions.destroy_confirm') } +      - @networks.each_with_index do |network, i| +        - if i < 6 +          tr +            td +              span.label.label-default style='margin-right:5px' +                = network.objectid.local_id +              = network.name +              = network.referential.id +             +            / Actions +            td.text-center +              .btn-group.btn-group-xs +                .btn-primary.btn.dropdown-toggle data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" +                  span.fa.fa-bars +                  span.caret +                 +                ul.dropdown-menu +                  li = link_to 'Voir', referential_network_path(@referential, network) +                  - if policy(network).update? +                    li = link_to 'Editer', edit_referential_network_path(@referential, network) +                  - if policy(network).destroy? +                    li = link_to 'Supprimer', referential_network_path(@referential, network), method: :delete, data: { confirm: t('networks.actions.destroy_confirm') } -  .text-center -    = will_paginate @networks, container: false, renderer: RemoteBootstrapPaginationLinkRenderer +  / .text-center +  /   = will_paginate @networks, container: false, renderer: RemoteBootstrapPaginationLinkRenderer | 
