volt-pagination 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3e65eb7e52ea0fb7c9a1a9ee3a4aa11ef971f0e2
4
+ data.tar.gz: fbb222ee9d8ff831dc8988a2ff2c5e2873acb832
5
+ SHA512:
6
+ metadata.gz: 186400610afcc52340bfe7e0206ad5fd31d024f5300620360f7002417950876fda89cb0f8a23a9ef8093eb548db5fd180916b2ad0d2799e00563a5403353d041
7
+ data.tar.gz: 8f7783af49ef7aa712292328dc2223b04df0a47c879f7f5889dd2206fafb443165fb27f3fbb53cd7a16508be631bba678dfd563ec360141562d80f84596b9644
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in volt-pagination.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # Volt::Pagination
2
+
3
+ Provides a pagination component to easily show the paging.
4
+
5
+ ## Usage
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'volt-pagination'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Then include it as a component in your main component's ```dependencies.rb```
16
+
17
+ component "pagination"
18
+
19
+ To page a collection or query, simply use ```.skip``` and ```.limit```
20
+ Assuming a page size of 10:
21
+
22
+ def items_on_page
23
+ store._items.find({active: true}).skip((params._page.or(1).to_i - 1) * 10).limit(10)
24
+ end
25
+
26
+ Then in your view you can add:
27
+
28
+ ```html
29
+ <:pagination total="{{ store._items.size }}" per_page="10" page="{{ params._page }}" />
30
+ ```
31
+
32
+ ```per_page``` defaults to 10 and ```page``` defaults to params._page
33
+
34
+ The pagination tag supports the following options:
35
+
36
+ - total (required): the total number of items.
37
+ - per_page (default: 10): how many items per page.
38
+ - page (default: ```params._page```): the number of the current page (starting with 1)
39
+ - window (default: 5): the number of pages to show around the current page
40
+ - outer_window: (default: 0): the number of pages to show at the start and end of the pager.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1 @@
1
+ # Component dependencies
@@ -0,0 +1 @@
1
+ # Component routes
@@ -0,0 +1,104 @@
1
+ module Pagination
2
+ class MainController < Volt::ModelController
3
+
4
+ def middle_window(cpage, total)
5
+ side_size = ((window - 1) / 2).ceil
6
+
7
+ start_pos = cpage - side_size
8
+ end_pos = cpage + side_size
9
+
10
+ if start_pos <= 0
11
+ end_pos += (0 - start_pos) + 1
12
+ start_pos = 1
13
+ end
14
+
15
+ if end_pos > total
16
+ start_pos = [start_pos - (end_pos - total), 1].max
17
+ end_pos = total
18
+ end
19
+
20
+ end_pos = [end_pos, 1].max
21
+
22
+ return start_pos, end_pos
23
+ end
24
+
25
+ def page_numbers
26
+ total = total_pages()
27
+ cpage = current_page()
28
+
29
+ start_pos, end_pos = middle_window(cpage, total)
30
+ middle_window = (start_pos..end_pos).to_a
31
+
32
+ if outer_window == 0
33
+ pages = middle_window
34
+ else
35
+ side_size = ((outer_window - 1) / 2).ceil
36
+
37
+ start_outer_pos = [1 + side_size, start_pos-1].min
38
+ end_outer_pos = [total - side_size, end_pos + 1].max
39
+
40
+ start_window = (1..start_outer_pos).to_a
41
+ end_window = (end_outer_pos..total).to_a
42
+
43
+ pages = start_window
44
+ pages << nil unless start_outer_pos == (middle_window[0] - 1)
45
+ pages += middle_window
46
+ pages << nil unless end_outer_pos == middle_window[-1] + 1
47
+ pages += end_window
48
+ end
49
+
50
+ return pages
51
+ end
52
+
53
+ def window
54
+ attrs.window.or(5)
55
+ end
56
+
57
+ def outer_window
58
+ attrs.outer_window.or(0)
59
+ end
60
+
61
+ def per_page
62
+ attrs.per_page.or(10)
63
+ end
64
+
65
+ def current_page
66
+ (attrs.page || params._page.or(1)).to_i
67
+ end
68
+
69
+ def total_pages
70
+ (attrs.total.to_i / per_page.to_f).ceil
71
+ end
72
+
73
+ def last_page
74
+ current_page == page_numbers.last
75
+ end
76
+
77
+ def first_page
78
+ current_page == 1
79
+ end
80
+
81
+ def next_page
82
+ new_page = current_page + 1
83
+ if new_page <= total_pages
84
+ set_page(new_page)
85
+ end
86
+ end
87
+
88
+ def previous_page
89
+ new_page = current_page - 1
90
+ if new_page >= 1
91
+ set_page(new_page)
92
+ end
93
+ end
94
+
95
+ def set_page(page_number)
96
+ page_number = page_number.to_i
97
+ if attrs.respond_to?(:page=)
98
+ attrs.page = page_number
99
+ else
100
+ params._page = page_number
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,18 @@
1
+ <:Body>
2
+ <ul class="pagination">
3
+ <li class="{{ if first_page }}disabled{{ end }}">
4
+ <a e-click="previous_page">&laquo;</a>
5
+ </li>
6
+ {{ page_numbers.each do |page_number| }}
7
+ {{ if page_number.nil? }}
8
+ <li><a>...</a></li>
9
+ {{ else }}
10
+ <li class="{{ if current_page == page_number }}active{{ end }}">
11
+ <a e-click="set_page(page_number)">{{ page_number }}</a>
12
+ </li>
13
+ {{ end }}
14
+ {{ end }}
15
+ <li class="{{ if last_page }}disabled{{ end }}">
16
+ <a e-click="next_page">&raquo;</a>
17
+ </li>
18
+ </ul>
@@ -0,0 +1,7 @@
1
+ require "volt/pagination/version"
2
+
3
+ class Volt
4
+ class Pagination
5
+ # Your code goes here...
6
+ end
7
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ version = File.read(File.expand_path('../VERSION', __FILE__)).strip
6
+
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = "volt-pagination"
10
+ spec.version = version
11
+ spec.authors = ["Ryan Stout"]
12
+ spec.email = ["ryanstout@gmail.com"]
13
+ spec.summary = %q{A Volt component that provides a :pagination tag}
14
+ spec.homepage = ""
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "volt", "~> 0.8.0"
23
+ spec.add_development_dependency "rake"
24
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: volt-pagination
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ryan Stout
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: volt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.8.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.8.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description:
42
+ email:
43
+ - ryanstout@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - README.md
51
+ - Rakefile
52
+ - VERSION
53
+ - app/pagination/config/dependencies.rb
54
+ - app/pagination/config/routes.rb
55
+ - app/pagination/controllers/main_controller.rb
56
+ - app/pagination/views/main/index.html
57
+ - lib/volt/pagination.rb
58
+ - volt-pagination.gemspec
59
+ homepage: ''
60
+ licenses:
61
+ - MIT
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 2.2.2
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: A Volt component that provides a :pagination tag
83
+ test_files: []