/ajax/libs/humanize-plus/1.4.2/humanize.js
JavaScript | 436 lines | 399 code | 33 blank | 4 comment | 131 complexity | a07a89032a55e4b54d7860ad4197a526 MD5 | raw file
- (function() {
- var Humanize, isArray, isFinite, isNaN, objectRef, timeFormats, toString;
- objectRef = new function() {};
- toString = objectRef.toString;
- isNaN = function(value) {
- return value !== value;
- };
- isFinite = function(value) {
- return ((typeof window !== "undefined" && window !== null ? window.isFinite : void 0) || global.isFinite)(value) && !isNaN(parseFloat(value));
- };
- isArray = function(value) {
- return toString.call(value) === '[object Array]';
- };
- timeFormats = [
- {
- name: 'second',
- value: 1e3
- }, {
- name: 'minute',
- value: 6e4
- }, {
- name: 'hour',
- value: 36e5
- }, {
- name: 'day',
- value: 864e5
- }, {
- name: 'week',
- value: 6048e5
- }
- ];
- Humanize = {};
- Humanize.intword = function(number, charWidth, decimals) {
- if (decimals == null) {
- decimals = 2;
- }
- /*
- # This method is deprecated. Please use compactInteger instead.
- # intword will be going away in the next major version.
- */
- return Humanize.compactInteger(number, decimals);
- };
- Humanize.compactInteger = function(input, decimals) {
- var bigNumPrefixes, decimalIndex, decimalPart, decimalPartArray, length, number, numberLength, numberLengths, output, outputNumber, signString, unsignedNumber, unsignedNumberCharacterArray, unsignedNumberString, wholePart, wholePartArray, _i, _len, _length;
- if (decimals == null) {
- decimals = 0;
- }
- decimals = Math.max(decimals, 0);
- number = parseInt(input, 10);
- signString = number < 0 ? "-" : "";
- unsignedNumber = Math.abs(number);
- unsignedNumberString = "" + unsignedNumber;
- numberLength = unsignedNumberString.length;
- numberLengths = [13, 10, 7, 4];
- bigNumPrefixes = ['T', 'B', 'M', 'k'];
- if (unsignedNumber < 1000) {
- if (decimals > 0) {
- unsignedNumberString += "." + (Array(decimals + 1).join('0'));
- }
- return "" + signString + unsignedNumberString;
- }
- if (numberLength > numberLengths[0] + 3) {
- return number.toExponential(decimals).replace('e+', 'x10^');
- }
- for (_i = 0, _len = numberLengths.length; _i < _len; _i++) {
- _length = numberLengths[_i];
- if (numberLength >= _length) {
- length = _length;
- break;
- }
- }
- decimalIndex = numberLength - length + 1;
- unsignedNumberCharacterArray = unsignedNumberString.split("");
- wholePartArray = unsignedNumberCharacterArray.slice(0, decimalIndex);
- decimalPartArray = unsignedNumberCharacterArray.slice(decimalIndex, decimalIndex + decimals + 1);
- wholePart = wholePartArray.join("");
- decimalPart = decimalPartArray.join("");
- if (decimalPart.length < decimals) {
- decimalPart += "" + (Array(decimals - decimalPart.length + 1).join('0'));
- }
- if (decimals === 0) {
- output = "" + signString + wholePart + bigNumPrefixes[numberLengths.indexOf(length)];
- } else {
- outputNumber = (+("" + wholePart + "." + decimalPart)).toFixed(decimals);
- output = "" + signString + outputNumber + bigNumPrefixes[numberLengths.indexOf(length)];
- }
- return output;
- };
- Humanize.intcomma = Humanize.intComma = function(number, decimals) {
- if (decimals == null) {
- decimals = 0;
- }
- return Humanize.formatNumber(number, decimals);
- };
- Humanize.filesize = Humanize.fileSize = function(filesize) {
- var sizeStr;
- if (filesize >= 1073741824) {
- sizeStr = Humanize.formatNumber(filesize / 1073741824, 2, "") + " GB";
- } else if (filesize >= 1048576) {
- sizeStr = Humanize.formatNumber(filesize / 1048576, 2, "") + " MB";
- } else if (filesize >= 1024) {
- sizeStr = Humanize.formatNumber(filesize / 1024, 0) + " KB";
- } else {
- sizeStr = Humanize.formatNumber(filesize, 0) + Humanize.pluralize(filesize, " byte");
- }
- return sizeStr;
- };
- Humanize.formatNumber = function(number, precision, thousand, decimal) {
- var base, commas, decimals, firstComma, mod, negative, usePrecision,
- _this = this;
- if (precision == null) {
- precision = 0;
- }
- if (thousand == null) {
- thousand = ",";
- }
- if (decimal == null) {
- decimal = ".";
- }
- firstComma = function(number, thousand, position) {
- if (position) {
- return number.substr(0, position) + thousand;
- } else {
- return "";
- }
- };
- commas = function(number, thousand, position) {
- return number.substr(position).replace(/(\d{3})(?=\d)/g, "$1" + thousand);
- };
- decimals = function(number, decimal, usePrecision) {
- if (usePrecision) {
- return decimal + Humanize.toFixed(Math.abs(number), usePrecision).split(".")[1];
- } else {
- return "";
- }
- };
- usePrecision = Humanize.normalizePrecision(precision);
- negative = number < 0 && "-" || "";
- base = parseInt(Humanize.toFixed(Math.abs(number || 0), usePrecision), 10) + "";
- mod = base.length > 3 ? base.length % 3 : 0;
- return negative + firstComma(base, thousand, mod) + commas(base, thousand, mod) + decimals(number, decimal, usePrecision);
- };
- Humanize.toFixed = function(value, precision) {
- var power;
- if (precision == null) {
- precision = Humanize.normalizePrecision(precision, 0);
- }
- power = Math.pow(10, precision);
- return (Math.round(value * power) / power).toFixed(precision);
- };
- Humanize.normalizePrecision = function(value, base) {
- value = Math.round(Math.abs(value));
- if (isNaN(value)) {
- return base;
- } else {
- return value;
- }
- };
- Humanize.ordinal = function(value) {
- var end, leastSignificant, number, specialCase;
- number = parseInt(value, 10);
- if (number === 0) {
- return value;
- }
- specialCase = number % 100;
- if (specialCase === 11 || specialCase === 12 || specialCase === 13) {
- return "" + number + "th";
- }
- leastSignificant = number % 10;
- switch (leastSignificant) {
- case 1:
- end = "st";
- break;
- case 2:
- end = "nd";
- break;
- case 3:
- end = "rd";
- break;
- default:
- end = "th";
- }
- return "" + number + end;
- };
- Humanize.times = function(value, overrides) {
- var number, smallTimes, _ref;
- if (overrides == null) {
- overrides = {};
- }
- if (isFinite(value) && value >= 0) {
- number = parseFloat(value);
- smallTimes = ['never', 'once', 'twice'];
- if (overrides[number] != null) {
- return "" + overrides[number];
- } else {
- return "" + (((_ref = smallTimes[number]) != null ? _ref.toString() : void 0) || number.toString() + ' times');
- }
- }
- };
- Humanize.pluralize = function(number, singular, plural) {
- if (!((number != null) && (singular != null))) {
- return;
- }
- if (plural == null) {
- plural = singular + "s";
- }
- if (parseInt(number, 10) === 1) {
- return singular;
- } else {
- return plural;
- }
- };
- Humanize.truncate = function(str, length, ending) {
- if (length == null) {
- length = 100;
- }
- if (ending == null) {
- ending = '...';
- }
- if (str.length > length) {
- return str.substring(0, length - ending.length) + ending;
- } else {
- return str;
- }
- };
- Humanize.truncatewords = Humanize.truncateWords = function(string, length) {
- var array, i, result;
- array = string.split(" ");
- result = "";
- i = 0;
- while (i < length) {
- if (array[i] != null) {
- result += "" + array[i] + " ";
- }
- i++;
- }
- if (array.length > length) {
- return result += "...";
- }
- };
- Humanize.truncatenumber = Humanize.boundedNumber = function(num, bound, ending) {
- var result;
- if (bound == null) {
- bound = 100;
- }
- if (ending == null) {
- ending = "+";
- }
- result = null;
- if (isFinite(num) && isFinite(bound)) {
- if (num > bound) {
- result = bound + ending;
- }
- }
- return (result || num).toString();
- };
- Humanize.oxford = function(items, limit, limitStr) {
- var extra, limitIndex, numItems;
- numItems = items.length;
- if (numItems < 2) {
- return "" + items;
- } else if (numItems === 2) {
- return items.join(' and ');
- } else if ((limit != null) && numItems > limit) {
- extra = numItems - limit;
- limitIndex = limit;
- if (limitStr == null) {
- limitStr = ", and " + extra + " " + (Humanize.pluralize(extra, 'other'));
- }
- } else {
- limitIndex = -1;
- limitStr = ", and " + items[numItems - 1];
- }
- return items.slice(0, limitIndex).join(', ') + limitStr;
- };
- Humanize.dictionary = function(object, joiner, separator) {
- var defs, key, result, val;
- if (joiner == null) {
- joiner = ' is ';
- }
- if (separator == null) {
- separator = ', ';
- }
- result = '';
- if ((object != null) && typeof object === 'object' && Object.prototype.toString.call(object) !== '[object Array]') {
- defs = [];
- for (key in object) {
- val = object[key];
- defs.push("" + key + joiner + val);
- }
- result = defs.join(separator);
- }
- return result;
- };
- Humanize.frequency = function(list, verb) {
- var len, str, times;
- if (!isArray(list)) {
- return;
- }
- len = list.length;
- times = Humanize.times(len);
- if (len === 0) {
- str = "" + times + " " + verb;
- } else {
- str = "" + verb + " " + times;
- }
- return str;
- };
- Humanize.pace = function(value, intervalMs, unit) {
- var f, prefix, rate, relativePace, roundedPace, timeUnit, _i, _len;
- if (unit == null) {
- unit = 'time';
- }
- if (value === 0 || intervalMs === 0) {
- return "No " + (Humanize.pluralize(unit));
- }
- prefix = 'Approximately';
- timeUnit = null;
- rate = value / intervalMs;
- for (_i = 0, _len = timeFormats.length; _i < _len; _i++) {
- f = timeFormats[_i];
- relativePace = rate * f.value;
- if (relativePace > 1) {
- timeUnit = f.name;
- break;
- }
- }
- if (!timeUnit) {
- prefix = 'Less than';
- relativePace = 1;
- timeUnit = timeFormats[timeFormats.length - 1].name;
- }
- roundedPace = Math.round(relativePace);
- unit = Humanize.pluralize(roundedPace, unit);
- return "" + prefix + " " + roundedPace + " " + unit + " per " + timeUnit;
- };
- Humanize.nl2br = function(string, replacement) {
- if (replacement == null) {
- replacement = '<br/>';
- }
- return string.replace(/\n/g, replacement);
- };
- Humanize.br2nl = function(string, replacement) {
- if (replacement == null) {
- replacement = '\r\n';
- }
- return string.replace(/\<br\s*\/?\>/g, replacement);
- };
- Humanize.capitalize = function(string, downCaseTail) {
- if (downCaseTail == null) {
- downCaseTail = false;
- }
- return "" + (string.charAt(0).toUpperCase()) + (downCaseTail ? string.slice(1).toLowerCase() : string.slice(1));
- };
- Humanize.capitalizeAll = function(string) {
- return string.replace(/(?:^|\s)\S/g, function(a) {
- return a.toUpperCase();
- });
- };
- Humanize.titlecase = Humanize.titleCase = function(string) {
- var doTitleCase, internalCaps, smallWords, splitOnHyphensRegex, splitOnWhiteSpaceRegex,
- _this = this;
- smallWords = /\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\.?)\b/i;
- internalCaps = /\S+[A-Z]+\S*/;
- splitOnWhiteSpaceRegex = /\s+/;
- splitOnHyphensRegex = /-/;
- doTitleCase = function(_string, hyphenated, firstOrLast) {
- var index, stringArray, titleCasedArray, word, _i, _len;
- if (hyphenated == null) {
- hyphenated = false;
- }
- if (firstOrLast == null) {
- firstOrLast = true;
- }
- titleCasedArray = [];
- stringArray = _string.split(hyphenated ? splitOnHyphensRegex : splitOnWhiteSpaceRegex);
- for (index = _i = 0, _len = stringArray.length; _i < _len; index = ++_i) {
- word = stringArray[index];
- if (word.indexOf('-') !== -1) {
- titleCasedArray.push(doTitleCase(word, true, index === 0 || index === stringArray.length - 1));
- continue;
- }
- if (firstOrLast && (index === 0 || index === stringArray.length - 1)) {
- titleCasedArray.push(internalCaps.test(word) ? word : Humanize.capitalize(word));
- continue;
- }
- if (internalCaps.test(word)) {
- titleCasedArray.push(word);
- } else if (smallWords.test(word)) {
- titleCasedArray.push(word.toLowerCase());
- } else {
- titleCasedArray.push(Humanize.capitalize(word));
- }
- }
- return titleCasedArray.join(hyphenated ? '-' : ' ');
- };
- return doTitleCase(string);
- };
- this.Humanize = Humanize;
- if (typeof module !== "undefined" && module !== null) {
- module.exports = Humanize;
- }
- }).call(this);