jquery-tablesorter 1.16.3 → 1.16.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/jquery-tablesorter/version.rb +1 -1
  4. data/vendor/assets/javascripts/jquery-tablesorter/extras/semver-mod.js +277 -86
  5. data/vendor/assets/javascripts/jquery-tablesorter/extras/semver.js +272 -81
  6. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.combined.js +4483 -0
  7. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +45 -13
  8. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +10 -11
  9. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-extract.js +9 -16
  10. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-iso8601.js +2 -2
  11. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-month.js +3 -4
  12. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-range.js +2 -5
  13. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-two-digit-year.js +2 -3
  14. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-weekday.js +2 -3
  15. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date.js +6 -10
  16. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-duration.js +1 -1
  17. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-feet-inch-fraction.js +1 -1
  18. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-file-type.js +1 -1
  19. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-ignore-articles.js +1 -1
  20. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-image.js +2 -3
  21. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-input-select.js +1 -1
  22. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-metric.js +1 -1
  23. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-named-numbers.js +1 -1
  24. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-network.js +9 -6
  25. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-roman.js +1 -1
  26. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-alignChar.js +2 -2
  27. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-chart.js +1 -1
  28. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columnSelector.js +1 -1
  29. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-cssStickyHeaders.js +1 -1
  30. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-editable.js +1 -1
  31. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-html5.js +1 -1
  32. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-jui.js +1 -1
  33. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-select2.js +1 -1
  34. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-type-insideRange.js +1 -4
  35. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-formatter.js +1 -1
  36. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-grouping.js +1 -1
  37. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-headerTitles.js +1 -1
  38. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-math.js +1 -1
  39. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-output.js +1 -1
  40. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-print.js +1 -1
  41. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-reflow.js +1 -1
  42. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-repeatheaders.js +1 -1
  43. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-staticRow.js +1 -1
  44. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f5f02392625ac72228f63113d0c2eff960685aa
4
- data.tar.gz: c7faf012f91b35ffb12e8095f40f9984d4b189ca
3
+ metadata.gz: 5e0cf6bbed8cef35f8c06f69d9cd34656cabe552
4
+ data.tar.gz: d35fb81a407e3cdada26f41ad02defd7bef200de
5
5
  SHA512:
6
- metadata.gz: 5c900f0806e4eab93cc8fd22edc85f7e9042c3a26d1bd6f308b5c89d8b3d86c492bf41be4cbd50d90481c06fd73b53c62773ee546ddb023d433a8825d9f5c802
7
- data.tar.gz: ff378b3abff6e7571761a7866fd7ee8422500f41ec46c7e65d6dd0baff6f59180ab4376bd6b5e9d5cf5b74258aa43ba3d3ae41577668bd48a9a104d4b67404b3
6
+ metadata.gz: b4ecb45d3d07efe428b91dc590dfe124488c3b0b2ef459ac8ff141601315c6711fd98b27782bdb2a5a9096de7f42f12ff0f5c7a8fe15ee73d91dc06b3ab4d9d5
7
+ data.tar.gz: e23e7e585c11214b3dab625e78a9d935533aff38a27db9bcb27cc442ae3f257057ddec03877b8b832194b6cf12516b8c8bc65174ce92967500b4be488590b45c
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Simple integration of jquery-tablesorter into the asset pipeline.
6
6
 
7
- Current tablesorter version: 2.21.3 (3/26/2015), [documentation]
7
+ Current tablesorter version: 2.21.4 (3/28/2015), [documentation]
8
8
 
