start
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
/** 10 шуточных «всё ОК» сообщений для GlobalHealth. */
|
||||
export const OK_MESSAGES: string[] = [
|
||||
'Всё чётко, бро. ✨',
|
||||
'Полный релакс, без паники. 🧘',
|
||||
'Полёт нормальный, чай заварен. ☕',
|
||||
'Сервер дышит ровно, спи спокойно. 💤',
|
||||
'Муха не пролетит, всё ок. 🪰',
|
||||
'Данные на месте, никуда не сбежали. 💾',
|
||||
'Ситуация под полным кайфом. 😎',
|
||||
'Железо холодное, как сердце бывшей. ❄️',
|
||||
'Ошибки ушли в отпуск навсегда. 🏖️',
|
||||
'Всё идёт просто замечательно. 👍',
|
||||
];
|
||||
|
||||
export function pickOkMessage(): string {
|
||||
return OK_MESSAGES[Math.floor(Math.random() * OK_MESSAGES.length)];
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Применяет тему и язык к документу при загрузке/смене настроек.
|
||||
export function applyTheme(theme: string | undefined) {
|
||||
const id = theme && typeof theme === 'string' ? theme : 'mk-dark';
|
||||
document.documentElement.setAttribute('data-theme', id);
|
||||
}
|
||||
|
||||
export function applyLocale(locale: string | undefined) {
|
||||
const id = locale && typeof locale === 'string' ? locale : 'ru';
|
||||
document.documentElement.setAttribute('lang', id);
|
||||
}
|
||||
|
||||
export function applyInstanceName(name: string | undefined) {
|
||||
if (name) document.title = name;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
// Простой компаратор версий вида "7.15.3" / "7.15rc4" / "stable"
|
||||
function tokenize(v: string): number[] {
|
||||
const m = v.match(/\d+/g);
|
||||
return m ? m.map((x) => parseInt(x, 10)) : [0];
|
||||
}
|
||||
|
||||
export function compareVersions(a: string, b: string): number {
|
||||
const A = tokenize(a);
|
||||
const B = tokenize(b);
|
||||
const n = Math.max(A.length, B.length);
|
||||
for (let i = 0; i < n; i++) {
|
||||
const x = A[i] ?? 0;
|
||||
const y = B[i] ?? 0;
|
||||
if (x !== y) return x - y;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
export interface FirmwareLike {
|
||||
version: string | null;
|
||||
channel: string | null;
|
||||
}
|
||||
|
||||
/** Возвращает максимальную версию из репозитория (только канал stable, либо null). */
|
||||
export function latestStableVersion(firmware: FirmwareLike[]): string | null {
|
||||
const versions = firmware
|
||||
.filter((f) => !!f.version && (!f.channel || f.channel === 'stable'))
|
||||
.map((f) => f.version as string);
|
||||
if (versions.length === 0) return null;
|
||||
return versions.reduce((a, b) => (compareVersions(a, b) >= 0 ? a : b));
|
||||
}
|
||||
|
||||
export function isOutdated(deviceVersion: string | null, latest: string | null): boolean {
|
||||
if (!deviceVersion || !latest) return false;
|
||||
return compareVersions(deviceVersion, latest) < 0;
|
||||
}
|
||||
Reference in New Issue
Block a user