feat(core): add sub-1x playback rates to defaults (#1231)

This commit is contained in:
rahim
2026-04-06 22:07:09 -07:00
committed by GitHub
parent e1c3689dc0
commit c68c1a3c82
2 changed files with 13 additions and 6 deletions
@@ -6,7 +6,7 @@ import { PlaybackRateButtonCore } from '../playback-rate-button-core';
function createMediaState(overrides: Partial<MediaPlaybackRateState> = {}): MediaPlaybackRateState { function createMediaState(overrides: Partial<MediaPlaybackRateState> = {}): MediaPlaybackRateState {
return { return {
playbackRates: [1, 1.2, 1.5, 1.7, 2], playbackRates: [0.25, 0.5, 0.75, 1, 1.2, 1.5, 1.7, 2],
playbackRate: 1, playbackRate: 1,
setPlaybackRate: vi.fn(), setPlaybackRate: vi.fn(),
...overrides, ...overrides,
@@ -96,7 +96,7 @@ describe('PlaybackRateButtonCore', () => {
const core = new PlaybackRateButtonCore(); const core = new PlaybackRateButtonCore();
const media = createMediaState({ playbackRate: 2 }); const media = createMediaState({ playbackRate: 2 });
core.cycle(media); core.cycle(media);
expect(media.setPlaybackRate).toHaveBeenCalledWith(1); expect(media.setPlaybackRate).toHaveBeenCalledWith(0.25);
}); });
it('advances through the middle of the list', () => { it('advances through the middle of the list', () => {
@@ -108,9 +108,9 @@ describe('PlaybackRateButtonCore', () => {
it('finds the first rate greater than current when not in list', () => { it('finds the first rate greater than current when not in list', () => {
const core = new PlaybackRateButtonCore(); const core = new PlaybackRateButtonCore();
const media = createMediaState({ playbackRate: 0.75 }); const media = createMediaState({ playbackRate: 0.3 });
core.cycle(media); core.cycle(media);
expect(media.setPlaybackRate).toHaveBeenCalledWith(1); expect(media.setPlaybackRate).toHaveBeenCalledWith(0.5);
}); });
it('finds the next greater rate when between list values', () => { it('finds the next greater rate when between list values', () => {
@@ -124,7 +124,14 @@ describe('PlaybackRateButtonCore', () => {
const core = new PlaybackRateButtonCore(); const core = new PlaybackRateButtonCore();
const media = createMediaState({ playbackRate: 3 }); const media = createMediaState({ playbackRate: 3 });
core.cycle(media); core.cycle(media);
expect(media.setPlaybackRate).toHaveBeenCalledWith(1); expect(media.setPlaybackRate).toHaveBeenCalledWith(0.25);
});
it('cycles through sub-1x rates', () => {
const core = new PlaybackRateButtonCore();
const media = createMediaState({ playbackRate: 0.25 });
core.cycle(media);
expect(media.setPlaybackRate).toHaveBeenCalledWith(0.5);
}); });
it('does nothing when disabled', () => { it('does nothing when disabled', () => {
@@ -3,7 +3,7 @@ import { listen } from '@videojs/utils/dom';
import type { MediaPlaybackRateState } from '../../../core/media/state'; import type { MediaPlaybackRateState } from '../../../core/media/state';
import { definePlayerFeature } from '../../feature'; import { definePlayerFeature } from '../../feature';
const DEFAULT_RATES: readonly number[] = [1, 1.2, 1.5, 1.7, 2]; const DEFAULT_RATES: readonly number[] = [0.25, 0.5, 0.75, 1, 1.2, 1.5, 1.7, 2];
export const playbackRateFeature = definePlayerFeature({ export const playbackRateFeature = definePlayerFeature({
name: 'playbackRate', name: 'playbackRate',