Class: Pagination::MainController

Inherits:
Volt::ModelController
  • Object
show all
Defined in:
app/pagination/controllers/main_controller.rb

Instance Method Summary collapse

Instance Method Details

#current_pageObject



65
66
67
# File 'app/pagination/controllers/main_controller.rb', line 65

def current_page
  params.send(:"_#{page_param_name}").or(1).to_i
end

#first_pageObject



77
78
79
# File 'app/pagination/controllers/main_controller.rb', line 77

def first_page
  current_page == 1
end

#last_pageObject



73
74
75
# File 'app/pagination/controllers/main_controller.rb', line 73

def last_page
  current_page == page_numbers.last
end

#middle_window(cpage, total) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/pagination/controllers/main_controller.rb', line 4

def middle_window(cpage, total)
  side_size = ((window - 1) / 2).ceil

  start_pos = cpage - side_size
  end_pos = cpage + side_size

  if start_pos <= 0
    end_pos += (0 - start_pos) + 1
    start_pos = 1
  end

  if end_pos > total
    start_pos = [start_pos - (end_pos - total), 1].max
    end_pos = total
  end

  end_pos = [end_pos, 1].max

  return start_pos, end_pos
end

#next_page_urlObject



81
82
83
84
85
86
87
88
# File 'app/pagination/controllers/main_controller.rb', line 81

def next_page_url
  new_page = current_page + 1
  if new_page > total_pages
    return ''
  end

  return url_for_page(new_page)
end

#outer_windowObject



57
58
59
# File 'app/pagination/controllers/main_controller.rb', line 57

def outer_window
  attrs.outer_window.or(1).to_i
end

#page_numbersObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/pagination/controllers/main_controller.rb', line 25

def page_numbers
  total = total_pages()
  cpage = current_page()

  start_pos, end_pos = middle_window(cpage, total)
  middle_window = (start_pos..end_pos).to_a

  if outer_window == 0
    pages = middle_window
  else
    side_size = ((outer_window - 1) / 2).ceil

    start_outer_pos = [1 + side_size, start_pos-1].min
    end_outer_pos = [total - side_size, end_pos + 1].max

    start_window = (1..start_outer_pos).to_a
    end_window = (end_outer_pos..total).to_a

    pages = start_window
    pages << nil unless start_outer_pos == (middle_window[0] - 1)
    pages += middle_window
    pages << nil unless end_outer_pos == middle_window[-1] + 1
    pages += end_window
  end

  return pages
end

#page_param_nameObject



99
100
101
# File 'app/pagination/controllers/main_controller.rb', line 99

def page_param_name
  attrs.page_param_name || :page
end

#per_pageObject



61
62
63
# File 'app/pagination/controllers/main_controller.rb', line 61

def per_page
  attrs.per_page.or(10).to_i
end

#previous_page_urlObject



90
91
92
93
94
95
96
97
# File 'app/pagination/controllers/main_controller.rb', line 90

def previous_page_url
  new_page = current_page - 1
  if new_page < 1
    return ''
  end

  return url_for_page(new_page)
end

#set_page(page_number) ⇒ Object



107
108
109
110
# File 'app/pagination/controllers/main_controller.rb', line 107

def set_page(page_number)
  page_number = page_number.to_i
  params.send(:"_#{page_param_name}=", page_number)
end

#total_pagesObject



69
70
71
# File 'app/pagination/controllers/main_controller.rb', line 69

def total_pages
  (attrs.total.to_i / per_page.to_f).ceil
end

#url_for_page(page_number) ⇒ Object



103
104
105
# File 'app/pagination/controllers/main_controller.rb', line 103

def url_for_page(page_number)
  url_with({page_param_name => page_number})
end

#windowObject



53
54
55
# File 'app/pagination/controllers/main_controller.rb', line 53

def window
  attrs.window.or(5).to_i
end