middleman-paginator 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 519980611123aa1088aa0fe2e937cc28ebfc3fa3
4
+ data.tar.gz: 240ee374dc4fc0d09c79b39ff016a62a84bf464d
5
+ SHA512:
6
+ metadata.gz: 2707fdb78fd6a427906155118b2c42a7adca261a08da896c62cd5d447c748f9729d4cbb7e21840bbfe592a9fb72a0d48263885906a3f532e76a3615824590616
7
+ data.tar.gz: 67264f0e7f2c6607043ff7f7691ec1f3ada314102ca5d8481ef63aad854427ae473a591b6a893c0ce9c35741780b22164bbfc5d11b7b13d34fbedb5c758c4c47
@@ -0,0 +1,5 @@
1
+ # Ignore bundler lock file
2
+ /Gemfile.lock
3
+
4
+ # Ignore pkg folder
5
+ /pkg
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem 'rake'
7
+ gem 'rdoc'
8
+ gem 'yard'
9
+ end
10
+
11
+ group :test do
12
+ gem 'cucumber'
13
+ gem 'aruba'
14
+ gem 'rspec'
15
+ end
@@ -0,0 +1,61 @@
1
+ # Middleman Paginator
2
+ A simple plugin that allows paginating any collection of objects
3
+
4
+ ## Instalation
5
+
6
+ Add this to your Gemfile
7
+
8
+ ```
9
+ gem 'middleman-paginator'
10
+ ```
11
+
12
+ ## Use
13
+
14
+ ### Activate gem in `config.rb`
15
+
16
+ ```ruby
17
+ activate :paginator do |e|
18
+ e.per_page = 25 # Default 20
19
+ end
20
+ ```
21
+
22
+ ### Paginate
23
+
24
+ `destination` - Path to put pages in. Expects `/` in the end.
25
+ Produced pages will have following path `#{destination}pages/index.html`, `#{destination}pages/2.html`
26
+
27
+ `template` - Path to the template.
28
+ If you don't want to render template by itself pass `ignore: true` to extra arguments.
29
+
30
+ `objects` - Objects to paginate. You will have access to them inside the template as `objects`.
31
+
32
+ `locals` - If you have need any other variables inside the template, pass them allong as you normally would.
33
+
34
+ `ignore` - See `template` option description.
35
+
36
+ ```ruby
37
+ paginate(
38
+ destination: '/',
39
+ template: 'template.html',
40
+ objects: objects,
41
+ locals: { },
42
+ ignore: true
43
+ )
44
+ ```
45
+
46
+ ### Access from template
47
+
48
+ Inside `template`, iterate over `per_page` number of `objects`
49
+
50
+ ```haml
51
+ - objects.each do |object|
52
+ // render object
53
+
54
+ = previous_page_link
55
+ = next_page_link
56
+
57
+ ```
58
+
59
+ ### Helpers
60
+
61
+ Paginator provides to helper methods: `previous_page_link`, `next_page_link`. They supposed to just work.
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'cucumber/rake/task'
5
+
6
+ Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
7
+ t.cucumber_opts = '--color --tags ~@wip --strict'
8
+ end
9
+
10
+ require 'rake/clean'
11
+
12
+ task test: ['cucumber']
13
+
14
+ task default: :test
@@ -0,0 +1,4 @@
1
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
2
+ require 'middleman-core'
3
+ require 'middleman-core/step_definitions'
4
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-paginator)
@@ -0,0 +1,7 @@
1
+ require "middleman-core"
2
+
3
+ Middleman::Extensions.register :paginator do
4
+ require "middleman/paginator"
5
+
6
+ Paginator
7
+ end
@@ -0,0 +1,65 @@
1
+ require 'middleman-core'
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
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, class: 'page-link'
54
+ end
55
+
56
+ def next_page_link
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, class: 'page-link'
62
+ end
63
+ end
64
+ end
65
+
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "middleman-paginator"
6
+ s.version = "0.0.3"
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["TheSmartnik"]
9
+ s.email = ["misharinn@gmail.com"]
10
+ s.homepage = "https://github.com/TheSmartnik/middleman-paginator"
11
+ s.summary = %q{A simple plugin to allow pagination in middleman}
12
+ s.description = %q{A simple way to paginate any collection in middleman }
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_runtime_dependency("middleman-core", [">= 4.2.1"])
20
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: middleman-paginator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - TheSmartnik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: middleman-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.1
27
+ description: 'A simple way to paginate any collection in middleman '
28
+ email:
29
+ - misharinn@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - Gemfile
36
+ - README.md
37
+ - Rakefile
38
+ - features/support/env.rb
39
+ - lib/middleman-paginator.rb
40
+ - lib/middleman/paginator.rb
41
+ - middleman-paginate_collection.gemspec
42
+ homepage: https://github.com/TheSmartnik/middleman-paginator
43
+ licenses: []
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.6.14
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: A simple plugin to allow pagination in middleman
65
+ test_files:
66
+ - features/support/env.rb