<div class="video-dialog-wrapper"> <div class="close-video-button-wrapper"> <button class="close-video-button" aria-label="Close dialog" on:click="onCloseButtonClicked()"> <span aria-hidden="true">×</span> </button> </div> <video poster="{{poster}}" src="{{src}}" width="{{width}}" height="{{height}}" aria-label="Video: {{description || ''}}" controls /> </div> <style> :global(.video-dialog) { position: fixed; top: 50%; transform: translate(0, -50%); background: #000; padding: 0; border: 3px solid var(--main-border); } :global(.video-dialog-wrapper) { display: flex; flex-direction: column; align-items: center; justify-content: center; max-width: calc(100vw - 40px); } :global(.video-dialog video) { max-width: 100%; } .close-video-button-wrapper { text-align: right; width: 100%; background: var(--nav-bg) } .close-video-button { margin: 0 0 2px; padding: 0; background: none; border: none; } .close-video-button span { padding: 0 15px; font-size: 48px; color: var(--button-primary-text); } :global(dialog.video-dialog::backdrop) { background: rgba(51, 51, 51, 0.8); } :global(dialog.video-dialog + .backdrop) { background: rgba(51, 51, 51, 0.8); } </style> <script> import { importDialogPolyfill } from '../../_utils/asyncModules' export default { oncreate() { // TODO: this hack is for Edge 16, which makes the modal too wide if (typeof setImmediate === 'function' && navigator.userAgent.match(/Edge/)) { this.get('dialog').style.width = `${this.get('width')}px` } this.registration = this.register() }, methods: { async register() { if (typeof HTMLDialogElement === 'undefined') { let dialogPolyfill = await importDialogPolyfill() dialogPolyfill.registerDialog(this.get('dialog')) } }, async showModal() { await this.registration this.get('dialog').showModal() }, onCloseButtonClicked() { this.get('dialog').close() document.body.removeChild(this.get('dialog')) } } } </script>