Module: Searchgasm::Helpers::ControlTypes::Links

Defined in:
lib/searchgasm/helpers/control_types/links.rb

Instance Method Summary collapse

Instance Method Details

Creates a group of links that ascend or descend the data. All that this does is loop through the :choices option and call order_as_link and then glue it all together.

Examples

order_as_links
order_as_links(:choices => [:ascending, :descending])

Options

Please look at order_as_link. All options there are applicable here and are passed onto each option.

  • :choices – default: [“asc”, “desc”], the choices to loop through when calling order_as_link



38
39
40
41
42
43
44
45
# File 'lib/searchgasm/helpers/control_types/links.rb', line 38

def order_as_links(options = {})
  add_order_as_links_defaults!(options)
  link_options = options.deep_dup
  link_options.delete(:choices)
  html = ""
  options[:choices].each { |choice| html += order_as_link(choice, link_options.deep_dup) }
  html
end

Creates a group of links that order the data by a column or columns. All that this does is loop through the :choices option and call order_by_link and then glue it all together.

Examples

order_by_links
order_by_links(:choices => [:name, {:orders => {:line_items => :total}}, :email])

Options

Please look at order_by_link. All options there are applicable here and are passed onto each option.

  • :choices – default: the models column names, the choices to loop through when calling order_by_link



17
18
19
20
21
22
23
24
# File 'lib/searchgasm/helpers/control_types/links.rb', line 17

def order_by_links(options = {})
  add_order_by_links_defaults!(options)
  link_options = options.deep_dup
  link_options.delete(:choices)
  html = ""
  options[:choices].each { |choice| html += order_by_link(choice, link_options.deep_dup) }
  html
end

Creates a group of links that paginate through the data. Kind of like a flickr page navigation. This one has some nifty options.

Examples

page_links
page_links(:first => "<< First", :last => "Last >>")

Classes and tag

If the user is on the current page they will get a <span> tag, not an <a> tag. If they are on the first page the “first” and “prev” options will be a <span> also. The same goes for “next” and “last” if the user is on the last page. Other than that each element will come with a CSS class so you can style it to your liking. Somtimes the easiest way to understand this Is to either look at the example (linked in the README) or try it out and view the HTML source. It’s pretty simple, but here are the explanations:

  • page - This is in every element, span or a.

  • first_page - This is for the “first page” element only.

  • preve_page - This is for the “prev page” element only.

  • current_page - This is for the current page element

  • next_page - This is for the “next page” element only.

  • last_page - This is for the “last page” element only.

  • disabled_page - Any element that is a span instead of an a tag.

Options

Please look at per_page_link. All options there are applicable here and are passed onto each option.

  • :spread – default: 3, set to nil to show all page, this represents how many choices available on each side of the current page

  • :prev – default: < Prev, set to nil to omit. This is an extra link on the left side of the page links that will go to the previous page

  • :next – default: Next >, set to nil to omit. This is an extra link on the right side of the page links that will go to the next page

  • :first – default: nil, set to nil to omit. This is an extra link on thefar left side of the page links that will go to the first page

  • :last – default: nil, set to nil to omit. This is an extra link on the far right side of the page links that will go to the last page



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/searchgasm/helpers/control_types/links.rb', line 98

def page_links(options = {})
  add_page_links_defaults!(options)
  return if options[:last_page] <= 1
  
  first_page = 0
  last_page = 0
  if !options[:spread].blank?
    first_page = options[:current_page] - options[:spread]
    first_page = options[:first_page] if first_page < options[:first_page]
    last_page = options[:current_page] + options[:spread]
    last_page = options[:last_page] if last_page > options[:last_page]
  else
    first_page = options[:first_page]
    last_page = options[:last_page]
  end
  
  html = ""
  html += span_or_page_link(:first, options.deep_dup, options[:current_page] == options[:first_page]) if options[:first]
  html += span_or_page_link(:prev, options.deep_dup, options[:current_page] == options[:first_page]) if options[:prev]
  (first_page..last_page).each { |page| html += span_or_page_link(page, options.deep_dup, page == options[:current_page]) }
  html += span_or_page_link(:next, options.deep_dup, options[:current_page] == options[:last_page]) if options[:next]
  html += span_or_page_link(:last, options.deep_dup, options[:current_page] == options[:last_page]) if options[:last]
  html
end

Creates a group of links that limit how many items are on each page. All that this does is loop through the :choices option and call per_page_link and then glue it all together.

Examples

per_page_links
per_page_links(:choices => [25, 50, nil])

Options

Please look at per_page_link. All options there are applicable here and are passed onto each option.

  • :choices – default: [10, 25, 50, 100, 150, 200, nil], the choices to loop through when calling per_page_link.



59
60
61
62
63
64
65
66
# File 'lib/searchgasm/helpers/control_types/links.rb', line 59

def per_page_links(options = {})
  add_per_page_links_defaults!(options)
  link_options = options.deep_dup
  link_options.delete(:choices)
  html = ""
  options[:choices].each { |choice| html += per_page_link(choice, link_options.deep_dup) }
  html
end