Hopp til hovedinnhold
Meny

lmfaole.party / designsystem / komponenter / Dokumentforhåndsvisning

  • Forside
  • Turer
  • Økonomi
  • Slides
  • <lm-preview-document> – Dokumentforhåndsvisning / Document preview

    Om komponenten

    Formål

    Generisk dokumentforhåndsvisning, i praksis for PDF-er: viser ikon og filnavn som miniatyr, og åpner dokumentet i full størrelse i en dialog. Den støtter også valgfri metadata som nøkkel/verdi-par.

    Egner seg for

    • PDF-kvitteringer og andre dokumentlenker der et generisk dokumentkort og åpning i dialog er nok.
    • Dokumenter der filnavn, metadata og fallback-lenker for nedlasting eller ny fane er nyttige.

    Egner seg ikke for

    • Ekte miniatyrer av dokumentinnholdet; komponenten viser alltid ikon og filnavn, ikke en rendret første side.
    • Dokumentvisning som krever annotering, zoomkontroller eller garantert innebygd rendering i alle klienter; komponenten er avhengig av nettleserens <iframe>-støtte og ellers fallback-lenker.

    Bruk

    <script type="module" src="/designsystem/komponenter/medieinnhold/preview-document/preview-document.js"></script>
    
    <lm-preview-document src="blob:..." name="Kvittering-hotell.pdf"></lm-preview-document>
    const dokument = document.querySelector("lm-preview-document");
    dokument.metadata = [
        {label: "Lastet opp", value: "15. jun 2025"},
    ];
    
    dokument.addEventListener("preview-document:open", () => { ... });

    Prøv selv

    Rediger koden under - resultatet oppdateres live.

    Attributter

    Attributt Type Standard Beskrivelse
    srcstring""Kilde til dokumentet (Blob-URL eller vanlig URL), brukt i den innebygde PDF-visningen i dialogen og for nedlastings-/åpne-i-ny-fane-lenkene.
    namestring""Filnavn, vist som bildetekst på miniatyren og i dialogen, og brukt som nedlastingsnavn.

    Events

    Event Type Beskrivelse
    preview-document:openCustomEventMiniatyren klikkes og dialogen med dokumentet åpnes.

    Parts

    Part Beskrivelse
    miniatyrWrapperen rundt forhåndsvisningskortet.
    apne-knappKnappen som åpner dialogen.
    ikonDokumentikonet i miniatyren.
    miniatyr-tittelFilnavn under miniatyren.
    dialogSelve <dialog>-elementet.
    lukk-knappLukkeknappen i dialogen.
    dokumentIframe med dokumentet.
    dialog-tittelFilnavn i dialogen.
    metadataMetadata-listen.
    lenkeradWrapper for dokumentlenkene.
    lenkeGenerisk part for begge handlingslenkene.
    nedlasting-lenkeNedlastingslenken.
    ny-fane-lenkeLenken som åpner dokumentet i ny fane.

    Styling med ::part()

    Hver part over kan restyles direkte fra et vanlig, ytre stilark - uten å måtte endre selve komponenten eller duplisere den:

    lm-preview-document::part(miniatyr) {
        /* egne stiler for "Wrapperen rundt forhåndsvisningskortet." */
    }
    
    lm-preview-document::part(apne-knapp) {
        /* egne stiler for "Knappen som åpner dialogen." */
    }
    
    lm-preview-document::part(ikon) {
        /* egne stiler for "Dokumentikonet i miniatyren." */
    }
    
    lm-preview-document::part(miniatyr-tittel) {
        /* egne stiler for "Filnavn under miniatyren." */
    }
    
    lm-preview-document::part(dialog) {
        /* egne stiler for "Selve <dialog>-elementet." */
    }
    
    lm-preview-document::part(lukk-knapp) {
        /* egne stiler for "Lukkeknappen i dialogen." */
    }
    
    lm-preview-document::part(dokument) {
        /* egne stiler for "Iframe med dokumentet." */
    }
    
    lm-preview-document::part(dialog-tittel) {
        /* egne stiler for "Filnavn i dialogen." */
    }
    
    lm-preview-document::part(metadata) {
        /* egne stiler for "Metadata-listen." */
    }
    
    lm-preview-document::part(lenkerad) {
        /* egne stiler for "Wrapper for dokumentlenkene." */
    }
    
    lm-preview-document::part(lenke) {
        /* egne stiler for "Generisk part for begge handlingslenkene." */
    }
    
    lm-preview-document::part(nedlasting-lenke) {
        /* egne stiler for "Nedlastingslenken." */
    }
    
    lm-preview-document::part(ny-fane-lenke) {
        /* egne stiler for "Lenken som åpner dokumentet i ny fane." */
    }

    Tilgjengelighet

    Åpneknappen har aria-label="Vis dokument i full størrelse", PDF-ikonet er aria-hidden="true", og iframe-en får title fra name. Tastaturstøtten følger native knapper og dialog. Skjermlesere får filnavn via figcaption, metadata via <dl>, og fallback-lenker for nedlasting eller ny fane.

    • Åpneknappen har aria-label="Vis dokument i full størrelse", PDF-ikonet er aria-hidden="true", og iframe-en får title fra name.
    • Tastaturstøtten følger native knapper og dialog: miniatyren kan åpnes med tastatur, Escape lukker dialogen, og lukkeknappen er en vanlig <button>.
    • Skjermlesere får filnavn via figcaption, metadata via en semantisk <dl>, og fallback-lenker for nedlasting eller ny fane.
    • Komponenten har ingen egen animasjon eller høy-kontrastlogikk.

    Detaljer

    • Åpning og lukking styres deklarativt med Invoker Commands API via command="show-modal" og command="close", ikke med JS-kall til showModal() eller close().
    • Selve dokumentet vises i en <iframe> som bruker nettleserens innebygde PDF-visning i stedet for et eget bibliotek som pdf.js. "Last ned" og "Åpne i ny fane" er fallback for klienter uten slik rendering.
    • Miniatyren er kvadratisk som standard og kan styres utenfra via --lm-preview-document-aspect-ratio.
    • metadata er en kompleks verdi og settes derfor som JS-property, ikke attributt.

    Referanser

    Se også:

    Brukes av:

    • turer/js/features/receipts/receipts.js - kvitteringsrutenettet (PDF-vedlegg vises som en miniatyr med dokument-ikon og filnavn, klikk åpner dem i en dialog med innebygd PDF-visning og opplastingsdato).

    Avhengigheter: designsystem/funksjoner/sikkerhet/escape-html/escape-html.js (trygg rendering av metadata-verdier).