MediaWiki:Gadget-libCachedCode.js:修订间差异
外观
AnnAngela-dbot(留言 | 贡献) 代码变动:103d1a56 - feat: rename (#594) by U:AnnAngela, co-authored-by: GH:github-actions[bot] 标签:由机器人或全自动脚本执行的操作 |
AnnAngela-dbot(留言 | 贡献) 代码变动:103d1a56 - feat: rename (#594) by U:AnnAngela, co-authored-by: GH:github-actions[bot] 标签:由机器人或全自动脚本执行的操作 |
||
| 第9行: | 第9行: | ||
"use strict"; | "use strict"; | ||
(() => { | |||
const localObjectStorage = new LocalObjectStorage("AnnTools-libCachedCode"); | |||
for (const i of Object.keys(localStorage)) { | |||
if (i.startsWith("AnnTools-libCachedCode")) { | |||
localStorage.removeItem(i); | |||
} | } | ||
} | } | ||
const codeToUrl = (code) => { | |||
const blob = new Blob([code], { type: "text/plain" }); | |||
return URL.createObjectURL(blob); | return URL.createObjectURL(blob); | ||
}; | }; | ||
const getCachedCode = async (url) => { | |||
let { code } = localObjectStorage.getItem(`${url}`) || {}; | |||
if (!code) { | |||
code = await (await fetch(url)).text(); | |||
} | |||
localObjectStorage.setItem(`AnnTools-libCachedCode:${url}`, { code, timestamp: Date.now() }); | |||
return code; | |||
}; | }; | ||
const getCachedCodeUrl = async (url) => codeToUrl(await getCachedCode(url)); | |||
const injectCachedCode = async (url, _type) => { | |||
const type = _type.toLowerCase(); | |||
if (["script", "javascript", "js"].includes(type)) { | |||
const script = document.createElement("script"); | |||
script.src = await getCachedCodeUrl(url); | |||
return await new Promise((res) => { | |||
script.addEventListener("load", () => { | |||
res(); | |||
}); | |||
document.head.append(script); | |||
}); | }); | ||
})(); | } | ||
if (["css", "style"].includes(type)) { | |||
mw.loader.addStyleTag(await getCachedCode(url)); | |||
return; | |||
} | |||
}; | }; | ||
const batchInjectCachedCode = (urls, type) => Promise.all(urls.map((url) => injectCachedCode(url, type))); | |||
const expired = Date.now() - 30 * 24 * 60 * 60 * 1000; | |||
for (const k of localObjectStorage.getAllKeys()) { | |||
if (localObjectStorage.getItem(k).timestamp < expired) { | |||
localObjectStorage.removeItem(k); | |||
} | } | ||
} | } | ||
window.libCachedCode = { | window.libCachedCode = { | ||
getCachedCode, | |||
getCachedCodeUrl, | |||
injectCachedCode, | |||
batchInjectCachedCode | batchInjectCachedCode, | ||
}; | }; | ||
})(); | })(); | ||
/* </pre> */ | /* </pre> */ | ||
2025年7月24日 (四) 20:54的版本
/**
* -------------------------------------------------------------------------
* !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
* -------------------------------------------------------------------------
*/
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/libCachedCode/Gadget-libCachedCode.js|user=[[U:AnnAngela]]|co-authors=GH:github-actions[bot]|longId=103d1a563ea4ccc8ff29fb55c9bcd88329a56eb5|shortId=103d1a56|summary=feat: rename (#594)|body=<nowiki>Co-authored-by: github-actions[bot] <41898282+github-actions[bot]📧users.noreply.github.com></nowiki>}}';
/* <pre> */
"use strict";
(() => {
const localObjectStorage = new LocalObjectStorage("AnnTools-libCachedCode");
for (const i of Object.keys(localStorage)) {
if (i.startsWith("AnnTools-libCachedCode")) {
localStorage.removeItem(i);
}
}
const codeToUrl = (code) => {
const blob = new Blob([code], { type: "text/plain" });
return URL.createObjectURL(blob);
};
const getCachedCode = async (url) => {
let { code } = localObjectStorage.getItem(`${url}`) || {};
if (!code) {
code = await (await fetch(url)).text();
}
localObjectStorage.setItem(`AnnTools-libCachedCode:${url}`, { code, timestamp: Date.now() });
return code;
};
const getCachedCodeUrl = async (url) => codeToUrl(await getCachedCode(url));
const injectCachedCode = async (url, _type) => {
const type = _type.toLowerCase();
if (["script", "javascript", "js"].includes(type)) {
const script = document.createElement("script");
script.src = await getCachedCodeUrl(url);
return await new Promise((res) => {
script.addEventListener("load", () => {
res();
});
document.head.append(script);
});
}
if (["css", "style"].includes(type)) {
mw.loader.addStyleTag(await getCachedCode(url));
return;
}
};
const batchInjectCachedCode = (urls, type) => Promise.all(urls.map((url) => injectCachedCode(url, type)));
const expired = Date.now() - 30 * 24 * 60 * 60 * 1000;
for (const k of localObjectStorage.getAllKeys()) {
if (localObjectStorage.getItem(k).timestamp < expired) {
localObjectStorage.removeItem(k);
}
}
window.libCachedCode = {
getCachedCode,
getCachedCodeUrl,
injectCachedCode,
batchInjectCachedCode,
};
})();
/* </pre> */