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 +1 -0
- data/lib/alphabetical_paginate/array.rb +15 -10
- data/lib/alphabetical_paginate/controller_helper.rb +3 -1
- data/lib/alphabetical_paginate/version.rb +1 -1
- data/lib/alphabetical_paginate/view_helpers.rb +3 -1
- data/spec/alphabetical_paginate_spec.rb +13 -8
- data/vendor/assets/javascripts/alphabetical_paginate.js +1 -1
- metadata +2 -2
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[:
|
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"
|
@@ -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
|
-
(["
|
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
|
-
(["
|
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
|
-
(["
|
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
|
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.
|
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-
|
12
|
+
date: 2013-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|