mirror of
https://github.com/torappinfo/uweb.git
synced 2024-08-14 23:54:59 +00:00
54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
/**
|
||
* Free the VIDEO elements: get rid of overlays, and enable the native controls.
|
||
*
|
||
* Useful on https://www.instagram.com/ where the stupid overlays prevent
|
||
* showing the controls and triggering the context menu, so you don’t know how
|
||
* long the video will take and can't play the video in full screen mode.
|
||
*
|
||
* @title Free Viddy
|
||
*/
|
||
(function freeviddy() {
|
||
/* Recursively execute the main logic on the document and its sub-documents. */
|
||
function execute(document) {
|
||
document.addEventListener('touchmove mousemove', function debouncer(event) {
|
||
clearTimeout(debouncer.timeoutId);
|
||
debouncer.timeoutId = setTimeout(function () {
|
||
let elementsUnderPointer = document.elementsFromPoint(event.clientX, event.clientY);
|
||
let overlaysToRemove = [];
|
||
|
||
for (let i = 0; i < elementsUnderPointer.length; i++) {
|
||
if ((elementsUnderPointer[i].tagName.toUpperCase() === 'VIDEO' ||
|
||
elementsUnderPointer[i].tagName.toUpperCase() === 'IFRAME') && !elementsUnderPointer[i].xxxJanFreeViddyProcessed) {
|
||
let video = elementsUnderPointer[i];
|
||
video.controls = true;
|
||
video.xxxJanFreeViddyProcessed = true;
|
||
|
||
if (i === 0) {
|
||
} else {
|
||
overlaysToRemove = elementsUnderPointer.slice(0, i);
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (overlaysToRemove.length) {
|
||
overlaysToRemove.forEach(element => element.remove());
|
||
}
|
||
}, 50);
|
||
});
|
||
|
||
/* Recurse for frames and iframes. */
|
||
try {
|
||
Array.from(
|
||
document.querySelectorAll('frame, iframe, object[type^="text/html"], object[type^="application/xhtml+xml"]')
|
||
).forEach(
|
||
elem => execute(elem.contentDocument)
|
||
);
|
||
} catch (e) {
|
||
/* Catch exceptions for out-of-domain access, but do not do anything with them. */
|
||
}
|
||
}
|
||
|
||
execute(document);
|
||
})();
|