alphabetical_paginate 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -101,6 +101,7 @@ Key | Value | Default |Description
101
101
  `:enumerate` | `Boolean` | `false` | Whether you want the number field collapsed (all numbers go into `0`) or separate (`0`, `1`, `2`...).
102
102
  `:default_field` | `String` | `"a"` | Which field you want the page to default to on first load (`"0"`, `"a"`. `"*"`).
103
103
  `:paginate_all` | `Boolean` | `false` | Whether you want empty fields to still render in pagination.
104
+ `:include_all` | `Boolean` | `true` | Whether you want `all` selector to be included in the pagination.
104
105
  `:numbers` | `Boolean` | `true` | Whether you want numbers to be included in the pagination at all, either collapsed, or expanded (depending on `:enumerate`).
105
106
  `:others` | `Boolean` | `true` | Whether you want all other characters (non alphanumeric) to be included in the pagination at all.
106
107
  `:pagination_class` | `String` | `"pagination-centered"` | All the classes you would like to add to the rendered pagination selector div (for CSS purposes).
@@ -1,40 +1,45 @@
1
1
  class Array
2
2
  def alpha_paginate current_field, params = {enumerate:false, default_field: "a",
3
- paginate_all: false, numbers: true,
4
- others: true, pagination_class: "pagination-centered"}
3
+ paginate_all: false, numbers: true, include_all: true,
4
+ others: true, pagination_class: "pagination-centered",
5
+ js: true}
5
6
  params[:paginate_all] ||= false
7
+ params[:include_all] = true if !params.has_key? :include_all
6
8
  params[:numbers] = true if !params.has_key? :numbers
7
9
  params[:others] = true if !params.has_key? :others
8
- params[:default_field] ||= "a"
10
+ params[:js] = true if !params.has_key? :js
11
+ params[:default_field] ||= params[:include_all] ? "all" : "a"
9
12
  params[:pagination_class] ||= "pagination-centered"
10
13
  output = []
11
14
  availableLetters = {}
12
15
  if current_field == nil
13
16
  current_field = params[:default_field]
14
17
  end
18
+ all = params[:include_all] && current_field.downcase == "all"
15
19
  self.each do |x|
16
20
  field_val = block_given? ? yield(x).to_s : x.id.to_s
17
21
  field_letter = field_val[0].downcase
18
22
  case field_letter
19
- when /[a-z]/
23
+ when /[a-z]/
20
24
  availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
21
- output << x if current_field =~ /[a-z]/ && field_letter == current_field
25
+ output << x if all || (current_field =~ /[a-z]/ && field_letter == current_field)
22
26
  when /[0-9]/
23
27
  if params[:enumerate]
24
28
  availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
25
- output << x if current_field =~ /[0-9]/ && field_letter == current_field
29
+ output << x if all || (current_field =~ /[0-9]/ && field_letter == current_field)
26
30
  else
27
- availableLetters['0'] = true if !availableLetters.has_key? 'numbers'
28
- output << x if current_field == "0"
31
+ availableLetters['0-9'] = true if !availableLetters.has_key? 'numbers'
32
+ output << x if all || current_field == "0-9"
29
33
  end
30
34
  else
31
35
  availableLetters['*'] = true if !availableLetters.has_key? 'other'
32
- output << x if current_field == "*"
36
+ output << x if all || current_field == "*"
33
37
  end
34
38
  end
35
39
  params[:availableLetters] = availableLetters.collect{|k,v| k.to_s}
36
40
  params[:currentField] = current_field
37
- output.sort! {|x, y| yield(x).to_s <=> yield(y).to_s }
41
+ output.sort! {|x, y| block_given? ? (yield(x).to_s <=> yield(y).to_s) : (x.id.to_s <=> y.id.to_s) }
38
42
  return output, params
39
43
  end
40
44
  end
45
+
@@ -8,10 +8,12 @@ module AlphabeticalPaginate
8
8
  paginate_all: false, numbers: true,
9
9
  others: true, pagination_class: "pagination-centered",
10
10
  batch_size: 500, db_mode: false,
11
- db_field: "id"}
11
+ db_field: "id",
12
+ js: true}
12
13
  params[:paginate_all] ||= false
13
14
  params[:numbers] = true if !params.has_key? :numbers
14
15
  params[:others] = true if !params.has_key? :others
16
+ params[:js] = true if !params.has_key? :js
15
17
  params[:pagination_class] ||= "pagination-centered"
