vidply 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +946 -946
- package/dist/dev/{vidply.AudioDescriptionManager-R47Q4YR4.js → vidply.AudioDescriptionManager-6RFVF27Z.js} +275 -19
- package/dist/dev/vidply.AudioDescriptionManager-6RFVF27Z.js.map +7 -0
- package/dist/dev/{vidply.CaptionStyleMenu-7XHRBWUM.js → vidply.CaptionStyleMenu-R2SCQ6VP.js} +4 -4
- package/dist/dev/{vidply.DASHRenderer-PWEMC3BT.js → vidply.DASHRenderer-EOVEW73H.js} +3 -3
- package/dist/dev/vidply.DASHRenderer-EOVEW73H.js.map +7 -0
- package/dist/dev/{vidply.FloatingPlayerManager-PKNNNAS2.js → vidply.FloatingPlayerManager-V5XQWS75.js} +5 -5
- package/dist/dev/vidply.FloatingPlayerManager-V5XQWS75.js.map +7 -0
- package/dist/dev/{vidply.HLSRenderer-E7RQ74HI.js → vidply.HLSRenderer-ZBEFVH5W.js} +4 -4
- package/dist/dev/vidply.HLSRenderer-ZBEFVH5W.js.map +7 -0
- package/dist/dev/vidply.HTML5Renderer-P7ICKYU4.js +12 -0
- package/dist/dev/{vidply.SignLanguageManager-FET5FQZ7.js → vidply.SignLanguageManager-7IAJOVF6.js} +8 -8
- package/dist/dev/vidply.SignLanguageManager-7IAJOVF6.js.map +7 -0
- package/dist/dev/{vidply.SoundCloudRenderer-RVSJZODO.js → vidply.SoundCloudRenderer-OA7QQYGN.js} +3 -3
- package/dist/dev/vidply.SoundCloudRenderer-OA7QQYGN.js.map +7 -0
- package/dist/dev/{vidply.TranscriptManager-5GXOQCLX.js → vidply.TranscriptManager-BPM3T23L.js} +10 -10
- package/dist/dev/vidply.TranscriptManager-BPM3T23L.js.map +7 -0
- package/dist/dev/{vidply.VimeoRenderer-ER2LSBBW.js → vidply.VimeoRenderer-BRHFYPNJ.js} +3 -3
- package/dist/dev/vidply.VimeoRenderer-BRHFYPNJ.js.map +7 -0
- package/dist/dev/{vidply.YouTubeRenderer-NFTOWJAB.js → vidply.YouTubeRenderer-HRTN4EJ5.js} +3 -3
- package/dist/dev/vidply.YouTubeRenderer-HRTN4EJ5.js.map +7 -0
- package/dist/dev/{vidply.chunk-6RQA4ROD.js → vidply.chunk-5IK3IC5V.js} +2 -2
- package/dist/dev/{vidply.chunk-JJ47NO24.js → vidply.chunk-C55OBT5H.js} +2 -2
- package/dist/dev/vidply.chunk-C55OBT5H.js.map +7 -0
- package/dist/dev/{vidply.chunk-DZSDO3B7.js → vidply.chunk-HOYEMJSD.js} +2 -2
- package/dist/dev/{vidply.chunk-VMSQAZM7.js → vidply.chunk-JAKZNGOR.js} +2 -2
- package/dist/dev/{vidply.chunk-64WXMTGL.js → vidply.chunk-LDVFAFGC.js} +5 -5
- package/dist/dev/vidply.chunk-LDVFAFGC.js.map +7 -0
- package/dist/dev/{vidply.chunk-RZWZGDV7.js → vidply.chunk-NSMAZCMB.js} +6 -6
- package/dist/dev/vidply.chunk-NSMAZCMB.js.map +7 -0
- package/dist/dev/{vidply.chunk-KI7C3QVL.js → vidply.chunk-RQG3MA7W.js} +2 -2
- package/dist/dev/vidply.chunk-RQG3MA7W.js.map +7 -0
- package/dist/dev/{vidply.chunk-BNFIUL2Z.js → vidply.chunk-UHMVDBDB.js} +3 -3
- package/dist/dev/vidply.chunk-UHMVDBDB.js.map +7 -0
- package/dist/dev/{vidply.chunk-NQPURMQY.js → vidply.chunk-W5BR65JY.js} +6 -6
- package/dist/dev/vidply.chunk-W5BR65JY.js.map +7 -0
- package/dist/dev/{vidply.chunk-W25HUCHS.js → vidply.chunk-XAK3DPTO.js} +2 -2
- package/dist/dev/vidply.chunk-XAK3DPTO.js.map +7 -0
- package/dist/dev/{vidply.chunk-SK4V2DAU.js → vidply.chunk-YVCYQZJI.js} +3 -3
- package/dist/dev/{vidply.de-4YAT7FFM.js → vidply.de-5W5LBFSJ.js} +2 -2
- package/dist/dev/vidply.de-5W5LBFSJ.js.map +7 -0
- package/dist/dev/{vidply.es-LEWIRUBH.js → vidply.es-SHDAT6L6.js} +2 -2
- package/dist/dev/vidply.es-SHDAT6L6.js.map +7 -0
- package/dist/dev/vidply.esm.js +73 -34
- package/dist/dev/vidply.esm.js.map +2 -2
- package/dist/dev/{vidply.fr-Q4GV2NOE.js → vidply.fr-2JANOMNB.js} +2 -2
- package/dist/dev/vidply.fr-2JANOMNB.js.map +7 -0
- package/dist/dev/{vidply.ja-S6ITA6WU.js → vidply.ja-WWMSTEJH.js} +2 -2
- package/dist/dev/vidply.ja-WWMSTEJH.js.map +7 -0
- package/dist/legacy/vidply.js +345 -32
- package/dist/legacy/vidply.js.map +3 -3
- package/dist/legacy/vidply.min.js +2 -2
- package/dist/legacy/vidply.min.meta.json +66 -47
- package/dist/prod/vidply.AudioDescriptionManager-YTDVDQBO.min.js +6 -0
- package/dist/prod/{vidply.CaptionStyleMenu-M3KVQWB5.min.js → vidply.CaptionStyleMenu-2AFF3HF2.min.js} +2 -2
- package/dist/prod/{vidply.DASHRenderer-DN3S27AV.min.js → vidply.DASHRenderer-URDOTOKS.min.js} +2 -2
- package/dist/prod/{vidply.FloatingPlayerManager-SKAZ4J43.min.js → vidply.FloatingPlayerManager-QUBFK7CQ.min.js} +2 -2
- package/dist/prod/{vidply.HLSRenderer-62HH4YTK.min.js → vidply.HLSRenderer-46KNUVAB.min.js} +2 -2
- package/dist/prod/vidply.HTML5Renderer-7TQDMIGY.min.js +6 -0
- package/dist/prod/{vidply.SignLanguageManager-V3OBTSSF.min.js → vidply.SignLanguageManager-H4C36EVL.min.js} +2 -2
- package/dist/prod/{vidply.SoundCloudRenderer-CXRVZIAJ.min.js → vidply.SoundCloudRenderer-OYSWMW7D.min.js} +2 -2
- package/dist/prod/{vidply.TranscriptManager-SYM3DFUY.min.js → vidply.TranscriptManager-BA3DAS63.min.js} +2 -2
- package/dist/prod/{vidply.VimeoRenderer-72TWRYFQ.min.js → vidply.VimeoRenderer-NF3COTHU.min.js} +2 -2
- package/dist/prod/{vidply.YouTubeRenderer-UMHEV3KD.min.js → vidply.YouTubeRenderer-UCQKYIJ4.min.js} +2 -2
- package/dist/prod/{vidply.chunk-Z3YDSA7O.min.js → vidply.chunk-2HNCP64N.min.js} +1 -1
- package/dist/prod/{vidply.chunk-EKEYJWMG.min.js → vidply.chunk-6ECBIYVI.min.js} +2 -2
- package/dist/prod/{vidply.chunk-YEENJS3Q.min.js → vidply.chunk-7S5AFTST.min.js} +2 -2
- package/dist/prod/{vidply.chunk-P4UXOHWA.min.js → vidply.chunk-EUOA2DJK.min.js} +1 -1
- package/dist/prod/{vidply.chunk-2TB6MUHO.min.js → vidply.chunk-G6KGXNEW.min.js} +1 -1
- package/dist/prod/{vidply.chunk-ABPXVDLZ.min.js → vidply.chunk-JPMAK3NS.min.js} +1 -1
- package/dist/prod/{vidply.chunk-P3PQBY7N.min.js → vidply.chunk-L4O44K63.min.js} +1 -1
- package/dist/prod/{vidply.chunk-WX3MVEAL.min.js → vidply.chunk-M76ABMKB.min.js} +1 -1
- package/dist/prod/{vidply.chunk-TM6AXJVD.min.js → vidply.chunk-WRVDVD33.min.js} +2 -2
- package/dist/prod/{vidply.chunk-RI3X7WHK.min.js → vidply.chunk-X2FQEQYR.min.js} +2 -2
- package/dist/prod/{vidply.chunk-UK7YGOB5.min.js → vidply.chunk-XXUH7ADU.min.js} +2 -2
- package/dist/prod/{vidply.de-BCHXRQ53.min.js → vidply.de-JMCATTKZ.min.js} +1 -1
- package/dist/prod/{vidply.es-PICAKMZD.min.js → vidply.es-YVG37V7Z.min.js} +1 -1
- package/dist/prod/vidply.esm.min.js +2 -2
- package/dist/prod/{vidply.fr-ZILI7CDR.min.js → vidply.fr-OGKGN2R4.min.js} +1 -1
- package/dist/prod/{vidply.ja-5WQ4OK4J.min.js → vidply.ja-Z6DS7QLS.min.js} +1 -1
- package/dist/vidply.css +5796 -5796
- package/dist/vidply.esm.min.meta.json +148 -135
- package/package.json +7 -7
- package/src/controls/CaptionManager.ts +598 -598
- package/src/controls/ControlBar.ts +4159 -4159
- package/src/controls/KeyboardManager.ts +383 -383
- package/src/controls/SettingsDialog.ts +488 -488
- package/src/controls/TranscriptManager.ts +2426 -2426
- package/src/core/AudioDescriptionManager.ts +863 -774
- package/src/core/DescriptionSpeechManager.ts +232 -0
- package/src/core/FloatingPlayerManager.ts +674 -674
- package/src/core/LazyInit.ts +80 -80
- package/src/core/MetadataAlertsManager.ts +514 -514
- package/src/core/Player.ts +2915 -2872
- package/src/core/PosterManager.ts +169 -169
- package/src/core/PseudoFullscreen.ts +179 -179
- package/src/core/ResponsiveManager.ts +231 -231
- package/src/core/ResumeManager.ts +236 -236
- package/src/core/SignLanguageManager.ts +1308 -1308
- package/src/core/ThemeManager.ts +157 -157
- package/src/features/PlaylistManager.ts +1838 -1827
- package/src/i18n/i18n.ts +223 -223
- package/src/i18n/languages/de.ts +217 -217
- package/src/i18n/languages/en.ts +218 -218
- package/src/i18n/languages/es.ts +214 -214
- package/src/i18n/languages/fr.ts +214 -214
- package/src/i18n/languages/ja.ts +214 -214
- package/src/icons/Icons.ts +167 -167
- package/src/index.ts +196 -193
- package/src/renderers/DASHRenderer.ts +1077 -1077
- package/src/renderers/HLSRenderer.ts +944 -944
- package/src/renderers/HTML5Renderer.ts +389 -389
- package/src/renderers/SoundCloudRenderer.ts +437 -437
- package/src/renderers/VimeoRenderer.ts +298 -298
- package/src/renderers/YouTubeRenderer.ts +290 -290
- package/src/styles/vidply.css +5796 -5796
- package/src/types/events.ts +124 -122
- package/src/types/globals.d.ts +313 -313
- package/src/types/options.ts +185 -182
- package/src/types/renderer.ts +58 -58
- package/src/utils/DOMUtils.ts +281 -281
- package/src/utils/DownloadInfo.ts +171 -171
- package/src/utils/DraggablePanel.ts +539 -539
- package/src/utils/DraggablePanelMenu.ts +195 -195
- package/src/utils/DraggableResizable.ts +997 -997
- package/src/utils/EventEmitter.ts +59 -59
- package/src/utils/FormUtils.ts +95 -95
- package/src/utils/MenuFactory.ts +483 -483
- package/src/utils/Sanitize.ts +70 -70
- package/src/utils/SettingsMenuFactory.ts +289 -289
- package/src/utils/StorageManager.ts +287 -287
- package/src/utils/TrackLabelUtils.ts +52 -52
- package/src/utils/UrlSafe.ts +69 -69
- package/src/utils/VideoFrameCapture.ts +114 -114
- package/src/utils/WindowComponents.ts +250 -250
- package/dist/dev/vidply.AudioDescriptionManager-R47Q4YR4.js.map +0 -7
- package/dist/dev/vidply.DASHRenderer-PWEMC3BT.js.map +0 -7
- package/dist/dev/vidply.FloatingPlayerManager-PKNNNAS2.js.map +0 -7
- package/dist/dev/vidply.HLSRenderer-E7RQ74HI.js.map +0 -7
- package/dist/dev/vidply.HTML5Renderer-BU4QJJJY.js +0 -12
- package/dist/dev/vidply.SignLanguageManager-FET5FQZ7.js.map +0 -7
- package/dist/dev/vidply.SoundCloudRenderer-RVSJZODO.js.map +0 -7
- package/dist/dev/vidply.TranscriptManager-5GXOQCLX.js.map +0 -7
- package/dist/dev/vidply.VimeoRenderer-ER2LSBBW.js.map +0 -7
- package/dist/dev/vidply.YouTubeRenderer-NFTOWJAB.js.map +0 -7
- package/dist/dev/vidply.chunk-64WXMTGL.js.map +0 -7
- package/dist/dev/vidply.chunk-BNFIUL2Z.js.map +0 -7
- package/dist/dev/vidply.chunk-JJ47NO24.js.map +0 -7
- package/dist/dev/vidply.chunk-KI7C3QVL.js.map +0 -7
- package/dist/dev/vidply.chunk-NQPURMQY.js.map +0 -7
- package/dist/dev/vidply.chunk-RZWZGDV7.js.map +0 -7
- package/dist/dev/vidply.chunk-W25HUCHS.js.map +0 -7
- package/dist/dev/vidply.de-4YAT7FFM.js.map +0 -7
- package/dist/dev/vidply.es-LEWIRUBH.js.map +0 -7
- package/dist/dev/vidply.fr-Q4GV2NOE.js.map +0 -7
- package/dist/dev/vidply.ja-S6ITA6WU.js.map +0 -7
- package/dist/prod/vidply.AudioDescriptionManager-RHLIJW5C.min.js +0 -6
- package/dist/prod/vidply.HTML5Renderer-IU5T3WEW.min.js +0 -6
- /package/dist/dev/{vidply.CaptionStyleMenu-7XHRBWUM.js.map → vidply.CaptionStyleMenu-R2SCQ6VP.js.map} +0 -0
- /package/dist/dev/{vidply.HTML5Renderer-BU4QJJJY.js.map → vidply.HTML5Renderer-P7ICKYU4.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-6RQA4ROD.js.map → vidply.chunk-5IK3IC5V.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-DZSDO3B7.js.map → vidply.chunk-HOYEMJSD.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-VMSQAZM7.js.map → vidply.chunk-JAKZNGOR.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-SK4V2DAU.js.map → vidply.chunk-YVCYQZJI.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.1 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
@@ -217,4 +217,4 @@ var fr = {
|
|
|
217
217
|
export {
|
|
218
218
|
fr
|
|
219
219
|
};
|
|
220
|
-
//# sourceMappingURL=vidply.fr-
|
|
220
|
+
//# sourceMappingURL=vidply.fr-2JANOMNB.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/i18n/languages/fr.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * French translations for VidPly\n */\n\nexport const fr = {\n player: {\n label: 'Lecteur vidéo',\n play: 'Lecture',\n pause: 'Pause',\n stop: 'Arrêt',\n restart: 'Redémarrer du début',\n rewind: 'Reculer',\n forward: 'Avancer',\n rewindSeconds: 'Reculer de {seconds} secondes',\n forwardSeconds: 'Avancer de {seconds} secondes',\n previous: 'Piste précédente',\n next: 'Piste suivante',\n playlist: 'Basculer la liste de lecture',\n volume: 'Volume',\n mute: 'Muet',\n unmute: 'Activer le son',\n fullscreen: 'Plein écran',\n exitFullscreen: 'Quitter le plein écran',\n captions: 'Sous-titres',\n chapters: 'Chapitres',\n quality: 'Qualité',\n captionStyling: 'Style des sous-titres',\n transcript: 'Activer/désactiver la transcription',\n audioDescription: 'Audiodescription',\n signLanguage: 'Vidéo en langue des signes',\n settings: 'Paramètres',\n speed: 'Vitesse de lecture',\n pip: 'Image dans l\\'image',\n floatingPlayer: 'Lecteur flottant',\n floatingPlayerClose: 'Fermer le lecteur flottant',\n floatingPlayerEnter: 'D\\u00e9tacher la vid\\u00e9o',\n floatingPlayerExit: 'Rattacher la vid\\u00e9o',\n floatingPlayerDialog: 'Lecteur vid\\u00e9o flottant. Appuyez sur D pour d\\u00e9placer, R pour redimensionner, \\u00c9chap pour fermer.',\n download: 'Télécharger',\n downloadWithFormat: 'Télécharger {format}',\n downloadWithSize: 'Télécharger ({size})',\n downloadWithFormatSize: 'Télécharger {format} ({size})',\n currentTime: 'Temps actuel',\n duration: 'Durée',\n progress: 'Progression',\n seekForward: 'Avancer de {seconds} secondes',\n seekBackward: 'Reculer de {seconds} secondes',\n volumeUp: 'Augmenter le volume',\n volumeDown: 'Diminuer le volume',\n loading: 'Chargement...',\n loadingChapters: 'Chargement des chapitres...',\n error: 'Erreur de chargement',\n buffering: 'Mise en mémoire tampon...',\n signLanguageVideo: 'Vidéo en Langue des Signes',\n closeSignLanguage: 'Fermer la vidéo en langue des signes',\n signLanguageSettings: 'Paramètres de la langue des signes',\n noChapters: 'Aucun chapitre disponible',\n noCaptions: 'Aucun sous-titre disponible',\n auto: 'Automatique',\n autoQuality: 'Automatique (sélection de qualité non disponible)',\n noQuality: 'Sélection de qualité non disponible',\n signLanguageDragResize: 'Vidéo en Langue des Signes - Appuyez sur D pour déplacer avec le clavier, R pour redimensionner',\n signLanguageDragActive: 'Vidéo en Langue des Signes - Mode glissement actif. Utilisez les touches fléchées pour déplacer, Échap pour quitter.',\n signLanguageResizeActive: 'Vidéo en Langue des Signes - Mode redimensionnement actif. Utilisez les touches fléchées gauche/droite pour redimensionner, Échap pour quitter.',\n enableSignDragMode: 'Activer le mode glissement. Raccourci : touche D',\n disableSignDragMode: 'Désactiver le mode glissement. Raccourci : touche D',\n enableSignDragModeAria: 'Activer le mode glissement clavier avec les touches fléchées. Raccourci : touche D',\n disableSignDragModeAria: 'Désactiver le mode glissement clavier avec les touches fléchées. Raccourci : touche D',\n enableSignResizeMode: 'Activer le mode redimensionnement. Raccourci : touche R',\n disableSignResizeMode: 'Désactiver le mode redimensionnement. Raccourci : touche R',\n enableSignResizeModeAria: 'Activer le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R',\n disableSignResizeModeAria: 'Désactiver le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R',\n signDragModeHint: 'Mode glissement : flèches pour déplacer, Échap pour quitter',\n signResizeModeHint: 'Mode redimensionnement : flèches pour redimensionner, Échap pour quitter',\n signDragModeDisabled: 'Mode glissement de la vidéo en langue des signes désactivé.',\n signResizeModeDisabled: 'Mode redimensionnement de la vidéo en langue des signes désactivé.',\n resizeHandle: 'Redimensionner coin {direction}',\n moreOptions: 'Plus d\\'options',\n noMoreOptions: 'Aucune option supplémentaire disponible',\n playing: 'Lecture en cours',\n paused: 'En pause',\n muted: 'Muet',\n unmuted: 'Son activé',\n captionsOn: 'Sous-titres activés',\n captionsOff: 'Sous-titres désactivés',\n volumePercent: 'Volume {percent} pour cent',\n volumePercentMuted: 'Muet',\n speedRate: 'Vitesse {rate}x'\n },\n captions: {\n off: 'Désactivé',\n select: 'Sélectionner les sous-titres',\n fontSize: 'Taille de police',\n fontFamily: 'Police',\n color: 'Couleur du texte',\n backgroundColor: 'Couleur de fond',\n opacity: 'Opacité'\n },\n fontSizes: {\n small: 'Petit',\n normal: 'Normal',\n large: 'Grand',\n xlarge: 'Très grand'\n },\n fontFamilies: {\n sansSerif: 'Sans-serif',\n serif: 'Serif',\n monospace: 'Monospace'\n },\n styleLabels: {\n textColor: 'Couleur du texte',\n background: 'Arrière-plan',\n font: 'Police',\n fontSize: 'Taille de police',\n opacity: 'Opacité'\n },\n audioDescription: {\n enable: 'Activer l\\'audiodescription',\n disable: 'Désactiver l\\'audiodescription'\n },\n signLanguage: {\n show: 'Afficher la vidéo en langue des signes',\n hide: 'Masquer la vidéo en langue des signes',\n showInMainView: 'Afficher langue des signes dans la vidéo principale',\n hideInMainView: 'Masquer langue des signes de la vidéo principale'\n },\n transcript: {\n title: 'Transcription',\n ariaLabel: 'Transcription vidéo',\n close: 'Fermer la transcription',\n loading: 'Chargement de la transcription...',\n noTranscript: 'Aucune transcription disponible pour cette vidéo.',\n settings: 'Paramètres de transcription. Appuyez sur Entrée pour ouvrir le menu ou D pour activer le mode glissement',\n keyboardDragMode: 'Basculer le mode glissement avec les touches fléchées. Raccourci: touche D',\n keyboardDragActive: '⌨️ Mode Glissement Clavier Actif (Touches fléchées pour déplacer, Maj+Fléchées pour grands pas, D ou Échap pour quitter)',\n dragResizePrompt: 'Appuyez sur D pour déplacer ou R pour redimensionner. Home réinitialise la position, Échap ferme.',\n dragModeEnabled: 'Mode glissement clavier activé. Utilisez les flèches pour déplacer, Maj+Flèches pour de grands pas. Appuyez sur D ou Échap pour quitter.',\n dragModeDisabled: 'Mode glissement clavier désactivé.',\n enableDragMode: 'Activer le mode glissement. Raccourci : touche D',\n disableDragMode: 'Désactiver le mode glissement. Raccourci : touche D',\n enableDragModeAria: 'Activer le mode glissement clavier avec les touches fléchées. Raccourci : touche D',\n disableDragModeAria: 'Désactiver le mode glissement clavier avec les touches fléchées. Raccourci : touche D',\n resizeWindow: 'Redimensionner la fenêtre',\n disableResizeWindow: 'Désactiver le mode de redimensionnement',\n enableResizeMode: 'Activer le mode redimensionnement. Raccourci : touche R',\n disableResizeMode: 'Désactiver le mode redimensionnement. Raccourci : touche R',\n enableResizeModeAria: 'Activer le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R',\n disableResizeModeAria: 'Désactiver le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R',\n resizeModeHint: 'Poignées activées. Faites glisser les bords ou les coins pour ajuster. Appuyez sur Échap ou R pour quitter.',\n resizeModeEnabled: 'Mode redimensionnement activé. Faites glisser les bords ou coins. Appuyez sur Échap ou R pour quitter.',\n resizeModeDisabled: 'Mode redimensionnement désactivé.',\n dragModeBadge: 'Mode déplacement : flèches pour déplacer, Échap pour quitter',\n resizeModeBadge: 'Mode redimensionnement : faites glisser les bords ou les coins, Échap pour quitter',\n positionReset: 'Position de la transcription réinitialisée.',\n styleTranscript: 'Ouvrir les paramètres de style de transcription',\n closeMenu: 'Fermer le menu',\n styleTitle: 'Style de Transcription',\n autoscroll: 'Défilement automatique',\n settingsMenu: 'Paramètres de dialogue de transcription',\n showTimestamps: 'Afficher les horodatages',\n hideTimestamps: 'Masquer les horodatages',\n showTimestampsAria: 'Afficher les horodatages dans la transcription',\n hideTimestampsAria: 'Masquer les horodatages dans la transcription',\n seekTo: 'Aller à {time}'\n },\n settings: {\n title: 'Paramètres',\n quality: 'Qualité',\n speed: 'Vitesse',\n captions: 'Sous-titres',\n language: 'Langue',\n reset: 'Réinitialiser',\n close: 'Fermer'\n },\n speeds: {\n normal: 'Normal'\n },\n time: {\n display: 'Affichage du temps',\n durationPrefix: 'Durée : ',\n of: 'sur',\n hour: '{count} heure',\n hours: '{count} heures',\n minute: '{count} minute',\n minutes: '{count} minutes',\n second: '{count} seconde',\n seconds: '{count} secondes'\n },\n resume: {\n prompt: 'Reprendre à {time} ?',\n resume: 'Reprendre',\n startOver: 'Recommencer'\n },\n playlist: {\n title: 'Liste de lecture',\n trackOf: 'Piste {current} sur {total}',\n nowPlaying: 'Lecture en cours : Piste {current} sur {total}. {title}{artist}',\n by: ' par ',\n untitled: 'Sans titre',\n trackUntitled: 'Piste {number}',\n currentlyPlaying: 'En cours de lecture',\n notPlaying: 'Non en lecture',\n pressEnterPlay: 'Appuyez sur Entrée pour lire',\n pressEnterRestart: 'Appuyez sur Entrée pour recommencer',\n keyboardInstructions: 'Navigation de la liste de lecture : Utilisez les touches fléchées haut et bas pour naviguer entre les pistes. Appuyez sur Page précédente ou Page suivante pour sauter 5 pistes. Appuyez sur Début pour aller à la première piste, Fin pour la dernière piste. Appuyez sur Entrée ou Espace pour lire la piste sélectionnée.',\n endOfPlaylist: 'Fin de la liste de lecture. {current} sur {total}.',\n beginningOfPlaylist: 'Début de la liste de lecture. 1 sur {total}.',\n jumpedToLastTrack: 'Sauté à la dernière piste. {current} sur {total}.',\n jumpedToFirstTrack: 'Sauté à la première piste. 1 sur {total}.',\n firstTrack: 'Première piste. 1 sur {total}.',\n lastTrack: 'Dernière piste. {current} sur {total}.'\n }\n};\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.1 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
@@ -217,4 +217,4 @@ var ja = {
|
|
|
217
217
|
export {
|
|
218
218
|
ja
|
|
219
219
|
};
|
|
220
|
-
//# sourceMappingURL=vidply.ja-
|
|
220
|
+
//# sourceMappingURL=vidply.ja-WWMSTEJH.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/i18n/languages/ja.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Japanese translations for VidPly\n */\n\nexport const ja = {\n player: {\n label: 'ビデオプレーヤー',\n play: '再生',\n pause: '一時停止',\n stop: '停止',\n restart: '最初から再生',\n rewind: '巻き戻し',\n forward: '早送り',\n rewindSeconds: '{seconds}秒戻す',\n forwardSeconds: '{seconds}秒進める',\n previous: '前のトラック',\n next: '次のトラック',\n playlist: 'プレイリストの切り替え',\n volume: '音量',\n mute: 'ミュート',\n unmute: 'ミュート解除',\n fullscreen: '全画面表示',\n exitFullscreen: '全画面表示を終了',\n captions: '字幕',\n chapters: 'チャプター',\n quality: '画質',\n captionStyling: '字幕スタイル',\n transcript: '文字起こし切り替え',\n audioDescription: '音声解説',\n signLanguage: '手話動画',\n settings: '設定',\n speed: '再生速度',\n pip: 'ピクチャーインピクチャー',\n floatingPlayer: 'フローティングプレーヤー',\n floatingPlayerClose: 'フローティングプレーヤーを閉じる',\n floatingPlayerEnter: 'ビデオを切り離す',\n floatingPlayerExit: 'ビデオを戻す',\n floatingPlayerDialog: 'フローティング動画プレーヤー。Dキーで移動、Rキーでサイズ変更、Escで閉じる。',\n download: 'ダウンロード',\n downloadWithFormat: '{format} をダウンロード',\n downloadWithSize: 'ダウンロード ({size})',\n downloadWithFormatSize: '{format} をダウンロード ({size})',\n currentTime: '現在の時間',\n duration: '再生時間',\n progress: '進行状況',\n seekForward: '{seconds}秒進める',\n seekBackward: '{seconds}秒戻す',\n volumeUp: '音量を上げる',\n volumeDown: '音量を下げる',\n loading: '読み込み中...',\n loadingChapters: 'チャプター読み込み中...',\n error: '読み込みエラー',\n buffering: 'バッファリング中...',\n signLanguageVideo: '手話動画',\n closeSignLanguage: '手話動画を閉じる',\n signLanguageSettings: '手話設定',\n noChapters: 'チャプターがありません',\n noCaptions: '字幕がありません',\n auto: '自動',\n autoQuality: '自動(画質選択不可)',\n noQuality: '画質選択不可',\n signLanguageDragResize: '手話動画 - キーボードでドラッグするにはDキーを、サイズ変更するにはRキーを押してください',\n signLanguageDragActive: '手話動画 - ドラッグモードが有効です。矢印キーで移動、Escapeで終了します。',\n signLanguageResizeActive: '手話動画 - サイズ変更モードが有効です。左右の矢印キーでサイズ変更、Escapeで終了します。',\n enableSignDragMode: 'ドラッグモードを有効にする。ショートカット:Dキー',\n disableSignDragMode: 'ドラッグモードを無効にする。ショートカット:Dキー',\n enableSignDragModeAria: '矢印キーでキーボードドラッグモードを有効にする。ショートカット:Dキー',\n disableSignDragModeAria: '矢印キーでキーボードドラッグモードを無効にする。ショートカット:Dキー',\n enableSignResizeMode: 'サイズ変更モードを有効にする。ショートカット:Rキー',\n disableSignResizeMode: 'サイズ変更モードを無効にする。ショートカット:Rキー',\n enableSignResizeModeAria: '矢印キーでキーボードサイズ変更モードを有効にする。ショートカット:Rキー',\n disableSignResizeModeAria: '矢印キーでキーボードサイズ変更モードを無効にする。ショートカット:Rキー',\n signDragModeHint: 'ドラッグモード:矢印キーで移動、Escで終了',\n signResizeModeHint: 'サイズ変更モード:矢印キーでサイズ変更、Escで終了',\n signDragModeDisabled: '手話動画のドラッグモードを無効にしました。',\n signResizeModeDisabled: '手話動画のサイズ変更モードを無効にしました。',\n resizeHandle: '{direction}コーナーのサイズ変更',\n moreOptions: 'その他のオプション',\n noMoreOptions: '追加のオプションはありません',\n playing: '再生中',\n paused: '一時停止中',\n muted: 'ミュート中',\n unmuted: 'ミュート解除',\n captionsOn: '字幕オン',\n captionsOff: '字幕オフ',\n volumePercent: '音量 {percent} パーセント',\n volumePercentMuted: 'ミュート',\n speedRate: '速度 {rate}x'\n },\n captions: {\n off: 'オフ',\n select: '字幕を選択',\n fontSize: 'フォントサイズ',\n fontFamily: 'フォント',\n color: 'テキストの色',\n backgroundColor: '背景色',\n opacity: '不透明度'\n },\n fontSizes: {\n small: '小',\n normal: '標準',\n large: '大',\n xlarge: '特大'\n },\n fontFamilies: {\n sansSerif: 'サンセリフ',\n serif: 'セリフ',\n monospace: '等幅'\n },\n styleLabels: {\n textColor: 'テキストの色',\n background: '背景',\n font: 'フォント',\n fontSize: 'フォントサイズ',\n opacity: '不透明度'\n },\n audioDescription: {\n enable: '音声解説を有効にする',\n disable: '音声解説を無効にする'\n },\n signLanguage: {\n show: '手話動画を表示',\n hide: '手話動画を非表示',\n showInMainView: 'メイン動画に手話を表示',\n hideInMainView: 'メイン動画から手話を削除'\n },\n transcript: {\n title: '文字起こし',\n ariaLabel: 'ビデオ文字起こし',\n close: '文字起こしを閉じる',\n loading: '文字起こしを読み込み中...',\n noTranscript: 'このビデオの文字起こしはありません。',\n settings: '文字起こし設定。Enterキーでメニューを開く、またはDキーでドラッグモードを有効にする',\n keyboardDragMode: '矢印キーでキーボードドラッグモードを切り替え。ショートカット:Dキー',\n keyboardDragActive: '⌨️ キーボードドラッグモード有効(矢印キーで移動、Shift+矢印キーで大きく移動、DまたはESCで終了)',\n dragResizePrompt: 'Dキーで移動、Rキーでサイズ変更。Homeで位置をリセット、Escで閉じます。',\n dragModeEnabled: 'キーボードドラッグモードを有効にしました。矢印キーで移動、Shift+矢印キーで大きく移動できます。終了するには D または Esc を押します。',\n dragModeDisabled: 'キーボードドラッグモードを無効にしました。',\n enableDragMode: 'ドラッグモードを有効にする。ショートカット:Dキー',\n disableDragMode: 'ドラッグモードを無効にする。ショートカット:Dキー',\n enableDragModeAria: '矢印キーでキーボードドラッグモードを有効にする。ショートカット:Dキー',\n disableDragModeAria: '矢印キーでキーボードドラッグモードを無効にする。ショートカット:Dキー',\n resizeWindow: 'ウィンドウのサイズ変更',\n disableResizeWindow: 'サイズ変更モードを無効にする',\n enableResizeMode: 'サイズ変更モードを有効にする。ショートカット:Rキー',\n disableResizeMode: 'サイズ変更モードを無効にする。ショートカット:Rキー',\n enableResizeModeAria: '矢印キーでキーボードサイズ変更モードを有効にする。ショートカット:Rキー',\n disableResizeModeAria: '矢印キーでキーボードサイズ変更モードを無効にする。ショートカット:Rキー',\n resizeModeHint: 'リサイズハンドルが有効になりました。辺や角をドラッグして調整します。Esc または R で終了します。',\n resizeModeEnabled: 'サイズ変更モードを有効にしました。辺や角をドラッグして調整します。Esc または R で終了します。',\n resizeModeDisabled: 'サイズ変更モードを無効にしました。',\n dragModeBadge: '移動モード:矢印キーで移動、Escで終了',\n resizeModeBadge: 'サイズ変更モード:辺や角をドラッグ、Escで終了',\n positionReset: '文字起こしの位置をリセットしました。',\n styleTranscript: '文字起こしスタイル設定を開く',\n closeMenu: 'メニューを閉じる',\n styleTitle: '文字起こしスタイル',\n autoscroll: '自動スクロール',\n settingsMenu: '文字起こしダイアログ設定',\n showTimestamps: 'タイムスタンプを表示',\n hideTimestamps: 'タイムスタンプを非表示',\n showTimestampsAria: '文字起こしにタイムスタンプを表示',\n hideTimestampsAria: '文字起こしのタイムスタンプを非表示',\n seekTo: '{time} へ移動'\n },\n settings: {\n title: '設定',\n quality: '画質',\n speed: '速度',\n captions: '字幕',\n language: '言語',\n reset: 'リセット',\n close: '閉じる'\n },\n speeds: {\n normal: '通常'\n },\n time: {\n display: '時間表示',\n durationPrefix: '再生時間: ',\n of: '/',\n hour: '{count}時間',\n hours: '{count}時間',\n minute: '{count}分',\n minutes: '{count}分',\n second: '{count}秒',\n seconds: '{count}秒'\n },\n resume: {\n prompt: '{time}から再開しますか?',\n resume: '再開',\n startOver: '最初から'\n },\n playlist: {\n title: 'プレイリスト',\n trackOf: 'トラック {current}/{total}',\n nowPlaying: '再生中: トラック {current}/{total}. {title}{artist}',\n by: ' - ',\n untitled: 'タイトルなし',\n trackUntitled: 'トラック {number}',\n currentlyPlaying: '再生中',\n notPlaying: '停止中',\n pressEnterPlay: 'Enterキーで再生',\n pressEnterRestart: 'Enterキーで最初から再生',\n keyboardInstructions: 'プレイリストナビゲーション:上下の矢印キーでトラック間を移動します。Page UpまたはPage Downで5トラックをスキップします。Homeで最初のトラックへ、Endで最後のトラックへ移動します。EnterまたはSpaceで選択したトラックを再生します。',\n endOfPlaylist: 'プレイリストの終わりです。{current}/{total}。',\n beginningOfPlaylist: 'プレイリストの始めです。1/{total}。',\n jumpedToLastTrack: '最後のトラックにジャンプしました。{current}/{total}。',\n jumpedToFirstTrack: '最初のトラックにジャンプしました。1/{total}。',\n firstTrack: '最初のトラックです。1/{total}。',\n lastTrack: '最後のトラックです。{current}/{total}。'\n }\n};\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/legacy/vidply.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.1 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
@@ -8,8 +8,13 @@
|
|
|
8
8
|
var __defProp = Object.defineProperty;
|
|
9
9
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
10
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
|
-
var __esm = (fn, res) => function __init() {
|
|
12
|
-
|
|
11
|
+
var __esm = (fn, res, err) => function __init() {
|
|
12
|
+
if (err) throw err[0];
|
|
13
|
+
try {
|
|
14
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
15
|
+
} catch (e) {
|
|
16
|
+
throw err = [e], e;
|
|
17
|
+
}
|
|
13
18
|
};
|
|
14
19
|
var __export = (target, all) => {
|
|
15
20
|
for (var name in all)
|
|
@@ -3153,6 +3158,194 @@
|
|
|
3153
3158
|
}
|
|
3154
3159
|
});
|
|
3155
3160
|
|
|
3161
|
+
// src/core/DescriptionSpeechManager.ts
|
|
3162
|
+
var DescriptionSpeechManager;
|
|
3163
|
+
var init_DescriptionSpeechManager = __esm({
|
|
3164
|
+
"src/core/DescriptionSpeechManager.ts"() {
|
|
3165
|
+
"use strict";
|
|
3166
|
+
DescriptionSpeechManager = class {
|
|
3167
|
+
constructor(player) {
|
|
3168
|
+
__publicField(this, "player");
|
|
3169
|
+
__publicField(this, "enabled", false);
|
|
3170
|
+
__publicField(this, "descriptionTrack", null);
|
|
3171
|
+
__publicField(this, "cueChangeHandler", null);
|
|
3172
|
+
__publicField(this, "seekedHandler", null);
|
|
3173
|
+
__publicField(this, "wasPlayingBeforeCue", false);
|
|
3174
|
+
__publicField(this, "speaking", false);
|
|
3175
|
+
__publicField(this, "lastSpokenCueKey", null);
|
|
3176
|
+
__publicField(this, "_pendingUtterance", null);
|
|
3177
|
+
this.player = player;
|
|
3178
|
+
}
|
|
3179
|
+
/**
|
|
3180
|
+
* Whether speech synthesis is available and enabled in player options.
|
|
3181
|
+
*/
|
|
3182
|
+
canUseSpeech() {
|
|
3183
|
+
if (this.player.options.audioDescriptionSpeech === false) {
|
|
3184
|
+
return false;
|
|
3185
|
+
}
|
|
3186
|
+
return typeof window !== "undefined" && "speechSynthesis" in window;
|
|
3187
|
+
}
|
|
3188
|
+
/**
|
|
3189
|
+
* Resolve the descriptions track, preferring the active caption language.
|
|
3190
|
+
*/
|
|
3191
|
+
findDescriptionTrack() {
|
|
3192
|
+
var _a, _b, _c;
|
|
3193
|
+
const textTracks = this.player.element ? Array.from(this.player.element.textTracks || []) : [];
|
|
3194
|
+
const descriptionsTracks = textTracks.filter(
|
|
3195
|
+
(track) => track.kind === "descriptions" && !track._vidplyStale
|
|
3196
|
+
);
|
|
3197
|
+
if (descriptionsTracks.length === 0) {
|
|
3198
|
+
return null;
|
|
3199
|
+
}
|
|
3200
|
+
const captionLang = (_c = (_b = (_a = this.player.captionManager) == null ? void 0 : _a.currentTrack) == null ? void 0 : _b.track) == null ? void 0 : _c.language;
|
|
3201
|
+
if (captionLang) {
|
|
3202
|
+
const match = descriptionsTracks.find((track) => track.language === captionLang);
|
|
3203
|
+
if (match) {
|
|
3204
|
+
return match;
|
|
3205
|
+
}
|
|
3206
|
+
}
|
|
3207
|
+
return descriptionsTracks[0] ?? null;
|
|
3208
|
+
}
|
|
3209
|
+
/**
|
|
3210
|
+
* Enable VTT speech mode: wire cuechange/seeked listeners.
|
|
3211
|
+
*/
|
|
3212
|
+
enable() {
|
|
3213
|
+
const track = this.findDescriptionTrack();
|
|
3214
|
+
if (!track) {
|
|
3215
|
+
return false;
|
|
3216
|
+
}
|
|
3217
|
+
if (!this.canUseSpeech()) {
|
|
3218
|
+
track.mode = "showing";
|
|
3219
|
+
return true;
|
|
3220
|
+
}
|
|
3221
|
+
this.descriptionTrack = track;
|
|
3222
|
+
track.mode = "hidden";
|
|
3223
|
+
this.cueChangeHandler = () => {
|
|
3224
|
+
this.handleCueChange();
|
|
3225
|
+
};
|
|
3226
|
+
track.addEventListener("cuechange", this.cueChangeHandler);
|
|
3227
|
+
this.seekedHandler = () => {
|
|
3228
|
+
this.cancelSpeech();
|
|
3229
|
+
this.lastSpokenCueKey = null;
|
|
3230
|
+
this.handleCueChange();
|
|
3231
|
+
};
|
|
3232
|
+
this.player.on("seeked", this.seekedHandler);
|
|
3233
|
+
this.enabled = true;
|
|
3234
|
+
this.handleCueChange();
|
|
3235
|
+
return true;
|
|
3236
|
+
}
|
|
3237
|
+
/**
|
|
3238
|
+
* Disable VTT speech mode and restore track state.
|
|
3239
|
+
*/
|
|
3240
|
+
disable() {
|
|
3241
|
+
this.cancelSpeech();
|
|
3242
|
+
this.lastSpokenCueKey = null;
|
|
3243
|
+
this.enabled = false;
|
|
3244
|
+
if (this.descriptionTrack && this.cueChangeHandler) {
|
|
3245
|
+
this.descriptionTrack.removeEventListener("cuechange", this.cueChangeHandler);
|
|
3246
|
+
}
|
|
3247
|
+
if (this.seekedHandler) {
|
|
3248
|
+
this.player.off("seeked", this.seekedHandler);
|
|
3249
|
+
}
|
|
3250
|
+
if (this.descriptionTrack) {
|
|
3251
|
+
this.descriptionTrack.mode = "hidden";
|
|
3252
|
+
}
|
|
3253
|
+
this.cueChangeHandler = null;
|
|
3254
|
+
this.seekedHandler = null;
|
|
3255
|
+
this.descriptionTrack = null;
|
|
3256
|
+
this.wasPlayingBeforeCue = false;
|
|
3257
|
+
}
|
|
3258
|
+
/**
|
|
3259
|
+
* Handle active description cues on the wired track.
|
|
3260
|
+
*/
|
|
3261
|
+
handleCueChange() {
|
|
3262
|
+
var _a;
|
|
3263
|
+
if (!this.enabled || !this.descriptionTrack || !this.canUseSpeech()) {
|
|
3264
|
+
return;
|
|
3265
|
+
}
|
|
3266
|
+
const activeCues = this.descriptionTrack.activeCues;
|
|
3267
|
+
if (!activeCues || activeCues.length === 0) {
|
|
3268
|
+
return;
|
|
3269
|
+
}
|
|
3270
|
+
const cue = activeCues[0];
|
|
3271
|
+
const text = (_a = cue.text) == null ? void 0 : _a.trim();
|
|
3272
|
+
if (!text) {
|
|
3273
|
+
return;
|
|
3274
|
+
}
|
|
3275
|
+
const cueKey = `${cue.startTime}:${cue.endTime}:${text}`;
|
|
3276
|
+
if (this.speaking && this.lastSpokenCueKey === cueKey) {
|
|
3277
|
+
return;
|
|
3278
|
+
}
|
|
3279
|
+
if (this.lastSpokenCueKey === cueKey && !this.player.state.playing) {
|
|
3280
|
+
return;
|
|
3281
|
+
}
|
|
3282
|
+
this.speakCue(cue, cueKey);
|
|
3283
|
+
}
|
|
3284
|
+
/**
|
|
3285
|
+
* Pause playback and speak a description cue.
|
|
3286
|
+
*/
|
|
3287
|
+
speakCue(cue, cueKey) {
|
|
3288
|
+
var _a;
|
|
3289
|
+
if (!this.canUseSpeech()) {
|
|
3290
|
+
return;
|
|
3291
|
+
}
|
|
3292
|
+
if (this.player.state.paused && !this.speaking && !this.wasPlayingBeforeCue) {
|
|
3293
|
+
return;
|
|
3294
|
+
}
|
|
3295
|
+
this.cancelSpeech();
|
|
3296
|
+
this.wasPlayingBeforeCue = this.player.state.playing;
|
|
3297
|
+
if (this.wasPlayingBeforeCue) {
|
|
3298
|
+
this.player.pause();
|
|
3299
|
+
}
|
|
3300
|
+
this.speaking = true;
|
|
3301
|
+
this.lastSpokenCueKey = cueKey;
|
|
3302
|
+
const detail = {
|
|
3303
|
+
time: cue.startTime,
|
|
3304
|
+
endTime: cue.endTime,
|
|
3305
|
+
text: cue.text.trim(),
|
|
3306
|
+
cue
|
|
3307
|
+
};
|
|
3308
|
+
this.player.emit("audiodescriptioncuestart", detail);
|
|
3309
|
+
const utterance = new SpeechSynthesisUtterance(detail.text);
|
|
3310
|
+
const lang = ((_a = this.descriptionTrack) == null ? void 0 : _a.language) || this.player.options.language || "en";
|
|
3311
|
+
utterance.lang = lang;
|
|
3312
|
+
const finish = () => {
|
|
3313
|
+
if (this._pendingUtterance !== utterance) {
|
|
3314
|
+
return;
|
|
3315
|
+
}
|
|
3316
|
+
this._pendingUtterance = null;
|
|
3317
|
+
this.speaking = false;
|
|
3318
|
+
this.player.emit("audiodescriptioncueend", detail);
|
|
3319
|
+
const extended = this.player.options.audioDescriptionExtended !== false;
|
|
3320
|
+
const shouldResume = extended ? this.wasPlayingBeforeCue : this.wasPlayingBeforeCue && this.player.state.currentTime < cue.endTime;
|
|
3321
|
+
if (shouldResume && this.enabled) {
|
|
3322
|
+
void this.player.play();
|
|
3323
|
+
}
|
|
3324
|
+
this.wasPlayingBeforeCue = false;
|
|
3325
|
+
};
|
|
3326
|
+
utterance.onend = finish;
|
|
3327
|
+
utterance.onerror = finish;
|
|
3328
|
+
this._pendingUtterance = utterance;
|
|
3329
|
+
window.speechSynthesis.speak(utterance);
|
|
3330
|
+
}
|
|
3331
|
+
/**
|
|
3332
|
+
* Cancel any in-progress speech synthesis.
|
|
3333
|
+
*/
|
|
3334
|
+
cancelSpeech() {
|
|
3335
|
+
if (typeof window !== "undefined" && window.speechSynthesis) {
|
|
3336
|
+
window.speechSynthesis.cancel();
|
|
3337
|
+
}
|
|
3338
|
+
this._pendingUtterance = null;
|
|
3339
|
+
this.speaking = false;
|
|
3340
|
+
this.wasPlayingBeforeCue = false;
|
|
3341
|
+
}
|
|
3342
|
+
destroy() {
|
|
3343
|
+
this.disable();
|
|
3344
|
+
}
|
|
3345
|
+
};
|
|
3346
|
+
}
|
|
3347
|
+
});
|
|
3348
|
+
|
|
3156
3349
|
// src/core/AudioDescriptionManager.ts
|
|
3157
3350
|
var AudioDescriptionManager_exports = {};
|
|
3158
3351
|
__export(AudioDescriptionManager_exports, {
|
|
@@ -3163,6 +3356,7 @@
|
|
|
3163
3356
|
"src/core/AudioDescriptionManager.ts"() {
|
|
3164
3357
|
"use strict";
|
|
3165
3358
|
init_CaptionManager();
|
|
3359
|
+
init_DescriptionSpeechManager();
|
|
3166
3360
|
AudioDescriptionManager = class {
|
|
3167
3361
|
constructor(player) {
|
|
3168
3362
|
__publicField(this, "player");
|
|
@@ -3172,6 +3366,7 @@
|
|
|
3172
3366
|
__publicField(this, "originalSource");
|
|
3173
3367
|
__publicField(this, "sourceElement");
|
|
3174
3368
|
__publicField(this, "src");
|
|
3369
|
+
__publicField(this, "speechManager");
|
|
3175
3370
|
this.player = player;
|
|
3176
3371
|
this.enabled = false;
|
|
3177
3372
|
this.desiredState = false;
|
|
@@ -3179,6 +3374,49 @@
|
|
|
3179
3374
|
this.sourceElement = null;
|
|
3180
3375
|
this.originalSource = null;
|
|
3181
3376
|
this.captionTracks = [];
|
|
3377
|
+
this.speechManager = null;
|
|
3378
|
+
}
|
|
3379
|
+
/**
|
|
3380
|
+
* Whether a described video source swap is configured.
|
|
3381
|
+
*/
|
|
3382
|
+
_hasSwapSource() {
|
|
3383
|
+
const hasSourceElementsWithDesc = this.player.sourceElements.some(
|
|
3384
|
+
(el) => el.getAttribute("data-desc-src")
|
|
3385
|
+
);
|
|
3386
|
+
return Boolean(this.src || hasSourceElementsWithDesc);
|
|
3387
|
+
}
|
|
3388
|
+
/**
|
|
3389
|
+
* Whether a descriptions VTT track is present on the media element.
|
|
3390
|
+
*/
|
|
3391
|
+
_hasDescriptionsTrack() {
|
|
3392
|
+
return Boolean(this.player.findTextTrack("descriptions"));
|
|
3393
|
+
}
|
|
3394
|
+
/**
|
|
3395
|
+
* Resolve which audio-description delivery mode applies for the current media.
|
|
3396
|
+
*/
|
|
3397
|
+
resolveDeliveryMode() {
|
|
3398
|
+
const configured = this.player.options.audioDescriptionMode ?? "auto";
|
|
3399
|
+
const hasSwap = this._hasSwapSource();
|
|
3400
|
+
const hasDescriptions = this._hasDescriptionsTrack();
|
|
3401
|
+
if (configured === "swap") {
|
|
3402
|
+
return hasSwap ? "swap" : "none";
|
|
3403
|
+
}
|
|
3404
|
+
if (configured === "vtt_speech") {
|
|
3405
|
+
return hasDescriptions ? "vtt_speech" : "none";
|
|
3406
|
+
}
|
|
3407
|
+
if (hasSwap) {
|
|
3408
|
+
return "swap";
|
|
3409
|
+
}
|
|
3410
|
+
if (hasDescriptions) {
|
|
3411
|
+
return "vtt_speech";
|
|
3412
|
+
}
|
|
3413
|
+
return "none";
|
|
3414
|
+
}
|
|
3415
|
+
_ensureSpeechManager() {
|
|
3416
|
+
if (!this.speechManager) {
|
|
3417
|
+
this.speechManager = new DescriptionSpeechManager(this.player);
|
|
3418
|
+
}
|
|
3419
|
+
return this.speechManager;
|
|
3182
3420
|
}
|
|
3183
3421
|
/**
|
|
3184
3422
|
* Initialize audio description from source elements
|
|
@@ -3232,24 +3470,35 @@
|
|
|
3232
3470
|
* Check if audio description is available
|
|
3233
3471
|
*/
|
|
3234
3472
|
isAvailable() {
|
|
3235
|
-
const
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
|
|
3473
|
+
const mode = this.resolveDeliveryMode();
|
|
3474
|
+
if (mode === "swap" || mode === "vtt_speech") {
|
|
3475
|
+
return true;
|
|
3476
|
+
}
|
|
3477
|
+
return this.captionTracks.length > 0;
|
|
3239
3478
|
}
|
|
3240
3479
|
/**
|
|
3241
3480
|
* Enable audio description
|
|
3242
3481
|
*/
|
|
3243
3482
|
async enable() {
|
|
3244
|
-
const
|
|
3245
|
-
(el) => el.getAttribute("data-desc-src")
|
|
3246
|
-
);
|
|
3483
|
+
const deliveryMode = this.resolveDeliveryMode();
|
|
3247
3484
|
const hasTracksWithDesc = this.captionTracks.length > 0;
|
|
3248
|
-
if (
|
|
3249
|
-
console.warn("VidPly: No audio description source,
|
|
3485
|
+
if (deliveryMode === "none" && !hasTracksWithDesc) {
|
|
3486
|
+
console.warn("VidPly: No audio description source, descriptions track, or tracks provided");
|
|
3250
3487
|
return;
|
|
3251
3488
|
}
|
|
3252
3489
|
this.desiredState = true;
|
|
3490
|
+
if (deliveryMode === "vtt_speech") {
|
|
3491
|
+
const speechManager = this._ensureSpeechManager();
|
|
3492
|
+
const started = speechManager.enable();
|
|
3493
|
+
if (!started) {
|
|
3494
|
+
console.warn("VidPly: No descriptions track available for VTT speech mode");
|
|
3495
|
+
return;
|
|
3496
|
+
}
|
|
3497
|
+
this.enabled = true;
|
|
3498
|
+
this.player.state.audioDescriptionEnabled = true;
|
|
3499
|
+
this.player.emit("audiodescriptionenabled");
|
|
3500
|
+
return;
|
|
3501
|
+
}
|
|
3253
3502
|
const currentTime = this.player.state.currentTime;
|
|
3254
3503
|
const wasPlaying = this.player.state.playing;
|
|
3255
3504
|
const posterValue = this.player.element.poster || this.player.element.getAttribute("poster") || this.player.options.poster;
|
|
@@ -3269,7 +3518,15 @@
|
|
|
3269
3518
|
* Disable audio description
|
|
3270
3519
|
*/
|
|
3271
3520
|
async disable() {
|
|
3521
|
+
var _a;
|
|
3272
3522
|
this.desiredState = false;
|
|
3523
|
+
if ((_a = this.speechManager) == null ? void 0 : _a.enabled) {
|
|
3524
|
+
this.speechManager.disable();
|
|
3525
|
+
this.enabled = false;
|
|
3526
|
+
this.player.state.audioDescriptionEnabled = false;
|
|
3527
|
+
this.player.emit("audiodescriptiondisabled");
|
|
3528
|
+
return;
|
|
3529
|
+
}
|
|
3273
3530
|
const hasTracksWithDesc = this.captionTracks.length > 0;
|
|
3274
3531
|
if (!this.sourceElement && !this.src && hasTracksWithDesc) {
|
|
3275
3532
|
await this._swapCaptionTracks(false);
|
|
@@ -3295,19 +3552,30 @@
|
|
|
3295
3552
|
* Toggle audio description
|
|
3296
3553
|
*/
|
|
3297
3554
|
async toggle() {
|
|
3555
|
+
const deliveryMode = this.resolveDeliveryMode();
|
|
3298
3556
|
const descriptionTrack = this.player.findTextTrack("descriptions");
|
|
3299
|
-
const
|
|
3300
|
-
if (
|
|
3557
|
+
const hasSwapOrTracks = this._hasSwapSource() || this.captionTracks.length > 0;
|
|
3558
|
+
if (deliveryMode === "vtt_speech") {
|
|
3559
|
+
if (this.enabled) {
|
|
3560
|
+
await this.disable();
|
|
3561
|
+
} else {
|
|
3562
|
+
await this.enable();
|
|
3563
|
+
}
|
|
3564
|
+
return;
|
|
3565
|
+
}
|
|
3566
|
+
if (descriptionTrack && !hasSwapOrTracks) {
|
|
3301
3567
|
if (descriptionTrack.mode === "showing") {
|
|
3302
3568
|
descriptionTrack.mode = "hidden";
|
|
3303
3569
|
this.enabled = false;
|
|
3570
|
+
this.player.state.audioDescriptionEnabled = false;
|
|
3304
3571
|
this.player.emit("audiodescriptiondisabled");
|
|
3305
3572
|
} else {
|
|
3306
3573
|
descriptionTrack.mode = "showing";
|
|
3307
3574
|
this.enabled = true;
|
|
3575
|
+
this.player.state.audioDescriptionEnabled = true;
|
|
3308
3576
|
this.player.emit("audiodescriptionenabled");
|
|
3309
3577
|
}
|
|
3310
|
-
} else if (descriptionTrack &&
|
|
3578
|
+
} else if (descriptionTrack && hasSwapOrTracks) {
|
|
3311
3579
|
if (this.enabled) {
|
|
3312
3580
|
this.desiredState = false;
|
|
3313
3581
|
await this.disable();
|
|
@@ -3316,7 +3584,7 @@
|
|
|
3316
3584
|
this.desiredState = true;
|
|
3317
3585
|
await this.enable();
|
|
3318
3586
|
}
|
|
3319
|
-
} else if (
|
|
3587
|
+
} else if (hasSwapOrTracks) {
|
|
3320
3588
|
if (this.enabled) {
|
|
3321
3589
|
this.desiredState = false;
|
|
3322
3590
|
await this.disable();
|
|
@@ -3715,6 +3983,9 @@
|
|
|
3715
3983
|
* Update sources (called when playlist changes)
|
|
3716
3984
|
*/
|
|
3717
3985
|
updateSources(audioDescriptionSrc) {
|
|
3986
|
+
var _a;
|
|
3987
|
+
(_a = this.speechManager) == null ? void 0 : _a.destroy();
|
|
3988
|
+
this.speechManager = null;
|
|
3718
3989
|
this.src = audioDescriptionSrc || null;
|
|
3719
3990
|
this.enabled = false;
|
|
3720
3991
|
this.desiredState = false;
|
|
@@ -3733,6 +4004,9 @@
|
|
|
3733
4004
|
* Cleanup
|
|
3734
4005
|
*/
|
|
3735
4006
|
destroy() {
|
|
4007
|
+
var _a;
|
|
4008
|
+
(_a = this.speechManager) == null ? void 0 : _a.destroy();
|
|
4009
|
+
this.speechManager = null;
|
|
3736
4010
|
this.enabled = false;
|
|
3737
4011
|
this.desiredState = false;
|
|
3738
4012
|
this.captionTracks = [];
|
|
@@ -16104,6 +16378,9 @@
|
|
|
16104
16378
|
audioDescriptionSrc: null,
|
|
16105
16379
|
// URL to audio-described version
|
|
16106
16380
|
audioDescriptionButton: true,
|
|
16381
|
+
audioDescriptionMode: "auto",
|
|
16382
|
+
audioDescriptionSpeech: true,
|
|
16383
|
+
audioDescriptionExtended: true,
|
|
16107
16384
|
// Sign Language
|
|
16108
16385
|
signLanguage: true,
|
|
16109
16386
|
signLanguageSrc: null,
|
|
@@ -16589,15 +16866,33 @@
|
|
|
16589
16866
|
if (this.audioDescriptionManager) {
|
|
16590
16867
|
return this.audioDescriptionManager;
|
|
16591
16868
|
}
|
|
16592
|
-
|
|
16593
|
-
const hasAudioDescButton = this.options.audioDescriptionButton;
|
|
16594
|
-
if (!hasAudioDescSrc && !hasAudioDescButton) {
|
|
16869
|
+
if (!this.hasAudioDescriptionContent()) {
|
|
16595
16870
|
return null;
|
|
16596
16871
|
}
|
|
16597
16872
|
const AudioDescManager = await loadAudioDescriptionManager();
|
|
16598
16873
|
this.audioDescriptionManager = new AudioDescManager(this);
|
|
16599
16874
|
return this.audioDescriptionManager;
|
|
16600
16875
|
}
|
|
16876
|
+
/**
|
|
16877
|
+
* True when the current media actually exposes audio-description content:
|
|
16878
|
+
* an explicit described-audio source, `<source>` elements carrying
|
|
16879
|
+
* `data-desc-src` / `data-orig-src`, or a `descriptions` text track.
|
|
16880
|
+
* Mirrors `ControlBar.hasAudioDescription()` so the chunk load and the
|
|
16881
|
+
* button visibility stay in lock-step.
|
|
16882
|
+
*/
|
|
16883
|
+
hasAudioDescriptionContent() {
|
|
16884
|
+
if (this.options.audioDescriptionSrc || this.audioDescriptionSrc) {
|
|
16885
|
+
return true;
|
|
16886
|
+
}
|
|
16887
|
+
const hasSourceElementsWithDesc = this.sourceElements.some(
|
|
16888
|
+
(el) => el.getAttribute("data-desc-src") || el.getAttribute("data-orig-src")
|
|
16889
|
+
);
|
|
16890
|
+
if (hasSourceElementsWithDesc) {
|
|
16891
|
+
return true;
|
|
16892
|
+
}
|
|
16893
|
+
const textTracks = this.element ? Array.from(this.element.textTracks || []) : [];
|
|
16894
|
+
return textTracks.some((track) => track.kind === "descriptions");
|
|
16895
|
+
}
|
|
16601
16896
|
// ============================================
|
|
16602
16897
|
// Resume Playback Methods
|
|
16603
16898
|
// ============================================
|
|
@@ -16609,16 +16904,24 @@
|
|
|
16609
16904
|
if (this.signLanguageManager) {
|
|
16610
16905
|
return this.signLanguageManager;
|
|
16611
16906
|
}
|
|
16612
|
-
|
|
16613
|
-
const hasSignLangSources = this.options.signLanguageSources && Object.keys(this.options.signLanguageSources).length > 0;
|
|
16614
|
-
const hasSignLangButton = this.options.signLanguageButton;
|
|
16615
|
-
if (!hasSignLangSrc && !hasSignLangSources && !hasSignLangButton) {
|
|
16907
|
+
if (!this.hasSignLanguageContent()) {
|
|
16616
16908
|
return null;
|
|
16617
16909
|
}
|
|
16618
16910
|
const SignLangManager = await loadSignLanguageManager();
|
|
16619
16911
|
this.signLanguageManager = new SignLangManager(this);
|
|
16620
16912
|
return this.signLanguageManager;
|
|
16621
16913
|
}
|
|
16914
|
+
/**
|
|
16915
|
+
* True when a sign-language video source (single `signLanguageSrc` or a
|
|
16916
|
+
* `signLanguageSources` map) is configured. Mirrors
|
|
16917
|
+
* `ControlBar.hasSignLanguage()`.
|
|
16918
|
+
*/
|
|
16919
|
+
hasSignLanguageContent() {
|
|
16920
|
+
if (this.options.signLanguageSrc || this.signLanguageSrc) {
|
|
16921
|
+
return true;
|
|
16922
|
+
}
|
|
16923
|
+
return !!(this.options.signLanguageSources && Object.keys(this.options.signLanguageSources).length > 0);
|
|
16924
|
+
}
|
|
16622
16925
|
/**
|
|
16623
16926
|
* Lazy-load and instantiate the floating (in-page PiP) manager. Only
|
|
16624
16927
|
* created when `options.floating === true` and the media element is a
|
|
@@ -16643,13 +16946,10 @@
|
|
|
16643
16946
|
*/
|
|
16644
16947
|
async initFeatureManagers() {
|
|
16645
16948
|
const promises = [];
|
|
16646
|
-
|
|
16647
|
-
(el) => el.getAttribute("data-desc-src") || el.getAttribute("data-orig-src")
|
|
16648
|
-
);
|
|
16649
|
-
if (this.options.audioDescriptionButton || this.options.audioDescriptionSrc || this.audioDescriptionSrc || hasSourceElementsWithDesc) {
|
|
16949
|
+
if (this.hasAudioDescriptionContent()) {
|
|
16650
16950
|
promises.push(this.ensureAudioDescriptionManager());
|
|
16651
16951
|
}
|
|
16652
|
-
if (this.
|
|
16952
|
+
if (this.hasSignLanguageContent()) {
|
|
16653
16953
|
promises.push(this.ensureSignLanguageManager());
|
|
16654
16954
|
}
|
|
16655
16955
|
if (this.options.floating && this.element && this.element.tagName === "VIDEO") {
|
|
@@ -16991,6 +17291,9 @@
|
|
|
16991
17291
|
}
|
|
16992
17292
|
this.currentSource = src;
|
|
16993
17293
|
this._pendingSource = null;
|
|
17294
|
+
if (this.hasAudioDescriptionContent()) {
|
|
17295
|
+
await this.ensureAudioDescriptionManager();
|
|
17296
|
+
}
|
|
16994
17297
|
(_b = this.audioDescriptionManager) == null ? void 0 : _b.initFromSourceElements(this.sourceElements, this.trackElements);
|
|
16995
17298
|
if (!this.originalSrc) {
|
|
16996
17299
|
this.originalSrc = src;
|
|
@@ -18466,7 +18769,7 @@
|
|
|
18466
18769
|
* @param {number} index - Track index
|
|
18467
18770
|
*/
|
|
18468
18771
|
selectTrack(index) {
|
|
18469
|
-
var _a, _b, _c, _d;
|
|
18772
|
+
var _a, _b, _c, _d, _e, _f;
|
|
18470
18773
|
if (index < 0 || index >= this.tracks.length) {
|
|
18471
18774
|
console.warn("VidPly Playlist: Invalid track index", index);
|
|
18472
18775
|
return;
|
|
@@ -18527,12 +18830,19 @@
|
|
|
18527
18830
|
if (typeof this.player.invalidateTrackCache === "function") {
|
|
18528
18831
|
this.player.invalidateTrackCache();
|
|
18529
18832
|
}
|
|
18530
|
-
|
|
18833
|
+
const reinitAudioDescription = (adm) => {
|
|
18834
|
+
if (!adm || typeof adm.initFromSourceElements !== "function") return;
|
|
18531
18835
|
try {
|
|
18532
|
-
|
|
18533
|
-
|
|
18836
|
+
adm.captionTracks = [];
|
|
18837
|
+
adm.initFromSourceElements(this.player.sourceElements, this.player.trackElements);
|
|
18534
18838
|
} catch {
|
|
18535
18839
|
}
|
|
18840
|
+
};
|
|
18841
|
+
if (this.player.audioDescriptionManager) {
|
|
18842
|
+
reinitAudioDescription(this.player.audioDescriptionManager);
|
|
18843
|
+
} else if ((_f = (_e = this.player).hasAudioDescriptionContent) == null ? void 0 : _f.call(_e)) {
|
|
18844
|
+
void this.player.ensureAudioDescriptionManager().then(reinitAudioDescription).catch(() => {
|
|
18845
|
+
});
|
|
18536
18846
|
}
|
|
18537
18847
|
if (this.player.captionManager && typeof this.player.captionManager.loadTracks === "function") {
|
|
18538
18848
|
try {
|
|
@@ -19397,6 +19707,9 @@
|
|
|
19397
19707
|
signLanguageDisplayMode: "signLanguageDisplayMode",
|
|
19398
19708
|
audioDescriptionSrc: "audioDescriptionSrc",
|
|
19399
19709
|
audioDescriptionButton: "audioDescriptionButton",
|
|
19710
|
+
audioDescriptionMode: "audioDescriptionMode",
|
|
19711
|
+
audioDescriptionSpeech: "audioDescriptionSpeech",
|
|
19712
|
+
audioDescriptionExtended: "audioDescriptionExtended",
|
|
19400
19713
|
autoplay: "autoplay",
|
|
19401
19714
|
loop: "loop",
|
|
19402
19715
|
muted: "muted",
|