mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-27 01:21:20 -08:00
fix(docs): [SITE-LOAD-01] serialize example loading and preserve navigation
This commit is contained in:
1 parent
76499e7a3e
commit
647f3e7f12
29 files changed
+1977
-256
No files matched your search
+137
-95
@@ -1,100 +1,142 @@
|
||||
(function () {
|
||||
Artplayer.DEBUG = true;
|
||||
|
||||
function getURLParameters(url) {
|
||||
return (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(function (a, v) {
|
||||
return (a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a;
|
||||
}, {});
|
||||
// Generated by yarn build:site-assets. Do not edit.
|
||||
"use strict";
|
||||
(() => {
|
||||
// packages/artplayer-vitepress/browser/loader.ts
|
||||
function parameters(url) {
|
||||
const result = {};
|
||||
for (const part of new URL(url).search.slice(1).split("&")) {
|
||||
const index = part.indexOf("=");
|
||||
if (index >= 0)
|
||||
result[part.slice(0, index)] = part.slice(index + 1);
|
||||
}
|
||||
|
||||
function getExt(url) {
|
||||
if (url.includes('?')) {
|
||||
return getExt(url.split('?')[0]);
|
||||
}
|
||||
|
||||
if (url.includes('#')) {
|
||||
return getExt(url.split('#')[0]);
|
||||
}
|
||||
|
||||
return url.trim().toLowerCase().split('.').pop();
|
||||
return result;
|
||||
}
|
||||
function suspendDefine(host) {
|
||||
const descriptor = Object.getOwnPropertyDescriptor(host, "define");
|
||||
if (descriptor?.configurable === false) {
|
||||
if (!("value" in descriptor) || !descriptor.writable)
|
||||
throw new Error("Cannot temporarily suspend the AMD loader");
|
||||
Object.defineProperty(host, "define", { value: void 0 });
|
||||
} else {
|
||||
Object.defineProperty(host, "define", { value: void 0, configurable: true, writable: true, enumerable: descriptor?.enumerable ?? true });
|
||||
}
|
||||
|
||||
function loadScript(url) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var define2 = window.define;
|
||||
window.define = undefined;
|
||||
var script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = url;
|
||||
script.onload = function () {
|
||||
window.define = define2;
|
||||
resolve(url);
|
||||
};
|
||||
script.onerror = function () {
|
||||
reject(new Error('Loading script failed:' + url));
|
||||
};
|
||||
document.querySelector('head').appendChild(script);
|
||||
return () => {
|
||||
if (descriptor)
|
||||
Object.defineProperty(host, "define", descriptor);
|
||||
else Reflect.deleteProperty(host, "define");
|
||||
};
|
||||
}
|
||||
function createLibraryLoader(host = window) {
|
||||
const loaded = /* @__PURE__ */ new Set();
|
||||
let queue = Promise.resolve();
|
||||
let cancel;
|
||||
let disposed = false;
|
||||
const ensureActive = () => {
|
||||
if (disposed)
|
||||
throw new Error("Documentation loader was disposed");
|
||||
};
|
||||
function load(url, script) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const element = host.document.createElement(script ? "script" : "link");
|
||||
let restore;
|
||||
let settled = false;
|
||||
function finish(error) {
|
||||
if (settled)
|
||||
return;
|
||||
settled = true;
|
||||
element.removeEventListener("load", success);
|
||||
element.removeEventListener("error", failure);
|
||||
cancel = void 0;
|
||||
try {
|
||||
restore?.();
|
||||
} catch (cause) {
|
||||
error = new Error(`Failed to restore AMD loader: ${String(cause)}`);
|
||||
}
|
||||
if (error) {
|
||||
element.remove();
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
function success() {
|
||||
finish();
|
||||
}
|
||||
function failure() {
|
||||
finish(new Error(`Loading ${script ? "script" : "style"} failed: ${url}`));
|
||||
}
|
||||
element.addEventListener("load", success);
|
||||
element.addEventListener("error", failure);
|
||||
cancel = () => finish(new Error(`Cancelled documentation dependency: ${url}`));
|
||||
try {
|
||||
ensureActive();
|
||||
if (script) {
|
||||
restore = suspendDefine(host);
|
||||
const node = element;
|
||||
node.type = "text/javascript";
|
||||
node.src = url;
|
||||
node.async = false;
|
||||
} else {
|
||||
const node = element;
|
||||
node.rel = "stylesheet";
|
||||
node.href = url;
|
||||
}
|
||||
host.document.head.appendChild(element);
|
||||
} catch (cause) {
|
||||
finish(cause instanceof Error ? cause : new Error(String(cause)));
|
||||
}
|
||||
});
|
||||
}
|
||||
return {
|
||||
loadLibraries(encoded = "") {
|
||||
const work = queue.then(async () => {
|
||||
ensureActive();
|
||||
const urls = decodeURIComponent(encoded).split(/\r?\n/).map((url) => url.trim()).filter(Boolean);
|
||||
const result = [];
|
||||
for (const url of urls) {
|
||||
ensureActive();
|
||||
const absolute = new URL(url, host.location.href);
|
||||
const extension = absolute.pathname.toLowerCase().split(".").pop();
|
||||
if (extension !== "js" && extension !== "css")
|
||||
continue;
|
||||
if (!loaded.has(absolute.href)) {
|
||||
await load(absolute.href, extension === "js");
|
||||
loaded.add(absolute.href);
|
||||
}
|
||||
result.push(url);
|
||||
}
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
||||
function loadStyle(url) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
link.href = url;
|
||||
link.onload = function () {
|
||||
resolve(url);
|
||||
};
|
||||
link.onerror = function () {
|
||||
reject(new Error('Loading style failed:' + url));
|
||||
};
|
||||
document.querySelector('head').appendChild(link);
|
||||
queue = work.catch(() => {
|
||||
});
|
||||
}
|
||||
return work;
|
||||
},
|
||||
dispose() {
|
||||
disposed = true;
|
||||
cancel?.();
|
||||
loaded.clear();
|
||||
}
|
||||
};
|
||||
}
|
||||
async function exampleSource(name, request = fetch) {
|
||||
const response = await request(`./assets/example/${name}.js`);
|
||||
if (!response.ok)
|
||||
throw new Error(`Loading example failed: ${name} (${response.status})`);
|
||||
return response.text();
|
||||
}
|
||||
|
||||
function loadLib(libs) {
|
||||
var libPromise = [];
|
||||
var libsDecode = decodeURIComponent(libs || '');
|
||||
libsDecode
|
||||
.split(/\r?\n/)
|
||||
.forEach(function (url) {
|
||||
var ext = getExt(url);
|
||||
if (ext === 'js') {
|
||||
libPromise.push(loadScript(url));
|
||||
} else if (ext === 'css') {
|
||||
libPromise.push(loadStyle(url));
|
||||
}
|
||||
});
|
||||
return Promise.all(libPromise);
|
||||
}
|
||||
|
||||
function runExample(name) {
|
||||
fetch('./assets/example/' + name + '.js')
|
||||
.then(function (response) {
|
||||
return response.text();
|
||||
})
|
||||
.then(function (text) {
|
||||
eval(text);
|
||||
})
|
||||
}
|
||||
|
||||
function loadCode(code, example) {
|
||||
if (example) {
|
||||
runExample(example);
|
||||
} else if (code) {
|
||||
eval(decodeURIComponent(code).trim());
|
||||
} else {
|
||||
runExample('mobile');
|
||||
}
|
||||
}
|
||||
|
||||
var _getURLParameters = getURLParameters(window.location.href),
|
||||
code = _getURLParameters.code,
|
||||
libs = _getURLParameters.libs;
|
||||
example = _getURLParameters.example;
|
||||
|
||||
loadLib(libs)
|
||||
.then(function () {
|
||||
loadCode(code, example);
|
||||
})
|
||||
})();
|
||||
// packages/artplayer-vitepress/browser/mobile.ts
|
||||
window.Artplayer.DEBUG = true;
|
||||
var loader = createLibraryLoader();
|
||||
window.addEventListener("pagehide", (event) => {
|
||||
if (!event.persisted)
|
||||
loader.dispose();
|
||||
});
|
||||
async function start() {
|
||||
const { code, libs, example } = parameters(location.href);
|
||||
await loader.loadLibraries(libs);
|
||||
const source = example ? await exampleSource(example) : code ? decodeURIComponent(code).trim() : await exampleSource("mobile");
|
||||
new Function(source)();
|
||||
}
|
||||
start().catch((error) => console.error("Failed to initialize mobile example:", error));
|
||||
})();
|
||||
Reference in new issue
Block a user