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 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: