Load mediaelement player for videos #2634
parent
e9a612cfab
commit
418de1dabc
@ -0,0 +1,65 @@ |
|||||||
|
import "mediaelement/build/mediaelementplayer.min.css" |
||||||
|
import "mediaelement/full" |
||||||
|
|
||||||
|
const videoSelector = "video:not(.skip), audio:not(.skip)" |
||||||
|
|
||||||
|
const mejsOptions = { |
||||||
|
iconSprite: "/build/libs/mediaelement/mejs-controls.svg", |
||||||
|
} |
||||||
|
|
||||||
|
function newVideosCallback(newVideo) { |
||||||
|
const attrId = newVideo.getAttribute("id") |
||||||
|
|
||||||
|
if (attrId && attrId.startsWith("mejs")) { |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
new MediaElementPlayer(newVideo, mejsOptions) |
||||||
|
} |
||||||
|
|
||||||
|
function addedNodesCallback(newNode) { |
||||||
|
if (!newNode.querySelectorAll) { |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
const newVideos = newNode.querySelectorAll(videoSelector) |
||||||
|
|
||||||
|
if (!newVideos.length) { |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
newVideos.forEach(newVideosCallback) |
||||||
|
} |
||||||
|
|
||||||
|
function observerCallback(mutationList) { |
||||||
|
for (const { type, addedNodes } of mutationList) { |
||||||
|
if ("childList" !== type) { |
||||||
|
continue |
||||||
|
} |
||||||
|
|
||||||
|
addedNodes.forEach(addedNodesCallback) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function loader() { |
||||||
|
const observer = new MutationObserver(observerCallback) |
||||||
|
|
||||||
|
observer.observe(document.querySelector("body"), { |
||||||
|
childList: true, |
||||||
|
subtree: true, |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
function domLoader() { |
||||||
|
document.addEventListener("DOMContentLoaded", function () { |
||||||
|
loader() |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
export function useMediaElementLoader() { |
||||||
|
return { |
||||||
|
loader, |
||||||
|
domLoader, |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue