Files
elwig-access/www/res/access.js
2025-05-03 16:59:51 +02:00

81 lines
2.0 KiB
JavaScript

"use strict";
const ERROR_MESSAGES = {
401: 'Ungültige Anmeldedaten',
'NetworkError when attempting to fetch resource.': 'Netzwerkfehler',
};
class ApiError extends Error {
constructor(statusCode, message) {
super(statusCode + ' - ' + message);
this.statusCode = statusCode;
this.name = 'ApiError';
this.localizedMessage = ERROR_MESSAGES[statusCode];
}
}
function escapeHTML(str) {
const p = document.createElement("p");
p.appendChild(document.createTextNode(str));
return p.innerHTML;
}
function fmtDate(date) {
return date.toLocaleDateString('de-AT', {
day: '2-digit',
month: '2-digit',
year: 'numeric',
});
}
function fmtDateTime(date) {
return date.toLocaleDateString('de-AT', {
day: '2-digit',
month: '2-digit',
hour: '2-digit',
minute: '2-digit',
});
}
function fmtDateWeekday(date) {
return date.toLocaleDateString('de-AT', {
weekday: 'long',
});
}
function fmtOe(oe) {
return oe.toLocaleString('de-AT', {minimumFractionDigits: 0, maximumFractionDigits: 0});
}
function fmtKmw(kmw) {
return kmw.toLocaleString('de-AT', {minimumFractionDigits: 1, maximumFractionDigits: 1});
}
function fmtInt(num) {
return num.toLocaleString('de-AT', {minimumFractionDigits: 0, maximumFractionDigits: 0});
}
function groupBy(list, key) {
return list.reduce((groups, value) => {
(groups[value[key]] = groups[value[key]] ?? []).push(value);
return groups;
}, {});
}
function getCurrentLastSeason() {
const date = new Date();
return date.getFullYear() - ((date.getMonth() + 1) <= 6 ? 1 : 0);
}
function getDefaultQualityLevel(kmw) {
const list = Object.values(WINE_QUALITY_LEVELS).filter(q => !q['is_predicate']).sort((a, b) => a['min_kmw'] - b['min_kmw']);
let last = list[0];
for (const q of list) {
if (q['min_kmw'] > kmw) {
return last;
}
last = q;
}
return last;
}