prey/gdpr_rails

View on GitHub
lib/policy_manager/exporter/paginator_renderer.rb

Summary

Maintainability
A
1 hr
Test Coverage
require "will_paginate"
require 'will_paginate/view_helpers/action_view'
require 'will_paginate/array'

module PolicyManager
  class PaginatorRenderer < WillPaginate::ActionView::LinkRenderer
    ELLIPSIS = '&hellip;'

    def to_html
      list_items = pagination.map do |item|
        case item
          when (1.class == Integer ? Integer : Fixnum)
            page_number(item)
          else
            send(item)
        end
      end.join(@options[:link_separator])

      list_wrapper = tag :nav, list_items, class: "pagination button-group"
      tag :nav, list_wrapper
    end

    def container_attributes
      super.except(*[:link_options])
    end

    protected

    def page_number(page)
      link_options = @options[:link_options] || {}

      if page == current_page
        tag(:a, page, class: 'btn page-item active', href: '')
      else
        tag(:a, page, href: page_path(page), class: 'page-link btn', rel: rel_value(page))
      end
    end

    def page_path(page)
      return "../index.html" if page == 1
      if @collection.current_page == 1
        return "./#{page}/index.html" if @collection.current_page < page
        return "../#{page}/index.html" if @collection.current_page > page
      else
        return "../#{page}/index.html"
      end
    end

    def previous_or_next_page(page, text, classname)
      link_options = @options[:link_options] || {}
      if page
        link_wrapper = tag(:a, text || page, href: page_path(page), class: "page-link btn" + classname.to_s)
        # link_wrapper, class: 'page-item '
      else
        tag(:a, text, href:'', class: 'page-link btn')
        # span_wrapper, class: 'page-item disabled'
      end
    end

    def gap
      tag :p, tag(:i, ELLIPSIS, class: 'page-link'), class: 'page-item disabled btn'
    end

    def previous_page
      num = @collection.current_page > 1 && @collection.current_page - 1
      previous_or_next_page num, @options[:previous_label], 'previous btn'
    end

    def next_page
      num = @collection.current_page < @collection.total_pages && @collection.current_page + 1
      previous_or_next_page num, @options[:next_label], 'next btn'
    end

  end
end