diff --git a/packages/block-library/src/video/editor.scss b/packages/block-library/src/video/editor.scss index dd50ecc6c066f..03e1c116cccb7 100644 --- a/packages/block-library/src/video/editor.scss +++ b/packages/block-library/src/video/editor.scss @@ -37,6 +37,7 @@ max-width: 240px; } +.block-library-video-tracks-editor__tracks-informative-message-title, .block-library-video-tracks-editor__single-track-editor-edit-track-label { margin-top: $grid-unit-05; color: $gray-700; @@ -56,3 +57,11 @@ padding: 0; } } + +.block-library-video-tracks-editor__tracks-informative-message { + padding: $grid-unit-10; + + &-description { + margin-bottom: 0; + } +} diff --git a/packages/block-library/src/video/tracks-editor.js b/packages/block-library/src/video/tracks-editor.js index e23d1c93378a6..33036a14f1fec 100644 --- a/packages/block-library/src/video/tracks-editor.js +++ b/packages/block-library/src/video/tracks-editor.js @@ -24,7 +24,7 @@ import { } from '@wordpress/block-editor'; import { upload, media } from '@wordpress/icons'; import { useSelect } from '@wordpress/data'; -import { useState } from '@wordpress/element'; +import { useState, useRef, useEffect } from '@wordpress/element'; import { getFilename } from '@wordpress/url'; const ALLOWED_TYPES = [ 'text/vtt' ]; @@ -40,39 +40,29 @@ const KIND_OPTIONS = [ ]; function TrackList( { tracks, onEditPress } ) { - let content; - if ( tracks.length === 0 ) { - content = ( -

- { __( - 'Tracks can be subtitles, captions, chapters, or descriptions. They help make your content more accessible to a wider range of users.' - ) } -

- ); - } else { - content = tracks.map( ( track, index ) => { - return ( - { + return ( + + { track.label } + - - ); - } ); - } + { __( 'Edit' ) } + + + ); + } ); + return ( - - - { __( 'Edit track' ) } - - - { __( 'File' ) }: { fileName } - - - - onChange( { - ...track, - label: newLabel, - } ) - } - label={ __( 'Label' ) } - value={ label } - help={ __( 'Title of track' ) } - /> - + + { __( 'Edit track' ) } + + + { __( 'File' ) }: { fileName } + + + + onChange( { + ...track, + label: newLabel, + } ) + } + label={ __( 'Label' ) } + value={ label } + help={ __( 'Title of track' ) } + /> + + onChange( { + ...track, + srcLang: newSrcLang, + } ) + } + label={ __( 'Source language' ) } + value={ srcLang } + help={ __( 'Language tag (en, fr, etc.)' ) } + /> + + + { + onChange( { + ...track, + kind: newKind, + } ); + } } + /> + + + - - - + > + { __( 'Apply' ) } + + - + ); } @@ -194,6 +179,11 @@ export default function TracksEditor( { tracks = [], onChange } ) { return select( blockEditorStore ).getSettings().mediaUpload; }, [] ); const [ trackBeingEdited, setTrackBeingEdited ] = useState( null ); + const dropdownPopoverRef = useRef(); + + useEffect( () => { + dropdownPopoverRef.current?.focus(); + }, [ trackBeingEdited ] ); if ( ! mediaUpload ) { return null; @@ -201,17 +191,32 @@ export default function TracksEditor( { tracks = [], onChange } ) { return ( ( - - - { __( 'Text tracks' ) } - - - ) } + focusOnMount + popoverProps={ { + ref: dropdownPopoverRef, + } } + renderToggle={ ( { isOpen, onToggle } ) => { + const handleOnToggle = () => { + if ( ! isOpen ) { + // When the Popover opens make sure the initial view is + // always the track list rather than the edit track UI. + setTrackBeingEdited( null ); + } + onToggle(); + }; + + return ( + + + { __( 'Text tracks' ) } + + + ); + } } renderContent={ () => { if ( trackBeingEdited !== null ) { return ( @@ -235,8 +240,21 @@ export default function TracksEditor( { tracks = [], onChange } ) { /> ); } + return ( <> + { tracks.length === 0 && ( +
+

+ { __( 'Text tracks' ) } +

+

+ { __( + 'Tracks can be subtitles, captions, chapters, or descriptions. They help make your content more accessible to a wider range of users.' + ) } +

+
+ ) }