Consolidate MangaCircus app, scraper, and Compose baseline

This commit is contained in:
Maashkinoozhe committed 2026-10-07 23:28:20 +02:00
1 parent cfb2d79103
commit eef4ffa07c
103 files changed
+9316 -172

No files matched your search

+16
View File
@@ -49,9 +49,25 @@ function ago(t) {
return new Date(t).toLocaleDateString();
}
function readingDuration(ms, compact = false) {
const seconds = Math.max(0, Math.round((+ms || 0) / 1000));
if (!seconds) return 'Not timed';
if (seconds < 60) return compact ? '<1 min' : 'Under a minute';
const minutes = Math.max(1, Math.round(seconds / 60));
if (minutes < 60) return `${minutes} min`;
const hours = Math.floor(minutes / 60), rest = minutes % 60;
return rest ? `${hours} h ${rest} min` : `${hours} h`;
}
const qsa = obj => { const p = new URLSearchParams(); for (const k in obj) if (obj[k] != null && obj[k] !== '') p.set(k, obj[k]); return p.toString(); };
const readUrl = (m, c, v) => 'read.html?' + qsa({ m, c, v });
const mangaUrl = m => 'manga.html?' + qsa({ m });
const libraryUrlForTags = tags => {
const p = new URLSearchParams();
for (const tag of tags || []) if (tag) p.append('tag', tag);
const query = p.toString();
return './' + (query ? '?' + query : '');
};
const safeHref = u => (/^https?:\/\//i.test(u || '') ? u : null);
// Top navigation with the notification bell.