UNPKG

1.8 kBJavaScriptView Raw
1(function (global, factory) {
2 if (typeof define === "function" && define.amd) {
3 define([], factory);
4 } else if (typeof exports !== "undefined") {
5 factory();
6 } else {
7 var mod = {
8 exports: {}
9 };
10 factory();
11 global.bootstrapTableNaturalSorting = mod.exports;
12 }
13})(this, function () {
14 "use strict";
15
16 /**
17 * @author: Brian Huisman
18 * @webSite: http://www.greywyvern.com
19 * @version: v1.0.0
20 * JS functions to allow natural sorting on bootstrap-table columns
21 * add data-sorter="alphanum" or data-sorter="numericOnly" to any th
22 *
23 * @update Dennis Hernández <http://djhvscf.github.io/Blog>
24 * @update Duane May
25 */
26
27 function alphanum(a, b) {
28 function chunkify(t) {
29 var tz = [],
30 x = 0,
31 y = -1,
32 n = 0,
33 i,
34 j;
35
36 while (i = (j = t.charAt(x++)).charCodeAt(0)) {
37 var m = i === 46 || i >= 48 && i <= 57;
38 if (m !== n) {
39 tz[++y] = "";
40 n = m;
41 }
42 tz[y] += j;
43 }
44 return tz;
45 }
46
47 function stringfy(v) {
48 if (typeof v === "number") {
49 v = "" + v;
50 }
51 if (!v) {
52 v = "";
53 }
54 return v;
55 }
56
57 var aa = chunkify(stringfy(a));
58 var bb = chunkify(stringfy(b));
59
60 for (x = 0; aa[x] && bb[x]; x++) {
61 if (aa[x] !== bb[x]) {
62 var c = Number(aa[x]),
63 d = Number(bb[x]);
64
65 if (c == aa[x] && d == bb[x]) {
66 return c - d;
67 } else {
68 return aa[x] > bb[x] ? 1 : -1;
69 }
70 }
71 }
72 return aa.length - bb.length;
73 }
74
75 function numericOnly(a, b) {
76 function stripNonNumber(s) {
77 s = s.replace(new RegExp(/[^0-9]/g), "");
78 return parseInt(s, 10);
79 }
80
81 return stripNonNumber(a) - stripNonNumber(b);
82 }
83});
\No newline at end of file