9
9
  Any issue associated with the js/css files, please report to [Mottie's fork].
10
10
 
@@ -38,7 +38,7 @@ In your `application.js`
38
38
  //= require jquery-tablesorter
39
39
  ```
40
40
 
41
- This will require all jquery-tablesorter files (excluding addons and extras).
41
+ This will require all core jquery-tablesorter files. Please note: This loads only the core-widgets and will neither include the extracted widgets nor any files from the addons and extras directories. Those files must be required manually as shown below.
42
42
 
43
43
  Or you can include single file with:
44
44
 
@@ -1,3 +1,3 @@
1
1
  module JqueryTablesorter
2
- VERSION = '1.16.3'
2
+ VERSION = '1.16.4'
3
3
  end
@@ -1,18 +1,17 @@
1
- /**
2
- Modified semver.js for node.js by R.Garrison (@Mottie)
3
- Original by @isaacs: https://github.com/isaacs/node-semver
1
+ /*! Modified semver.js for node.js (v4.3.3, 3/27/2015) *//*
2
+ semver-mod.js by R.Garrison (@Mottie)
3
+ semver.js by @isaacs: https://github.com/isaacs/node-semver
4
4
  ( all modifications have been labeled )
5
5
  */
6
6
  // ***** MODIFIED LINE BELOW *****
7
7
  (function(){
8
8
  // ***** MODIFIED LINE BELOW *****
9
9
  var module = { exports : {} };
10
-
11
10
  // export the class if we are in a Node-like system.
12
11
  // ***** MODIFIED LINE BELOW *****
13
12
  // if (typeof module === 'object' && module.exports === exports)
14
13
  // ***** MODIFIED LINE BELOW *****
15
- var exports = module.exports = SemVer;
14
+ var exports = module.exports = SemVer;
16
15
 
17
16
  // The debug function is excluded entirely from the minified version.
18
17
  /* nomin */ var debug;
@@ -32,6 +31,9 @@ var module = { exports : {} };
32
31
  // Not necessarily the package version of this code.
33
32
  exports.SEMVER_SPEC_VERSION = '2.0.0';
34
33
 
34
+ var MAX_LENGTH = 256;
35
+ var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
36
+
35
37
  // The actual regexps go on exports.re
36
38
  var re = exports.re = [];
37
39
  var src = exports.src = [];
@@ -150,18 +152,18 @@ var XRANGEPLAIN = R++;
150
152
  src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
151
153
  '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
152
154
  '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
153
- '(?:(' + src[PRERELEASE] + ')' +
154
- ')?)?)?';
155
+ '(?:' + src[PRERELEASE] + ')?' +
156
+ src[BUILD] + '?' +
157
+ ')?)?';
155
158
 
156
159
  var XRANGEPLAINLOOSE = R++;
157
160
  src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
158
161
  '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
159
162
  '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
160
- '(?:(' + src[PRERELEASELOOSE] + ')' +
161
- ')?)?)?';
163
+ '(?:' + src[PRERELEASELOOSE] + ')?' +
164
+ src[BUILD] + '?' +
165
+ ')?)?';
162
166
 
163
- // >=2.x, for example, means >=2.0.0-0
164
- // <1.x would be the same as "<1.0.0-0", though.
165
167
  var XRANGE = R++;
166
168
  src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
167
169
  var XRANGELOOSE = R++;
@@ -245,8 +247,24 @@ for (var i = 0; i < R; i++) {
245
247
 
246
248
  exports.parse = parse;
247
249
  function parse(version, loose) {
250
+ if (version instanceof SemVer)
251
+ return version;
252
+
253
+ if (typeof version !== 'string')
254
+ return null;
255
+
256
+ if (version.length > MAX_LENGTH)
257
+ return null;
258
+
248
259
  var r = loose ? re[LOOSE] : re[FULL];
249
- return (r.test(version)) ? new SemVer(version, loose) : null;
260
+ if (!r.test(version))
261
+ return null;
262
+
263
+ try {
264
+ return new SemVer(version, loose);
265
+ } catch (er) {
266
+ return null;
267
+ }
250
268
  }
251
269
 
252
270
  exports.valid = valid;
@@ -258,7 +276,7 @@ function valid(version, loose) {
258
276
 
259
277
  exports.clean = clean;
260
278
  function clean(version, loose) {
261
- var s = parse(version, loose);
279
+ var s = parse(version.trim().replace(/^[=v]+/, ''), loose);
262
280
  return s ? s.version : null;
263
281
  }
264
282
 
@@ -271,8 +289,13 @@ function SemVer(version, loose) {
271
289
  return version;
272
290
  else
273
291
  version = version.version;
292
+ } else if (typeof version !== 'string') {
293
+ throw new TypeError('Invalid Version: ' + version);
274
294
  }
275
295
 
296
+ if (version.length > MAX_LENGTH)
297
+ throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
298
+
276
299
  if (!(this instanceof SemVer))
277
300
  return new SemVer(version, loose);
278
301
 
@@ -290,12 +313,26 @@ function SemVer(version, loose) {
290
313
  this.minor = +m[2];
291
314
  this.patch = +m[3];
292
315
 
316
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0)
317
+ throw new TypeError('Invalid major version')
318
+
319
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)
320
+ throw new TypeError('Invalid minor version')
321
+
322
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)
323
+ throw new TypeError('Invalid patch version')
324
+
293
325
  // numberify any prerelease numeric ids
294
326
  if (!m[4])
295
327
  this.prerelease = [];
296
328
  else
297
329
  this.prerelease = m[4].split('.').map(function(id) {
298
- return (/^[0-9]+$/.test(id)) ? +id : id;
330
+ if (/^[0-9]+$/.test(id)) {
331
+ var num = +id
332
+ if (num >= 0 && num < MAX_SAFE_INTEGER)
333
+ return num
334
+ }
335
+ return id;
299
336
  });
300
337
 
301
338
  this.build = m[5] ? m[5].split('.') : [];
@@ -343,7 +380,7 @@ SemVer.prototype.comparePre = function(other) {
343
380
  return -1;
344
381
  else if (!this.prerelease.length && other.prerelease.length)
345
382
  return 1;
346
- else if (!this.prerelease.lenth && !other.prerelease.length)
383
+ else if (!this.prerelease.length && !other.prerelease.length)
347
384
  return 0;
348
385
 
349
386
  var i = 0;
@@ -364,19 +401,72 @@ SemVer.prototype.comparePre = function(other) {
364
401
  } while (++i);
365
402
  };
366
403
 
367
- SemVer.prototype.inc = function(release) {
404
+ // preminor will bump the version up to the next minor release, and immediately
405
+ // down to pre-release. premajor and prepatch work the same way.
406
+ SemVer.prototype.inc = function(release, identifier) {
368
407
  switch (release) {
369
- case 'major':
408
+ case 'premajor':
409
+ this.prerelease.length = 0;
410
+ this.patch = 0;
411
+ this.minor = 0;
370
412
  this.major++;
371
- this.minor = -1;
372
- case 'minor':
413
+ this.inc('pre', identifier);
414
+ break;
415
+ case 'preminor':
416
+ this.prerelease.length = 0;
417
+ this.patch = 0;
373
418
  this.minor++;
374
- this.patch = -1;
419
+ this.inc('pre', identifier);
420
+ break;
421
+ case 'prepatch':
422
+ // If this is already a prerelease, it will bump to the next version
423
+ // drop any prereleases that might already exist, since they are not
424
+ // relevant at this point.
425
+ this.prerelease.length = 0;
426
+ this.inc('patch', identifier);
427
+ this.inc('pre', identifier);
428
+ break;
429
+ // If the input is a non-prerelease version, this acts the same as
430
+ // prepatch.
431
+ case 'prerelease':
432
+ if (this.prerelease.length === 0)
433
+ this.inc('patch', identifier);
434
+ this.inc('pre', identifier);
435
+ break;
436
+
437
+ case 'major':
438
+ // If this is a pre-major version, bump up to the same major version.
439
+ // Otherwise increment major.
440
+ // 1.0.0-5 bumps to 1.0.0
441
+ // 1.1.0 bumps to 2.0.0
442
+ if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)
443
+ this.major++;
444
+ this.minor = 0;
445
+ this.patch = 0;
446
+ this.prerelease = [];
447
+ break;
448
+ case 'minor':
449
+ // If this is a pre-minor version, bump up to the same minor version.
450
+ // Otherwise increment minor.
451
+ // 1.2.0-5 bumps to 1.2.0
452
+ // 1.2.1 bumps to 1.3.0
453
+ if (this.patch !== 0 || this.prerelease.length === 0)
454
+ this.minor++;
455
+ this.patch = 0;
456
+ this.prerelease = [];
457
+ break;
375
458
  case 'patch':
376
- this.patch++;
459
+ // If this is not a pre-release version, it will increment the patch.
460
+ // If it is a pre-release it will bump up to the same patch version.
461
+ // 1.2.0-5 patches to 1.2.0
462
+ // 1.2.0 patches to 1.2.1
463
+ if (this.prerelease.length === 0)
464
+ this.patch++;
377
465
  this.prerelease = [];
378
466
  break;
379
- case 'prerelease':
467
+ // This probably shouldn't be used publicly.
468
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
469
+ case 'pre':
380
470
  if (this.prerelease.length === 0)
381
471
  this.prerelease = [0];
382
472
  else {
@@ -390,6 +480,15 @@ SemVer.prototype.inc = function(release) {
390
480
  if (i === -1) // didn't increment anything
391
481
  this.prerelease.push(0);
392
482
  }
483
+ if (identifier) {
484
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
485
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
486
+ if (this.prerelease[0] === identifier) {
487
+ if (isNaN(this.prerelease[1]))
488
+ this.prerelease = [identifier, 0];
489
+ } else
490
+ this.prerelease = [identifier, 0];
491
+ }
393
492
  break;
394
493
 
395
494
  default:
@@ -400,14 +499,46 @@ SemVer.prototype.inc = function(release) {
400
499
  };
401
500
 
402
501
  exports.inc = inc;
403
- function inc(version, release, loose) {
502
+ function inc(version, release, loose, identifier) {
503
+ if (typeof(loose) === 'string') {
504
+ identifier = loose;
505
+ loose = undefined;
506
+ }
507
+
404
508
  try {
405
- return new SemVer(version, loose).inc(release).version;
509
+ return new SemVer(version, loose).inc(release, identifier).version;
406
510
  } catch (er) {
407
511
  return null;
408
512
  }
409
513
  }
410
514
 
515
+ exports.diff = diff;
516
+ function diff(version1, version2) {
517
+ if (eq(version1, version2)) {
518
+ return null;
519
+ } else {
520
+ var v1 = parse(version1);
521
+ var v2 = parse(version2);
522
+ if (v1.prerelease.length || v2.prerelease.length) {
523
+ for (var key in v1) {
524
+ if (key === 'major' || key === 'minor' || key === 'patch') {
525
+ if (v1[key] !== v2[key]) {
526
+ return 'pre'+key;
527
+ }
528
+ }
529
+ }
530
+ return 'prerelease';
531
+ }
532
+ for (var key in v1) {
533
+ if (key === 'major' || key === 'minor' || key === 'patch') {
534
+ if (v1[key] !== v2[key]) {
535
+ return key;
536
+ }
537
+ }
538
+ }
539
+ }
540
+ }
541
+
411
542
  exports.compareIdentifiers = compareIdentifiers;
412
543
 
413
544
  var numeric = /^[0-9]+$/;
@@ -432,6 +563,21 @@ function rcompareIdentifiers(a, b) {
432
563
  return compareIdentifiers(b, a);
433
564
  }
434
565
 
566
+ exports.major = major;
567
+ function major(a, loose) {
568
+ return new SemVer(a, loose).major;
569
+ }
570
+
571
+ exports.minor = minor;
572
+ function minor(a, loose) {
573
+ return new SemVer(a, loose).minor;
574
+ }
575
+
576
+ exports.patch = patch;
577
+ function patch(a, loose) {
578
+ return new SemVer(a, loose).patch;
579
+ }
580
+
435
581
  exports.compare = compare;
436
582
  function compare(a, b, loose) {
437
583
  return new SemVer(a, loose).compare(b);
@@ -495,8 +641,16 @@ exports.cmp = cmp;
495
641
  function cmp(a, op, b, loose) {
496
642
  var ret;
497
643
  switch (op) {
498
- case '===': ret = a === b; break;
499
- case '!==': ret = a !== b; break;
644
+ case '===':
645
+ if (typeof a === 'object') a = a.version;
646
+ if (typeof b === 'object') b = b.version;
647
+ ret = a === b;
648
+ break;
649
+ case '!==':
650
+ if (typeof a === 'object') a = a.version;
651
+ if (typeof b === 'object') b = b.version;
652
+ ret = a !== b;
653
+ break;
500
654
  case '': case '=': case '==': ret = eq(a, b, loose); break;
501
655
  case '!=': ret = neq(a, b, loose); break;
502
656
  case '>': ret = gt(a, b, loose); break;
@@ -528,6 +682,8 @@ function Comparator(comp, loose) {
528
682
  this.value = '';
529
683
  else
530
684
  this.value = this.operator + this.semver.version;
685
+
686
+ debug('comp', this);
531
687
  }
532
688
 
533
689
  var ANY = {};
@@ -539,24 +695,14 @@ Comparator.prototype.parse = function(comp) {
539
695
  throw new TypeError('Invalid comparator: ' + comp);
540
696
 
541
697
  this.operator = m[1];
698
+ if (this.operator === '=')
699
+ this.operator = '';
700
+
542
701
  // if it literally is just '>' or '' then allow anything.
543
702
  if (!m[2])
544
703
  this.semver = ANY;
545
- else {
704
+ else
546
705
  this.semver = new SemVer(m[2], this.loose);
547
-
548
- // <1.2.3-rc DOES allow 1.2.3-beta (has prerelease)
549
- // >=1.2.3 DOES NOT allow 1.2.3-beta
550
- // <=1.2.3 DOES allow 1.2.3-beta
551
- // However, <1.2.3 does NOT allow 1.2.3-beta,
552
- // even though `1.2.3-beta < 1.2.3`
553
- // The assumption is that the 1.2.3 version has something you
554
- // *don't* want, so we push the prerelease down to the minimum.
555
- if (this.operator === '<' && !this.semver.prerelease.length) {
556
- this.semver.prerelease = ['0'];
557
- this.semver.format();
558
- }
559
- }
560
706
  };
561
707
 
562
708
  Comparator.prototype.inspect = function() {
@@ -569,8 +715,14 @@ Comparator.prototype.toString = function() {
569
715
 
570
716
  Comparator.prototype.test = function(version) {
571
717
  debug('Comparator.test', version, this.loose);
572
- return (this.semver === ANY) ? true :
573
- cmp(version, this.operator, this.semver, this.loose);
718
+
719
+ if (this.semver === ANY)
720
+ return true;
721
+
722
+ if (typeof version === 'string')
723
+ version = new SemVer(version, this.loose);
724
+
725
+ return cmp(version, this.operator, this.semver, this.loose);
574
726
  };
575
727
 
576
728
 
@@ -707,20 +859,20 @@ function replaceTilde(comp, loose) {
707
859
  if (isX(M))
708
860
  ret = '';
709
861
  else if (isX(m))
710
- ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
862
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
711
863
  else if (isX(p))
712
864
  // ~1.2 == >=1.2.0- <1.3.0-
713
- ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
865
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
714
866
  else if (pr) {
715
867
  debug('replaceTilde pr', pr);
716
868
  if (pr.charAt(0) !== '-')
717
869
  pr = '-' + pr;
718
870
  ret = '>=' + M + '.' + m + '.' + p + pr +
719
- ' <' + M + '.' + (+m + 1) + '.0-0';
871
+ ' <' + M + '.' + (+m + 1) + '.0';
720
872
  } else
721
- // ~1.2.3 == >=1.2.3-0 <1.3.0-0
722
- ret = '>=' + M + '.' + m + '.' + p + '-0' +
723
- ' <' + M + '.' + (+m + 1) + '.0-0';
873
+ // ~1.2.3 == >=1.2.3 <1.3.0
874
+ ret = '>=' + M + '.' + m + '.' + p +
875
+ ' <' + M + '.' + (+m + 1) + '.0';
724
876
 
725
877
  debug('tilde return', ret);
726
878
  return ret;
@@ -740,6 +892,7 @@ function replaceCarets(comp, loose) {
740
892
  }
741
893
 
742
894
  function replaceCaret(comp, loose) {
895
+ debug('caret', comp, loose);
743
896
  var r = loose ? re[CARETLOOSE] : re[CARET];
744
897
  return comp.replace(r, function(_, M, m, p, pr) {
745
898
  debug('caret', comp, _, M, m, p, pr);
@@ -748,35 +901,38 @@ function replaceCaret(comp, loose) {
748
901
  if (isX(M))
749
902
  ret = '';
750
903
  else if (isX(m))
751
- ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
904
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
752
905
  else if (isX(p)) {
753
906
  if (M === '0')
754
- ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
907
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
755
908
  else
756
- ret = '>=' + M + '.' + m + '.0-0 <' + (+M + 1) + '.0.0-0';
909
+ ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0';
757
910
  } else if (pr) {
758
911
  debug('replaceCaret pr', pr);
759
912
  if (pr.charAt(0) !== '-')
760
913
  pr = '-' + pr;
761
914
  if (M === '0') {
762
915
  if (m === '0')
763
- ret = '=' + M + '.' + m + '.' + p + pr;
916
+ ret = '>=' + M + '.' + m + '.' + p + pr +
917
+ ' <' + M + '.' + m + '.' + (+p + 1);
764
918
  else
765
919
  ret = '>=' + M + '.' + m + '.' + p + pr +
766
- ' <' + M + '.' + (+m + 1) + '.0-0';
920
+ ' <' + M + '.' + (+m + 1) + '.0';
767
921
  } else
768
922
  ret = '>=' + M + '.' + m + '.' + p + pr +
769
- ' <' + (+M + 1) + '.0.0-0';
923
+ ' <' + (+M + 1) + '.0.0';
770
924
  } else {
925
+ debug('no pr');
771
926
  if (M === '0') {
772
927
  if (m === '0')
773
- ret = '=' + M + '.' + m + '.' + p;
928
+ ret = '>=' + M + '.' + m + '.' + p +
929
+ ' <' + M + '.' + m + '.' + (+p + 1);
774
930
  else
775
- ret = '>=' + M + '.' + m + '.' + p + '-0' +
776
- ' <' + M + '.' + (+m + 1) + '.0-0';
931
+ ret = '>=' + M + '.' + m + '.' + p +
932
+ ' <' + M + '.' + (+m + 1) + '.0';
777
933
  } else
778
- ret = '>=' + M + '.' + m + '.' + p + '-0' +
779
- ' <' + (+M + 1) + '.0.0-0';
934
+ ret = '>=' + M + '.' + m + '.' + p +
935
+ ' <' + (+M + 1) + '.0.0';
780
936
  }
781
937
 
782
938
  debug('caret return', ret);
@@ -804,23 +960,27 @@ function replaceXRange(comp, loose) {
804
960
  if (gtlt === '=' && anyX)
805
961
  gtlt = '';
806
962
 
807
- if (gtlt && anyX) {
808
- // replace X with 0, and then append the -0 min-prerelease
809
- if (xM)
810
- M = 0;
963
+ if (xM) {
964
+ if (gtlt === '>' || gtlt === '<') {
965
+ // nothing is allowed
966
+ ret = '<0.0.0';
967
+ } else {
968
+ // nothing is forbidden
969
+ ret = '*';
970
+ }
971
+ } else if (gtlt && anyX) {
972
+ // replace X with 0
811
973
  if (xm)
812
974
  m = 0;
813
975
  if (xp)
814
976
  p = 0;
815
977
 
816
978
  if (gtlt === '>') {
817
- // >1 => >=2.0.0-0
818
- // >1.2 => >=1.3.0-0
819
- // >1.2.3 => >= 1.2.4-0
979
+ // >1 => >=2.0.0
980
+ // >1.2 => >=1.3.0
981
+ // >1.2.3 => >= 1.2.4
820
982
  gtlt = '>=';
821
- if (xM) {
822
- // no change
823
- } else if (xm) {
983
+ if (xm) {
824
984
  M = +M + 1;
825
985
  m = 0;
826
986
  p = 0;
@@ -828,20 +988,21 @@ function replaceXRange(comp, loose) {
828
988
  m = +m + 1;
829
989
  p = 0;
830
990
  }
991
+ } else if (gtlt === '<=') {
992
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
993
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
994
+ gtlt = '<'
995
+ if (xm)
996
+ M = +M + 1
997
+ else
998
+ m = +m + 1
831
999
  }
832
1000
 
833
-
834
- ret = gtlt + M + '.' + m + '.' + p + '-0';
835
- } else if (xM) {
836
- // allow any
837
- ret = '*';
1001
+ ret = gtlt + M + '.' + m + '.' + p;
838
1002
  } else if (xm) {
839
- // append '-0' onto the version, otherwise
840
- // '1.x.x' matches '2.0.0-beta', since the tag
841
- // *lowers* the version value
842
- ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
1003
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
843
1004
  } else if (xp) {
844
- ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
1005
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
845
1006
  }
846
1007
 
847
1008
  debug('xRange return', ret);
@@ -860,9 +1021,9 @@ function replaceStars(comp, loose) {
860
1021
 
861
1022
  // This function is passed to string.replace(re[HYPHENRANGE])
862
1023
  // M, m, patch, prerelease, build
863
- // 1.2 - 3.4.5 => >=1.2.0-0 <=3.4.5
864
- // 1.2.3 - 3.4 => >=1.2.0-0 <3.5.0-0 Any 3.4.x will do
865
- // 1.2 - 3.4 => >=1.2.0-0 <3.5.0-0
1024
+ // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
1025
+ // 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
1026
+ // 1.2 - 3.4 => >=1.2.0 <3.5.0
866
1027
  function hyphenReplace($0,
867
1028
  from, fM, fm, fp, fpr, fb,
868
1029
  to, tM, tm, tp, tpr, tb) {
@@ -870,18 +1031,18 @@ function hyphenReplace($0,
870
1031
  if (isX(fM))
871
1032
  from = '';
872
1033
  else if (isX(fm))
873
- from = '>=' + fM + '.0.0-0';
1034
+ from = '>=' + fM + '.0.0';
874
1035
  else if (isX(fp))
875
- from = '>=' + fM + '.' + fm + '.0-0';
1036
+ from = '>=' + fM + '.' + fm + '.0';
876
1037
  else
877
1038
  from = '>=' + from;
878
1039
 
879
1040
  if (isX(tM))
880
1041
  to = '';
881
1042
  else if (isX(tm))
882
- to = '<' + (+tM + 1) + '.0.0-0';
1043
+ to = '<' + (+tM + 1) + '.0.0';
883
1044
  else if (isX(tp))
884
- to = '<' + tM + '.' + (+tm + 1) + '.0-0';
1045
+ to = '<' + tM + '.' + (+tm + 1) + '.0';
885
1046
  else if (tpr)
886
1047
  to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;
887
1048
  else
@@ -895,6 +1056,10 @@ function hyphenReplace($0,
895
1056
  Range.prototype.test = function(version) {
896
1057
  if (!version)
897
1058
  return false;
1059
+
1060
+ if (typeof version === 'string')
1061
+ version = new SemVer(version, this.loose);
1062
+
898
1063
  for (var i = 0; i < this.set.length; i++) {
899
1064
  if (testSet(this.set[i], version))
900
1065
  return true;
@@ -907,6 +1072,31 @@ function testSet(set, version) {
907
1072
  if (!set[i].test(version))
908
1073
  return false;
909
1074
  }
1075
+
1076
+ if (version.prerelease.length) {
1077
+ // Find the set of versions that are allowed to have prereleases
1078
+ // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
1079
+ // That should allow `1.2.3-pr.2` to pass.
1080
+ // However, `1.2.4-alpha.notready` should NOT be allowed,
1081
+ // even though it's within the range set by the comparators.
1082
+ for (var i = 0; i < set.length; i++) {
1083
+ debug(set[i].semver);
1084
+ if (set[i].semver === ANY)
1085
+ return true;
1086
+
1087
+ if (set[i].semver.prerelease.length > 0) {
1088
+ var allowed = set[i].semver;
1089
+ if (allowed.major === version.major &&
1090
+ allowed.minor === version.minor &&
1091
+ allowed.patch === version.patch)
1092
+ return true;
1093
+ }
1094
+ }
1095
+
1096
+ // Version has a -pre, but it's not one of the ones we like.
1097
+ return false;
1098
+ }
1099
+
910
1100
  return true;
911
1101
  }
912
1102
 
@@ -1022,5 +1212,6 @@ function outside(version, range, hilo, loose) {
1022
1212
  // Use the define() function if we're in AMD land
1023
1213
  if (typeof define === 'function' && define.amd)
1024
1214
  define(exports);
1215
+
1025
1216
  // ***** MODIFIED LINE BELOW *****
1026
1217
  })();