(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);