利用者:Yuukin0248/addAFDtoDailyLog.js
表示
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
/**
* addAFDtoDailyLog.js
* 閲覧中の削除依頼サブページが日次ログページに掲載されていない場合
* 半自動でその日の日次ログページに追加
*/
// <nowiki>
{
/** エラー表示 */
const handleError = function (err, msg) {
mw.notify(msg + '詳細はコンソールを参照。');
console.log('error: ', err);
};
/** 参照読み込みされているかどうか判定 */
const isTranscluded = function (pageName) {
const params = {
action: 'query',
titles: pageName,
prop: 'transcludedin',
tinamespace: '4',
format: 'json',
};
return new mw.Api().get(params).then(
function (data) {
const pages = data.query.pages;
for (const key in pages) {
return typeof pages[key].transcludedin !== 'undefined';
}
},
(err) => handleError(err, 'このページを参照読み込みしているページの取得に失敗しました。')
);
};
/** 日次ログページの末尾に削除依頼サブページを追加 */
const addToDailyLog = function (dailyPage, pageName) {
const params = {
action: 'edit',
title: dailyPage,
nocreate: true,
appendtext: `\n{{${pageName}}}`,
summary: `[[${pageName}]]を追加 ([[利用者:Yuukin0248/addAFDtoDailyLog.js|スクリプト]]使用)`,
format: 'json',
};
return new mw.Api().postWithToken('csrf', params);
};
/** 日次ログページに追加したことを削除依頼サブページに報告 */
const informAFDPage = function (dailyPage, pageName) {
const params = {
action: 'edit',
title: pageName,
nocreate: true,
appendtext: `\n* {{報告}} [[${dailyPage}]]に追加しました。--~~~~`,
summary: '日次ログへの追加を報告 ([[利用者:Yuukin0248/addAFDtoDailyLog.js|スクリプト]]使用)',
format: 'json',
};
return new mw.Api().postWithToken('csrf', params);
};
const { wgAction, wgPageName, wgPostEdit } = mw.config.get(['wgAction', 'wgPageName', 'wgPostEdit']);
// 削除依頼サブページを閲覧中であれば
if (wgAction === 'view' && /^Wikipedia:削除依頼\/[^ログ]/.test(wgPageName)) {
// 依存関係を読み込み、画面表示が完了するのを待つ
$.when($.ready, mw.loader.using(['mediawiki.api', 'oojs-ui'])).then(async function () {
// 依頼直後か、依頼がクローズされていなくて参照読み込み数が0ならば
if (wgPostEdit === 'created' || (!$('.xfd-closed').length && !(await isTranscluded(wgPageName)))) {
const now = new Date();
const dailyPage = `Wikipedia:削除依頼/ログ/${now.getFullYear()}年${now.getMonth() + 1}月${now.getDate()}日`;
// 確認メッセージを表示
new OO.ui.confirm(`この削除依頼は日付別ログに掲載されていません。「${dailyPage}」に自動で追加しますか?`)
// 「はい」が選択されたら、日次ログに追加する関数を実行
.then((confirmed) => (confirmed ? addToDailyLog(dailyPage, wgPageName) : false))
// res は JQuery.Promise (truthy) か false
.then(
function (res) {
if (!res) return false;
return wgPostEdit === 'created'
? OO.ui.alert(`「${dailyPage}」に追加しました。`).then(() => false)
: OO.ui.confirm(`「${dailyPage}」に追加しました。削除依頼に自動で報告しますか?`);
},
(err) => handleError(err, '日次ログへの追加に失敗しました。')
)
// 「はい」が選択されたら、閲覧中の削除依頼サブページに「日次ログに追加した」旨を報告する関数を実行
.then((confirmed) => (confirmed ? informAFDPage(dailyPage, wgPageName) : false))
// res は JQuery.Promise (truthy) か false
.then(
(res) => (res ? OO.ui.confirm('報告が完了しました。ページを再読込しますか?') : false),
(err) => handleError(err, '報告に失敗しました。')
)
// 「はい」が選択されたら、ページを再読込
.then((confirmed) => (confirmed ? location.reload() : false));
}
});
}
}
// </nowiki>