jquery-bootstrap-pagination 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,21 @@
1
+ *.log
2
+ .DS_Store
3
+ doc
4
+ tmp
5
+ pkg
6
+ *.gem
7
+ *.pid
8
+ coverage
9
+ coverage.data
10
+ build/*
11
+ *.pbxuser
12
+ *.mode1v3
13
+ .svn
14
+ profile
15
+ .console_history
16
+ .sass-cache/*
17
+ .rake_tasks~
18
+ *.log.lck
19
+ solr/
20
+ .jhw-cache/
21
+ jhw.*
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jquery-bootstrap-pagination.gemspec
4
+ gemspec
5
+
6
+
7
+ gem "guard-coffeescript"
8
+ gem "guard-jasmine-headless-webkit"
9
+ gem "jasmine"
10
+ gem "jasmine-headless-webkit"
@@ -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!
@@ -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
@@ -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.
@@ -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
@@ -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,2 @@
1
+ require "jquery-bootstrap-pagination/engine"
2
+ require "jquery-bootstrap-pagination/version"
@@ -0,0 +1,10 @@
1
+ if defined? Rails
2
+ module Jquery
3
+ module Bootstrap
4
+ module Pagination
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module Jquery
2
+ module Bootstrap
3
+ module Pagination
4
+ VERSION = "1.0.0"
5
+ end
6
+ end
7
+ 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])