[x] fix romaji detection according to the latest result format
[x] filter out deleted lyrics by detecting "Deleted Artist"
const elmBuild = (tag, ...contents) => {
/** @type {HTMLElement} */
const elm = typeof tag === 'string' ? document.createElement(tag) : tag;
for (const content of contents) {
if (!content || typeof content !== 'object' || (content instanceof Node)) {
elm.append(content)
} else if (content.length > 0) {
elm.appendChild(elmBuild(...content))
} else if (content.style) {
Object.assign(elm.style, content.style);
} else if (content.classList) {
elm.classList.add(...content.classList)
} else if (content.attr) {
for (const [attr, val] of Object.entries(content.attr)) elm.setAttribute(attr, val);
} else {
Object.assign(elm, content)
}
}
return elm;
}
const elmBuildNS = (tag, ...contents) => {
const ns = 'http://www.w3.org/2000/svg'
/** @type {Element} */
const elm = typeof tag === 'string' ? document.createElementNS(ns, tag) : tag;
for (const content of contents) {
if (!content || typeof content !== 'object' || (content instanceof Node)) {
elm.append(content)
} else if (content.length > 0) {
elm.appendChild(elmBuildNS(...content))
} else if (content.style) {
Object.assign(elm.style, content.style);
} else if (content.classList) {
elm.classList.add(...content.classList)
} else if (content.attr) {
for (const [attr, val] of Object.entries(content.attr)) elm.setAttributeNS(ns, attr, val);
} else {
Object.assign(elm, content)
}
}
return elm;
}
Coding Example
elmBuild(container,
['h2',
'This script only works in ',
['a', {
'target': '_blank',
'href': 'https://addons.mozilla.org/en-US/firefox/addon/tampermonkey/'
}, 'Tampermonkey'],
],
'Greasemonkey is no longer supported because of this ',
['a', {
'target': '_blank',
'href': 'https://github.com/greasemonkey/greasemonkey/issues/2574'
}, 'bug greasemonkey/issues/2574'],
' in Greasemonkey.',
)
innerHTML
totextContent
innerHTML
toelmBuild
Coding Example
Preview