Module: Buscar::Helpers
- Defined in:
- lib/buscar/helpers.rb
Instance Method Summary collapse
- #buscar_index_menu(index, type, options) ⇒ Object
- #filter_menu(index, options = {}, &block) ⇒ Object
-
#page_links(index) ⇒ Object
Accepts an instance of Buscar::Index, which will tell it the total number of pages, the current page, and the number of records per page.
- #sort_menu(index, options = {}, &block) ⇒ Object
Instance Method Details
#buscar_index_menu(index, type, options) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/buscar/helpers.rb', line 53 def (index, type, ) .reverse_merge! :link_to_current => true content_tag('ul', :class => "#{type}_menu") do choices = '' index.send("#{type}_param_options").each do |param, label_str| choices << content_tag('li') do label_str = param.to_s.humanize if label_str.nil? is_selected = index.send("#{type}_param").to_s == param.to_s if is_selected and ![:link_to_current] ('<span class="selected">' + label_str + '</span>').html_safe else = is_selected ? {:class => 'selected'} : {} link_to label_str, yield(param), end end end choices.html_safe end.html_safe end |
#filter_menu(index, options = {}, &block) ⇒ Object
73 74 75 |
# File 'lib/buscar/helpers.rb', line 73 def (index, = {}, &block) (index, 'filter', , &block) end |
#page_links(index) ⇒ Object
Accepts an instance of Buscar::Index, which will tell it the total number of pages, the current page, and the number of records per page. Accepts a block, which is yielded each page number and must return a URL to that page.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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 'lib/buscar/helpers.rb', line 5 def page_links(index) unless block_given? raise ArgumentError, 'page_links requires a block.' end total_pages = index.page_count if total_pages > 1 current_page = index.page + 1 content_tag('ul', 'class' => 'pagination') do lis = '' min_page = current_page - 2 min_page = 1 if min_page < 1 max_page = current_page + 2 max_page = total_pages if max_page > total_pages if current_page > 1 lis << content_tag('li', link_to('« Back'.html_safe, yield(current_page - 1))) end if min_page > 1 lis << content_tag('li', link_to('1', yield(1))) end if min_page > 2 lis << content_tag('li', '...') end (min_page..max_page).each do |page| lis << content_tag('li') do if current_page.to_i == page page.to_s else link_to page, yield(page) end end end if max_page < total_pages - 1 lis << content_tag('li', '...') end if max_page < total_pages lis << content_tag('li', link_to(total_pages, yield(total_pages))) end if current_page < total_pages lis << content_tag('li', link_to('Next »'.html_safe, yield(current_page + 1))) end lis.html_safe end.html_safe else nil end end |
#sort_menu(index, options = {}, &block) ⇒ Object
77 78 79 |
# File 'lib/buscar/helpers.rb', line 77 def (index, = {}, &block) (index, 'sort', , &block) end |