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 tags

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.

  • prev_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.

  • :inner_spread – default: 3, set to nil to show all pages, set 0 to show no page links. This represents how many choices available on each side of the current page

  • :outer_spread – default: 1, set to nil to disable, set to 0 show no outer spread but the separator will still be present. This represents how many choices are in the “outer” spread.

  • :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



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/searchgasm/helpers/control_types/links.rb', line 99

def page_links(options = {})
  add_page_links_defaults!(options)
  return if options[:last_page] <= 1
  
  inner_spread_start = inner_spread_end = lower_gap = lower_outer_spread_start = lower_outer_spread_end = upper_gap = upper_outer_spread_start = upper_outer_spread_end = 0
  if !options[:inner_spread].blank?
    inner_spread_start = options[:current_page] - options[:inner_spread]
    inner_spread_start = options[:first_page] if inner_spread_start < options[:first_page]
    inner_spread_end = options[:current_page] + options[:inner_spread]
    inner_spread_end = options[:last_page] if inner_spread_end > options[:last_page]
    
    if !options[:outer_spread].blank?
      lower_gap = inner_spread_start - options[:first_page]
      if lower_gap > 0
        lower_outer_spread_start = options[:first_page]
        lower_outer_spread_end = options[:outer_spread] > lower_gap ? lower_gap : options[:outer_spread]
      end
      
      upper_gap = options[:last_page] - inner_spread_end
      if upper_gap > 0
        upper_outer_spread_start = options[:last_page] - (options[:outer_spread] > upper_gap ? upper_gap : options[:outer_spread]) + 1
        upper_outer_spread_end = options[:last_page]
      end
    end
  else
    inner_spread_start = options[:first_page]
    inner_spread_end = 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]
  
  if lower_gap > 0
    (lower_outer_spread_start..lower_outer_spread_end).each { |page| html += span_or_page_link(page, options.deep_dup, false) }
    html += (:span, "&hellip;", options[:html]) if (inner_spread_start - lower_outer_spread_end) > 1
  end
  
  (inner_spread_start..inner_spread_end).each { |page| html += span_or_page_link(page, options.deep_dup, page == options[:current_page]) }
  
  if upper_gap > 0
    html += (:span, "&hellip;", options[:html]) if (upper_outer_spread_start - inner_spread_end) > 1
    (upper_outer_spread_start..upper_outer_spread_end).each { |page| html += span_or_page_link(page, options.deep_dup, false) }
  end
  
  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