(function(window) {
'use strict';
var proto = Object.create(HTMLElement.prototype);
var isTouch = 'ontouchstart' in window;
proto.createdCallback = function() {
var shadowRoot = this.createShadowRoot();
shadowRoot.innerHTML =
`
`;
var $id = shadowRoot.getElementById.bind(shadowRoot);
this.els = {
container: $id('container'),
previous: $id('previous'),
toggle: $id('toggle'),
next: $id('next')
};
var seeking = false;
this.els.container.addEventListener('contextmenu', (evt) => {
evt.preventDefault();
if (seeking) {
return;
}
var button = evt.target.closest('button');
if (button.id === 'previous' || button.id === 'next') {
seeking = true;
this.dispatchEvent(new CustomEvent('startseek', {
detail: { reverse: button.id === 'previous' }
}));
}
});
this.els.container.addEventListener(isTouch ? 'touchend' : 'mouseup',
(evt) => {
if (seeking) {
evt.preventDefault();
this.dispatchEvent(new CustomEvent('stopseek'));
seeking = false;
}
}
);
this.els.container.addEventListener('click', (evt) => {
var button = evt.target.closest('button');
switch (button.id) {
case 'previous':
case 'next':
this.dispatchEvent(new CustomEvent(button.id));
break;
case 'toggle':
this.paused = !this.paused;
this.dispatchEvent(new CustomEvent(this.paused ? 'pause' : 'play'));
break;
}
});
this.onDOMRetranslated = () => {
document.l10n.translateFragment(shadowRoot);
};
};
proto.attachedCallback = function() {
document.addEventListener('DOMRetranslated', this.onDOMRetranslated);
this.onDOMRetranslated();
};
proto.detachedCallback = function() {
document.removeEventListener('DOMRetranslated', this.onDOMRetranslated);
};
Object.defineProperty(proto, 'paused', {
get: function() {
return this.els.toggle.dataset.icon !== 'pause';
},
set: function(value) {
var paused = !!value;
if (paused === this.paused) {
return;
}
this.els.toggle.dataset.icon = paused ? 'play' : 'pause';
this.els.toggle.dataset.l10nId = paused ? 'playbackPlay' : 'playbackPause';
this.onDOMRetranslated();
}
});
try {
window.MusicControls = document.registerElement('music-controls', {
prototype: proto
});
} catch (e) {
if (e.name !== 'NotSupportedError') {
throw e;
}
}
})(window);