Files
il/resources/public/js/cljs-runtime/module$node_modules$pixi_DOT_js$lib$assets$loader$parsers$textures$loadVideoTextures.js
2026-07-01 22:38:29 -06:00

102 lines
5.7 KiB
JavaScript

shadow$provide.module$node_modules$pixi_DOT_js$lib$assets$loader$parsers$textures$loadVideoTextures = function(global, require, module, exports) {
function crossOrigin(element, url, crossorigin) {
void 0 !== crossorigin || url.startsWith("data:") ? !1 !== crossorigin && (element.crossOrigin = "string" === typeof crossorigin ? crossorigin : "anonymous") : element.crossOrigin = determineCrossOrigin(url);
}
function preloadVideo(element) {
return new Promise((resolve, reject) => {
function loaded() {
cleanup();
resolve();
}
function error(err) {
cleanup();
reject(err);
}
function cleanup() {
element.removeEventListener("canplaythrough", loaded);
element.removeEventListener("error", error);
}
element.addEventListener("canplaythrough", loaded);
element.addEventListener("error", error);
element.load();
});
}
function determineCrossOrigin(url, loc = globalThis.location) {
if (url.startsWith("data:")) {
return "";
}
loc || (loc = globalThis.location);
url = new URL(url, document.baseURI);
return url.hostname !== loc.hostname || url.port !== loc.port || url.protocol !== loc.protocol ? "anonymous" : "";
}
global = require("module$node_modules$pixi_DOT_js$lib$extensions$Extensions");
var VideoSource = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$VideoSource"), detectVideoAlphaMode = require("module$node_modules$pixi_DOT_js$lib$utils$browser$detectVideoAlphaMode"), getResolutionOfUrl = require("module$node_modules$pixi_DOT_js$lib$utils$network$getResolutionOfUrl"), testVideoFormat = require("module$node_modules$pixi_DOT_js$lib$assets$detections$utils$testVideoFormat"), checkDataUrl = require("module$node_modules$pixi_DOT_js$lib$assets$utils$checkDataUrl"),
checkExtension = require("module$node_modules$pixi_DOT_js$lib$assets$utils$checkExtension"), createTexture = require("module$node_modules$pixi_DOT_js$lib$assets$loader$parsers$textures$utils$createTexture");
"use strict";
const potentialVideoExtensions = ".mp4 .m4v .webm .ogg .ogv .h264 .avi .mov".split(" ");
let validVideoExtensions, validVideoMIMEs;
require = {name:"loadVideo", id:"video", extension:{type:global.ExtensionType.LoadParser, name:"loadVideo"}, test(url) {
if (!validVideoExtensions || !validVideoMIMEs) {
var supportedExtensions = [];
const supportedMimes = [];
for (const ext of potentialVideoExtensions) {
const mimeType = VideoSource.VideoSource.MIME_TYPES[ext.substring(1)] || `video/${ext.substring(1)}`;
testVideoFormat.testVideoFormat(mimeType) && (supportedExtensions.push(ext), supportedMimes.includes(mimeType) || supportedMimes.push(mimeType));
}
const {validVideoExtensions:ve, validVideoMime:vm} = {validVideoExtensions:supportedExtensions, validVideoMime:supportedMimes};
validVideoExtensions = ve;
validVideoMIMEs = vm;
}
supportedExtensions = checkDataUrl.checkDataUrl(url, validVideoMIMEs);
url = checkExtension.checkExtension(url, validVideoExtensions);
return supportedExtensions || url;
}, async load(url, asset, loader) {
const options = {...VideoSource.VideoSource.defaultOptions, resolution:asset.data?.resolution || getResolutionOfUrl.getResolutionOfUrl(url), alphaMode:asset.data?.alphaMode || await detectVideoAlphaMode.detectVideoAlphaMode(), ...asset.data}, videoElement = document.createElement("video"), attributeMap = {preload:!1 !== options.autoLoad ? "auto" : void 0, "webkit-playsinline":!1 !== options.playsinline ? "" : void 0, playsinline:!1 !== options.playsinline ? "" : void 0, muted:!0 === options.muted ?
"" : void 0, loop:!0 === options.loop ? "" : void 0, autoplay:!1 !== options.autoPlay ? "" : void 0};
Object.keys(attributeMap).forEach(key => {
const value = attributeMap[key];
void 0 !== value && videoElement.setAttribute(key, value);
});
!0 === options.muted && (videoElement.muted = !0);
crossOrigin(videoElement, url, options.crossorigin);
const sourceElement = document.createElement("source");
if (options.mime) {
var mime = options.mime;
} else {
url.startsWith("data:") ? mime = url.slice(5, url.indexOf(";")) : url.startsWith("blob:") || (mime = url.split("?")[0].slice(url.lastIndexOf(".") + 1).toLowerCase(), mime = VideoSource.VideoSource.MIME_TYPES[mime] || `video/${mime}`);
}
sourceElement.src = url;
mime && (sourceElement.type = mime);
return new Promise((resolve, reject) => {
async function onCanPlay() {
const base = new VideoSource.VideoSource({...options, resource:videoElement});
cleanup();
asset.data.preload && await preloadVideo(videoElement);
resolve(createTexture.createTexture(base, loader, url));
}
function onError(event) {
cleanup();
reject(event);
}
function cleanup() {
videoElement.removeEventListener("canplay", onCanPlay);
videoElement.removeEventListener("error", onError);
sourceElement.removeEventListener("error", onError);
}
options.preload && !options.autoPlay && videoElement.load();
videoElement.addEventListener("canplay", onCanPlay);
videoElement.addEventListener("error", onError);
sourceElement.addEventListener("error", onError);
videoElement.appendChild(sourceElement);
});
}, unload(texture) {
texture.destroy(!0);
}};
exports.crossOrigin = crossOrigin;
exports.determineCrossOrigin = determineCrossOrigin;
exports.loadVideoTextures = require;
exports.preloadVideo = preloadVideo;
};
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$assets$loader$parsers$textures$loadVideoTextures.js.map