Class: Pagination::MainController
- Inherits:
-
Volt::ModelController
- Object
- Volt::ModelController
- Pagination::MainController
- Defined in:
- app/pagination/controllers/main_controller.rb
Instance Method Summary collapse
- #current_page ⇒ Object
- #first_page ⇒ Object
- #last_page ⇒ Object
- #middle_window(cpage, total) ⇒ Object
- #next_page_url ⇒ Object
- #outer_window ⇒ Object
- #page_numbers ⇒ Object
- #page_param_name ⇒ Object
- #per_page ⇒ Object
- #previous_page_url ⇒ Object
- #set_page(page_number) ⇒ Object
-
#total_pages ⇒ Object
Assumes a promise and returns a promise.
- #url_for_page(page_number) ⇒ Object
- #window ⇒ Object
Instance Method Details
#current_page ⇒ Object
67 68 69 |
# File 'app/pagination/controllers/main_controller.rb', line 67 def current_page (params.send(:"_#{page_param_name}") || 1).to_i end |
#first_page ⇒ Object
82 83 84 |
# File 'app/pagination/controllers/main_controller.rb', line 82 def first_page current_page == 1 end |
#last_page ⇒ Object
78 79 80 |
# File 'app/pagination/controllers/main_controller.rb', line 78 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_url ⇒ Object
86 87 88 89 90 91 92 93 94 95 |
# File 'app/pagination/controllers/main_controller.rb', line 86 def next_page_url total_pages.then do |total_pages| new_page = current_page + 1 if new_page > total_pages next '' end url_for_page(new_page) end end |
#outer_window ⇒ Object
59 60 61 |
# File 'app/pagination/controllers/main_controller.rb', line 59 def outer_window (attrs.outer_window || 1).to_i end |
#page_numbers ⇒ Object
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 52 53 |
# File 'app/pagination/controllers/main_controller.rb', line 25 def page_numbers total_pages.then do |total| 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 pages end end |
#page_param_name ⇒ Object
106 107 108 |
# File 'app/pagination/controllers/main_controller.rb', line 106 def page_param_name attrs.page_param_name || :page end |
#per_page ⇒ Object
63 64 65 |
# File 'app/pagination/controllers/main_controller.rb', line 63 def per_page (attrs.per_page || 10).to_i end |
#previous_page_url ⇒ Object
97 98 99 100 101 102 103 104 |
# File 'app/pagination/controllers/main_controller.rb', line 97 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
114 115 116 117 |
# File 'app/pagination/controllers/main_controller.rb', line 114 def set_page(page_number) page_number = page_number.to_i params.send(:"_#{page_param_name}=", page_number) end |
#total_pages ⇒ Object
Assumes a promise and returns a promise
72 73 74 75 76 |
# File 'app/pagination/controllers/main_controller.rb', line 72 def total_pages attrs.total.then do |total| (total.to_i / per_page.to_f).ceil end end |
#url_for_page(page_number) ⇒ Object
110 111 112 |
# File 'app/pagination/controllers/main_controller.rb', line 110 def url_for_page(page_number) url_with({page_param_name => page_number}) end |
#window ⇒ Object
55 56 57 |
# File 'app/pagination/controllers/main_controller.rb', line 55 def window (attrs.window || 5).to_i end |