:ruby
  query = params[:query]
  params = request.params.except(:authenticity_token, :action, :controller, :utf8, :bulk_export, :_pjax)
  params.delete(:query) if params[:query].blank?
  params.delete(:sort_reverse) unless params[:sort_reverse] == 'true'
  sort_reverse = params[:sort_reverse]
  sort = params[:sort]
  params.delete(:sort) if params[:sort] == @model_config.list.sort_by.to_s
  export_action = RailsAdmin::Config::Actions.find(:export, { controller: self.controller, abstract_model: @abstract_model })
  export_action = nil unless export_action && authorized?(export_action.authorization_key, @abstract_model)
  description = RailsAdmin.config(@abstract_model.model_name).description
  properties = @model_config.list.with(controller: self.controller, view: self, object: @abstract_model.model.new).visible_fields
  checkboxes = @model_config.list.checkboxes?
  # columns paginate
  unless (frozen_columns = @model_config.list.sidescroll_frozen_columns)
    sets = get_column_sets(properties)
    properties = sets[params[:set].to_i] || []
    other_left = ((params[:set].to_i - 1) >= 0) && sets[params[:set].to_i - 1].present?
    other_right = sets[params[:set].to_i + 1].present?
  end

- content_for :contextual_tabs do
  - if checkboxes
    = bulk_menu
  - if filterable_fields.present?
    %li.dropdown{style: 'float:right'}
      %a.dropdown-toggle#filters-menu{ :'data-toggle' => "dropdown", :'aria-haspopup'=>"true", :'aria-expanded'=>"true"}
        = t('admin.misc.add_filter')
        %b.caret
      %ul.dropdown-menu#filters{style: 'left:auto; right:0;', :'aria-labelledby'=>"filters-menu"}
        - filterable_fields.each do |field|
          - field_options = case field.type
          - when :enum
            - options_for_select(field.with(object: @abstract_model.model.new).enum)
          - else
            - ''
          %li
            %a{href: '#', :"data-field-label" => field.label, :"data-field-name" => field.name, :"data-field-options" => field_options.html_safe, :"data-field-type" => field.type, :"data-field-value" => "", :"data-field-datetimepicker-format" => (field.try(:parser) && field.parser.to_momentjs)}= capitalize_first_letter(field.label)

%style
  - properties.select{ |p| p.column_width.present? }.each do |property|
    = "#list th.#{property.css_class} { width: #{property.column_width}px; min-width: #{property.column_width}px; }"
    = "#list td.#{property.css_class} { max-width: #{property.column_width}px; }"

#list
  = form_tag(index_path(params.except(*%w[page f query])), method: :get, class: "pjax-form form-inline") do
    %span#filters_box{data: {options: ordered_filter_options.to_json}}
    %hr.filters_box{style: "display:#{ordered_filters.empty? ? 'none' : 'block'}"}
    .input-group
      %input.form-control.input-small{name: "query", type: "search", value: query, placeholder: t("admin.misc.filter")}
      %span.input-group-btn
        %button.btn.btn-primary{type: 'submit', :'data-disable-with' => '<i class="icon-white icon-refresh"></i> '.html_safe + t('admin.misc.refresh')}
          %i.icon-white.icon-refresh
          = t('admin.misc.refresh')
        %button#remove_filter.btn.btn-info{title: "Reset filters"}
          %i.icon-white.icon-remove
    - if export_action
      %span{style: 'float:right'}= link_to wording_for(:link, export_action), export_path(params.except('set').except('page')), class: 'btn btn-info'

  - unless @model_config.list.scopes.empty?
    %ul.nav.nav-tabs.nav-justified#scope_selector
      - @model_config.list.scopes.each do |scope|
        - scope = '_all' if scope.nil?
        %li{ class: "#{ scope.to_s == params[:scope] || (params[:scope].nil? && scope == "_all") ? "selected" : "inactive"}"}
          %a.nav-link{href: index_path(params.merge(scope: scope, page: nil)), class: 'pjax'}= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize))
    
  = form_tag bulk_action_path(model_name: @abstract_model.to_param), method: :post, id: "bulk_form", class: ["form", frozen_columns ? 'ra-sidescroll' : nil], data: (frozen_columns ? {ra_sidescroll: frozen_columns} : {}) do
    = hidden_field_tag :bulk_action
    - if description.present?
      %p
        %strong= description

    - @objects.each do |object|
      = render partial: "card", locals: {object: object, properties: properties, sort: sort, sort_reverse: sort_reverse}

    - if @model_config.list.limited_pagination
      .row
        .col-md-6= paginate(@objects, theme: 'ra-twitter-bootstrap/without_count', total_pages: Float::INFINITY, remote: true)

    - elsif @objects.respond_to?(:total_count)
      - total_count = @objects.total_count.to_i
      .row
        .col-md-6= paginate(@objects, theme: 'ra-twitter-bootstrap', remote: true)
      .row
        .col-md-6= link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "show-all btn btn-default clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size
      .clearfix.total-count= "#{total_count} #{@model_config.pluralize(total_count).downcase}"

    - else
      .clearfix.total-count= "#{@objects.size} #{@model_config.pluralize(@objects.size).downcase}"