middleman-paginator 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -2
- data/lib/middleman-paginator.rb +2 -2
- data/lib/middleman/paginator.rb +4 -63
- data/lib/middleman/paginator/core.rb +43 -0
- data/lib/middleman/paginator/link_helpers.rb +51 -0
- data/lib/middleman/paginator/pages_group.rb +47 -0
- data/middleman-paginate_collection.gemspec +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a51e3554f21fb7fd0f457ae29527eeadb8631f94
|
4
|
+
data.tar.gz: 17bd2b609b80b3c2f00f209e60fe4cb5ab7b949d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e8d446b3aecff5d826d5383d8e617660d8c56153c60c1f672f97dca6b3f1ddb8c0d22e5cb2e5b5fa3bdba504b2a0df62062da3a48b704d9b37f926e251426c6
|
7
|
+
data.tar.gz: 171b7184cee87a2be73d060b1d10f9e9e7d8b15bfcef43cb61ff25426c84d74633f5e533d39245d2a157148cad478af2d954eb2702c99f9b63342f0a6a12483d
|
data/README.md
CHANGED
@@ -48,7 +48,7 @@ paginate(
|
|
48
48
|
Inside `template`, iterate over `per_page` number of `objects`
|
49
49
|
|
50
50
|
```haml
|
51
|
-
- objects.each do |object|
|
51
|
+
- paginator[:objects].each do |object|
|
52
52
|
// render object
|
53
53
|
|
54
54
|
= previous_page_link
|
@@ -56,6 +56,19 @@ Inside `template`, iterate over `per_page` number of `objects`
|
|
56
56
|
|
57
57
|
```
|
58
58
|
|
59
|
+
As you might've noticed paginator injects local variable called `paginator`. With following helpful data: `objects`, `page`, `destination`, `last_page`
|
60
|
+
|
59
61
|
### Helpers
|
60
62
|
|
61
|
-
Paginator provides
|
63
|
+
Paginator provides a few helper methods:
|
64
|
+
* `last_page_link`
|
65
|
+
* `previous_page_link`
|
66
|
+
* `next_page_link`
|
67
|
+
* `last_page_link`
|
68
|
+
* `pages`
|
69
|
+
They work like `link_to` helper and support same the arguments.
|
70
|
+
|
71
|
+
Here is an example with bootstrap styles:
|
72
|
+
|
73
|
+
```haml
|
74
|
+
```
|
data/lib/middleman-paginator.rb
CHANGED
data/lib/middleman/paginator.rb
CHANGED
@@ -1,65 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
class Paginator < ::Middleman::ConfigExtension
|
4
|
-
self.resource_list_manipulator_priority = 0
|
5
|
-
|
6
|
-
expose_to_config :paginate
|
7
|
-
|
8
|
-
option :per_page, 20, 'Controls pagination'
|
9
|
-
|
10
|
-
CollectionProxyDescriptor = Struct.new(:descriptors) do
|
11
|
-
def execute_descriptor(app, resources)
|
12
|
-
descriptors.reduce(resources) do |resources, descriptor|
|
13
|
-
if descriptor.metadata[:ignore]
|
14
|
-
d = ::Middleman::Sitemap::Extensions::Ignores::StringIgnoreDescriptor.new(descriptor.target)
|
15
|
-
d.execute_descriptor(app, resources)
|
16
|
-
end
|
17
|
-
|
18
|
-
descriptor.execute_descriptor(app, resources)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def paginate(destination:, objects:, template:, **page_options)
|
24
|
-
descriptors = []
|
25
|
-
|
26
|
-
objects.each_slice(options.per_page).with_index(1).reverse_each do |o, i|
|
27
|
-
paginate_options = { locals: { objects: o, page: i, destination: destination } }
|
28
|
-
path = i == 1 ? 'index.html' : "pages/#{i}.html"
|
29
|
-
|
30
|
-
descriptor = Middleman::Sitemap::Extensions::ProxyDescriptor.new(
|
31
|
-
::Middleman::Util.normalize_path("#{destination}#{path}"),
|
32
|
-
::Middleman::Util.normalize_path(template),
|
33
|
-
page_options.merge(paginate_options) { |key, v1, v2| v1.merge v2 }
|
34
|
-
)
|
35
|
-
|
36
|
-
descriptors << descriptor
|
37
|
-
end
|
38
|
-
|
39
|
-
CollectionProxyDescriptor.new(descriptors)
|
40
|
-
end
|
41
|
-
|
42
|
-
helpers do
|
43
|
-
def previous_page_link(options = {})
|
44
|
-
page = @locs[:page]
|
45
|
-
return if page == 1
|
46
|
-
|
47
|
-
path = if page == 2
|
48
|
-
"#{@locs[:destination]}index.html"
|
49
|
-
else
|
50
|
-
"#{@locs[:destination]}pages/#{page - 1}.html"
|
51
|
-
end
|
52
|
-
|
53
|
-
link_to 'Previous', path, **options
|
54
|
-
end
|
55
|
-
|
56
|
-
def next_page_link(options = {})
|
57
|
-
page = @locs[:page]
|
58
|
-
path = "#{@locs[:destination]}pages/#{page + 1}.html"
|
59
|
-
return unless sitemap.find_resource_by_path(path)
|
60
|
-
|
61
|
-
link_to 'Next', path, **options
|
62
|
-
end
|
63
|
-
end
|
1
|
+
module Paginator
|
64
2
|
end
|
65
3
|
|
4
|
+
require 'middleman/paginator/link_helpers'
|
5
|
+
require 'middleman/paginator/core'
|
6
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Paginator::Core < ::Middleman::ConfigExtension
|
2
|
+
helpers Paginator::LinkHelpers
|
3
|
+
|
4
|
+
self.resource_list_manipulator_priority = 0
|
5
|
+
|
6
|
+
expose_to_config :paginate
|
7
|
+
|
8
|
+
option :per_page, 20, 'Controls pagination'
|
9
|
+
|
10
|
+
CollectionProxyDescriptor = Struct.new(:descriptors) do
|
11
|
+
def execute_descriptor(app, resources)
|
12
|
+
descriptors.reduce(resources) do |resources, descriptor|
|
13
|
+
if descriptor.metadata[:ignore]
|
14
|
+
d = ::Middleman::Sitemap::Extensions::Ignores::StringIgnoreDescriptor.new(descriptor.target)
|
15
|
+
d.execute_descriptor(app, resources)
|
16
|
+
end
|
17
|
+
|
18
|
+
descriptor.execute_descriptor(app, resources)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def paginate(destination:, objects:, template:, **page_options)
|
24
|
+
descriptors = []
|
25
|
+
|
26
|
+
pages = objects.each_slice(options.per_page)
|
27
|
+
pages.with_index(1).reverse_each do |o, i|
|
28
|
+
paginate_options = { objects: o, page: i, destination: destination , last_page: pages.count }
|
29
|
+
path = i == 1 ? 'index.html' : "pages/#{i}.html"
|
30
|
+
|
31
|
+
descriptor = Middleman::Sitemap::Extensions::ProxyDescriptor.new(
|
32
|
+
::Middleman::Util.normalize_path("#{destination}#{path}"),
|
33
|
+
::Middleman::Util.normalize_path(template),
|
34
|
+
page_options.merge(locals: { paginator: paginate_options }) { |key, v1, v2| v1.merge v2 }
|
35
|
+
)
|
36
|
+
|
37
|
+
descriptors << descriptor
|
38
|
+
end
|
39
|
+
|
40
|
+
CollectionProxyDescriptor.new(descriptors)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'middleman/paginator/pages_group'
|
2
|
+
|
3
|
+
module Paginator::LinkHelpers
|
4
|
+
def previous_page_link(text: 'Previous', **options)
|
5
|
+
page = @locs[:paginator][:page]
|
6
|
+
return if page == 1
|
7
|
+
|
8
|
+
path = if page == 2
|
9
|
+
"#{@locs[:paginator][:destination]}index.html"
|
10
|
+
else
|
11
|
+
"#{@locs[:paginator][:destination]}pages/#{page - 1}.html"
|
12
|
+
end
|
13
|
+
|
14
|
+
link_to text, path, **options
|
15
|
+
end
|
16
|
+
|
17
|
+
def next_page_link(text: 'Next', **options)
|
18
|
+
page = @locs[:paginator][:page]
|
19
|
+
path = "#{@locs[:paginator][:destination]}pages/#{page + 1}.html"
|
20
|
+
return unless sitemap.find_resource_by_path(path)
|
21
|
+
|
22
|
+
link_to text, path, **options
|
23
|
+
end
|
24
|
+
|
25
|
+
def last_page_link(text: 'Last', **options)
|
26
|
+
page = @locs[:paginator][:last_page]
|
27
|
+
|
28
|
+
path = "#{@locs[:paginator][:destination]}pages/#{page + 1}.html"
|
29
|
+
|
30
|
+
link_to text, path, **options
|
31
|
+
end
|
32
|
+
|
33
|
+
def first_page_link(text: 'First', **options)
|
34
|
+
path = "#{@locs[:paginator][:destination]}index.html"
|
35
|
+
|
36
|
+
link_to text, path, **options
|
37
|
+
end
|
38
|
+
|
39
|
+
def pages(count: 5)
|
40
|
+
pages_group = Paginator::PagesGroup.new(
|
41
|
+
current: @locs[:paginator][:page], last: @locs[:paginator][:last_page], count: count
|
42
|
+
)
|
43
|
+
|
44
|
+
pages_group.generate do |page_number|
|
45
|
+
page_name = page_number == 1 ? 'index.html' : "pages/#{page_number}.html"
|
46
|
+
path = @locs[:paginator][:destination] + page_name
|
47
|
+
|
48
|
+
yield(page_number, path)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Paginator::PagesGroup
|
2
|
+
attr_reader :last, :current, :count
|
3
|
+
|
4
|
+
def initialize(current:, last:, count:)
|
5
|
+
@last = last
|
6
|
+
@current = current
|
7
|
+
@count = count
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate
|
11
|
+
(first_page..last_page).each do |page_number|
|
12
|
+
yield(page_number)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def left_spread
|
19
|
+
@left_spread ||= count / 2
|
20
|
+
end
|
21
|
+
|
22
|
+
def right_spread
|
23
|
+
@right_spread ||= count.odd? ? left_spread : (left_spread - 1)
|
24
|
+
end
|
25
|
+
|
26
|
+
def first_page
|
27
|
+
@first_page ||= pagination_beginning? ? 1 : current - left_spread
|
28
|
+
end
|
29
|
+
|
30
|
+
def last_page
|
31
|
+
@last_page ||= begin
|
32
|
+
return last if pagination_ending?
|
33
|
+
right_half_count = current + right_spread
|
34
|
+
left_half_count = left_spread - current + 1
|
35
|
+
return right_half_count + left_half_count if pagination_beginning?
|
36
|
+
right_half_count
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def pagination_beginning?
|
41
|
+
current <= left_spread
|
42
|
+
end
|
43
|
+
|
44
|
+
def pagination_ending?
|
45
|
+
current >= last - right_spread
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-paginator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TheSmartnik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: middleman-core
|
@@ -38,6 +38,9 @@ files:
|
|
38
38
|
- features/support/env.rb
|
39
39
|
- lib/middleman-paginator.rb
|
40
40
|
- lib/middleman/paginator.rb
|
41
|
+
- lib/middleman/paginator/core.rb
|
42
|
+
- lib/middleman/paginator/link_helpers.rb
|
43
|
+
- lib/middleman/paginator/pages_group.rb
|
41
44
|
- middleman-paginate_collection.gemspec
|
42
45
|
homepage: https://github.com/TheSmartnik/middleman-paginator
|
43
46
|
licenses: []
|