jquery-bootstrap-pagination 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +21 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +90 -0
- data/Guardfile +11 -0
- data/LICENSE.txt +22 -0
- data/README.md +104 -0
- data/Rakefile +15 -0
- data/jquery-bootstrap-pagination.gemspec +19 -0
- data/lib/jquery-bootstrap-pagination.rb +2 -0
- data/lib/jquery-bootstrap-pagination/engine.rb +10 -0
- data/lib/jquery-bootstrap-pagination/version.rb +7 -0
- data/spec/javascripts/jquery-bootstrap-pagination_spec.coffee +323 -0
- data/spec/javascripts/support/jasmine.yml +17 -0
- data/spec/javascripts/support/jquery-jasmine.js +546 -0
- data/spec/javascripts/support/jquery.js +2 -0
- data/spec/javascripts/support/spec_helper.coffee +0 -0
- data/src/jquery-bootstrap-pagination.coffee +167 -0
- data/vendor/assets/javascripts/jquery-bootstrap-pagination.js +172 -0
- metadata +68 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
jquery-bootstrap-pagination (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
addressable (2.3.2)
|
10
|
+
childprocess (0.3.6)
|
11
|
+
ffi (~> 1.0, >= 1.0.6)
|
12
|
+
coderay (1.0.8)
|
13
|
+
coffee-script (2.2.0)
|
14
|
+
coffee-script-source
|
15
|
+
execjs
|
16
|
+
coffee-script-source (1.4.0)
|
17
|
+
diff-lcs (1.1.3)
|
18
|
+
execjs (1.4.0)
|
19
|
+
multi_json (~> 1.0)
|
20
|
+
ffi (1.2.0)
|
21
|
+
guard (1.5.4)
|
22
|
+
listen (>= 0.4.2)
|
23
|
+
lumberjack (>= 1.0.2)
|
24
|
+
pry (>= 0.9.10)
|
25
|
+
thor (>= 0.14.6)
|
26
|
+
guard-coffeescript (1.2.1)
|
27
|
+
coffee-script (>= 2.2.0)
|
28
|
+
guard (>= 1.1.0)
|
29
|
+
guard-jasmine-headless-webkit (0.3.2)
|
30
|
+
guard (>= 0.4.0)
|
31
|
+
jasmine-headless-webkit (>= 0.7.0)
|
32
|
+
hike (1.2.1)
|
33
|
+
jasmine (1.3.0)
|
34
|
+
jasmine-core (>= 1.3.0)
|
35
|
+
rack (~> 1.0)
|
36
|
+
rspec (>= 1.3.1)
|
37
|
+
selenium-webdriver (>= 0.1.3)
|
38
|
+
jasmine-core (1.3.0)
|
39
|
+
jasmine-headless-webkit (0.8.4)
|
40
|
+
coffee-script
|
41
|
+
jasmine-core (~> 1.1)
|
42
|
+
multi_json
|
43
|
+
rainbow
|
44
|
+
sprockets (~> 2)
|
45
|
+
libwebsocket (0.1.7.1)
|
46
|
+
addressable
|
47
|
+
websocket
|
48
|
+
listen (0.6.0)
|
49
|
+
lumberjack (1.0.2)
|
50
|
+
method_source (0.8.1)
|
51
|
+
multi_json (1.4.0)
|
52
|
+
pry (0.9.10)
|
53
|
+
coderay (~> 1.0.5)
|
54
|
+
method_source (~> 0.8)
|
55
|
+
slop (~> 3.3.1)
|
56
|
+
rack (1.4.1)
|
57
|
+
rainbow (1.1.4)
|
58
|
+
rspec (2.12.0)
|
59
|
+
rspec-core (~> 2.12.0)
|
60
|
+
rspec-expectations (~> 2.12.0)
|
61
|
+
rspec-mocks (~> 2.12.0)
|
62
|
+
rspec-core (2.12.1)
|
63
|
+
rspec-expectations (2.12.0)
|
64
|
+
diff-lcs (~> 1.1.3)
|
65
|
+
rspec-mocks (2.12.0)
|
66
|
+
rubyzip (0.9.9)
|
67
|
+
selenium-webdriver (2.26.0)
|
68
|
+
childprocess (>= 0.2.5)
|
69
|
+
libwebsocket (~> 0.1.3)
|
70
|
+
multi_json (~> 1.0)
|
71
|
+
rubyzip
|
72
|
+
slop (3.3.3)
|
73
|
+
sprockets (2.8.1)
|
74
|
+
hike (~> 1.2)
|
75
|
+
multi_json (~> 1.0)
|
76
|
+
rack (~> 1.0)
|
77
|
+
tilt (~> 1.1, != 1.3.0)
|
78
|
+
thor (0.16.0)
|
79
|
+
tilt (1.3.3)
|
80
|
+
websocket (1.0.4)
|
81
|
+
|
82
|
+
PLATFORMS
|
83
|
+
ruby
|
84
|
+
|
85
|
+
DEPENDENCIES
|
86
|
+
guard-coffeescript
|
87
|
+
guard-jasmine-headless-webkit
|
88
|
+
jasmine
|
89
|
+
jasmine-headless-webkit
|
90
|
+
jquery-bootstrap-pagination!
|
data/Guardfile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard 'coffeescript', input: 'src', output: "vendor/assets/javascripts", bare: false
|
5
|
+
|
6
|
+
spec_location = "spec/javascripts/%s_spec"
|
7
|
+
guard 'jasmine-headless-webkit' do
|
8
|
+
watch(%r{^src/(.*)\.(js|coffee)$}) { |m| newest_js_file(spec_location % m[1]) }
|
9
|
+
watch(%r{^vendor/assets/javascripts/(.*)\.(js|coffee)$}) { |m| newest_js_file(spec_location % m[1]) }
|
10
|
+
watch(%r{^spec/javascripts/(.*)_spec\..*}) { |m| newest_js_file(spec_location % m[1]) }
|
11
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Mark Bates
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
# jQuery Bootstrap Pagination
|
2
|
+
|
3
|
+
A simple, full-featured, pagination system for [jQuery](http://jquery.com/) that outputs [Twitter Bootstrap](http://twitter.github.com/bootstrap/) marked up pagination links. Of course, there's no reason you need to use this with Bootstrap, the HTML output is very clean.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
The library can be used in CoffeeScript, JavaScript, and Rails applications very easily.
|
8
|
+
|
9
|
+
### Standalone
|
10
|
+
|
11
|
+
#### CoffeeScript
|
12
|
+
|
13
|
+
Use the `src/jquery-bootstrap-pagination.coffee` file.
|
14
|
+
|
15
|
+
#### JavaScript
|
16
|
+
|
17
|
+
Use the `vendor/assets/javascripts/jquery-bootstrap-pagination.js` file. This file is auto generated from the CoffeeScript file.
|
18
|
+
|
19
|
+
### Rails 3.x
|
20
|
+
|
21
|
+
Add this line to your application's Gemfile:
|
22
|
+
|
23
|
+
``` ruby
|
24
|
+
gem 'jquery-bootstrap-pagination'
|
25
|
+
```
|
26
|
+
|
27
|
+
And then execute:
|
28
|
+
|
29
|
+
```
|
30
|
+
$ bundle
|
31
|
+
```
|
32
|
+
|
33
|
+
Add it to your `application.js` file:
|
34
|
+
|
35
|
+
``` javascript
|
36
|
+
//= require jquery-bootstrap-pagination
|
37
|
+
```
|
38
|
+
|
39
|
+
## Usage
|
40
|
+
|
41
|
+
### CoffeeScript
|
42
|
+
``` coffeescript
|
43
|
+
# Basic usage:
|
44
|
+
$("#my-pagination-section").pagination()
|
45
|
+
|
46
|
+
# With options:
|
47
|
+
$("#my-pagination-section").pagination
|
48
|
+
total_pages: 10
|
49
|
+
current_page: 2
|
50
|
+
callback: (event, page) ->
|
51
|
+
alert("Page #{page} was clicked!")
|
52
|
+
|
53
|
+
# Retrieve the underlying PaginationView:
|
54
|
+
$("#my-pagination-section").data("paginationView")
|
55
|
+
```
|
56
|
+
|
57
|
+
### JavaScript:
|
58
|
+
``` javascript
|
59
|
+
// Basic usage:
|
60
|
+
$("#my-pagination-section").pagination();
|
61
|
+
|
62
|
+
// With options:
|
63
|
+
$("#my-pagination-section").pagination({
|
64
|
+
total_pages: 10,
|
65
|
+
current_page: 2,
|
66
|
+
callback: function(event, page) {
|
67
|
+
return alert("Page " + page + " was clicked!");
|
68
|
+
}
|
69
|
+
});
|
70
|
+
|
71
|
+
// Retrieve the underlying PaginationView:
|
72
|
+
$("#my-pagination-section").data("paginationView");
|
73
|
+
```
|
74
|
+
|
75
|
+
### Options and Defaults:
|
76
|
+
``` coffeescript
|
77
|
+
# what is the current page:
|
78
|
+
current_page: 1
|
79
|
+
# how many pages are there total:
|
80
|
+
total_pages: 1
|
81
|
+
# change text of the 'next' link,
|
82
|
+
# set to false for no next link:
|
83
|
+
next: ">"
|
84
|
+
# change text of the 'previous' link,
|
85
|
+
# set to false for no previous link:
|
86
|
+
prev: "<"
|
87
|
+
# change text of the 'first' link,
|
88
|
+
# set to false for no first link:
|
89
|
+
first: false
|
90
|
+
# change text of the 'last' link,
|
91
|
+
# set to false for no last link:
|
92
|
+
last: false
|
93
|
+
# how many links before truncation happens:
|
94
|
+
display_max: 8
|
95
|
+
```
|
96
|
+
|
97
|
+
## Contributing
|
98
|
+
|
99
|
+
1. Fork it
|
100
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
101
|
+
3. Write/Run tests (`bundle exec rake`)
|
102
|
+
4. Commit your changes (`git commit -am 'Add some feature'`)
|
103
|
+
5. Push to the branch (`git push origin my-new-feature`)
|
104
|
+
6. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jasmine'
|
6
|
+
load 'jasmine/tasks/jasmine.rake'
|
7
|
+
rescue LoadError
|
8
|
+
task :jasmine do
|
9
|
+
abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
task :default do
|
14
|
+
system "jasmine-headless-webkit -c"
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'jquery-bootstrap-pagination/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "jquery-bootstrap-pagination"
|
8
|
+
gem.version = Jquery::Bootstrap::Pagination::VERSION
|
9
|
+
gem.authors = ["Mark Bates"]
|
10
|
+
gem.email = ["mark@markbates.com"]
|
11
|
+
gem.description = %q{A simple and clean pagination implementation for jQuery and Twitter Bootstrap.}
|
12
|
+
gem.summary = %q{A simple and clean pagination implementation for jQuery and Twitter Bootstrap.}
|
13
|
+
gem.homepage = "http://github.com/markbates/jquery-bootstrap-pagination"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
end
|
@@ -0,0 +1,323 @@
|
|
1
|
+
describe "pagination", ->
|
2
|
+
|
3
|
+
beforeEach ->
|
4
|
+
$("#jasmine").remove()
|
5
|
+
$("body").append("<div id='jasmine'></div>")
|
6
|
+
@page = $("#jasmine")
|
7
|
+
@view = @page.pagination(total: 60, total_pages: 3, next: null, prev: null).data("paginationView")
|
8
|
+
|
9
|
+
describe "buildLinks", ->
|
10
|
+
|
11
|
+
it "returns the correct links for the pages", ->
|
12
|
+
links = @view.buildLinks()
|
13
|
+
expect(links[0]).toEqual("<li><a href='#' data-page='1'>1</a></li>")
|
14
|
+
expect(links[1]).toEqual("<li><a href='#' data-page='2'>2</a></li>")
|
15
|
+
expect(links[2]).toEqual("<li><a href='#' data-page='3'>3</a></li>")
|
16
|
+
|
17
|
+
it "adds a first and last link", ->
|
18
|
+
@view.settings.first = "first"
|
19
|
+
@view.settings.last = "last"
|
20
|
+
links = @view.buildLinks()
|
21
|
+
expect(links[0]).toEqual("<li><a href='#' data-page='1'>first</a></li>")
|
22
|
+
expect(links[1]).toEqual("<li><a href='#' data-page='1'>1</a></li>")
|
23
|
+
expect(links[2]).toEqual("<li><a href='#' data-page='2'>2</a></li>")
|
24
|
+
expect(links[3]).toEqual("<li><a href='#' data-page='3'>3</a></li>")
|
25
|
+
expect(links[4]).toEqual("<li><a href='#' data-page='3'>last</a></li>")
|
26
|
+
|
27
|
+
it "truncates links if there are too many", ->
|
28
|
+
@view.settings.total_pages = 50
|
29
|
+
@view.settings.current_page = 2
|
30
|
+
links = @view.buildLinks()
|
31
|
+
expect(links.length).toEqual(10)
|
32
|
+
expect(links[0]).toEqual("<li><a href='#' data-page='1'>1</a></li>")
|
33
|
+
expect(links[1]).toEqual("<li><a href='#' data-page='2'>2</a></li>")
|
34
|
+
expect(links[2]).toEqual("<li><a href='#' data-page='3'>3</a></li>")
|
35
|
+
expect(links[3]).toEqual("<li><a href='#' data-page='4'>4</a></li>")
|
36
|
+
expect(links[4]).toEqual("<li><a href='#' data-page='5'>5</a></li>")
|
37
|
+
expect(links[5]).toEqual("<li><a href='#' data-page='6'>6</a></li>")
|
38
|
+
expect(links[6]).toEqual("<li><a href='#' data-page='7'>7</a></li>")
|
39
|
+
expect(links[7]).toEqual("<li><a href='#' data-page='8'>8</a></li>")
|
40
|
+
expect(links[8]).toEqual("<li><a href='#' data-page='..'>..</a></li>")
|
41
|
+
expect(links[9]).toEqual("<li><a href='#' data-page='50'>50</a></li>")
|
42
|
+
|
43
|
+
it "shows a max number of links", ->
|
44
|
+
@view.settings.total_pages = 50
|
45
|
+
@view.settings.current_page = 2
|
46
|
+
@view.settings.display_max = 12
|
47
|
+
links = @view.buildLinks()
|
48
|
+
expect(links.length).toEqual(14)
|
49
|
+
expect(links[0]).toEqual("<li><a href='#' data-page='1'>1</a></li>")
|
50
|
+
expect(links[1]).toEqual("<li><a href='#' data-page='2'>2</a></li>")
|
51
|
+
expect(links[2]).toEqual("<li><a href='#' data-page='3'>3</a></li>")
|
52
|
+
expect(links[3]).toEqual("<li><a href='#' data-page='4'>4</a></li>")
|
53
|
+
expect(links[4]).toEqual("<li><a href='#' data-page='5'>5</a></li>")
|
54
|
+
expect(links[5]).toEqual("<li><a href='#' data-page='6'>6</a></li>")
|
55
|
+
expect(links[6]).toEqual("<li><a href='#' data-page='7'>7</a></li>")
|
56
|
+
expect(links[7]).toEqual("<li><a href='#' data-page='8'>8</a></li>")
|
57
|
+
expect(links[8]).toEqual("<li><a href='#' data-page='9'>9</a></li>")
|
58
|
+
expect(links[9]).toEqual("<li><a href='#' data-page='10'>10</a></li>")
|
59
|
+
expect(links[10]).toEqual("<li><a href='#' data-page='11'>11</a></li>")
|
60
|
+
expect(links[11]).toEqual("<li><a href='#' data-page='12'>12</a></li>")
|
61
|
+
expect(links[12]).toEqual("<li><a href='#' data-page='..'>..</a></li>")
|
62
|
+
expect(links[13]).toEqual("<li><a href='#' data-page='50'>50</a></li>")
|
63
|
+
|
64
|
+
it "shows next if there are next pages", ->
|
65
|
+
@view.settings.next = "next"
|
66
|
+
links = @view.buildLinks()
|
67
|
+
expect(links[0]).toEqual("<li><a href='#' data-page='1'>1</a></li>")
|
68
|
+
expect(links[1]).toEqual("<li><a href='#' data-page='2'>2</a></li>")
|
69
|
+
expect(links[2]).toEqual("<li><a href='#' data-page='3'>3</a></li>")
|
70
|
+
expect(links[3]).toEqual("<li><a href='#' data-page='2'>next</a></li>")
|
71
|
+
|
72
|
+
it "shows prev if there are prev pages", ->
|
73
|
+
@view.settings.prev = "prev"
|
74
|
+
@view.settings.current_page = 2
|
75
|
+
links = @view.buildLinks()
|
76
|
+
expect(links[0]).toEqual("<li><a href='#' data-page='1'>prev</a></li>")
|
77
|
+
expect(links[1]).toEqual("<li><a href='#' data-page='1'>1</a></li>")
|
78
|
+
expect(links[2]).toEqual("<li><a href='#' data-page='2'>2</a></li>")
|
79
|
+
expect(links[3]).toEqual("<li><a href='#' data-page='3'>3</a></li>")
|
80
|
+
|
81
|
+
|
82
|
+
describe "render", ->
|
83
|
+
|
84
|
+
it "renders the pagination HTML to the el", ->
|
85
|
+
@view.render()
|
86
|
+
expect(@page.html()).toEqual("""
|
87
|
+
<div class="jquery-bootstrap-pagination">
|
88
|
+
<ul>
|
89
|
+
<li class="active"><a href="#" data-page="1">1</a></li>
|
90
|
+
<li><a href="#" data-page="2">2</a></li>
|
91
|
+
<li><a href="#" data-page="3">3</a></li>
|
92
|
+
</ul>
|
93
|
+
</div>
|
94
|
+
""")
|
95
|
+
|
96
|
+
it "adds 'active' to the current page", ->
|
97
|
+
@view.settings.current_page = 2
|
98
|
+
@view.render()
|
99
|
+
expect(@page.html()).toEqual("""
|
100
|
+
<div class="jquery-bootstrap-pagination">
|
101
|
+
<ul>
|
102
|
+
<li><a href="#" data-page="1">1</a></li>
|
103
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
104
|
+
<li><a href="#" data-page="3">3</a></li>
|
105
|
+
</ul>
|
106
|
+
</div>
|
107
|
+
""")
|
108
|
+
|
109
|
+
it "disables the first link if on page 1", ->
|
110
|
+
@view.settings.first = "first"
|
111
|
+
@view.settings.last = "last"
|
112
|
+
@view.settings.current_page = 1
|
113
|
+
@view.render()
|
114
|
+
expect(@page.html()).toEqual("""
|
115
|
+
<div class="jquery-bootstrap-pagination">
|
116
|
+
<ul>
|
117
|
+
<li class="disabled"><a href="#" data-page="1">first</a></li>
|
118
|
+
<li class="active"><a href="#" data-page="1">1</a></li>
|
119
|
+
<li><a href="#" data-page="2">2</a></li>
|
120
|
+
<li><a href="#" data-page="3">3</a></li>
|
121
|
+
<li><a href="#" data-page="3">last</a></li>
|
122
|
+
</ul>
|
123
|
+
</div>
|
124
|
+
""")
|
125
|
+
|
126
|
+
it "disables the last link if on the last page", ->
|
127
|
+
@view.settings.first = "first"
|
128
|
+
@view.settings.last = "last"
|
129
|
+
@view.settings.current_page = @view.settings.total_pages
|
130
|
+
@view.render()
|
131
|
+
expect(@page.html()).toEqual("""
|
132
|
+
<div class="jquery-bootstrap-pagination">
|
133
|
+
<ul>
|
134
|
+
<li><a href="#" data-page="1">first</a></li>
|
135
|
+
<li><a href="#" data-page="1">1</a></li>
|
136
|
+
<li><a href="#" data-page="2">2</a></li>
|
137
|
+
<li class="active"><a href="#" data-page="3">3</a></li>
|
138
|
+
<li class="disabled"><a href="#" data-page="3">last</a></li>
|
139
|
+
</ul>
|
140
|
+
</div>
|
141
|
+
""")
|
142
|
+
|
143
|
+
it "disables truncated pages", ->
|
144
|
+
@view.settings.total_pages = 50
|
145
|
+
@view.settings.current_page = 2
|
146
|
+
@view.render()
|
147
|
+
expect(@page.html()).toEqual("""
|
148
|
+
<div class="jquery-bootstrap-pagination">
|
149
|
+
<ul>
|
150
|
+
<li><a href="#" data-page="1">1</a></li>
|
151
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
152
|
+
<li><a href="#" data-page="3">3</a></li>
|
153
|
+
<li><a href="#" data-page="4">4</a></li>
|
154
|
+
<li><a href="#" data-page="5">5</a></li>
|
155
|
+
<li><a href="#" data-page="6">6</a></li>
|
156
|
+
<li><a href="#" data-page="7">7</a></li>
|
157
|
+
<li><a href="#" data-page="8">8</a></li>
|
158
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
159
|
+
<li><a href="#" data-page="50">50</a></li>
|
160
|
+
</ul>
|
161
|
+
</div>
|
162
|
+
""")
|
163
|
+
|
164
|
+
it "disables truncated pages", ->
|
165
|
+
@view.settings.total_pages = 50
|
166
|
+
@view.settings.current_page = 2
|
167
|
+
@view.render()
|
168
|
+
expect(@page.html()).toEqual("""
|
169
|
+
<div class="jquery-bootstrap-pagination">
|
170
|
+
<ul>
|
171
|
+
<li><a href="#" data-page="1">1</a></li>
|
172
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
173
|
+
<li><a href="#" data-page="3">3</a></li>
|
174
|
+
<li><a href="#" data-page="4">4</a></li>
|
175
|
+
<li><a href="#" data-page="5">5</a></li>
|
176
|
+
<li><a href="#" data-page="6">6</a></li>
|
177
|
+
<li><a href="#" data-page="7">7</a></li>
|
178
|
+
<li><a href="#" data-page="8">8</a></li>
|
179
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
180
|
+
<li><a href="#" data-page="50">50</a></li>
|
181
|
+
</ul>
|
182
|
+
</div>
|
183
|
+
""")
|
184
|
+
|
185
|
+
it "paints the correct range", ->
|
186
|
+
@view.settings.total_pages = 50
|
187
|
+
@view.settings.current_page = 8
|
188
|
+
@view.render()
|
189
|
+
expect(@page.html()).toEqual("""
|
190
|
+
<div class="jquery-bootstrap-pagination">
|
191
|
+
<ul>
|
192
|
+
<li><a href="#" data-page="1">1</a></li>
|
193
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
194
|
+
<li><a href="#" data-page="4">4</a></li>
|
195
|
+
<li><a href="#" data-page="5">5</a></li>
|
196
|
+
<li><a href="#" data-page="6">6</a></li>
|
197
|
+
<li><a href="#" data-page="7">7</a></li>
|
198
|
+
<li class="active"><a href="#" data-page="8">8</a></li>
|
199
|
+
<li><a href="#" data-page="9">9</a></li>
|
200
|
+
<li><a href="#" data-page="10">10</a></li>
|
201
|
+
<li><a href="#" data-page="11">11</a></li>
|
202
|
+
<li><a href="#" data-page="12">12</a></li>
|
203
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
204
|
+
<li><a href="#" data-page="50">50</a></li>
|
205
|
+
</ul>
|
206
|
+
</div>
|
207
|
+
""")
|
208
|
+
|
209
|
+
describe "clicked", ->
|
210
|
+
|
211
|
+
it "re-renders the pagination links", ->
|
212
|
+
@view.settings.total_pages = 50
|
213
|
+
@view.settings.current_page = 2
|
214
|
+
@view.render()
|
215
|
+
expect(@page.html()).toEqual("""
|
216
|
+
<div class="jquery-bootstrap-pagination">
|
217
|
+
<ul>
|
218
|
+
<li><a href="#" data-page="1">1</a></li>
|
219
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
220
|
+
<li><a href="#" data-page="3">3</a></li>
|
221
|
+
<li><a href="#" data-page="4">4</a></li>
|
222
|
+
<li><a href="#" data-page="5">5</a></li>
|
223
|
+
<li><a href="#" data-page="6">6</a></li>
|
224
|
+
<li><a href="#" data-page="7">7</a></li>
|
225
|
+
<li><a href="#" data-page="8">8</a></li>
|
226
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
227
|
+
<li><a href="#" data-page="50">50</a></li>
|
228
|
+
</ul>
|
229
|
+
</div>
|
230
|
+
""")
|
231
|
+
$("[data-page=8]", @view.el).click()
|
232
|
+
@view.render()
|
233
|
+
expect(@page.html()).toEqual("""
|
234
|
+
<div class="jquery-bootstrap-pagination">
|
235
|
+
<ul>
|
236
|
+
<li><a href="#" data-page="1">1</a></li>
|
237
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
238
|
+
<li><a href="#" data-page="4">4</a></li>
|
239
|
+
<li><a href="#" data-page="5">5</a></li>
|
240
|
+
<li><a href="#" data-page="6">6</a></li>
|
241
|
+
<li><a href="#" data-page="7">7</a></li>
|
242
|
+
<li class="active"><a href="#" data-page="8">8</a></li>
|
243
|
+
<li><a href="#" data-page="9">9</a></li>
|
244
|
+
<li><a href="#" data-page="10">10</a></li>
|
245
|
+
<li><a href="#" data-page="11">11</a></li>
|
246
|
+
<li><a href="#" data-page="12">12</a></li>
|
247
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
248
|
+
<li><a href="#" data-page="50">50</a></li>
|
249
|
+
</ul>
|
250
|
+
</div>
|
251
|
+
""")
|
252
|
+
|
253
|
+
describe "pages", ->
|
254
|
+
|
255
|
+
describe "less than or equal to 10 pages", ->
|
256
|
+
|
257
|
+
beforeEach ->
|
258
|
+
@view.settings.total_pages = 10
|
259
|
+
|
260
|
+
it "handles the first page", ->
|
261
|
+
@view.settings.current_page = 1
|
262
|
+
pages = @view.pages()
|
263
|
+
expect(pages).toEqual([1,2,3,4,5,6,7,8,9,10])
|
264
|
+
|
265
|
+
it "handles a middle page", ->
|
266
|
+
@view.settings.current_page = 3
|
267
|
+
pages = @view.pages()
|
268
|
+
expect(pages).toEqual([1,2,3,4,5,6,7,8,9,10])
|
269
|
+
|
270
|
+
it "handles the last page", ->
|
271
|
+
@view.settings.current_page = 10
|
272
|
+
pages = @view.pages()
|
273
|
+
expect(pages).toEqual([1,2,3,4,5,6,7,8,9,10])
|
274
|
+
|
275
|
+
describe "greater than 10 pages", ->
|
276
|
+
|
277
|
+
beforeEach ->
|
278
|
+
@view.settings.total_pages = 50
|
279
|
+
|
280
|
+
it "handles the first page", ->
|
281
|
+
@view.settings.current_page = 1
|
282
|
+
pages = @view.pages()
|
283
|
+
expect(pages).toEqual([1,2,3,4,5,6,7,8, "..", 50])
|
284
|
+
|
285
|
+
it "handles the last page", ->
|
286
|
+
@view.settings.current_page = 50
|
287
|
+
pages = @view.pages()
|
288
|
+
expect(pages).toEqual([1, "..", 42,43,44,45,46,47,48,49,50])
|
289
|
+
|
290
|
+
it "handles page 49", ->
|
291
|
+
@view.settings.current_page = 49
|
292
|
+
pages = @view.pages()
|
293
|
+
expect(pages).toEqual([1, "..", 42,43,44,45,46,47,48,49,50])
|
294
|
+
|
295
|
+
it "handles near the last page", ->
|
296
|
+
@view.settings.current_page = 47
|
297
|
+
pages = @view.pages()
|
298
|
+
expect(pages).toEqual([1, "..", 42,43,44,45,46,47,48,49,50])
|
299
|
+
|
300
|
+
it "handles page 44", ->
|
301
|
+
@view.settings.current_page = 44
|
302
|
+
pages = @view.pages()
|
303
|
+
expect(pages).toEqual([1, "..", 42,43,44,45,46,47,48,49,50])
|
304
|
+
|
305
|
+
it "handles page 43", ->
|
306
|
+
@view.settings.current_page = 42
|
307
|
+
pages = @view.pages()
|
308
|
+
expect(pages).toEqual([1, "..", 38,39,40,41,42,43,44,45,46,"..",50])
|
309
|
+
|
310
|
+
it "handles page 7", ->
|
311
|
+
@view.settings.current_page = 7
|
312
|
+
pages = @view.pages()
|
313
|
+
expect(pages).toEqual([1, 2, 3, 4, 5, 6, 7, 8, '..', 50])
|
314
|
+
|
315
|
+
it "handles page 9", ->
|
316
|
+
@view.settings.current_page = 9
|
317
|
+
pages = @view.pages()
|
318
|
+
expect(pages).toEqual([1,"..",5,6,7,8,9,10,11,12,13, "..", 50])
|
319
|
+
|
320
|
+
it "handles a middle page", ->
|
321
|
+
@view.settings.current_page = 25
|
322
|
+
pages = @view.pages()
|
323
|
+
expect(pages).toEqual([1, "..", 21,22,23,24,25,26,27,28,29, "..", 50])
|