-
Notifications
You must be signed in to change notification settings - Fork 1.7k
feat: Add Better Fullscreen plugin #4138
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
feat: Add Better Fullscreen plugin #4138
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit
eslint
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace if with ·if·
| if(title && artist && video) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···············ui.lines!.innerHTML·= with ················ui.lines!.innerHTML·=⏎·················
| ui.lines!.innerHTML = '<div class="bfs-empty">Searching...</div>'; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| performFetch(title, artist, video.duration); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ··
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·line.text.includes('...')·||·line.text.includes('♪')·|| with ⏎··············line.text.includes('...')·||⏎··············line.text.includes('♪')·||⏎·············
| const isInst = line.text.includes('...') || line.text.includes('♪') || line.text.toLowerCase().includes('instrumental'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(isInst) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| el.classList.add('instrumental'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| el.innerHTML = ` |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| </div>`; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| let html = `<span>${line.text}</span>`; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ··if with if·
| if(line.romaji) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
| html += `<span class="bfs-romaji">${line.romaji}</span>`; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ··············
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| el.innerHTML = html; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ············
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .perfectSync on an any value.
| const offset = config.perfectSync ? 0.5 : 0; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| const timeMs = (time + offset) * 1000; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.
| domLines.forEach((line: any, idx) => { |
🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of a(n) any typed value.
| if (!line.classList.contains('active')) { |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .classList on an any value.
| if (!line.classList.contains('active')) { |
🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of a(n) any typed value.
| line.classList.add('active'); |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .classList on an any value.
| line.classList.add('active'); |
🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of a(n) any typed value.
| line.scrollIntoView({ behavior: 'smooth', block: 'center' }); |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .scrollIntoView on an any value.
| line.scrollIntoView({ behavior: 'smooth', block: 'center' }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(line.classList.contains('instrumental')) isInstrumental = true; |
🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of a(n) any typed value.
| if(line.classList.contains('instrumental')) isInstrumental = true; |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .classList on an any value.
| if(line.classList.contains('instrumental')) isInstrumental = true; |
🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of a(n) any typed value.
| line.classList.remove('active'); |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .classList on an any value.
| line.classList.remove('active'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(isInstrumental) ui.viz?.classList.add('show'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace title:·string,·artist:·string,·duration:·number with ⏎········title:·string,⏎········artist:·string,⏎········duration:·number,⏎······
| const performFetch = async (title: string, artist: string, duration: number) => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| lyrics = await getLyrics(title, artist, duration, config.romanize); |
🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe argument of type any assigned to a parameter of type boolean.
| lyrics = await getLyrics(title, artist, duration, config.romanize); |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .romanize on an any value.
| lyrics = await getLyrics(title, artist, duration, config.romanize); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| renderLyrics(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace "0:00" with '0:00'
| if (isNaN(s)) return "0:00"; |
🚫 [eslint] <stylistic/quotes> reported by reviewdog 🐶
Strings must use singlequote.
| if (isNaN(s)) return "0:00"; |
🚫 [eslint] <@typescript-eslint/require-await> reported by reviewdog 🐶
Async arrow function has no 'await' expression.
| setInterval(async () => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace document.querySelector('ytmusic-player-bar·.title')·as·HTMLElement with ⏎··········document.querySelector('ytmusic-player-bar·.title')·as·HTMLElement⏎········
| const title = (document.querySelector('ytmusic-player-bar .title') as HTMLElement)?.innerText; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace document.querySelector('ytmusic-player-bar·.byline')·as·HTMLElement with ⏎··········document.querySelector('ytmusic-player-bar·.byline')·as·HTMLElement⏎········
| let artist = (document.querySelector('ytmusic-player-bar .byline') as HTMLElement)?.innerText; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace document.querySelector('.image.ytmusic-player-bar')·as·HTMLImageElement with ⏎··········document.querySelector(⏎············'.image.ytmusic-player-bar',⏎··········)·as·HTMLImageElement⏎········
| const artSrc = (document.querySelector('.image.ytmusic-player-bar') as HTMLImageElement)?.src; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(artist) artist = artist.split(/[•·]/)[0].trim(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| const highRes = artSrc.replace(/w\d+-h\d+/, 'w1200-h1200'); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| if (ui.art.src !== highRes) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| ui.art.src = highRes; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| ui.art.onload = updateColors; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| lastSrc = currentSrc; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| retryCount = 0; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| if (title && artist) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ···············ui.lines!.innerHTML·= with ············ui.lines!.innerHTML·=⏎·············
| ui.lines!.innerHTML = '<div class="bfs-empty">Searching lyrics...</div>'; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ···
| performFetch(title, artist, video.duration); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace => with ·=>·
| document.documentElement.requestFullscreen().catch(()=>{}); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·document.exitFullscreen().catch(()=> with ⏎············document.exitFullscreen().catch(()·=>·
| if (document.fullscreenElement) document.exitFullscreen().catch(()=>{}); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace .getElementById('bfs-close') with ⏎········.getElementById('bfs-close')⏎········
| document.getElementById('bfs-close')?.addEventListener('click', () => toggleFS(false)); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace e with (e)
| window.addEventListener('keydown', e => { |
🚫 [eslint] <stylistic/arrow-parens> reported by reviewdog 🐶
Expected parentheses around arrow function argument.
| window.addEventListener('keydown', e => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(e.key === 'F12') toggleFS(!isFullscreen); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(e.key === 'Escape') toggleFS(false); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace (e.target·!==·ui.settingsBtn·&&·!ui.settingsModal?.contains(e.target·as·Node) with ·(⏎··········e.target·!==·ui.settingsBtn·&&⏎··········!ui.settingsModal?.contains(e.target·as·Node)⏎········
| if(e.target !== ui.settingsBtn && !ui.settingsModal?.contains(e.target as Node)) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| ui.settingsModal?.classList.remove('active'); |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .perfectSync on an any value.
| config.perfectSync = (e.target as HTMLInputElement).checked; |
🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of a(n) any typed value.
| ctx.setConfig(config); |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .setConfig on an any value.
| ctx.setConfig(config); |
🚫 [eslint] <@typescript-eslint/require-await> reported by reviewdog 🐶
Async arrow function has no 'await' expression.
| ui.optRoman?.addEventListener('change', async (e) => { |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .romanize on an any value.
| config.romanize = (e.target as HTMLInputElement).checked; |
🚫 [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog 🐶
Unsafe call of a(n) any typed value.
| ctx.setConfig(config); |
🚫 [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog 🐶
Unsafe member access .setConfig on an any value.
| ctx.setConfig(config); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(title && artist && video) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| ui.lines!.innerHTML = '<div class="bfs-empty">Processing...</div>'; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| performFetch(title, artist, video.duration); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·const·v=document.querySelector('video');·if(v)·v.paused?v.play():v.pause(); with ⏎········const·v·=·document.querySelector('video');⏎········if·(v)·v.paused·?·v.play()·:·v.pause();⏎·····
| ui.playBtn?.addEventListener('click', () => { const v=document.querySelector('video'); if(v) v.paused?v.play():v.pause(); }); |
🚫 [eslint] <@typescript-eslint/no-unused-expressions> reported by reviewdog 🐶
Expected an assignment or function call and instead saw an expression.
| ui.playBtn?.addEventListener('click', () => { const v=document.querySelector('video'); if(v) v.paused?v.play():v.pause(); }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·(document.querySelector('.previous-button')·as·HTMLElement)?.click() with ⏎········(document.querySelector('.previous-button')·as·HTMLElement)?.click(),⏎······
| ui.prevBtn?.addEventListener('click', () => (document.querySelector('.previous-button') as HTMLElement)?.click()); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·(document.querySelector('.next-button')·as·HTMLElement)?.click() with ⏎········(document.querySelector('.next-button')·as·HTMLElement)?.click(),⏎······
| ui.nextBtn?.addEventListener('click', () => (document.querySelector('.next-button') as HTMLElement)?.click()); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ··const·v·=·document.querySelector('video');·if(!v) with const·v·=·document.querySelector('video');⏎········if·(!v)·
| const v = document.querySelector('video'); if(!v)return; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| const rect = ui.seek!.getBoundingClientRect(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| v.currentTime = ((e.clientX - rect.left) / rect.width) * v.duration; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
🚫 [eslint] <stylistic/quotes> reported by reviewdog 🐶
Strings must use singlequote.
| btn.innerHTML = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg>`; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| btn.onclick = (e) => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| e.stopPropagation(); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| toggleFS(true); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(getComputedStyle(artContainer).position === 'static') { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| (artContainer as HTMLElement).style.position = 'relative'; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··········
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ,
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ,
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·text:·string;·timeMs:·number;·romaji?:·string;· with ⏎··text:·string;⏎··timeMs:·number;⏎··romaji?:·string;⏎
| export interface LyricLine { text: string; timeMs: number; romaji?: string; } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·lines?:·LyricLine[];·plain?:·string;·synced:·boolean;· with ⏎··lines?:·LyricLine[];⏎··plain?:·string;⏎··synced:·boolean;⏎
| export interface LyricResult { lines?: LyricLine[]; plain?: string; synced: boolean; } |
🚫 [eslint] <no-control-regex> reported by reviewdog 🐶
Unexpected control character(s) in regular expression: \x00.
| if (!text || /^[\x00-\x7F]*$/.test(text)) return text; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| if (!text || /^[\x00-\x7F]*$/.test(text)) return text; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
🚫 [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog 🐶
Unexpected any. Specify a different type.
| data[0].forEach((chunk: any) => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ··········if with ········if·
| if(Array.isArray(chunk)) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
| const possibleRomaji = chunk[chunk.length - 1]; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·······if·(typeof·possibleRomaji·===·'string'·&&·possibleRomaji·!==·text·&&·!possibleRomaji.includes(text))·{ with ···if·(⏎············typeof·possibleRomaji·===·'string'·&&⏎············possibleRomaji·!==·text·&&⏎············!possibleRomaji.includes(text)
| if (typeof possibleRomaji === 'string' && possibleRomaji !== text && !possibleRomaji.includes(text)) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·········· with ··)·{⏎············
| romajiFull += possibleRomaji + ' '; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·········· with ········
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| return romajiFull.trim(); |
'e' is defined but never used.
| } catch (e) {} |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| .replace(/ - .*?$/, '') |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace line with (line)
| lrc.split('\n').forEach(line => { |
🚫 [eslint] <stylistic/arrow-parens> reported by reviewdog 🐶
Expected parentheses around arrow function argument.
| lrc.split('\n').forEach(line => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace (min·*·60·*·1000)·+·(sec·*·1000) with min·*·60·*·1000·+·sec·*·1000
| if (text) lines.push({ timeMs: (min * 60 * 1000) + (sec * 1000) + ms, text }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace title:·string,·artist:·string,·duration:·number,·romanize:·boolean·=·false with ⏎··title:·string,⏎··artist:·string,⏎··duration:·number,⏎··romanize:·boolean·=·false,⏎
| export const getLyrics = async (title: string, artist: string, duration: number, romanize: boolean = false): Promise<LyricResult | null> => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(!res.ok) return null; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ·
| if(!Array.isArray(list) || list.length === 0) return null; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| const aHasSync = !!a.syncedLyrics; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ·
| const bHasSync = !!b.syncedLyrics; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·······if with ······if·
| if(aHasSync !== bHasSync) return bHasSync ? 1 : -1; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ·return·Math.abs(a.duration·-·targetDur)·-·Math.abs(b.duration·-·targetDur) with return·(⏎········Math.abs(a.duration·-·targetDur)·-·Math.abs(b.duration·-·targetDur)⏎······)
| return Math.abs(a.duration - targetDur) - Math.abs(b.duration - targetDur); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace (best.syncedLyrics) with ·(best.syncedLyrics)⏎·····
| if(best.syncedLyrics) result = { lines: parseLRC(best.syncedLyrics), synced: true }; |
🚫 [eslint] <@typescript-eslint/no-unsafe-argument> reported by reviewdog 🐶
Unsafe argument of type error typed assigned to a parameter of type string.
| if(best.syncedLyrics) result = { lines: parseLRC(best.syncedLyrics), synced: true }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace (best.plainLyrics) with ·(best.plainLyrics)⏎·····
| else if(best.plainLyrics) result = { plain: best.plainLyrics, synced: false }; |
🚫 [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog 🐶
Unsafe assignment of an error typed value.
| else if(best.plainLyrics) result = { plain: best.plainLyrics, synced: false }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| if (result.lines) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
| const promises = result.lines.map(async (line) => { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
| const romaji = await googleRomanize(line.text); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ··········
| if (romaji && romaji.toLowerCase() !== line.text.toLowerCase()) { |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ········
| return { ...line, romaji }; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ················ with ··········
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ······
| return line; |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ····
| }); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ············ with ········
| result.lines = await Promise.all(promises); |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Delete ··
| } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Replace ⏎··}·catch·(e)·{·console.warn('Lyrics·Error:',·e); with ··}·catch·(e)·{⏎····console.warn('Lyrics·Error:',·e);⏎·
pear-desktop/src/plugins/better-fullscreen/lyrics.ts
Lines 106 to 107 in 0164e40
| } catch (e) { console.warn('Lyrics Error:', e); } |
🚫 [eslint] <prettier/prettier> reported by reviewdog 🐶
Insert ⏎
| }; |
Added a new "Better Fullscreen" plugin that provides animated background visuals and synced lyrics.
Features: