mirror of
https://github.com/zen-browser/desktop.git
synced 2025-10-06 18:06:35 +00:00
refactor media controls event handling and improve styling
This commit is contained in:
@@ -51,7 +51,7 @@
|
|||||||
background: var(--zen-primary-color);
|
background: var(--zen-primary-color);
|
||||||
border: none;
|
border: none;
|
||||||
width: calc(var(--progress-height) * 2.5);
|
width: calc(var(--progress-height) * 2.5);
|
||||||
height:calc(var(--progress-height) * 2.5);
|
height: calc(var(--progress-height) * 2.5);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
@@ -66,10 +66,11 @@
|
|||||||
.show-on-hover {
|
.show-on-hover {
|
||||||
max-height: 50px;
|
max-height: 50px;
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
padding-top: 4px;
|
padding-top: 6px;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: translateY(0);
|
transform: translateY(0);
|
||||||
|
pointer-events: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,6 +116,7 @@
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: translateY(10px);
|
transform: translateY(10px);
|
||||||
padding: 0 6px;
|
padding: 0 6px;
|
||||||
|
pointer-events: none;
|
||||||
transition:
|
transition:
|
||||||
max-height 0.2s ease-out,
|
max-height 0.2s ease-out,
|
||||||
opacity 0.2s ease-out,
|
opacity 0.2s ease-out,
|
||||||
@@ -198,7 +200,7 @@
|
|||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
height: 1.1rem;
|
height: 1.1rem;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding-top: 0px;
|
padding-top: 0px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#zen-media-controls-hbox {
|
#zen-media-controls-hbox {
|
||||||
|
@@ -24,6 +24,12 @@ class ZenMediaController {
|
|||||||
this.mediaFocusButton = document.querySelector('#zen-media-focus-button');
|
this.mediaFocusButton = document.querySelector('#zen-media-focus-button');
|
||||||
this.mediaProgressBarContainer = document.querySelector('#zen-media-progress-hbox');
|
this.mediaProgressBarContainer = document.querySelector('#zen-media-progress-hbox');
|
||||||
|
|
||||||
|
this.onPositionstateChange = this._onPositionstateChange.bind(this);
|
||||||
|
this.onPlaybackstateChange = this._onPlaybackstateChange.bind(this);
|
||||||
|
this.onSupportedKeysChange = this._onSupportedKeysChange.bind(this);
|
||||||
|
this.onMetadataChange = this._onMetadataChange.bind(this);
|
||||||
|
this.onDeactivated = this._onDeactivated.bind(this);
|
||||||
|
|
||||||
window.addEventListener('TabSelect', (event) => {
|
window.addEventListener('TabSelect', (event) => {
|
||||||
if (this._currentBrowser) {
|
if (this._currentBrowser) {
|
||||||
if (event.target.linkedBrowser.browserId === this._currentBrowser.browserId) {
|
if (event.target.linkedBrowser.browserId === this._currentBrowser.browserId) {
|
||||||
@@ -71,11 +77,11 @@ class ZenMediaController {
|
|||||||
deinitMediaController(mediaController) {
|
deinitMediaController(mediaController) {
|
||||||
if (!mediaController) return;
|
if (!mediaController) return;
|
||||||
|
|
||||||
mediaController.onpositionstatechange = null;
|
mediaController.removeEventListener('positionstatechange', this.onPositionstateChange);
|
||||||
mediaController.onplaybackstatechange = null;
|
mediaController.removeEventListener('playbackstatechange', this.onPlaybackstateChange);
|
||||||
mediaController.onsupportedkeyschange = null;
|
mediaController.removeEventListener('supportedkeyschange', this.onSupportedKeysChange);
|
||||||
mediaController.onmetadatachange = null;
|
mediaController.removeEventListener('metadatachange', this.onMetadataChange);
|
||||||
mediaController.ondeactivated = null;
|
mediaController.removeEventListener('deactivated', this.onDeactivated);
|
||||||
|
|
||||||
this._currentMediaController = null;
|
this._currentMediaController = null;
|
||||||
this._currentBrowser = null;
|
this._currentBrowser = null;
|
||||||
@@ -85,11 +91,17 @@ class ZenMediaController {
|
|||||||
this._mediaUpdateInterval = null;
|
this._mediaUpdateInterval = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.mediaControlBar.setAttribute('hidden', 'true');
|
gZenUIManager.motion
|
||||||
|
.animate(this.mediaControlBar, {
|
||||||
|
opacity: [1, 0],
|
||||||
|
y: [0, 10],
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
this.mediaControlBar.setAttribute('hidden', 'true');
|
||||||
|
gZenUIManager.updateTabsToolbar();
|
||||||
|
});
|
||||||
this.mediaControlBar.removeAttribute('muted');
|
this.mediaControlBar.removeAttribute('muted');
|
||||||
this.mediaControlBar.classList.remove('playing');
|
this.mediaControlBar.classList.remove('playing');
|
||||||
|
|
||||||
gZenUIManager.updateTabsToolbar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,11 +145,11 @@ class ZenMediaController {
|
|||||||
this._currentBrowser = browser;
|
this._currentBrowser = browser;
|
||||||
}
|
}
|
||||||
|
|
||||||
mediaController.onpositionstatechange = this.onPositionstateChange.bind(this);
|
mediaController.addEventListener('positionstatechange', this.onPositionstateChange);
|
||||||
mediaController.onplaybackstatechange = this.onPlaybackstateChange.bind(this);
|
mediaController.addEventListener('playbackstatechange', this.onPlaybackstateChange);
|
||||||
mediaController.onsupportedkeyschange = this.onSupportedKeysChange.bind(this);
|
mediaController.addEventListener('supportedkeyschange', this.onSupportedKeysChange);
|
||||||
mediaController.onmetadatachange = this.onMetadataChange.bind(this);
|
mediaController.addEventListener('metadatachange', this.onMetadataChange);
|
||||||
mediaController.ondeactivated = this.onDeactivated.bind(this);
|
mediaController.addEventListener('deactivated', this.onDeactivated);
|
||||||
|
|
||||||
const metadata = mediaController.getMetadata();
|
const metadata = mediaController.getMetadata();
|
||||||
const positionState = mediaController.getPositionState();
|
const positionState = mediaController.getPositionState();
|
||||||
@@ -148,7 +160,7 @@ class ZenMediaController {
|
|||||||
/**
|
/**
|
||||||
* @param {Event} event - The deactivation event.
|
* @param {Event} event - The deactivation event.
|
||||||
*/
|
*/
|
||||||
onDeactivated(event) {
|
_onDeactivated(event) {
|
||||||
if (event.target === this._currentMediaController) {
|
if (event.target === this._currentMediaController) {
|
||||||
this.deinitMediaController(event.target);
|
this.deinitMediaController(event.target);
|
||||||
}
|
}
|
||||||
@@ -158,7 +170,7 @@ class ZenMediaController {
|
|||||||
* Updates playback state and UI based on changes.
|
* Updates playback state and UI based on changes.
|
||||||
* @param {Event} event - The playback state change event.
|
* @param {Event} event - The playback state change event.
|
||||||
*/
|
*/
|
||||||
onPlaybackstateChange(event) {
|
_onPlaybackstateChange(event) {
|
||||||
this.mediaControlBar.classList.toggle('playing', event.target.isPlaying);
|
this.mediaControlBar.classList.toggle('playing', event.target.isPlaying);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,7 +178,7 @@ class ZenMediaController {
|
|||||||
* Updates supported keys in the UI.
|
* Updates supported keys in the UI.
|
||||||
* @param {Event} event - The supported keys change event.
|
* @param {Event} event - The supported keys change event.
|
||||||
*/
|
*/
|
||||||
onSupportedKeysChange(event) {
|
_onSupportedKeysChange(event) {
|
||||||
for (const key of this.supportedKeys) {
|
for (const key of this.supportedKeys) {
|
||||||
const button = this.mediaControlBar.querySelector(`#zen-media-${key}-button`);
|
const button = this.mediaControlBar.querySelector(`#zen-media-${key}-button`);
|
||||||
button.disabled = !event.target.supportedKeys.includes(key);
|
button.disabled = !event.target.supportedKeys.includes(key);
|
||||||
@@ -177,7 +189,7 @@ class ZenMediaController {
|
|||||||
* Updates position state and UI when the media position changes.
|
* Updates position state and UI when the media position changes.
|
||||||
* @param {Event} event - The position state change event.
|
* @param {Event} event - The position state change event.
|
||||||
*/
|
*/
|
||||||
onPositionstateChange(event) {
|
_onPositionstateChange(event) {
|
||||||
if (event.target !== this._currentMediaController) return;
|
if (event.target !== this._currentMediaController) return;
|
||||||
|
|
||||||
this._currentPosition = event.position;
|
this._currentPosition = event.position;
|
||||||
@@ -242,7 +254,7 @@ class ZenMediaController {
|
|||||||
* Updates metadata in the UI.
|
* Updates metadata in the UI.
|
||||||
* @param {Event} event - The metadata change event.
|
* @param {Event} event - The metadata change event.
|
||||||
*/
|
*/
|
||||||
onMetadataChange(event) {
|
_onMetadataChange(event) {
|
||||||
const metadata = event.target.getMetadata();
|
const metadata = event.target.getMetadata();
|
||||||
this.mediaTitle.textContent = metadata.title || '';
|
this.mediaTitle.textContent = metadata.title || '';
|
||||||
this.mediaArtist.textContent = metadata.artist || '';
|
this.mediaArtist.textContent = metadata.artist || '';
|
||||||
|
@@ -2,3 +2,10 @@
|
|||||||
BROWSER_CHROME_MANIFESTS += [
|
BROWSER_CHROME_MANIFESTS += [
|
||||||
"tests/browser.toml",
|
"tests/browser.toml",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
FINAL_TARGET_FILES.actors += [
|
||||||
|
"actors/ZenGlanceChild.sys.mjs",
|
||||||
|
"actors/ZenGlanceParent.sys.mjs",
|
||||||
|
"actors/ZenThemeMarketplaceChild.sys.mjs",
|
||||||
|
"actors/ZenThemeMarketplaceParent.sys.mjs",
|
||||||
|
]
|
||||||
|
Reference in New Issue
Block a user