mirror of
https://github.com/zoriya/v10.git
synced 2026-08-15 10:23:32 +00:00
71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import type { PropertyValues } from '@lit/reactive-element';
|
|
import { PlayButtonCore, PlayButtonDataAttrs } from '@videojs/core';
|
|
import {
|
|
applyElementProps,
|
|
applyStateDataAttrs,
|
|
createButton,
|
|
logMissingFeature,
|
|
selectPlayback,
|
|
} from '@videojs/core/dom';
|
|
|
|
import { playerContext } from '../../player/context';
|
|
import { PlayerController } from '../../player/player-controller';
|
|
import { MediaElement } from '../media-element';
|
|
|
|
export class PlayButtonElement extends MediaElement {
|
|
static readonly tagName = 'media-play-button';
|
|
|
|
static override properties = {
|
|
label: { type: String },
|
|
disabled: { type: Boolean },
|
|
};
|
|
|
|
label = '';
|
|
disabled = false;
|
|
|
|
readonly #core = new PlayButtonCore();
|
|
readonly #state = new PlayerController(this, playerContext, selectPlayback);
|
|
|
|
#disconnect: AbortController | null = null;
|
|
|
|
override connectedCallback(): void {
|
|
super.connectedCallback();
|
|
|
|
this.#disconnect = new AbortController();
|
|
|
|
const buttonProps = createButton({
|
|
onActivate: () => this.#core.toggle(this.#state.value!),
|
|
isDisabled: () => this.disabled || !this.#state.value,
|
|
});
|
|
|
|
applyElementProps(this, buttonProps, this.#disconnect.signal);
|
|
|
|
if (__DEV__ && !this.#state.value) {
|
|
logMissingFeature(PlayButtonElement.tagName, 'playback');
|
|
}
|
|
}
|
|
|
|
override disconnectedCallback(): void {
|
|
super.disconnectedCallback();
|
|
this.#disconnect?.abort();
|
|
this.#disconnect = null;
|
|
}
|
|
|
|
protected override willUpdate(changed: PropertyValues): void {
|
|
super.willUpdate(changed);
|
|
this.#core.setProps(this);
|
|
}
|
|
|
|
protected override update(changed: PropertyValues): void {
|
|
super.update(changed);
|
|
|
|
const media = this.#state.value;
|
|
|
|
if (!media) return;
|
|
|
|
const state = this.#core.getState(media);
|
|
applyElementProps(this, this.#core.getAttrs(state));
|
|
applyStateDataAttrs(this, state, PlayButtonDataAttrs);
|
|
}
|
|
}
|