Acessibility management in DAM
🎬 Accessibility Feature (DAM Dialog)
Dialog used to manage accessibility content for video or audio assets: subtitles, transcriptions, and audio descriptions.
The dialog is opened from an action available in the asset detail view (DAM).
1. Enable the feature
1.1 Named action
Named action damAccessibility, declared in the named-actions configuration (e.g. common/named-actions/dam-accessibility.json):
{
"i18n": "dam.accessibility.action",
"icon": "fal fa-closed-captioning",
"action": "dam/accessibility",
"security": "objectdata/editvideosubtitles",
"onlyForBlobs": true,
"onlyForRootNatures": ["video", "audio"]
}security: required permission to display and use the action (see § Security)onlyForBlobs: ensures the current entity binary is aBLOB_ATTACHMENTonlyForRootNatures: asset types for which the button is displayed (e.g.video,audio)
1.2 Display the action in the asset detail view
In the DAM detail configuration (e.g. dam/details/actions.json), add the action identifier to the actions list:
{
"actions": [
...,
"damAccessibility",
"damDownload",
...
]
}2. Dialog configuration (dam.details.accessibility)
The feature reads its configuration from config.dam.details.accessibility.
2.1 Minimal structure
{
"i18nPrefix": "dam.accessibility",
"categories": [
{
"id": "subtitles",
"onlyForAssetNatures": ["video"],
"acceptedFiles": [".vtt", ".srt", ".sbv", ".ass", ".ssa"]
},
{
"id": "transcription",
"onlyForAssetNatures": ["video", "audio"],
"acceptedFiles": [".txt"]
},
{
"id": "audiodescription",
"onlyForAssetNatures": ["video"],
"acceptedFiles": [".ogg", ".mp3", ".wav", ".m4a"]
}
],
"languagesCursorPath": "",
"languages": [
{ "code": "fr-FR", "nameI18n": "dam.accessibility.lang.fr-FR", "nativeName": "Français" },
{ "code": "en-US", "nameI18n": "dam.accessibility.lang.en-US", "nativeName": "English (US)" }
]
}If nativeName is provided, it will be displayed. Otherwise, the system will use the i18n value of "dam.accessibility.lang.CODE", with a fallback to code if nameI18n is not defined.
You can also provide a cursor path (languagesCursorPath) to load languages dynamically instead of using static configuration.
2.2 Configuration properties
Property | Type | Description |
|---|---|---|
|
| Prefix for i18n keys (titles, labels, toasts). Default: |
|
| List of categories (subtitles, transcription, audio description). See § Categories |
|
| Available languages (selector). Each item: |
|
| (Optional) Row-level actions (edit, delete). See § itemActions |
2.3 Categories
Each category must include:
id: technical identifier (subtitles,transcription,audiodescription)onlyForAssetNatures: asset types where the category is available (e.g.["video"],["video", "audio"]). If empty or missing, the category is available for all asset typesacceptedFiles: allowed file extensions for upload (e.g.[".vtt", ".srt"])
2.4 Row actions (itemActions)
To display “Edit” and “Delete” buttons for each row:
"itemActions": [
{ "action": "edit", "icon": "fal fa-pencil", "i18nKey": "action-edit" },
{ "action": "delete", "icon": "fal fa-trash", "i18nKey": "action-delete" }
]action:editordelete(handled by the component)icon: Font Awesome class (or equivalent)i18nKey: i18n key relative toi18nPrefix(e.g.dam.accessibility.action-edit)
If itemActions is not defined, no row-level actions will be displayed.
🔐 Security
Front-end rule (named action)
The named action requires the permission:
"security": "objectdata/editvideosubtitles"Without this permission, the “Accessibility” button is not displayed.
All operations (add, edit, delete) are restricted to users with subtitle editing rights.
This can be done in wedia-config :
✅ Front setup checklist
To properly enable the feature in a project:
Declare the named action
damAccessibilityincommon/named-actions/dam-accessibility.jsonAdd
"damAccessibility"to the actions list indam/details/actions.jsonEnsure the permission
objectdata/editvideosubtitlesis granted to the appropriate rolesConfigure
config.dam.details.accessibilitywith at least categories and languages(Optional) Configure
itemActionsto enable edit/delete actions per row(Optional) Use
languagesCursorPathto load languages dynamically instead of static configuration