jquery-bootstrap-pagination 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +8 -0
- data/lib/jquery-bootstrap-pagination/version.rb +1 -1
- data/spec/javascripts/jquery-bootstrap-pagination_spec.coffee +164 -0
- data/src/jquery-bootstrap-pagination.coffee +25 -3
- data/vendor/assets/javascripts/jquery-bootstrap-pagination.js +35 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa901f4f244d5d5c664df752adda4a4657c8129f
|
4
|
+
data.tar.gz: b9af6375f692acd96716344ab279dc25e578a6c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50138ccce52f55c99680e1022c2c72cd300c9963e8e6769acf741f76d9042f380468b9339f039e25fdfd0e6f50d3033eddb646f98aa0189b9f6bb4994a88fe61
|
7
|
+
data.tar.gz: 7a5cd2aa11ade9416f27e35bd30008d2e8e2b061dd037e2a28260fa50ae779215a86df00cb4081fc9cd91d3111bc1f5f11183ddfb3564f1320b34767002b3494
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -94,6 +94,8 @@ last: false
|
|
94
94
|
display_max: 8
|
95
95
|
# render nothing if there is only 1 page:
|
96
96
|
ignore_single_page: true
|
97
|
+
# disable turbolinks:
|
98
|
+
no_turbolink: false
|
97
99
|
```
|
98
100
|
|
99
101
|
## Contributing
|
@@ -104,3 +106,9 @@ ignore_single_page: true
|
|
104
106
|
4. Commit your changes (`git commit -am 'Add some feature'`)
|
105
107
|
5. Push to the branch (`git push origin my-new-feature`)
|
106
108
|
6. Create new Pull Request
|
109
|
+
|
110
|
+
## Contributors
|
111
|
+
|
112
|
+
* Mark Bates
|
113
|
+
* Eric Wollesen
|
114
|
+
* Clinton Blackburn
|
@@ -78,6 +78,12 @@ describe "pagination", ->
|
|
78
78
|
expect(links[2]).toEqual("<li><a href='#' data-page='2'>2</a></li>")
|
79
79
|
expect(links[3]).toEqual("<li><a href='#' data-page='3'>3</a></li>")
|
80
80
|
|
81
|
+
it "disables turbolinks (if requested)", ->
|
82
|
+
@view.settings.prev = "prev"
|
83
|
+
@view.settings.current_page = 2
|
84
|
+
@view.settings.no_turbolink = true
|
85
|
+
links = @view.buildLinks()
|
86
|
+
expect(links[0]).toEqual("<li><a href='#' data-page='1' data-no-turbolink='1'>prev</a></li>")
|
81
87
|
|
82
88
|
describe "render", ->
|
83
89
|
|
@@ -256,6 +262,164 @@ describe "pagination", ->
|
|
256
262
|
</div>
|
257
263
|
""")
|
258
264
|
|
265
|
+
|
266
|
+
describe "change", ->
|
267
|
+
|
268
|
+
it "re-renders the pagination links", ->
|
269
|
+
@view.settings.total_pages = 50
|
270
|
+
@view.settings.current_page = 2
|
271
|
+
@view.render()
|
272
|
+
expect(@page.html()).toEqual("""
|
273
|
+
<div class="jquery-bootstrap-pagination pagination">
|
274
|
+
<ul>
|
275
|
+
<li><a href="#" data-page="1">1</a></li>
|
276
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
277
|
+
<li><a href="#" data-page="3">3</a></li>
|
278
|
+
<li><a href="#" data-page="4">4</a></li>
|
279
|
+
<li><a href="#" data-page="5">5</a></li>
|
280
|
+
<li><a href="#" data-page="6">6</a></li>
|
281
|
+
<li><a href="#" data-page="7">7</a></li>
|
282
|
+
<li><a href="#" data-page="8">8</a></li>
|
283
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
284
|
+
<li><a href="#" data-page="50">50</a></li>
|
285
|
+
</ul>
|
286
|
+
</div>
|
287
|
+
""")
|
288
|
+
@view.change(8)
|
289
|
+
expect(@page.html()).toEqual("""
|
290
|
+
<div class="jquery-bootstrap-pagination pagination">
|
291
|
+
<ul>
|
292
|
+
<li><a href="#" data-page="1">1</a></li>
|
293
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
294
|
+
<li><a href="#" data-page="4">4</a></li>
|
295
|
+
<li><a href="#" data-page="5">5</a></li>
|
296
|
+
<li><a href="#" data-page="6">6</a></li>
|
297
|
+
<li><a href="#" data-page="7">7</a></li>
|
298
|
+
<li class="active"><a href="#" data-page="8">8</a></li>
|
299
|
+
<li><a href="#" data-page="9">9</a></li>
|
300
|
+
<li><a href="#" data-page="10">10</a></li>
|
301
|
+
<li><a href="#" data-page="11">11</a></li>
|
302
|
+
<li><a href="#" data-page="12">12</a></li>
|
303
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
304
|
+
<li><a href="#" data-page="50">50</a></li>
|
305
|
+
</ul>
|
306
|
+
</div>
|
307
|
+
""")
|
308
|
+
|
309
|
+
it "doesn't re-render if page > total_pages (invalid)", ->
|
310
|
+
@view.settings.total_pages = 50
|
311
|
+
@view.settings.current_page = 2
|
312
|
+
@view.render()
|
313
|
+
expect(@page.html()).toEqual("""
|
314
|
+
<div class="jquery-bootstrap-pagination pagination">
|
315
|
+
<ul>
|
316
|
+
<li><a href="#" data-page="1">1</a></li>
|
317
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
318
|
+
<li><a href="#" data-page="3">3</a></li>
|
319
|
+
<li><a href="#" data-page="4">4</a></li>
|
320
|
+
<li><a href="#" data-page="5">5</a></li>
|
321
|
+
<li><a href="#" data-page="6">6</a></li>
|
322
|
+
<li><a href="#" data-page="7">7</a></li>
|
323
|
+
<li><a href="#" data-page="8">8</a></li>
|
324
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
325
|
+
<li><a href="#" data-page="50">50</a></li>
|
326
|
+
</ul>
|
327
|
+
</div>
|
328
|
+
""")
|
329
|
+
@view.change(51)
|
330
|
+
expect(@page.html()).toEqual("""
|
331
|
+
<div class="jquery-bootstrap-pagination pagination">
|
332
|
+
<ul>
|
333
|
+
<li><a href="#" data-page="1">1</a></li>
|
334
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
335
|
+
<li><a href="#" data-page="3">3</a></li>
|
336
|
+
<li><a href="#" data-page="4">4</a></li>
|
337
|
+
<li><a href="#" data-page="5">5</a></li>
|
338
|
+
<li><a href="#" data-page="6">6</a></li>
|
339
|
+
<li><a href="#" data-page="7">7</a></li>
|
340
|
+
<li><a href="#" data-page="8">8</a></li>
|
341
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
342
|
+
<li><a href="#" data-page="50">50</a></li>
|
343
|
+
</ul>
|
344
|
+
</div>
|
345
|
+
""")
|
346
|
+
|
347
|
+
it "doesn't re-render if page < 1 (invalid)", ->
|
348
|
+
@view.settings.total_pages = 50
|
349
|
+
@view.settings.current_page = 2
|
350
|
+
@view.render()
|
351
|
+
expect(@page.html()).toEqual("""
|
352
|
+
<div class="jquery-bootstrap-pagination pagination">
|
353
|
+
<ul>
|
354
|
+
<li><a href="#" data-page="1">1</a></li>
|
355
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
356
|
+
<li><a href="#" data-page="3">3</a></li>
|
357
|
+
<li><a href="#" data-page="4">4</a></li>
|
358
|
+
<li><a href="#" data-page="5">5</a></li>
|
359
|
+
<li><a href="#" data-page="6">6</a></li>
|
360
|
+
<li><a href="#" data-page="7">7</a></li>
|
361
|
+
<li><a href="#" data-page="8">8</a></li>
|
362
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
363
|
+
<li><a href="#" data-page="50">50</a></li>
|
364
|
+
</ul>
|
365
|
+
</div>
|
366
|
+
""")
|
367
|
+
@view.change(0)
|
368
|
+
expect(@page.html()).toEqual("""
|
369
|
+
<div class="jquery-bootstrap-pagination pagination">
|
370
|
+
<ul>
|
371
|
+
<li><a href="#" data-page="1">1</a></li>
|
372
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
373
|
+
<li><a href="#" data-page="3">3</a></li>
|
374
|
+
<li><a href="#" data-page="4">4</a></li>
|
375
|
+
<li><a href="#" data-page="5">5</a></li>
|
376
|
+
<li><a href="#" data-page="6">6</a></li>
|
377
|
+
<li><a href="#" data-page="7">7</a></li>
|
378
|
+
<li><a href="#" data-page="8">8</a></li>
|
379
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
380
|
+
<li><a href="#" data-page="50">50</a></li>
|
381
|
+
</ul>
|
382
|
+
</div>
|
383
|
+
""")
|
384
|
+
|
385
|
+
it "doesn't re-render if there's no change in page", ->
|
386
|
+
@view.settings.total_pages = 50
|
387
|
+
@view.settings.current_page = 2
|
388
|
+
@view.render()
|
389
|
+
expect(@page.html()).toEqual("""
|
390
|
+
<div class="jquery-bootstrap-pagination pagination">
|
391
|
+
<ul>
|
392
|
+
<li><a href="#" data-page="1">1</a></li>
|
393
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
394
|
+
<li><a href="#" data-page="3">3</a></li>
|
395
|
+
<li><a href="#" data-page="4">4</a></li>
|
396
|
+
<li><a href="#" data-page="5">5</a></li>
|
397
|
+
<li><a href="#" data-page="6">6</a></li>
|
398
|
+
<li><a href="#" data-page="7">7</a></li>
|
399
|
+
<li><a href="#" data-page="8">8</a></li>
|
400
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
401
|
+
<li><a href="#" data-page="50">50</a></li>
|
402
|
+
</ul>
|
403
|
+
</div>
|
404
|
+
""")
|
405
|
+
@view.change(2)
|
406
|
+
expect(@page.html()).toEqual("""
|
407
|
+
<div class="jquery-bootstrap-pagination pagination">
|
408
|
+
<ul>
|
409
|
+
<li><a href="#" data-page="1">1</a></li>
|
410
|
+
<li class="active"><a href="#" data-page="2">2</a></li>
|
411
|
+
<li><a href="#" data-page="3">3</a></li>
|
412
|
+
<li><a href="#" data-page="4">4</a></li>
|
413
|
+
<li><a href="#" data-page="5">5</a></li>
|
414
|
+
<li><a href="#" data-page="6">6</a></li>
|
415
|
+
<li><a href="#" data-page="7">7</a></li>
|
416
|
+
<li><a href="#" data-page="8">8</a></li>
|
417
|
+
<li class="disabled"><a href="#" data-page="..">..</a></li>
|
418
|
+
<li><a href="#" data-page="50">50</a></li>
|
419
|
+
</ul>
|
420
|
+
</div>
|
421
|
+
""")
|
422
|
+
|
259
423
|
describe "pages", ->
|
260
424
|
|
261
425
|
describe "less than or equal to 10 pages", ->
|
@@ -42,6 +42,8 @@
|
|
42
42
|
display_max: 8
|
43
43
|
# render nothing if there is only 1 page:
|
44
44
|
ignore_single_page: true
|
45
|
+
# disable turbolinks
|
46
|
+
no_turbolink: false
|
45
47
|
|
46
48
|
# merge defaults with passed in options:
|
47
49
|
@settings = $.extend(defaults, options)
|
@@ -83,8 +85,16 @@
|
|
83
85
|
return links
|
84
86
|
|
85
87
|
# build the `li` element for the link:
|
86
|
-
buildLi: (page, text = page)=>
|
87
|
-
"<li
|
88
|
+
buildLi: (page, text = page) =>
|
89
|
+
"<li>#{@buildLink(page, text)}</li>"
|
90
|
+
|
91
|
+
# build the link element
|
92
|
+
buildLink: (page, text = page) =>
|
93
|
+
if @settings.no_turbolink
|
94
|
+
data_attr = " data-no-turbolink='1'"
|
95
|
+
else
|
96
|
+
data_attr = ""
|
97
|
+
"<a href='#' data-page='#{page}'#{data_attr}>#{text}</a>"
|
88
98
|
|
89
99
|
# returns an array of all of the 'pages' in the pagination:
|
90
100
|
pages: =>
|
@@ -163,16 +173,28 @@
|
|
163
173
|
if @settings.current_page is @settings.total_pages and @settings.last
|
164
174
|
$("li:last", @el).removeClass("active").addClass("disabled")
|
165
175
|
|
176
|
+
isValidPage: (page) =>
|
177
|
+
page > 0 and \
|
178
|
+
page isnt @settings.current_page and \
|
179
|
+
page <= @settings.total_pages
|
180
|
+
|
166
181
|
# called when a link is clicked in the pagination list:
|
167
182
|
clicked: (event) =>
|
168
183
|
page = parseInt($(event.target).attr("data-page"))
|
184
|
+
return unless @isValidPage(page)
|
169
185
|
# if there is a callback registered, then call it
|
170
186
|
# passing the original event and the page number that was clicked:
|
171
187
|
if @settings.callback?
|
172
188
|
@settings.callback(event, page)
|
189
|
+
@change(page)
|
190
|
+
|
191
|
+
change: (page) =>
|
192
|
+
page = parseInt(page)
|
193
|
+
return unless @isValidPage(page)
|
173
194
|
# set the current page to the clicked page:
|
174
195
|
@settings.current_page = page
|
175
196
|
# re-render the pagination information to reflect the newly
|
176
|
-
#
|
197
|
+
# current page:
|
177
198
|
@render()
|
199
|
+
|
178
200
|
)(jQuery)
|
@@ -29,9 +29,12 @@
|
|
29
29
|
var defaults;
|
30
30
|
|
31
31
|
this.el = el;
|
32
|
+
this.change = __bind(this.change, this);
|
32
33
|
this.clicked = __bind(this.clicked, this);
|
34
|
+
this.isValidPage = __bind(this.isValidPage, this);
|
33
35
|
this.render = __bind(this.render, this);
|
34
36
|
this.pages = __bind(this.pages, this);
|
37
|
+
this.buildLink = __bind(this.buildLink, this);
|
35
38
|
this.buildLi = __bind(this.buildLi, this);
|
36
39
|
this.buildLinks = __bind(this.buildLinks, this);
|
37
40
|
defaults = {
|
@@ -42,7 +45,8 @@
|
|
42
45
|
first: false,
|
43
46
|
last: false,
|
44
47
|
display_max: 8,
|
45
|
-
ignore_single_page: true
|
48
|
+
ignore_single_page: true,
|
49
|
+
no_turbolink: false
|
46
50
|
};
|
47
51
|
this.settings = $.extend(defaults, options);
|
48
52
|
if ($(document).on) {
|
@@ -82,7 +86,21 @@
|
|
82
86
|
if (text == null) {
|
83
87
|
text = page;
|
84
88
|
}
|
85
|
-
return "<li
|
89
|
+
return "<li>" + (this.buildLink(page, text)) + "</li>";
|
90
|
+
};
|
91
|
+
|
92
|
+
PaginationView.prototype.buildLink = function(page, text) {
|
93
|
+
var data_attr;
|
94
|
+
|
95
|
+
if (text == null) {
|
96
|
+
text = page;
|
97
|
+
}
|
98
|
+
if (this.settings.no_turbolink) {
|
99
|
+
data_attr = " data-no-turbolink='1'";
|
100
|
+
} else {
|
101
|
+
data_attr = "";
|
102
|
+
}
|
103
|
+
return "<a href='#' data-page='" + page + "'" + data_attr + ">" + text + "</a>";
|
86
104
|
};
|
87
105
|
|
88
106
|
PaginationView.prototype.pages = function() {
|
@@ -162,13 +180,28 @@
|
|
162
180
|
}
|
163
181
|
};
|
164
182
|
|
183
|
+
PaginationView.prototype.isValidPage = function(page) {
|
184
|
+
return page > 0 && page !== this.settings.current_page && page <= this.settings.total_pages;
|
185
|
+
};
|
186
|
+
|
165
187
|
PaginationView.prototype.clicked = function(event) {
|
166
188
|
var page;
|
167
189
|
|
168
190
|
page = parseInt($(event.target).attr("data-page"));
|
191
|
+
if (!this.isValidPage(page)) {
|
192
|
+
return;
|
193
|
+
}
|
169
194
|
if (this.settings.callback != null) {
|
170
195
|
this.settings.callback(event, page);
|
171
196
|
}
|
197
|
+
return this.change(page);
|
198
|
+
};
|
199
|
+
|
200
|
+
PaginationView.prototype.change = function(page) {
|
201
|
+
page = parseInt(page);
|
202
|
+
if (!this.isValidPage(page)) {
|
203
|
+
return;
|
204
|
+
}
|
172
205
|
this.settings.current_page = page;
|
173
206
|
return this.render();
|
174
207
|
};
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jquery-bootstrap-pagination
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Bates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A simple and clean pagination implementation for jQuery and Twitter Bootstrap.
|
14
14
|
email:
|