Skip to content

[PREVIEW] 2.1.0 - Prerelease 1

Pre-release
Pre-release
Compare
Choose a tag to compare
@Sv443 Sv443 released this 04 Aug 23:03
· 734 commits to develop since this release

⚠ This is an experimental version ⚠

Features might still be unstable or unfinished, please check back later for the finished release.
Your userscript extension should automatically update the script to the release version once it's out.
See pull request #76 for updates.


Click to expand the changelog at the time of cb538ab

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)

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 to both sites
    • Volume Slider Scroll Sensitivity: if set to 10%, it changes to 4%
  • 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

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

Internal Changes:

  • Removed compareVersions() and compareVersionArrays() in favor of including the compare-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
  • SelectorObserver changes:
    • Added ytMasthead instance for the title bar on YT
    • Renamed all YT-specific instances to have the yt prefix
      • watchFlexy renamed to ytWatchFlexy
      • watchMetadata renamed to ytWatchMetadata
  • 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

Plugin Changes:

  • 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 duration
    • showIconToast() to show a custom toast notification with a message string or element, icon and duration
    • createRipple() 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)
  • Added interface functions:
    • getAutoLikeData() 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 Dislike
  • Added new SelectorObserver instance browseResponse for pages like /channel/{id}
  • Renamed event bytm:initPlugins to bytm:registerPlugins to be more consistent
  • Added events
    • bytm:featureInitStarted - emitted when the feature initialization process starts
    • bytm:featureInitialized - emitted every time a feature has been initialized and is passed the feature's identifier string
    • bytm:dialogClosed - emitted when a BytmDialog is closed and gets passed the instance
    • bytm:dialogClosed:id - emitted only when the dialog with the given ID is closed and gets passed the instance
    • bytm:siteEvent:pathChanged - emitted whenever the URL path (location.pathname) changes
  • Now the event bytm:siteEvent:fullscreenToggled is only emitted once per fullscreen change
  • Changed event property returned by registerPlugin() from nanoevents Emitter to NanoEmitter instance (see src/utils/NanoEmitter.ts)
    In practice this changes nothing, but it benefits from plugins having access to the additional methods once() for immediately unsubscribing from an event after it was emitted once and unsubscribeAll() to remove all event listeners.