poe-i18n
Version:
i18n utility for Path of Exile
90 lines (89 loc) • 3.33 kB
JavaScript
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
import formatMessage from '../format/message';
import { isRange } from '../types/StatValue';
import { buildFormatter } from './formatters';
export function formatValues(values, options) {
if (options === void 0) { options = {}; }
var formatters = options.formatters, message = options.message;
if (formatters === undefined) {
throw new Error('formatters not set');
}
var formatted = __spread(values);
formatters.forEach(function (formatter, i) {
if (typeof formatter !== 'string' && typeof formatter.arg === 'number') {
// base_chance_to_freeze% is the only exception
// see issues #25 and #33
var offset = formatter.id === 'canonical_stat' &&
formatters.includes('canonical_line')
? 0
: -1;
var target_param = values[+formatter.arg + offset];
if (target_param !== undefined) {
formatted[+formatter.arg - 1] = formatValue(target_param, {
formatter: formatter,
message: message
});
}
else {
throw new Error("no param given for formatter '" + formatter.id + "'");
}
}
});
return formatted.map(function (value) {
return typeof value === 'string' ? value : formatValue(value, { message: message });
});
}
var DEFAULT_FORMATTER = { id: 'id', arg: 1 };
export function formatValue(value, options) {
if (options === void 0) { options = {}; }
var _a = options.formatter, formatter = _a === void 0 ? DEFAULT_FORMATTER : _a, _b = options.message, message = _b === void 0 ? '{min}–{max}' : _b;
var _c = buildFormatter(formatter.id), negates = _c.negates, format = _c.format;
if (isRange(value)) {
var _d = __read(valueOrder(value, negates).map(function (n) { return format(n); }), 2), min = _d[0], max = _d[1];
if (min === max) {
return min;
}
else {
return formatMessage(message, { min: min, max: max });
}
}
else {
return format(value);
}
}
/**
* orders the given values so that the smallest displayed is min
*
* reduced stats are given as negative values and then negated for display
* whichs results in [-30, -15] being displayed as "(30 - 15) reduced"
* @param param0
* @param negates - true if the values will be negated
*/
function valueOrder(_a, negates) {
var _b = __read(_a, 2), left = _b[0], right = _b[1];
if ((left < right && !negates) || (left > right && negates)) {
return [left, right];
}
else {
return [right, left];
}
}