new 404 pages
This commit is contained in:
97
docs/js/layout.js
Normal file
97
docs/js/layout.js
Normal file
@@ -0,0 +1,97 @@
|
||||
// Load external script
|
||||
function loadScript(scriptUrl) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const script = document.createElement('script');
|
||||
script.src = scriptUrl;
|
||||
script.async = true;
|
||||
|
||||
script.onload = () => {
|
||||
resolve();
|
||||
script.remove();
|
||||
};
|
||||
|
||||
script.onerror = () => {
|
||||
const errorMsg = `Failed to load script: ${scriptUrl}`;
|
||||
console.error(`[ScriptLoader] ${errorMsg}`);
|
||||
reject(new Error(errorMsg));
|
||||
};
|
||||
|
||||
document.body.appendChild(script);
|
||||
});
|
||||
}
|
||||
|
||||
function loadCSS(url, callback, errorCallback, attributes = {}) {
|
||||
const existingLinks = document.querySelectorAll('link[rel="stylesheet"]');
|
||||
for (let i = 0; i < existingLinks.length; i++) {
|
||||
if (existingLinks[i].href === url || existingLinks[i].href.endsWith(url)) {
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
return existingLinks[i];
|
||||
}
|
||||
}
|
||||
|
||||
const link = document.createElement('link');
|
||||
|
||||
link.rel = attributes.rel || 'stylesheet';
|
||||
link.type = attributes.type || 'text/css';
|
||||
link.href = url;
|
||||
|
||||
if (attributes.media) link.media = attributes.media;
|
||||
if (attributes.id) link.id = attributes.id;
|
||||
if (attributes.crossOrigin) link.crossOrigin = attributes.crossOrigin;
|
||||
|
||||
link.onload = function () {
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
link.onerror = function (err) {
|
||||
if (typeof errorCallback === 'function') {
|
||||
errorCallback(err);
|
||||
} else {
|
||||
console.error(`Failed to load CSS: ${url}`, err);
|
||||
}
|
||||
};
|
||||
|
||||
const head = document.head || document.getElementsByTagName('head')[0];
|
||||
head.appendChild(link);
|
||||
|
||||
return link;
|
||||
}
|
||||
|
||||
function loadCSSAsPromise(url, attributes = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
loadCSS(
|
||||
url,
|
||||
resolve,
|
||||
reject,
|
||||
attributes
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function loadMD5Script() {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (typeof md5 !== 'undefined') {
|
||||
resolve(); // MD5 library already loaded
|
||||
return;
|
||||
}
|
||||
const script = document.createElement('script');
|
||||
script.src = '/js/md5.min.js';
|
||||
script.async = true;
|
||||
script.onload = () => resolve();
|
||||
script.onerror = () => {
|
||||
console.error('Failed to load MD5 library');
|
||||
reject(new Error('MD5 library load failed'));
|
||||
};
|
||||
document.head.appendChild(script);
|
||||
});
|
||||
}
|
||||
|
||||
function createPage() {
|
||||
const main = document.createElement('div');
|
||||
main.id = "page";
|
||||
document.body.appendChild(main);
|
||||
}
|
||||
Reference in New Issue
Block a user