jquery-bootstrap-pagination 1.1.0 → 1.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5fe90a359d24b67688cad8fc478e711e6d833e7e
4
- data.tar.gz: 18df3798a64479c3a6dde1b4947f81cfc5181771
3
+ metadata.gz: fa901f4f244d5d5c664df752adda4a4657c8129f
4
+ data.tar.gz: b9af6375f692acd96716344ab279dc25e578a6c4
5
5
  SHA512:
6
- metadata.gz: abcadac0c5f4d0da8664e748cac09086d817c4b23ec6dae8f1d6632147b76d5406639074451a3aad0ad0ad1637d3b2955e53a6a13bf885b5d48ab57bbe5b7e24
7
- data.tar.gz: 20cd02574649b743a7f77230c91f4b6091fd59edf050e529f11e2c3e13b86bbbb77d1d1c6116b20b619c637442f18fe3b89d4a68197d65fed23a0352b08bdbf0
6
+ metadata.gz: 50138ccce52f55c99680e1022c2c72cd300c9963e8e6769acf741f76d9042f380468b9339f039e25fdfd0e6f50d3033eddb646f98aa0189b9f6bb4994a88fe61
7
+ data.tar.gz: 7a5cd2aa11ade9416f27e35bd30008d2e8e2b061dd037e2a28260fa50ae779215a86df00cb4081fc9cd91d3111bc1f5f11183ddfb3564f1320b34767002b3494
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jquery-bootstrap-pagination (1.0.4)
4
+ jquery-bootstrap-pagination (1.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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
@@ -1,7 +1,7 @@
1
1
  module Jquery
2
2
  module Bootstrap
3
3
  module Pagination
4
- VERSION = "1.1.0"
4
+ VERSION = "1.2.0"
5
5
  end
6
6
  end
7
7
  end
@@ -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><a href='#' data-page='#{page}'>#{text}</a></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
- # clicked page:
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><a href='#' data-page='" + page + "'>" + text + "</a></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.1.0
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-06-10 00:00:00.000000000 Z
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: