X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=node_modules%2Funderscore.string%2FnaturalCmp.js;fp=node_modules%2Funderscore.string%2FnaturalCmp.js;h=7cb94e6f1af9009491ab0e70386bdbc89dcda371;hp=0000000000000000000000000000000000000000;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad diff --git a/node_modules/underscore.string/naturalCmp.js b/node_modules/underscore.string/naturalCmp.js new file mode 100644 index 000000000..7cb94e6f1 --- /dev/null +++ b/node_modules/underscore.string/naturalCmp.js @@ -0,0 +1,29 @@ +module.exports = function naturalCmp(str1, str2) { + if (str1 == str2) return 0; + if (!str1) return -1; + if (!str2) return 1; + + var cmpRegex = /(\.\d+|\d+|\D+)/g, + tokens1 = String(str1).match(cmpRegex), + tokens2 = String(str2).match(cmpRegex), + count = Math.min(tokens1.length, tokens2.length); + + for (var i = 0; i < count; i++) { + var a = tokens1[i], + b = tokens2[i]; + + if (a !== b) { + var num1 = +a; + var num2 = +b; + if (num1 === num1 && num2 === num2) { + return num1 > num2 ? 1 : -1; + } + return a < b ? -1 : 1; + } + } + + if (tokens1.length != tokens2.length) + return tokens1.length - tokens2.length; + + return str1 < str2 ? -1 : 1; +};