MediaWiki:Common.js:修订间差异
外观
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */ | /* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */ | ||
(function () { | (function () { | ||
if ( | if (window.SLOADED) { | ||
window.SLOADED = {} | window.SLOADED = {}; | ||
window.RELOAD = true; | window.RELOAD = true; | ||
} else { | } else { | ||
| 第24行: | 第25行: | ||
} | } | ||
function hack_mw(mw) { | function hack_mw(mw) { | ||
mw.loader.registerOne = function (module, version, dependencies, group, source, skip) { | var registry = mw.loader.moduleRegistry; | ||
mw.loader.registerOne = function ( | |||
module, | |||
version, | |||
dependencies, | |||
group, | |||
source, | |||
skip, | |||
) { | |||
registry[module] = { | registry[module] = { | ||
// Exposed to execute() for mw.loader.impl() closures. | // Exposed to execute() for mw.loader.impl() closures. | ||
// Import happens via require(). | // Import happens via require(). | ||
module: { | module: { | ||
exports: {} | exports: {}, | ||
}, | }, | ||
// module.export objects for each package file inside this module | // module.export objects for each package file inside this module | ||
packageExports: {}, | packageExports: {}, | ||
version: version || | version: version || "", | ||
dependencies: dependencies || [], | dependencies: dependencies || [], | ||
group: typeof group === | group: typeof group === "undefined" ? null : group, | ||
source: typeof source === | source: typeof source === "string" ? source : "local", | ||
state: | state: "registered", | ||
skip: typeof skip === | skip: typeof skip === "string" ? skip : null, | ||
}; | }; | ||
}; | }; | ||
function splitModuleKey(key) { | |||
var index = key.lastIndexOf('@'); | |||
if (index === -1 || index === 0) { | |||
return { | |||
name: key, | |||
version: '' | |||
}; | |||
} | |||
return { | |||
name: key.slice(0, index), | |||
version: key.slice(index + 1) | |||
}; | |||
} | |||
function setAndPropagate(module, state) { | |||
registry[module].state = state; | |||
if (state === 'ready') { | |||
store.add(module); | |||
} else if (state === 'error' || state === 'missing') { | |||
errorModules.push(module); | |||
} else if (state !== 'loaded') { | |||
return; | |||
} | |||
if (willPropagate) { | |||
return; | |||
} | |||
willPropagate = true; | |||
mw.requestIdleCallback(doPropagation, { | |||
timeout: 1 | |||
}); | |||
} | |||
mw.loader.impl = function (declarator) { | mw.loader.impl = function (declarator) { | ||
var data = declarator(), | var data = declarator(), | ||
| 第70行: | 第109行: | ||
registry[name].deprecationWarning = deprecationWarning; | registry[name].deprecationWarning = deprecationWarning; | ||
// The module may already have been marked as erroneous | // The module may already have been marked as erroneous | ||
if (registry[name].state !== | if ( | ||
setAndPropagate(name, | registry[name].state !== "error" && | ||
registry[name].state !== "missing" | |||
) { | |||
setAndPropagate(name, "loaded"); | |||
} | } | ||
}; | }; | ||
mw.loader.implement = function (module, script, style, messages, templates, deprecationWarning) { | mw.loader.implement = function ( | ||
module, | |||
script, | |||
style, | |||
messages, | |||
templates, | |||
deprecationWarning, | |||
) { | |||
var split = splitModuleKey(module), | var split = splitModuleKey(module), | ||
name = split.name, | name = split.name, | ||
| 第91行: | 第140行: | ||
registry[name].deprecationWarning = deprecationWarning; | registry[name].deprecationWarning = deprecationWarning; | ||
// The module may already have been marked as erroneous | // The module may already have been marked as erroneous | ||
if (registry[name].state !== | if ( | ||
setAndPropagate(name, | registry[name].state !== "error" && | ||
registry[name].state !== "missing" | |||
) { | |||
setAndPropagate(name, "loaded"); | |||
} | } | ||
} | }; | ||
document.querySelector('script[async][src*="startup"]').dataset.turbo_temporary = "turbo_twmporary"; | document.querySelector( | ||
'script[async][src*="startup"]', | |||
).dataset.turbo_temporary = "turbo_twmporary"; | |||
} | } | ||
// library functions | // library functions | ||
function loadScript(url, options = {}, dataset = {}) { | function loadScript(url, options = {}, dataset = {}) { | ||
return new Promise((resolve, reject) => { | return new Promise((resolve, reject) => { | ||
if (window.SLOADED[url]) resolve() | if (window.SLOADED[url]) resolve(); | ||
const script = document.createElement( | const script = document.createElement("script"); | ||
script.src = url; | script.src = url; | ||
script.async = "async"; | script.async = "async"; | ||
Object.assign(script, options); | Object.assign(script, options); | ||
Object.assign(script.dataset, dataset); | Object.assign(script.dataset, dataset); | ||
script.onload = () => { window.SLOADED[url] = true; resolve() }; | script.onload = () => { | ||
script.onerror = (e) => reject(e) | window.SLOADED[url] = true; | ||
resolve(); | |||
}; | |||
script.onerror = (e) => reject(e); | |||
document.head.appendChild(script); | document.head.appendChild(script); | ||
}); | }); | ||
} | } | ||
hack_mw(mw); | hack_mw(mw); | ||
loadScript("https://cdnjs.cloudflare.com/ajax/libs/parallax/3.1.0/parallax.min.js").then(function () { | loadScript( | ||
"https://cdnjs.cloudflare.com/ajax/libs/parallax/3.1.0/parallax.min.js", | |||
).then(function () { | |||
inject_parallax(document); | inject_parallax(document); | ||
new Parallax(scene); | new Parallax(scene); | ||
}); | }); | ||
loadScript("https://cdn.jsdelivr.net/npm/@hotwired/turbo@latest/dist/turbo.es2017-esm.min.js", { type: "module" }); | loadScript( | ||
"https://cdn.jsdelivr.net/npm/@hotwired/turbo@latest/dist/turbo.es2017-esm.min.js", | |||
})() | { type: "module" }, | ||
); | |||
})(); | |||
2026年8月20日 (四) 17:13的版本
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
(function () {
if (window.SLOADED) {
window.SLOADED = {};
window.RELOAD = true;
} else {
window.RELOAD = false;
}
let scene;
function inject_parallax(document) {
scene = document.createElement("div");
document.body.appendChild(scene);
scene.id = "scene";
scene.dataset.turboPermanent = "true";
scene.style.zIndex = -100;
scene.style.position = "fixed";
scene.id = "parallax-bg";
scene.style.inset = "-300px";
var img = document.createElement("img");
scene.appendChild(img);
img.src = "/_nuxt/bg-1.DbZGBWF5.jpg";
img.dataset.depth = 0.5;
}
function hack_mw(mw) {
var registry = mw.loader.moduleRegistry;
mw.loader.registerOne = function (
module,
version,
dependencies,
group,
source,
skip,
) {
registry[module] = {
// Exposed to execute() for mw.loader.impl() closures.
// Import happens via require().
module: {
exports: {},
},
// module.export objects for each package file inside this module
packageExports: {},
version: version || "",
dependencies: dependencies || [],
group: typeof group === "undefined" ? null : group,
source: typeof source === "string" ? source : "local",
state: "registered",
skip: typeof skip === "string" ? skip : null,
};
};
function splitModuleKey(key) {
var index = key.lastIndexOf('@');
if (index === -1 || index === 0) {
return {
name: key,
version: ''
};
}
return {
name: key.slice(0, index),
version: key.slice(index + 1)
};
}
function setAndPropagate(module, state) {
registry[module].state = state;
if (state === 'ready') {
store.add(module);
} else if (state === 'error' || state === 'missing') {
errorModules.push(module);
} else if (state !== 'loaded') {
return;
}
if (willPropagate) {
return;
}
willPropagate = true;
mw.requestIdleCallback(doPropagation, {
timeout: 1
});
}
mw.loader.impl = function (declarator) {
var data = declarator(),
module = data[0],
script = data[1] || null,
style = data[2] || null,
messages = data[3] || null,
templates = data[4] || null,
deprecationWarning = data[5] || null,
split = splitModuleKey(module),
name = split.name,
version = split.version;
// Automatically register module
if (!(name in registry)) {
mw.loader.register(name);
}
// Without this reset, if there is a version mismatch between the
// requested and received module version, then mw.loader.store would
// cache the response under the requested key. Thus poisoning the cache
// indefinitely with a stale value. (T117587)
registry[name].version = version;
// Attach components
registry[name].declarator = declarator;
registry[name].script = script;
registry[name].style = style;
registry[name].messages = messages;
registry[name].templates = templates;
registry[name].deprecationWarning = deprecationWarning;
// The module may already have been marked as erroneous
if (
registry[name].state !== "error" &&
registry[name].state !== "missing"
) {
setAndPropagate(name, "loaded");
}
};
mw.loader.implement = function (
module,
script,
style,
messages,
templates,
deprecationWarning,
) {
var split = splitModuleKey(module),
name = split.name,
version = split.version;
// Automatically register module
if (!(name in registry)) {
mw.loader.register(name);
}
registry[name].version = version;
registry[name].declarator = null; // not supported
registry[name].script = script;
registry[name].style = style;
registry[name].messages = messages;
registry[name].templates = templates;
registry[name].deprecationWarning = deprecationWarning;
// The module may already have been marked as erroneous
if (
registry[name].state !== "error" &&
registry[name].state !== "missing"
) {
setAndPropagate(name, "loaded");
}
};
document.querySelector(
'script[async][src*="startup"]',
).dataset.turbo_temporary = "turbo_twmporary";
}
// library functions
function loadScript(url, options = {}, dataset = {}) {
return new Promise((resolve, reject) => {
if (window.SLOADED[url]) resolve();
const script = document.createElement("script");
script.src = url;
script.async = "async";
Object.assign(script, options);
Object.assign(script.dataset, dataset);
script.onload = () => {
window.SLOADED[url] = true;
resolve();
};
script.onerror = (e) => reject(e);
document.head.appendChild(script);
});
}
hack_mw(mw);
loadScript(
"https://cdnjs.cloudflare.com/ajax/libs/parallax/3.1.0/parallax.min.js",
).then(function () {
inject_parallax(document);
new Parallax(scene);
});
loadScript(
"https://cdn.jsdelivr.net/npm/@hotwired/turbo@latest/dist/turbo.es2017-esm.min.js",
{ type: "module" },
);
})();