Jelenség
Az Attachment modellen nincs alt szöveg mező:
public class Attachment
{
public string Slug { get; set; } = "";
public string FileName { get; set; } = "";
public string ContentType { get; set; } = "";
public byte[] Data { get; set; } = [];
public DateTimeOffset CreatedAt { get; set; }
}
Ezért a publikus oldalon az alt kényszerből valami más mezőből származik:
WorkSection.vue:45 — :alt="tr(w.title)", vagyis a munka címe
AboutSection.vue:38 — :alt="about.name"
ArticleView.vue:148 — :alt="article.title"
Ez képernyőolvasónál a cím felolvasását duplikálja (a cím közvetlenül a kép mellett is ott van szövegként), és nem mondja meg, mi látszik a képen. A rich text testébe beágyazott képeknek (InlineImages) pedig egyáltalán nincs alt szövegük, hacsak a szerkesztő kézzel nem írja a HTML-be.
Javaslat
Alt mező az Attachment-re (LocalizedText, mert az oldal kétnyelvű), migrációval. A ContentLimits-hez illeszkedő hosszkorláttal.
- Az admin feltöltési és média-könyvtár felületén szerkeszthető legyen:
AttachmentLibrary.vue, CoverImagePicker.vue, ProfileImageCropper.vue. Feltöltés után egy egysoros beviteli mező, nem kötelező mező, de látható hiányjelzéssel (pl. sárga jelölés az alt nélküli elemeken).
- Az attachment lista/olvasó válaszban jöjjön vissza az
Alt, hogy a publikus komponensek használhassák. Ehhez a mai resolveImageSrc(value) (ami csak stringet kap) helyett vagy egy alt-lookup kell a store-ban, vagy a tartalom DTO-ja hordozza a cover kép alt szövegét is — az utóbbi kevesebb kéréssel jár.
- Döntés kell a dekoratív képekről: ahol a kép tényleg csak dekoráció,
alt="" a helyes, nem a cím. A WorkSection kártyaképe erős jelölt erre, mert a cím közvetlenül alatta van szövegként.
- A rich text editor kép-beszúrása (
RichTextEditor.vue) kérje az alt szöveget, és a ContentSanitizer engedje át az alt attribútumot (ellenőrizni, hogy ma átmegy-e).
Kapcsolódik #47-hez (kép-attribútumok) és #49-hez (kép-variánsok) — ha a három egy körben megy, a <img> tageket csak egyszer kell átírni.
Érintett fájlok
PortfolioCMS.Core/Models/Attachment.cs, ContentLimits.cs
PortfolioCMS.Core/Migrations/ — új migráció
PortfolioCMS.Admin/Controllers/AttachmentsAdminController.cs
PortfolioCMS.Core/Dtos/ (attachment DTO)
PortfolioCMS.Core/Services/ContentSanitizer.cs, InlineImages.cs
portfoliocms.admin.client/src/components/admin/AttachmentLibrary.vue, CoverImagePicker.vue, RichTextEditor.vue
portfoliocms.client/src/components/home/WorkSection.vue, AboutSection.vue, src/views/ArticleView.vue
Jelenség
Az
Attachmentmodellen nincs alt szöveg mező:Ezért a publikus oldalon az
altkényszerből valami más mezőből származik:WorkSection.vue:45—:alt="tr(w.title)", vagyis a munka címeAboutSection.vue:38—:alt="about.name"ArticleView.vue:148—:alt="article.title"Ez képernyőolvasónál a cím felolvasását duplikálja (a cím közvetlenül a kép mellett is ott van szövegként), és nem mondja meg, mi látszik a képen. A rich text testébe beágyazott képeknek (
InlineImages) pedig egyáltalán nincs alt szövegük, hacsak a szerkesztő kézzel nem írja a HTML-be.Javaslat
Altmező azAttachment-re (LocalizedText, mert az oldal kétnyelvű), migrációval. AContentLimits-hez illeszkedő hosszkorláttal.AttachmentLibrary.vue,CoverImagePicker.vue,ProfileImageCropper.vue. Feltöltés után egy egysoros beviteli mező, nem kötelező mező, de látható hiányjelzéssel (pl. sárga jelölés az alt nélküli elemeken).Alt, hogy a publikus komponensek használhassák. Ehhez a mairesolveImageSrc(value)(ami csak stringet kap) helyett vagy egy alt-lookup kell a store-ban, vagy a tartalom DTO-ja hordozza a cover kép alt szövegét is — az utóbbi kevesebb kéréssel jár.alt=""a helyes, nem a cím. AWorkSectionkártyaképe erős jelölt erre, mert a cím közvetlenül alatta van szövegként.RichTextEditor.vue) kérje az alt szöveget, és aContentSanitizerengedje át azaltattribútumot (ellenőrizni, hogy ma átmegy-e).Kapcsolódik #47-hez (kép-attribútumok) és #49-hez (kép-variánsok) — ha a három egy körben megy, a
<img>tageket csak egyszer kell átírni.Érintett fájlok
PortfolioCMS.Core/Models/Attachment.cs,ContentLimits.csPortfolioCMS.Core/Migrations/— új migrációPortfolioCMS.Admin/Controllers/AttachmentsAdminController.csPortfolioCMS.Core/Dtos/(attachment DTO)PortfolioCMS.Core/Services/ContentSanitizer.cs,InlineImages.csportfoliocms.admin.client/src/components/admin/AttachmentLibrary.vue,CoverImagePicker.vue,RichTextEditor.vueportfoliocms.client/src/components/home/WorkSection.vue,AboutSection.vue,src/views/ArticleView.vue