1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-01 12:24:28 +01:00
fab-manager/vendor/assets/javascripts/humanize.js
2015-05-05 03:10:25 +02:00

436 lines
13 KiB
JavaScript

(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);