[PREVIEW] 2.1.0 - Release Candidate 1
Pre-release
Pre-release
Sv443
released this
28 Aug 12:08
·
690 commits
to develop
since this release
Click to expand the changelog at the time of 0635e65
- Added features:
- Added an experimental feature to like songs and videos of certain channels (on both sites) automatically.
Since this feature is still experimental, to be able to turn it on, you first need to enable advanced mode in the settings.
The button to toggle auto-liking will only show up on channel pages until the next update. Please report any issues you encounter. - Added the ability to show the approximate amount of likes and dislikes on the currently playing song (powered by ReturnYoutubeDislike)
- Added support for themes set by the ThemeSong extension
- Added an experimental feature to like songs and videos of certain channels (on both sites) automatically.
- Changes:
- Made song/video time remembering enabled by default on YT too
- Made reset button in config menu a feature of type
button
- Welcome menu is now shown on YT too
- Added Ctrl modifier key to every lyrics button to open a lyrics search prompt
- Added Shift and Ctrl modifier keys to the above-queue buttons that can skip prompts or customize the behavior
- Arrow key and number key skipping works more reliably and now also in the config menu
- Changed default settings for some features.
After updating, if the values were unchanged from their previous default, they will automatically have the new default value:- Remember Song Time Sites: if set to
YTM only
, it changes toboth sites
- Volume Slider Scroll Sensitivity: if set to
10%
, it changes to4%
- Remember Song Time Sites: if set to
- Made some settings require advanced mode that didn't before:
- Fix spacing/layout issues
- Fix HDR issues
- Disable Dark Reader sites
- Remove share tracking parameter sites
- Placement of list/queue buttons
- Removed broken feature "remove upgrade tab"
- Removed unnecessary experimental feature "advancedLyricsFilter" as the API's native search improved a lot
- Made all integration features configurable and gave them their own config category
- Fixes:
- Adjusted script to UI redesign of playlists
- Fixed song list buttons disappearing when dragging the row around
- Fixed song list buttons not always appearing immediately
- Fixed escape closing all open dialogs instead of one at a time
- Fixed "added to liked songs" toast not being consistently closed
- Fixed messed up time restoration feature on YT because of the
&t
param - Fixed broken autoplay queue delete button after a redesign
- Fixed transparent player bar background in fullscreen being barely readable with thumbnail overlay active
- Fixed thumbnail overlay not updating in fullscreen mode and in the mini player
- Fixed video time restoring breaking after pausing for a longer time
- Fixed "This document requires 'TrustedHTML' assignment" error on Chromium browsers
- Fixed toasts being shown with a 1000x higher duration than intended
Click to expand internal and plugin changes
- Internal Changes:
- Updated the UserUtils library to v7.2.1
- Removed
compareVersions()
andcompareVersionArrays()
in favor of including thecompare-versions
library - Now using a single query parameter for lyrics lookup
- Added license for plugin-related source code, see license-for-plugins.txt
- Added advanced feature to change the startup timeout (only impacts plugin initialization for now)
- Now using a blue logo is instead of the red BetterYTM logo when the script was compiled in development (preview) mode
- Fixed missing configuration keys in development/preview mode instead of potentially breaking the script
- Added Storybook for easier and faster development of components
- Removed the
@updateURL
and@downloadURL
directives because their use is controversial and the script has a built-in update check now - Migrated to pnpm for faster compilation times
- Moved
NanoEmitter
class over to the UserUtils library (it is still re-exported by the plugin interface as before)
- Plugin Changes:
See the contributing guide for the latest documentation of the plugin interface- Added new components:
createLongBtn()
to create a button with an icon and text (works either as normal or as a toggle button)
The design follows that of the subscribe button on YTM's channel pages, but the consistent class names make it easy to style it differently.showToast()
to show a custom toast notification with a message string or element and durationshowIconToast()
to show a custom toast notification with a message string or element, icon and durationcreateRipple()
to create a click ripple animation effect on a given element (experimental)ExImDialog
class for creating a BytmDialog instance that is designed for exporting and importing generic data as a string
- Changed components:
- BytmDialog now has the option
removeListenersOnDestroy
(true by default) to configure removing all event listeners when the dialog is destroyed - BytmDialog's private members and methods have been changed to protected for easier extension (when using TypeScript)
- BytmDialog now has the option
- Added interface functions:
setInnerHtml()
to set the innerHTML property of an element to a sanitized string using the Trusted Types API and the library DOMPurifygetAutoLikeData()
to return the current auto-like data (authenticated function)saveAutoLikeData()
to overwrite the auto-like data (authenticated function)fetchVideoVotes()
to fetch the approximate like and dislike count of a video from Return Youtube DislikegetDomain()
returns the current domain ("yt" or "ytm")waitVideoElementReady()
returns a promise that resolves when the video element is readygetCurrentMediaType()
(on YTM only) returns the current media type ("video" or "song")
- SelectorObserver /
addSelectorListener()
changes:- Added
ytMasthead
instance for the title bar on YT - Renamed all YT-specific instances to have the
yt
prefixwatchFlexy
renamed toytWatchFlexy
watchMetadata
renamed toytWatchMetadata
- Added new SelectorObserver instance
browseResponse
for pages like/channel/{id}
- Added
- Event changes:
- Added events
bytm:featureInitStarted
- emitted when the feature initialization process startsbytm:featureInitialized
- emitted every time a feature has been initialized and is passed the feature's identifier stringbytm:dialogClosed
- emitted when a BytmDialog is closed and gets passed the instancebytm:dialogClosed:id
- emitted only when the dialog with the given ID is closed and gets passed the instancebytm:siteEvent:pathChanged
- emitted whenever the URL path (location.pathname
) changes
- Now the event
bytm:siteEvent:fullscreenToggled
is only emitted once per fullscreen change - Renamed event
bytm:initPlugins
tobytm:registerPlugins
to be more consistent - Changed
event
property returned byregisterPlugin()
from nanoevents Emitter to NanoEmitter instance (see the UserUtils docs)
In practice this changes nothing, but it benefits from plugins having access to the additional methodsonce()
for immediately unsubscribing from an event after it was emitted once andunsubscribeAll()
to remove all event listeners.
- Added events
- Added new components:
This version is almost finished but may still contain a few tiny bugs.
It is highly recommended you fully remove the script and reinstall it manually once the update is released.