aboutsummaryrefslogtreecommitdiffstats
path: root/youtube/static/js/plyr-start.js
diff options
context:
space:
mode:
authorAstounds <kirito@disroot.org>2026-04-20 01:22:55 -0400
committerheckyel <heckyel@noreply.git.fridu.us>2026-04-20 01:22:55 -0400
commita0f315be51ef121618e73d5b450c8616c0d11d21 (patch)
treeb68f1268a901ded1a7afd2f12a16aed8d9f3d307 /youtube/static/js/plyr-start.js
parent62a028968e6d9b4e821b6014d6658b8317328fcf (diff)
downloadyt-local-0.5.0.tar.lz
yt-local-0.5.0.tar.xz
yt-local-0.5.0.zip
feature/hls: Add HLS playback support, and refactors documentation for better usability and maintainability. (#1)HEADv0.5.0master
## Overview This PR introduces HLS playback support, improves the player experience, and refactors documentation for better usability and maintainability. ## Key Features ### HLS Playback Support - Add HLS integration via new JavaScript assets: - `hls.min.js` - `plyr.hls.start.js` - `watch.hls.js` - Separate DASH and HLS logic: - `plyr-start.js` → `plyr.dash.start.js` - `watch.js` → `watch.dash.js` - Update templates (`embed.html`, `watch.html`) for conditional player loading ### Native Storyboard Preview - Add `native_player_storyboard` setting in `settings.py` - Implement hover thumbnail preview for native player modes - Add `storyboard-preview.js` ### UI and Player Adjustments - Update templates and styles (`custom_plyr.css`) - Modify backend modules to support new player modes: - `watch.py`, `channel.py`, `util.py`, and related components ### Internationalization - Update translation files: - `messages.po` - `messages.pot` ### Testing and CI - Add and update tests: - `test_shorts.py` - `test_util.py` - Minor CI and release script improvements ## Documentation ### OpenRC Service Guide Rewrite - Restructure `docs/basic-script-openrc/README.md` into: - Prerequisites - Installation - Service Management - Verification - Troubleshooting - Add admonition blocks: - `[!NOTE]`, `[!TIP]`, `[!IMPORTANT]`, `[!WARNING]`, `[!CAUTION]` - Fix log inspection command: ```bash doas tail -f /var/log/ytlocal.log ```` * Add path placeholders and clarify permission requirements * Remove legacy and duplicate content Reviewed-on: https://git.fridu.us/heckyel/yt-local/pulls/1 Co-authored-by: Astounds <kirito@disroot.org> Co-committed-by: Astounds <kirito@disroot.org>
Diffstat (limited to 'youtube/static/js/plyr-start.js')
-rw-r--r--youtube/static/js/plyr-start.js136
1 files changed, 0 insertions, 136 deletions
diff --git a/youtube/static/js/plyr-start.js b/youtube/static/js/plyr-start.js
deleted file mode 100644
index 3838acc..0000000
--- a/youtube/static/js/plyr-start.js
+++ /dev/null
@@ -1,136 +0,0 @@
-(function main() {
- 'use strict';
-
- // Captions
- let captionsActive = false;
- if (data.settings.subtitles_mode === 2 || (data.settings.subtitles_mode === 1 && data.has_manual_captions)) {
- captionsActive = true;
- }
-
- // AutoPlay
- let autoplayActive = data.settings.autoplay_videos || false;
-
- let qualityOptions = [];
- let qualityDefault;
-
- for (let src of data.uni_sources) {
- qualityOptions.push(src.quality_string);
- }
-
- for (let src of data.pair_sources) {
- qualityOptions.push(src.quality_string);
- }
-
- if (data.using_pair_sources) {
- qualityDefault = data.pair_sources[data.pair_idx].quality_string;
- } else if (data.uni_sources.length !== 0) {
- qualityDefault = data.uni_sources[data.uni_idx].quality_string;
- } else {
- qualityDefault = 'None';
- }
-
- // Fix plyr refusing to work with qualities that are strings
- Object.defineProperty(Plyr.prototype, 'quality', {
- set: function (input) {
- const config = this.config.quality;
- const options = this.options.quality;
- let quality = input;
- let updateStorage = true;
-
- if (!options.length) {
- return;
- }
-
- if (!options.includes(quality)) {
- return;
- }
-
- // Update config
- config.selected = quality;
-
- // Set quality
- this.media.quality = quality;
-
- // Save to storage
- if (updateStorage) {
- this.storage.set({ quality });
- }
- },
- });
-
- const playerOptions = {
- // Learning about autoplay permission https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy/autoplay#syntax
- autoplay: autoplayActive,
- disableContextMenu: false,
- captions: {
- active: captionsActive,
- language: data.settings.subtitles_language,
- },
- controls: [
- 'play-large',
- 'play',
- 'progress',
- 'current-time',
- 'duration',
- 'mute',
- 'volume',
- 'captions',
- 'settings',
- 'pip',
- 'airplay',
- 'fullscreen',
- ],
- iconUrl: '/youtube.com/static/modules/plyr/plyr.svg',
- blankVideo: '/youtube.com/static/modules/plyr/blank.webm',
- debug: false,
- storage: { enabled: false },
- quality: {
- default: qualityDefault,
- options: qualityOptions,
- forced: true,
- onChange: function (quality) {
- if (quality == 'None') {
- return;
- }
- if (quality.includes('(integrated)')) {
- for (let i = 0; i < data.uni_sources.length; i++) {
- if (data.uni_sources[i].quality_string == quality) {
- changeQuality({ type: 'uni', index: i });
- return;
- }
- }
- } else {
- for (let i = 0; i < data.pair_sources.length; i++) {
- if (data.pair_sources[i].quality_string == quality) {
- changeQuality({ type: 'pair', index: i });
- return;
- }
- }
- }
- },
- },
- previewThumbnails: {
- enabled: storyboard_url !== null,
- src: [storyboard_url],
- },
- settings: ['captions', 'quality', 'speed', 'loop'],
- tooltips: {
- controls: true,
- },
- }
-
- const player = new Plyr(document.getElementById('js-video-player'), playerOptions);
-
- // disable double click to fullscreen
- // https://github.com/sampotts/plyr/issues/1370#issuecomment-528966795
- player.eventListeners.forEach(function(eventListener) {
- if(eventListener.type === 'dblclick') {
- eventListener.element.removeEventListener(eventListener.type, eventListener.callback, eventListener.options);
- }
- });
-
- // Add .started property, true after the playback has been started
- // Needed so controls won't be hidden before playback has started
- player.started = false;
- player.once('playing', function(){this.started = true});
-})();