< 사용자:낙엽1124 | 스크립트
브라우저에서 페:한줄인용을 연 후 디버그 콘솔창에 붙여넣으면 바로 저장까지 되는 스크립트입니다. ES6 문법을 사용하고 있어 미디어위키 소도구나 사용자 스크립트로는 아직 사용할 수 없습니다(T75714
).
- 문단 제목의 링크가 넘겨주기라면 수정합니다.
- 문단 순서를 수정합니다.
let helper = async () => {
const api = new mw.Api();
const titles = Array.from(document.querySelectorAll(".mw-redirect"))
.map(node => node.innerText)
.join("|");
const redirectionMap = {};
let data = await api.get({
action: "query",
prop: "links",
titles: titles
});
let redirects = data.query.pages;
let plcontinue = data.continue && data.continue.plcontinue;
for (const k in redirects) {
if (redirects[k].links === undefined) {
break;
}
redirectionMap[redirects[k].title] = new mw.Title(
redirects[k].links[0].title,
redirects[k].links[0].ns
).getPrefixedText();
}
while (plcontinue) {
data = await api.get({
action: "query",
prop: "links",
titles: titles,
plcontinue: plcontinue
});
redirects = data.query.pages;
plcontinue = data.continue && data.continue.plcontinue;
for (const k in redirects) {
if (redirects[k].links === undefined) {
break;
}
redirectionMap[redirects[k].title] = new mw.Title(
redirects[k].links[0].title,
redirects[k].links[0].ns
).getPrefixedText();
}
}
let wikitext = (await api.get({
action: "parse",
page: "페:한줄인용",
prop: "wikitext"
})).parse.wikitext["*"];
const sectionRegExp = /^=+\s*\[*([^=\]\[]+)\]*\s*=+$\n+((?:^\*.+\n)+)/gm;
const sections = [];
let match;
while ((match = sectionRegExp.exec(wikitext)) != null) {
const keys = Object.keys(redirectionMap);
let i = keys.indexOf(match[1]);
let title = i >= 0 ? redirectionMap[keys[i]] : match[1];
sections.push([title, match[2]]);
}
sections.sort((a, b) => {
return a[0].replace(" ", "").localeCompare(b[0].replace(" ", ""), "ko");
});
wikitext = wikitext.replace(
/^=(.+\n+)+/m,
sections
.map(s => {
return `== [[${s[0]}]] ==\n${s[1]}`;
})
.join("\n")
);
api.edit("페:한줄인용", () => {
return { summary: "정렬 및 넘겨주기 링크 수정([[특수:넘겨주기/page/36286|스크립트]] 사용)", text: wikitext };
});
};
helper();