import { append } from './utils'; export default class Info { constructor(art) { this.art = art; this.init(); } init() { const { refs: { $infoClose }, events: { proxy } } = this.art; proxy($infoClose, 'click', () => { this.hide(); }); } show() { const { $info, $infoPanel } = this.art.refs; $info.style.display = 'block'; if (!$infoPanel.innerHTML) { append($infoPanel, this.creatInfo()); this.getHeader(); } clearTimeout(this.timer); this.loop(); this.art.emit('info:show', $info); } creatInfo() { const infoHtml = []; infoHtml.push(`
Player version:
__VERSION__
`); infoHtml.push(`
Video url:
`); infoHtml.push(`
Video type:
`); infoHtml.push(`
Video size:
`); infoHtml.push(`
Video volume:
`); infoHtml.push(`
Video time:
`); infoHtml.push(`
Video duration:
`); infoHtml.push(`
Video resolution:
x
`); return infoHtml.join(''); } getHeader() { const { option: { url }, refs: { $infoPanel } } = this.art; const types = Array.from($infoPanel.querySelectorAll('[data-head]')); fetch(url, { method: 'HEAD' }).then(data => { types.forEach(item => { const value = data.headers.get(item.dataset.head); item.innerHTML = value !== undefined ? value : 'unknown'; }); }).catch(() => { types.forEach(item => { item.innerHTML = 'unknown'; }); }); } loop() { const { $infoPanel, $video } = this.art.refs; this.timer = setTimeout(() => { const types = Array.from($infoPanel.querySelectorAll('[data-video]')); types.forEach(item => { const value = $video[item.dataset.video]; item.innerHTML = value !== undefined ? value : 'unknown'; }); this.loop(); }, 1000); } hide() { const { $info } = this.art.refs; $info.style.display = 'none'; clearTimeout(this.timer); this.art.emit('info:hide', $info); } }