chore(web): veraltete Kommentare, Theme-Skript in IIFE, CARD_W/CARD_H und reportsLabel nur aus einer Quelle
- publish.ts und editor-page.ts: Kommentare zum Aufräumen bzw. zur Adresse /gestalten?karte= stimmen wieder. - index.html: Inline-Skript für Hell/Dunkel in einer sofort aufgerufenen Funktion (keine globale Variable theme); Test führt es aus und vergleicht mit initialTheme(). - CARD_W/CARD_H nur noch aus card/geometry.ts (Startseite, Detailseite, Raster), Vorschauhöhe des Rasters daraus abgeleitet; reportsLabel nur aus pages/format.ts. Ein Test sorgt dafür, dass es dabei bleibt. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f6b9917b07
commit
a3523d3316
11 files changed
+124
-30
No files matched your search
@@ -126,6 +126,9 @@ describe('mountGalleryGrid: Vorschaubilder', () => {
|
||||
expect(load.mock.calls.map((c) => (c as unknown as [GalleryCard])[0].id)).toEqual(['g1', 'g2']);
|
||||
const srcs = [...host.querySelectorAll<HTMLImageElement>('.gallery-thumb img')].map((i) => i.getAttribute('src'));
|
||||
expect(srcs).toEqual(['blob:t-1', 'blob:t-2']);
|
||||
// Vorschau 480 breit, Höhe nach 1536 : 969 (wie exportCard sie rendert)
|
||||
const first = host.querySelector('.gallery-thumb img');
|
||||
expect([first?.getAttribute('width'), first?.getAttribute('height')]).toEqual(['480', '303']);
|
||||
});
|
||||
|
||||
it('gibt alle Object-URLs beim Aufräumen frei', async () => {
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Kachelraster der Community-Galerie: Vorschau, Titel, Herausgeber, bis zu drei Tags.
|
||||
// Die Vorschaubilder kommen über `load` (WebP 480 px aus dem Galerie-Bucket, mit Pixelgrenze geprüft: loadGalleryImageChecked)
|
||||
// als fertige Object-URL; `dispose()` gibt alle URLs wieder frei. Alle Texte gehen als Text in den DOM, nie als HTML.
|
||||
import { CARD_H, CARD_W, PREVIEW_WIDTH } from '../card/geometry';
|
||||
import { el } from '../editor/dom';
|
||||
import { reportsLabel } from '../pages/format';
|
||||
import type { CheckedImage, GalleryCard } from './gallery';
|
||||
|
||||
export interface GalleryGridOptions {
|
||||
@@ -22,13 +24,8 @@ export interface GalleryGrid {
|
||||
|
||||
const PARALLEL = 6;
|
||||
const MAX_TAGS = 3;
|
||||
const THUMB_W = 480;
|
||||
const THUMB_H = 303; // 480 x 1536:969
|
||||
|
||||
/** „1 Meldung“, „3 Meldungen“. */
|
||||
function reportsLabel(count: number): string {
|
||||
return count === 1 ? '1 Meldung' : `${count} Meldungen`;
|
||||
}
|
||||
const THUMB_W = PREVIEW_WIDTH;
|
||||
const THUMB_H = Math.round((THUMB_W * CARD_H) / CARD_W); // wie exportCard: 480 x 1536:969 = 303
|
||||
|
||||
export function mountGalleryGrid(container: HTMLElement, opts: GalleryGridOptions): GalleryGrid {
|
||||
const list = el('ul', { class: 'gallery-grid' });
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// Eine gespeicherte Karte in der Community-Galerie veröffentlichen: rendern, zwei Dateien hochladen, API rufen.
|
||||
// Scheitert danach irgendetwas, löscht der Client genau die zwei Dateien dieses Versuchs wieder.
|
||||
// Aufgeräumt wird nur bei eindeutigem Scheitern (Upload-Fehler, eindeutige Ablehnung der API): dann löscht der Client genau
|
||||
// die zwei Dateien dieses Versuchs wieder. Bleibt der Ausgang offen, bleiben sie liegen (siehe publishSavedCard).
|
||||
import { ID, Permission, Role } from 'appwrite';
|
||||
import { IDS, storage } from '../account/appwrite';
|
||||
import { cardsService, requireUserId, toUploadFile, type SavedCard } from '../account/cards';
|
||||
|
||||
Reference in new issue
Block a user