Sha256: d157f43cbdba5d97f7c80185c5065cd051be6cacd978bbee0980ea5f190aaf56

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

module RailsPaginate::Pagers
  # slider method
  class Slider < Base

    # how much pages should display around current_page
    cattr_accessor :inner
    @@inner = 3

    # how much pages should display at start and end
    cattr_accessor :outer
    @@outer = 1

    # build array with all visible pages
    def visible_pages
      visible = []
      last_inserted = 0
      splited = false
      (1..pages).each do |page|
        # insert
        if visible? page
          visible << page
          last_inserted = page
          splited = false
        else
          # need splitter
          if not splited and outer > 0 and last_inserted < page
            visible << nil
            splited = true
          end
        end
      end
      visible
    end

    # build dummy inner range
    def inner_range
      @inner_range ||= (current_page - inner)..(current_page + inner)
    end

    # looks should this page visible
    def visible?(page)
      # outer
      if outer > 0
        return true if outer >= page
        return true if (pages - outer) < page
      end

      # current page
      return true if current_page == page

      # inner
      return true if inner_range.include? page

      false
    end

    # get option of inner
    def inner
      options[:inner] || self.class.inner
    end

    # get option of out
    def outer
      options[:outer] || self.class.outer
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rails_paginate-0.0.7 lib/rails_paginate/pagers/slider.rb
rails_paginate-0.0.6 lib/rails_paginate/pagers/slider.rb
rails_paginate-0.0.5 lib/rails_paginate/pagers/slider.rb