-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Playlist block #50664
base: trunk
Are you sure you want to change the base?
Playlist block #50664
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as resolved.
This comment was marked as resolved.
This pull request has changed or added PHP files. Please confirm whether these changes need to be synced to WordPress Core, and therefore featured in the next release of WordPress. If so, it is recommended to create a new Trac ticket and submit a pull request to the WordPress Core Github repository soon after this pull request is merged. If you're unsure, you can always ask for help in the #core-editor channel in WordPress Slack. Thank you! ❤️ View changed files❔ lib/blocks.php ❔ lib/experimental/editor-settings.php ❔ lib/experiments-page.php |
Based on feedback, there may be scenarios where users want to use duplicate tracks. For example to play commercial jingles between songs / episodes etc.
…ition of the tracks.
This code is largely copied from the Video block Poster image feature.
Add a new block attribute called "currentTrack", and pass it as a context from the parent to the inner block. Set the id (the post id of the audio media file) as the value of currentTrack: - On file selection - On removal of the inner block - On re-ordering of the inner blocks To do: It would be good to reduce the code duplication.
This solution is not ideal, nor complete. The placeholder where you select new tracks should not be able to be the "current track".
If the current track is the media placeholder (from the block inserter), then display a placeholder title, artist and album, and remove the source from the audio element.
Try to safe guard from invalid current track id's.
Add checks for the media_details fields for artist, album and length, to populate the track data when the upload feature is used.
In the MediaReplaceFlow: - Remove unused "addToPlaylist" parameter. - Replace mediaIds with mediaId since the track works with singular files. This ensures that when the user selects "Replace" in the block toolbar and opens the MediaLibrary, the current track is pre-selected.
Re-add the mediaIds to the MediaReplaceFlow, so that when the user clicks on "Edit" in the toolbar and opens the Media Library, the current tracks are pre-selected.
I don't recall what I was trying to do here, so I am removing the custom prop.
The purpose of this change is to improve the user experience when uploading new files and when undoing the insertion of new tracks. This is copied from recent changes made to the audio and video blocks.
…ad in the media replacement flow
What?
Adds a playlist and it's inner playlist track block.
Closes #805
This PR description was updated November 20, 2024.
Screenshots or screencast
Note: this video has no sound.
playlist-november-20.mp4
Why?
The playlist block has been requested since 2017. Without the block, a playlist can be added by using the classic block, but that is overly complicated.
How?
For this block, I started with one media type, audio, rather than trying to build it for both audio and video because it would increase the complexity.
I pictured that the playlist should work similarly to the "classic" WordPress playlist.
Meaning:
This PR does not connect the playlist block to the Media Library playlist options nor adds a new media frame.
To do:
Known issues:
The markup of the current track (at the top of the block) is different depending on the settings and track data.
This means that the WP_HTML_Tag_Processor used in index.php does not always find the right element to add the context to (The context used by the interactivity API).
Uploaded files sometimes miss the length.
Testing Instructions
Audio file for testing: https://wpthemetestdata.files.wordpress.com/2008/06/originaldixielandjazzbandwithalbernard-stlouisblues.mp3
Enable the experimental blocks option from the Gutenberg > Experiments plugin menu.
Upload a couple of audio files through the Media Library.
Edit the files in the Media Library and add title, artist and album to some but not all.
Add a featured image to at least oner file.
Insert the playlist block in the editor.
View the front of the website.
Screen Readers
Description of the block:
The block has three different sections.
At the top, there is an image, for example, an album cover, which is set to decorative with an empty alt attribute.
Next to the image is information about the current track: Title, album, and artist.
Below is a native audio HTML element with the standard controls for playing, pausing, volume, etc.
Below the audio element is the tracklist.
It is a list with buttons inside. Each list item and button represents a track and the button text is the song title, artist, and the length of the track.
The currently selected track: The one that is at the top of the block, has
aria-current=true.
Activating a button selects that track.
Instructions
(I have only tested these steps with VoiceOver on mac)
Enable the experimental blocks option from the Gutenberg > Experiments plugin menu.
Upload a couple of audio files through the Media Library.
Edit the files in the Media Library and add title, artist and album to some but not all.
Add a featured image to at least oner file.
Add a playlist block in the block editor.
Focus is moved to an upload button in the block's placeholder.
Instructions about uploading an audio file or selecting one from the media library are announced.
Pressing the right arrow key or the tab key moves the focus from the Upload button to the Media Library button. Each button opens its respective file selection flow.
Confirm that it is possible to select multiple files.
When clicking on the button with the text "Select", the modal for the Media Library is closed.
After adding the audio files, the focus is moved away from the block to the editor canvas and one has to navigate to the block again to select it. (I found this confusing, but learned that other media placeholders do the same)
Navigate to the block in the editor.
The block name is announced.
Pressing the down arrow key or the right arrow key moves focus to the audio element inside the playlist block.
The element type, the track title, the artist name, and the album name are announced if this information is available. Some tracks will only have a title. The same information that is announced is printed above the audio element, available to sighted users.
Pressing the spacebar or Enter key will play the track, and pressing the spacebar or Enter again will pause the track.
Let me know if playing the track in the editor should be disabled.
Pressing the down arrow key will move the focus to the button of the first track in the tracklist. The screen reader should announce the title, the band, the length of the track (if available), and the instructions "Select to play this track".
Pressing the down arrow key again will select the next track in the tracklist, and so on, until you reach the last track.
Replacing or adding tracks
Because the tracks are inner blocks, there will be two block toolbars where you can edit tracks.
From the block toolbar of the inner block, you can replace the individual, single track.
From the block toolbar of the parent block, the playlist, you can add multiple new tracks at once.
Press Shift + Tab to open the block toolbar.
Use the arrow keys to navigate to the button named "Edit" or "Replace" respectively.
Activating the button opens a dropdown with two options: Open Media Library, and Upload.
Each option opens its respective file selection.
When the selection is complete, the screen reader announces that the media has been replaced.
(This is not accurate if you are adding a file, not replacing it, but I don't know if this can be solved?)
The focus is returned to the Edit button.
Block Sidebar
Both the playlist block and the inner track block has options in the block sidebar.
The Playlist has options both in the settings tab and styles tab.
Some of these options are visual, such as padding and margin and hiding the decorative image.
Optionally, test the first option in the settings tab, which is a toggle used to hide and show the tracklist:
With the block selected, press the tab key to move the focus to the sidebar.
Navigate to the block settings sidebar, past the Close button and the button that opens the Settings tab,
and the button that opens the Settings panel.
Find the checkbox option for "Show tracklist". Uncheck the checkbox.
Press the tab key repeatedly until you reach the "Skip to the selected block" button.
With the block selected, confirm that using the down arrow key does not move focus to the tracklist, since it has been turned off in the option.
The track has options in the settings tab.
With the block selected, press the tab key to move the focus to the sidebar.
Navigate to the block settings sidebar, past the Close button and the button that opens the Settings tab,
and the button that opens the Settings panel.
There will be three text input fields where you can update artist, album and title.
Below is an option for selecting an album cover image from the Media Library.