This commit is contained in:
2026-05-17 20:54:53 +05:00
parent 65a0babeab
commit 27eb4fd606
90 changed files with 12343 additions and 0 deletions
+17
View File
@@ -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)];
}
+14
View File
@@ -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;
}
+36
View File
@@ -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;
}