16
18
  params[:batch_size] ||= 500
17
19
  params[:default_field] ||= "a"
@@ -1,3 +1,3 @@
1
1
  module AlphabeticalPaginate
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -14,8 +14,9 @@ module AlphabeticalPaginate
14
14
  if params[:enumerate] && params[:numbers]
15
15
  range = (0..9).to_a.map{|x| x.to_s} + range
16
16
  elsif params[:numbers]
17
- range = ["0"] + range
17
+ range = ["0-9"] + range
18
18
  end
19
+ range.unshift "all" if params[:include_all]
19
20
  range.each do |l|
20
21
  if l == params[:currentField]
21
22
  links += '<li class="active"><a href="#" data-letter="' + l + '">' + l + "</a></li>"
@@ -28,6 +29,7 @@ module AlphabeticalPaginate
28
29
  else
29
30
  params[:availableLetters].sort!
30
31
  params[:availableLetters] = params[:availableLetters][1..-1] + ["*"] if params[:availableLetters][0] == "*"
32
+ params[:availableLetters].unshift "all" if params[:include_all]
31
33
  params[:availableLetters] -= (1..9).to_a.map{|x| x.to_s} if !params[:numbers]
32
34
  params[:availableLetters] -= ["*"] if !params[:others]
33
35
 
@@ -83,7 +83,7 @@ module AlphabeticalPaginate
83
83
  it "should include a numbers and others field" do
84
84
  index, params = @list.alpha_paginate(nil)
85
85
  pagination = alphabetical_paginate(params)
86
- (["#"] + ["0"] + ("a".."z").to_a.map{|x|
86
+ (["*"] + ["0-9"] + ("a".."z").to_a.map{|x|
87
87
  'data-letter="%s"'%x}).each do |x|
88
88
  pagination.should include x
89
89
  end
@@ -92,7 +92,7 @@ module AlphabeticalPaginate
92
92
  it "should default all values when necessary" do
93
93
  index, params = @list.alpha_paginate(nil, {})
94
94
  pagination = alphabetical_paginate(params)
95
- (["#"] + ["0"] + ("a".."z").to_a.map{|x|
95
+ (["*"] + ["0-9"] + ("a".."z").to_a.map{|x|
96
96
  'data-letter="%s"'%x}).each do |x|
97
97
  pagination.should include x
98
98
  end
@@ -105,8 +105,8 @@ module AlphabeticalPaginate
105
105
  'data-letter="%s"'%x}).each do |x|
106
106
  pagination.should include x
107
107
  end
108
- pagination.should_not include 'data-letter="z"', 'data-letter="#"',
109
- 'data-letter="0"'
108
+ pagination.should_not include 'data-letter="z"', 'data-letter="*"',
109
+ 'data-letter="0-9"'
110
110
  end
111
111
 
112
112
  it "should enumerate when asked" do
@@ -123,15 +123,20 @@ module AlphabeticalPaginate
123
123
  index, params = @list.alpha_paginate(nil, {paginate_all: true,
124
124
  enumerate: true}){|x| x.word}
125
125
  pagination = alphabetical_paginate(params)
126
- (["#"] + (0..9).to_a.map{|x| x.to_s} + ("a".."z").to_a.map{|x|
126
+ (["*"] + (0..9).to_a.map{|x| x.to_s} + ("a".."z").to_a.map{|x|
127
127
  'data-letter="%s"'%x}).each do |x|
128
128
  pagination.should include x
129
129
  end
130
130
  end
131
131
 
132
-
133
-
132
+ it "should include 'all' and '0-9' fields" do
133
+ index, params = @list.alpha_paginate(nil, { include_all: true })
134
+ pagination = alphabetical_paginate(params)
135
+ (["all", "0-9"].map{|x|
136
+ 'data-letter="%s"'%x}).each do |x|
137
+ pagination.should include x
138
+ end
139
+ end
134
140
  end
135
141
  end
136
-
137
142
  end
@@ -9,7 +9,7 @@ $(function() {
9
9
  var url = location.href,
10
10
  letter = $(this).data("letter");
11
11
  if (/letter/.test(url)){
12
- url = url.replace(/letter=?./,"letter=" + letter);
12
+ url = url.replace(/letter=?.{1,3}/,"letter=" + letter);
13
13
  }
14
14
  else {
15
15
  if (/\?/.test(url)) {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alphabetical_paginate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-06 00:00:00.000000000 Z
12
+ date: 2013-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler