You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Hydro/hydro/lib/misc.js

46 lines
1.8 KiB
JavaScript

5 years ago
const md5 = require('./md5');
5 years ago
exports.gravatar_url = function gravatarUrl(email, size) {
5 years ago
return `//gravatar.loli.net/avatar/${md5((email || '').toString().trim().toLowerCase())}?d=mm&s=${size}`;
};
5 years ago
exports.datetime_span = function datetimeSpan(dt, relative = true, format = '%Y-%m-%d %H:%M:%S') {
5 years ago
if (!dt) return 'DATETIME_SPAN_ERROR';
5 years ago
if (dt.generationTime) dt = new Date(dt.generationTime * 1000);
5 years ago
else if (typeof dt === 'number' || typeof dt === 'string') dt = new Date(dt);
5 years ago
return '<span class="time{0}" data-timestamp="{1}">{2}</span>'.format(
relative ? ' relative' : '',
dt.getTime() / 1000,
5 years ago
dt.format(format),
5 years ago
);
};
5 years ago
exports.paginate = function* paginate(page, numPages) {
const radius = 2; let first; let
last;
5 years ago
if (page > 1) {
yield ['first', 1];
yield ['previous', page - 1];
}
5 years ago
if (page <= radius) [first, last] = [1, Math.min(1 + radius * 2, numPages)];
else if (page >= numPages - radius) {
[first, last] = [Math.max(1, numPages - radius * 2), numPages];
} else [first, last] = [page - radius, page + radius];
5 years ago
if (first > 1) yield ['ellipsis', 0];
for (let page0 = first; page0 < last + 1; page0++) {
5 years ago
if (page0 !== page) yield ['page', page0];
5 years ago
else yield ['current', page];
}
5 years ago
if (last < numPages) yield ['ellipsis', 0];
if (page < numPages) yield ['next', page + 1];
yield ['last', numPages];
5 years ago
};
5 years ago
exports.format_size = function formatSize(size, base = 1) {
5 years ago
size *= base;
5 years ago
const unit = 1024;
const unitNames = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
for (const unitName of unitNames) {
if (size < unit) return '{0} {1}'.format(Math.round(size), unitName);
5 years ago
size /= unit;
}
5 years ago
return '{0} {1}'.format(Math.round(size * unit), unitNames[unitNames.length - 1]);
};