diff --git a/src/generators/nodes/Element.ts b/src/generators/nodes/Element.ts
index d2b8ba658b..48852c27ea 100644
--- a/src/generators/nodes/Element.ts
+++ b/src/generators/nodes/Element.ts
@@ -760,5 +760,11 @@ const events = [
filter: (node: Element, name: string) =>
node.isMediaNode() &&
(name === 'buffered' || name === 'seekable')
+ },
+ {
+ eventNames: ['volumechange'],
+ filter: (node: Element, name: string) =>
+ node.isMediaNode() &&
+ name === 'volume'
}
];
diff --git a/test/js/samples/media-bindings/expected-bundle.js b/test/js/samples/media-bindings/expected-bundle.js
index fdf8a4f755..8dc24c0f86 100644
--- a/test/js/samples/media-bindings/expected-bundle.js
+++ b/test/js/samples/media-bindings/expected-bundle.js
@@ -226,6 +226,12 @@ function create_main_fragment(state, component) {
component.set({ buffered: timeRangesToArray(audio.buffered), seekable: timeRangesToArray(audio.seekable) });
}
+ function audio_volumechange_handler() {
+ audio_updating = true;
+ component.set({ volume: audio.volume });
+ audio_updating = false;
+ }
+
return {
c: function create() {
audio = createElement("audio");
@@ -243,6 +249,7 @@ function create_main_fragment(state, component) {
if (!('buffered' in state)) component.root._beforecreate.push(audio_progress_handler);
addListener(audio, "loadedmetadata", audio_loadedmetadata_handler);
if (!('buffered' in state && 'seekable' in state)) component.root._beforecreate.push(audio_loadedmetadata_handler);
+ addListener(audio, "volumechange", audio_volumechange_handler);
},
m: function mount(target, anchor) {
@@ -251,7 +258,8 @@ function create_main_fragment(state, component) {
p: function update(changed, state) {
if (!audio_updating && !isNaN(state.currentTime )) audio.currentTime = state.currentTime ;
- if (!audio_updating && audio_is_paused !== (audio_is_paused = state.paused)) audio[audio_is_paused ? "pause" : "play"]();
+ if (!audio_updating && audio_is_paused !== (audio_is_paused = state.paused )) audio[audio_is_paused ? "pause" : "play"]();
+ if (!audio_updating && !isNaN(state.volume)) audio.volume = state.volume;
},
u: function unmount() {
@@ -265,6 +273,7 @@ function create_main_fragment(state, component) {
removeListener(audio, "pause", audio_play_pause_handler);
removeListener(audio, "progress", audio_progress_handler);
removeListener(audio, "loadedmetadata", audio_loadedmetadata_handler);
+ removeListener(audio, "volumechange", audio_volumechange_handler);
}
};
}
diff --git a/test/js/samples/media-bindings/expected.js b/test/js/samples/media-bindings/expected.js
index c1dd10c238..57e4f510c1 100644
--- a/test/js/samples/media-bindings/expected.js
+++ b/test/js/samples/media-bindings/expected.js
@@ -30,6 +30,12 @@ function create_main_fragment(state, component) {
component.set({ buffered: timeRangesToArray(audio.buffered), seekable: timeRangesToArray(audio.seekable) });
}
+ function audio_volumechange_handler() {
+ audio_updating = true;
+ component.set({ volume: audio.volume });
+ audio_updating = false;
+ }
+
return {
c: function create() {
audio = createElement("audio");
@@ -47,6 +53,7 @@ function create_main_fragment(state, component) {
if (!('buffered' in state)) component.root._beforecreate.push(audio_progress_handler);
addListener(audio, "loadedmetadata", audio_loadedmetadata_handler);
if (!('buffered' in state && 'seekable' in state)) component.root._beforecreate.push(audio_loadedmetadata_handler);
+ addListener(audio, "volumechange", audio_volumechange_handler);
},
m: function mount(target, anchor) {
@@ -55,7 +62,8 @@ function create_main_fragment(state, component) {
p: function update(changed, state) {
if (!audio_updating && !isNaN(state.currentTime )) audio.currentTime = state.currentTime ;
- if (!audio_updating && audio_is_paused !== (audio_is_paused = state.paused)) audio[audio_is_paused ? "pause" : "play"]();
+ if (!audio_updating && audio_is_paused !== (audio_is_paused = state.paused )) audio[audio_is_paused ? "pause" : "play"]();
+ if (!audio_updating && !isNaN(state.volume)) audio.volume = state.volume;
},
u: function unmount() {
@@ -69,6 +77,7 @@ function create_main_fragment(state, component) {
removeListener(audio, "pause", audio_play_pause_handler);
removeListener(audio, "progress", audio_progress_handler);
removeListener(audio, "loadedmetadata", audio_loadedmetadata_handler);
+ removeListener(audio, "volumechange", audio_volumechange_handler);
}
};
}
diff --git a/test/js/samples/media-bindings/input.html b/test/js/samples/media-bindings/input.html
index 07a5cc1bc1..e7fe359341 100644
--- a/test/js/samples/media-bindings/input.html
+++ b/test/js/samples/media-bindings/input.html
@@ -1 +1 @@
-
\ No newline at end of file
+