Add support for binding to media element readyState

pull/6843/head
Brad Dougherty 5 years ago
parent ef849217c4
commit 7d9c6f50b5
No known key found for this signature in database
GPG Key ID: 01C8A4AB704F8E1C

@ -22,7 +22,8 @@ const read_only_media_attributes = new Set([
'seeking',
'ended',
'videoHeight',
'videoWidth'
'videoWidth',
'readyState'
]);
export default class Binding extends Node {

@ -873,7 +873,8 @@ export default class Element extends Node {
name === 'muted' ||
name === 'playbackRate' ||
name === 'seeking' ||
name === 'ended'
name === 'ended' ||
name === 'readyState'
) {
if (this.name !== 'audio' && this.name !== 'video') {
return component.error(binding, compiler_errors.invalid_binding_element_with('audio> or <video>', name));

@ -99,7 +99,7 @@ const events = [
event_names: ['loadedmetadata'],
filter: (node: Element, name: string) =>
node.is_media_node() &&
(name === 'buffered' || name === 'seekable')
(name === 'buffered' || name === 'seekable' || name === 'readyState')
},
{
event_names: ['volumechange'],
@ -131,6 +131,12 @@ const events = [
node.is_media_node() &&
(name === 'videoHeight' || name === 'videoWidth')
},
{
event_names: ['loadeddata', 'canplay', 'canplaythrough', 'emptied'],
filter: (node: Element, name: string) =>
node.is_media_node() &&
name === 'readyState'
},
// details event
{

@ -30,18 +30,19 @@ function create_fragment(ctx) {
audio_updating = true;
}
/*audio_timeupdate_handler*/ ctx[13].call(audio);
/*audio_timeupdate_handler*/ ctx[14].call(audio);
}
return {
c() {
audio = element("audio");
if (/*buffered*/ ctx[0] === void 0) add_render_callback(() => /*audio_progress_handler*/ ctx[11].call(audio));
if (/*buffered*/ ctx[0] === void 0 || /*seekable*/ ctx[1] === void 0) add_render_callback(() => /*audio_loadedmetadata_handler*/ ctx[12].call(audio));
if (/*buffered*/ ctx[0] === void 0) add_render_callback(() => /*audio_progress_handler*/ ctx[12].call(audio));
if (/*buffered*/ ctx[0] === void 0 || /*seekable*/ ctx[1] === void 0 || /*readyState*/ ctx[11] === void 0) add_render_callback(() => /*audio_loadedmetadata_handler*/ ctx[13].call(audio));
if (/*played*/ ctx[2] === void 0 || /*currentTime*/ ctx[3] === void 0 || /*ended*/ ctx[10] === void 0) add_render_callback(audio_timeupdate_handler);
if (/*duration*/ ctx[4] === void 0) add_render_callback(() => /*audio_durationchange_handler*/ ctx[14].call(audio));
if (/*seeking*/ ctx[9] === void 0) add_render_callback(() => /*audio_seeking_seeked_handler*/ ctx[18].call(audio));
if (/*ended*/ ctx[10] === void 0) add_render_callback(() => /*audio_ended_handler*/ ctx[19].call(audio));
if (/*duration*/ ctx[4] === void 0) add_render_callback(() => /*audio_durationchange_handler*/ ctx[15].call(audio));
if (/*seeking*/ ctx[9] === void 0) add_render_callback(() => /*audio_seeking_seeked_handler*/ ctx[19].call(audio));
if (/*ended*/ ctx[10] === void 0) add_render_callback(() => /*audio_ended_handler*/ ctx[20].call(audio));
if (/*readyState*/ ctx[11] === void 0) add_render_callback(() => /*audio_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[21].call(audio));
},
m(target, anchor) {
insert(target, audio, anchor);
@ -58,17 +59,21 @@ function create_fragment(ctx) {
if (!mounted) {
dispose = [
listen(audio, "progress", /*audio_progress_handler*/ ctx[11]),
listen(audio, "loadedmetadata", /*audio_loadedmetadata_handler*/ ctx[12]),
listen(audio, "progress", /*audio_progress_handler*/ ctx[12]),
listen(audio, "loadedmetadata", /*audio_loadedmetadata_handler*/ ctx[13]),
listen(audio, "timeupdate", audio_timeupdate_handler),
listen(audio, "durationchange", /*audio_durationchange_handler*/ ctx[14]),
listen(audio, "play", /*audio_play_pause_handler*/ ctx[15]),
listen(audio, "pause", /*audio_play_pause_handler*/ ctx[15]),
listen(audio, "volumechange", /*audio_volumechange_handler*/ ctx[16]),
listen(audio, "ratechange", /*audio_ratechange_handler*/ ctx[17]),
listen(audio, "seeking", /*audio_seeking_seeked_handler*/ ctx[18]),
listen(audio, "seeked", /*audio_seeking_seeked_handler*/ ctx[18]),
listen(audio, "ended", /*audio_ended_handler*/ ctx[19])
listen(audio, "durationchange", /*audio_durationchange_handler*/ ctx[15]),
listen(audio, "play", /*audio_play_pause_handler*/ ctx[16]),
listen(audio, "pause", /*audio_play_pause_handler*/ ctx[16]),
listen(audio, "volumechange", /*audio_volumechange_handler*/ ctx[17]),
listen(audio, "ratechange", /*audio_ratechange_handler*/ ctx[18]),
listen(audio, "seeking", /*audio_seeking_seeked_handler*/ ctx[19]),
listen(audio, "seeked", /*audio_seeking_seeked_handler*/ ctx[19]),
listen(audio, "ended", /*audio_ended_handler*/ ctx[20]),
listen(audio, "loadeddata", /*audio_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[21]),
listen(audio, "canplay", /*audio_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[21]),
listen(audio, "canplaythrough", /*audio_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[21]),
listen(audio, "emptied", /*audio_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[21])
];
mounted = true;
@ -119,6 +124,7 @@ function instance($$self, $$props, $$invalidate) {
let { playbackRate } = $$props;
let { seeking } = $$props;
let { ended } = $$props;
let { readyState } = $$props;
function audio_progress_handler() {
buffered = time_ranges_to_array(this.buffered);
@ -128,8 +134,10 @@ function instance($$self, $$props, $$invalidate) {
function audio_loadedmetadata_handler() {
buffered = time_ranges_to_array(this.buffered);
seekable = time_ranges_to_array(this.seekable);
readyState = this.readyState;
$$invalidate(0, buffered);
$$invalidate(1, seekable);
$$invalidate(11, readyState);
}
function audio_timeupdate_handler() {
@ -173,6 +181,11 @@ function instance($$self, $$props, $$invalidate) {
$$invalidate(10, ended);
}
function audio_loadeddata_canplay_canplaythrough_emptied_handler() {
readyState = this.readyState;
$$invalidate(11, readyState);
}
$$self.$$set = $$props => {
if ('buffered' in $$props) $$invalidate(0, buffered = $$props.buffered);
if ('seekable' in $$props) $$invalidate(1, seekable = $$props.seekable);
@ -185,6 +198,7 @@ function instance($$self, $$props, $$invalidate) {
if ('playbackRate' in $$props) $$invalidate(8, playbackRate = $$props.playbackRate);
if ('seeking' in $$props) $$invalidate(9, seeking = $$props.seeking);
if ('ended' in $$props) $$invalidate(10, ended = $$props.ended);
if ('readyState' in $$props) $$invalidate(11, readyState = $$props.readyState);
};
return [
@ -199,6 +213,7 @@ function instance($$self, $$props, $$invalidate) {
playbackRate,
seeking,
ended,
readyState,
audio_progress_handler,
audio_loadedmetadata_handler,
audio_timeupdate_handler,
@ -207,7 +222,8 @@ function instance($$self, $$props, $$invalidate) {
audio_volumechange_handler,
audio_ratechange_handler,
audio_seeking_seeked_handler,
audio_ended_handler
audio_ended_handler,
audio_loadeddata_canplay_canplaythrough_emptied_handler
];
}
@ -226,7 +242,8 @@ class Component extends SvelteComponent {
muted: 7,
playbackRate: 8,
seeking: 9,
ended: 10
ended: 10,
readyState: 11
});
}
}

@ -10,6 +10,7 @@
export let playbackRate;
export let seeking;
export let ended;
export let readyState;
</script>
<audio bind:buffered bind:seekable bind:played bind:currentTime bind:duration bind:paused bind:volume bind:muted bind:playbackRate bind:seeking bind:ended/>
<audio bind:buffered bind:seekable bind:played bind:currentTime bind:duration bind:paused bind:volume bind:muted bind:playbackRate bind:seeking bind:ended bind:readyState/>

@ -30,23 +30,30 @@ function create_fragment(ctx) {
video_updating = true;
}
/*video_timeupdate_handler*/ ctx[4].call(video);
/*video_timeupdate_handler*/ ctx[5].call(video);
}
return {
c() {
video = element("video");
if (/*videoHeight*/ ctx[1] === void 0 || /*videoWidth*/ ctx[2] === void 0) add_render_callback(() => /*video_resize_handler*/ ctx[5].call(video));
add_render_callback(() => /*video_elementresize_handler*/ ctx[6].call(video));
if (/*videoHeight*/ ctx[1] === void 0 || /*videoWidth*/ ctx[2] === void 0) add_render_callback(() => /*video_resize_handler*/ ctx[6].call(video));
add_render_callback(() => /*video_elementresize_handler*/ ctx[7].call(video));
if (/*readyState*/ ctx[4] === void 0) add_render_callback(() => /*video_loadedmetadata_handler*/ ctx[8].call(video));
if (/*readyState*/ ctx[4] === void 0) add_render_callback(() => /*video_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[9].call(video));
},
m(target, anchor) {
insert(target, video, anchor);
video_resize_listener = add_resize_listener(video, /*video_elementresize_handler*/ ctx[6].bind(video));
video_resize_listener = add_resize_listener(video, /*video_elementresize_handler*/ ctx[7].bind(video));
if (!mounted) {
dispose = [
listen(video, "timeupdate", video_timeupdate_handler),
listen(video, "resize", /*video_resize_handler*/ ctx[5])
listen(video, "resize", /*video_resize_handler*/ ctx[6]),
listen(video, "loadedmetadata", /*video_loadedmetadata_handler*/ ctx[8]),
listen(video, "loadeddata", /*video_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[9]),
listen(video, "canplay", /*video_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[9]),
listen(video, "canplaythrough", /*video_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[9]),
listen(video, "emptied", /*video_loadeddata_canplay_canplaythrough_emptied_handler*/ ctx[9])
];
mounted = true;
@ -75,6 +82,7 @@ function instance($$self, $$props, $$invalidate) {
let { videoHeight } = $$props;
let { videoWidth } = $$props;
let { offsetWidth } = $$props;
let { readyState } = $$props;
function video_timeupdate_handler() {
currentTime = this.currentTime;
@ -93,11 +101,22 @@ function instance($$self, $$props, $$invalidate) {
$$invalidate(3, offsetWidth);
}
function video_loadedmetadata_handler() {
readyState = this.readyState;
$$invalidate(4, readyState);
}
function video_loadeddata_canplay_canplaythrough_emptied_handler() {
readyState = this.readyState;
$$invalidate(4, readyState);
}
$$self.$$set = $$props => {
if ('currentTime' in $$props) $$invalidate(0, currentTime = $$props.currentTime);
if ('videoHeight' in $$props) $$invalidate(1, videoHeight = $$props.videoHeight);
if ('videoWidth' in $$props) $$invalidate(2, videoWidth = $$props.videoWidth);
if ('offsetWidth' in $$props) $$invalidate(3, offsetWidth = $$props.offsetWidth);
if ('readyState' in $$props) $$invalidate(4, readyState = $$props.readyState);
};
return [
@ -105,9 +124,12 @@ function instance($$self, $$props, $$invalidate) {
videoHeight,
videoWidth,
offsetWidth,
readyState,
video_timeupdate_handler,
video_resize_handler,
video_elementresize_handler
video_elementresize_handler,
video_loadedmetadata_handler,
video_loadeddata_canplay_canplaythrough_emptied_handler
];
}
@ -119,7 +141,8 @@ class Component extends SvelteComponent {
currentTime: 0,
videoHeight: 1,
videoWidth: 2,
offsetWidth: 3
offsetWidth: 3,
readyState: 4
});
}
}

@ -3,6 +3,7 @@
export let videoHeight;
export let videoWidth;
export let offsetWidth;
export let readyState;
</script>
<video bind:currentTime bind:videoHeight bind:videoWidth bind:offsetWidth/>
<video bind:currentTime bind:videoHeight bind:videoWidth bind:offsetWidth bind:readyState/>

Loading…
Cancel
Save