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
- #url_for_page(page_number) ⇒ Object
- #window ⇒ Object
Instance Method Details
#current_page ⇒ Object
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_page ⇒ Object
77 78 79 |
# File 'app/pagination/controllers/main_controller.rb', line 77 def first_page current_page == 1 end |
#last_page ⇒ Object
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_url ⇒ Object
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_window ⇒ Object
57 58 59 |
# File 'app/pagination/controllers/main_controller.rb', line 57 def outer_window attrs.outer_window.or(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 |
# 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_name ⇒ Object
99 100 101 |
# File 'app/pagination/controllers/main_controller.rb', line 99 def page_param_name attrs.page_param_name || :page end |
#per_page ⇒ Object
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_url ⇒ Object
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_pages ⇒ Object
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 |
#window ⇒ Object
53 54 55 |
# File 'app/pagination/controllers/main_controller.rb', line 53 def window attrs.window.or(5).to_i end |