利用者:Syunsyunminmin/script/AFDstarter.js
表示
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
// <nowiki>
var pageid = mw.config.get('wgArticleId');
var nsNum = mw.config.get('wgNamespaceNumber');
var pageName = mw.config.get('wgPageName');
var contentModel = mw.config.get('wgPageContentModel');
var api = new mw.Api();
var ad = ' ([[User:Syunsyunminmin/script/AFDstarter|AFDstarter]])';
if (pageid != 0 && (nsNum != -1 || nsNum != 2 || nsNum != 3) && (contentModel == 'wikitext' || contentModel == 'Scribunto')) {
var link = mw.util.addPortletLink("p-cactions", "#", '削除依頼', "ca-afd-start", '削除依頼を開始する');
$(link).click(function (e) {
e.preventDefault();
var content = document.createElement('div');
content.setAttribute('id', 'afdstarter');
// 検索ボックス
var findSources = document.createElement('div');
var findSourcesBox = document.createElement('div');
findSourcesBox.setAttribute('id', 'findsources');
findSourcesBox.textContent = '記事名前空間の場合は、しばらくすると出典検索リンクが表示されます。';
findSources.appendChild(findSourcesBox);
// ページ名を隠すのかのチェックボックス
var hideTitleCheckBox = document.createElement('div');
var ifHideTitle = document.createElement('input');
ifHideTitle.setAttribute('type', 'checkbox');
ifHideTitle.setAttribute('id', 'hidetitle');
ifHideTitle.setAttribute('name', 'hidetitle');
hideTitleCheckBox.appendChild(ifHideTitle);
var hideTitleLabel = document.createElement('label');
hideTitleLabel.setAttribute('for', 'hidetitle');
hideTitleLabel.textContent = 'ページ名を隠す。選択した場合代わりにページIDで作成されます。';
hideTitleCheckBox.appendChild(hideTitleLabel);
// <noinclude>を追加するか
var noincludeCheckBox = document.createElement('div');
var noincludeTitle = document.createElement('input');
noincludeTitle.setAttribute('type', 'checkbox');
noincludeTitle.setAttribute('id', 'noinclude');
noincludeTitle.setAttribute('name', 'noinclude');
noincludeCheckBox.appendChild(noincludeTitle);
var noincludeLabel = document.createElement('label');
noincludeLabel.setAttribute('for', 'noinclude');
noincludeLabel.textContent = '<noinclude>タグを追加する。モジュールの場合は/docページに削除依頼タグを貼り付けるので無効となります。';
noincludeCheckBox.appendChild(noincludeLabel);
// 著作権侵害か
var copyrightsCheckBox = document.createElement('div');
var copyrightsTitle = document.createElement('input');
copyrightsTitle.setAttribute('type', 'checkbox');
copyrightsTitle.setAttribute('id', 'copyrights');
copyrightsTitle.setAttribute('name', 'copyrights');
copyrightsCheckBox.appendChild(copyrightsTitle);
var copyrightsLabel = document.createElement('label');
copyrightsLabel.setAttribute('for', 'copyrights');
copyrightsLabel.textContent = '著作権侵害';
copyrightsCheckBox.appendChild(copyrightsLabel);
// 特記号入力
var markCheck = document.createElement('div');
var markCheckLabel = document.createElement('label');
markCheckLabel.setAttribute('for', 'mark');
markCheckLabel.textContent = '特記号を必要があれば選択してください';
markCheck.appendChild(markCheckLabel);
markCheck.appendChild(document.createElement('br'));
var markCheckBox = document.createElement('div');
markCheckBox.setAttribute('style', 'display: inline-block');
markCheckBox.setAttribute('id', 'mark');
markCheckBox.setAttribute('name', 'mark');
var right = document.createElement('span');
var rightBox = document.createElement('input');
rightBox.setAttribute('type', 'checkbox');
rightBox.setAttribute('id', 'right');
rightBox.setAttribute('name', 'right');
right.appendChild(rightBox);
var rightLabel = document.createElement('label');
rightLabel.setAttribute('for', 'right');
rightLabel.textContent = '権利侵害';
right.appendChild(rightLabel);
markCheckBox.appendChild(right);
var emergency = document.createElement('span');
var emergencyBox = document.createElement('input');
emergencyBox.setAttribute('type', 'checkbox');
emergencyBox.setAttribute('id', 'emergency');
emergencyBox.setAttribute('name', 'emergency');
emergency.appendChild(emergencyBox);
var emergencyLabel = document.createElement('label');
emergencyLabel.setAttribute('for', 'emergency');
emergencyLabel.textContent = '緊急案件';
emergency.appendChild(emergencyLabel);
markCheckBox.appendChild(emergency);
var revision = document.createElement('span');
var revisionBox = document.createElement('input');
revisionBox.setAttribute('type', 'checkbox');
revisionBox.setAttribute('id', 'revision');
revisionBox.setAttribute('name', 'revision');
revision.appendChild(revisionBox);
var revisionLabel = document.createElement('label');
revisionLabel.setAttribute('for', 'revision');
revisionLabel.textContent = '版指定削除';
revision.appendChild(revisionLabel);
markCheckBox.appendChild(revision);
markCheck.appendChild(markCheckBox);
//要約欄にコメント追加
var summarycmt = document.createElement('div');
var summarycmtLabel = document.createElement('label');
summarycmtLabel.setAttribute('for', 'comment');
summarycmtLabel.textContent = '要約欄にコメントを追加する。(履歴補遺など)';
summarycmt.appendChild(summarycmtLabel);
summarycmt.appendChild(document.createElement('br'));
var summarycmtBox = document.createElement('input');
summarycmtBox.setAttribute('type', 'text');
summarycmtBox.setAttribute('style', 'width: 80%');
summarycmtBox.setAttribute('id', 'comment');
summarycmtBox.setAttribute('name', 'comment');
summarycmt.appendChild(summarycmtBox);
// 依頼者票入力
var reqerVote = document.createElement('div');
var reqerVoteLabel = document.createElement('label');
reqerVoteLabel.setAttribute('for', 'reqvote');
reqerVoteLabel.textContent = '依頼者票';
reqerVote.appendChild(reqerVoteLabel);
reqerVote.appendChild(document.createElement('br'));
var reqerVoteSelect = document.createElement('select');
reqerVoteSelect.setAttribute('id', 'reqvote');
reqerVoteSelect.setAttribute('name', 'reqvote');
var defaultoption = document.createElement('option');
defaultoption.setAttribute('disabled', true);
defaultoption.setAttribute('selected', true);
defaultoption.textContent = '依頼者票を選択してください';
reqerVoteSelect.appendChild(defaultoption);
var option1 = document.createElement('option');
option1.setAttribute('value', 'vd');
option1.textContent = '削除';
reqerVoteSelect.appendChild(option1);
var option2 = document.createElement('option');
option2.setAttribute('value', 'vrvd');
option2.textContent = '版指定削除';
reqerVoteSelect.appendChild(option2);
var option3 = document.createElement('option');
option3.setAttribute('value', 'ved');
option3.textContent = '緊急削除';
reqerVoteSelect.appendChild(option3);
var option4 = document.createElement('option');
option4.setAttribute('value', 'vervd');
option4.textContent = '緊急版指定削除';
reqerVoteSelect.appendChild(option4);
var option5 = document.createElement('option');
option5.setAttribute('value', 'srvd');
option5.textContent = '特定版削除(非推奨)';
reqerVoteSelect.appendChild(option5);
reqerVote.appendChild(reqerVoteSelect);
//理由入力欄
var inputReason = document.createElement('div');
var reasonLabel = document.createElement('label');
reasonLabel.setAttribute('for', 'reason');
reasonLabel.textContent = '削除理由';
inputReason.appendChild(reasonLabel);
var reasonArea = document.createElement('textarea');
reasonArea.setAttribute('id', 'reason');
reasonArea.setAttribute('name', 'reason');
reasonArea.setAttribute('rows', '5');
reasonArea.setAttribute('cols', '40');
inputReason.appendChild(reasonArea);
// 入力欄追加
content.appendChild(findSources);
content.appendChild(document.createElement('hr'));
content.appendChild(hideTitleCheckBox);
content.appendChild(noincludeCheckBox);
content.appendChild(copyrightsCheckBox);
content.appendChild(document.createElement('hr'));
content.appendChild(summarycmt);
content.appendChild(document.createElement('hr'));
content.appendChild(markCheck);
content.appendChild(document.createElement('hr'));
content.appendChild(reqerVote);
content.appendChild(document.createElement('hr'));
content.appendChild(inputReason);
document.body.appendChild(content);
$( '#afdstarter' ).dialog({
title:"削除依頼の開始",
width: 500,
buttons: {
"プレビュー": function() {
$('#drpreview').remove();
subpage(true);
},
"提出": function() {subpage(false);}
}
});
findSourcesLinks();
});
}
function subpage (preview) {
//タイトル表示の有無
var isHideTitle = false;
var page = pageName;
if (document.getElementById('hidetitle').checked == true) {
isHideTitle = true;
page = pageid;
}
//理由取得
var reason = document.getElementById("reason").value;
//依頼者票取得
var vote = document.getElementById("reqvote").value;
//処理
var temp = '{{subst:新規削除依頼サブページ' + '|理由=' + reason + '--~~~~';
if (isHideTitle == true) {
temp += '|ID=' + page;
} else {
temp += '|ページ名=' + page;
}
var mark = '|特記号=';
if (document.getElementById('right').checked) {
mark += '*';
}
if (document.getElementById('emergency').checked) {
mark += '緊';
}
if (document.getElementById('revision').checked) {
mark += '特';
}
temp += mark;
switch (vote) {
case 'vd':
temp += '|依頼者票={{AFD|削除}} 依頼者票。--~~~~';
break;
case 'vrvd':
temp += '|依頼者票={{AFD|版指定削除}} 依頼者票。--~~~~';
break;
case 'ved':
temp += '|依頼者票={{AFD|緊急削除}} 依頼者票。--~~~~';
break;
case 'vervd':
temp += '|依頼者票={{AFD|緊急版指定削除}} 依頼者票。--~~~~';
break;
case 'srvd':
temp += '|依頼者票={{AFD|特定版削除}} 依頼者票。--~~~~';
break;
default:
}
temp += '}}';
if (preview == true) {
var params = {
action: 'parse',
title: 'Wikipedia:削除依頼/' + pageName,
text: temp,
prop: 'text',
pst: true,
disablelimitreport: true,
contentmodel: 'wikitext',
formatversion: '2'
};
api.get( params ).done( function ( data ) {
var parsecont = data.parse.text;
var prePage = document.createElement('div');
prePage.setAttribute('id', 'drpreview');
prePage.setAttribute('style', 'background-color: white');
prePage.setAttribute('style', 'border:solid 1px black');
prePage.innerHTML = parsecont;
document.body.appendChild(prePage);
$('#drpreview').dialog({
title: "プレビュー",
width: 600,
close: function(event) {
$(this).dialog('destroy');
}
});
});
return;
} else {
if (reason == '') {
window.alert('削除理由を入力してください。');
}
//サブページ名生成
var title = page;
if (isHideTitle == true) {
title = 'ページID ' + page;
}
title = 'Wikipedia:削除依頼/' + title;
var time = new Date();
//要約欄
var summary = '[[' + pageName + ']]';
if (isHideTitle == true) {
summary = '[[Special:Redirect/page/' + pageid + '|ページID ' + pageid +']]';
}
summary += 'に対する削除依頼を開始' + ad;
// 削除依頼タグ貼り付け処理
if (contentModel != 'wikitext') {
targetPageName = pageName + '/doc';
} else {
targetPageName = pageName;
}
var targetparams = {
action: "query",
format: "json",
prop: "revisions",
titles: targetPageName,
formatversion: "2",
rvprop: "content",
rvslots: "main"
};
api.get( targetparams ).done( function ( targetdata ) {
var targetpage = targetdata.query.pages,t;
var tagReg = new RegExp('\\{\\{Sakujo\\/本体\\|');
var tagReg2 = new RegExp('\\{\\{Sakujo\\/本体\\|' + time.getFullYear() + '年' + (time.getMonth()+1) + '月' + time.getDate() +'日\\|([^\\}]*)\\}\\}');
for (t in targetpage) {
if ('missing' in targetpage[t] === false) {
var pagecontent = targetpage[t].revisions[t].slots.main.content; //対象ページの内容
if (tagReg.test(pagecontent) && tagReg2.test(pagecontent)) {
var chckAfdtag = pagecontent.match(tagReg2);
showmsg ('本日既に削除依頼が提出されています。', true, 'Wikipedia:削除依頼/' + chckAfdtag[1].replace(/[\s\S]*\|(.*)$/, '$1'));
return;
}
}
// サブページ作成
var subparams = {
action: 'query',
format: 'json',
titles: title,
prop: 'info'
};
api.get( subparams ).done( function ( subdata ) {
var pages = subdata.query.pages, p;
for (p in pages) {
if ('missing' in pages[p]) {
//ページに削除依頼タグ追加
addTag(targetPageName, title);
var editparams = {
action: 'edit',
title: title,
text: temp,
createonly: true,
summary: summary,
format: 'json'
};
api.postWithToken( 'csrf', editparams ).done( function ( editdata ) {
if ( editdata.error && editdata.error.info ) {
showmsg('削除依頼サブページ作成中にエラーが発生しました: ' + editdata.error.info, true);
} else {
showmsg('削除依頼サブページが作成されました。', false, title);
//日次ログに追加
addLog(title);
}
});
} else {
var yy = time.getFullYear();
var mm = ('00' + (time.getMonth()+1)).slice(-2);
var dd = ('00' + time.getDate()).slice(-2);
var title2 = title + ' ' + yy + mm + dd;
var subparams2 = {
action: 'query',
format: 'json',
titles: title2,
prop: 'info'
};
api.get( subparams2 ).done( function ( data2 ) {
var pages2 = data2.query.pages, p2;
for (p2 in pages2) {
if ('missing' in pages2[p2]) {
//ページに削除依頼タグ追加
addTag(targetPageName, title2);
var editparams2 = {
action: 'edit',
title: title2,
text: temp,
createonly: true,
summary: summary,
format: 'json'
};
api.postWithToken( 'csrf', editparams2 ).done( function ( editdata2 ) {
if ( editdata2.error && editdata2.error.info ) {
showmsg('削除依頼サブページ作成中にエラーが発生しました: ' + editdata2.error.info, true);
} else {
showmsg('削除依頼サブページが作成されました。', false, title2);
//日次ログに追加
addLog(title2);
}
});
} else {
showmsg('本日既に削除依頼が提出されているようです。', true);
}
}
});
}
}
});
}
});
return;
}
}
function showmsg (text, isError, link) {
if (document.getElementById("afdmsg") == null) {
var msgarealine = document.createElement('hr');
var msgarea = document.createElement('div');
msgarea.setAttribute('style', 'font-weight: bold');
msgarea.setAttribute('id', 'afdmsg');
msgarea.textContent = 'メッセージ';
document.getElementById("afdstarter").appendChild(msgarealine);
document.getElementById("afdstarter").appendChild(msgarea);
}
var newmsg = document.createElement('div');
var newmsgtext = document.createElement('span');
if (isError == true) {
newmsgtext.setAttribute('style', 'color:red');
} else {
newmsgtext.setAttribute('style', 'color:blue');
}
newmsgtext.textContent = text;
newmsg.appendChild(newmsgtext);
if (link != undefined) {
var addlink = document.createElement('a');
addlink.setAttribute('href', mw.util.getUrl(link));
addlink.setAttribute('target', '_blank');
addlink.textContent = link;
newmsg.appendChild(addlink);
}
document.getElementById("afdstarter").appendChild(newmsg);
}
function findSourcesLinks() {
if (mw.config.get('wgNamespaceNumber') == 0) {
var params = {
action: "parse",
format: "json",
title: mw.config.get('wgPageName'),
text: "{{Find sources mainspace}}",
prop: "text",
disablelimitreport: 1,
formatversion: "2"
};
var api = new mw.Api();
api.get(params).done(function (data) {
console.log(data);
console.log(data.parse.text);
document.getElementById("findsources").innerHTML = data.parse.text;
});
}
}
function addLog (subpage) {
var time = new Date();
var logtitle = 'Wikipedia:削除依頼/ログ/' + time.getFullYear() + '年' + (time.getMonth()+1) + '月' + time.getDate() +'日';
var logsummary = '[[' + subpage + ']]を追加' + ad;
var logparam = {
action: 'edit',
title: logtitle,
nocreate: true,
appendtext: '\n{{' + subpage + '}}',
summary: logsummary,
format: 'json'
};
api.postWithToken( 'csrf', logparam ).done( function ( logdata ) {
if ( logdata.error && logdata.error.info ) {
showmsg('日次ログへ追加中にエラーが発生しました: ' + logdata.error.info, true);
} else {
showmsg('日次ログへ追加されました。', false, logtitle);
}
});
}
function addTag (pagetitle, subpagetitle) {
subpagetitle = subpagetitle.replace(/Wikipedia:削除依頼\/(.*)/, '$1');
var summarycomment = document.getElementById("comment").value;
var tagsummary = '削除依頼タグを貼り付け';
tagsummary += (summarycomment != '') ? ': ' + summarycomment : '';
tagsummary += ad;
var addingtag = '{{subst:Sakujo|' + subpagetitle + '}}\n';
addingtag += (document.getElementById('copyrights').checked) ? '{{Copyrights}}\n' : '';
addingtag = (contentModel == 'Scribunto') ? '<includeonly>' + addingtag + '</includeonly>' : addingtag;
addingtag = (document.getElementById('noinclude').checked == true && contentModel != 'Scribunto') ? '<noinclude>' + addingtag + '</noinclude>' : addingtag;
var addtagparams = {
action: 'edit',
title: pagetitle,
nocreate: true,
prependtext: addingtag,
summary: tagsummary,
format: 'json'
};
api.postWithToken( 'csrf', addtagparams ).done( function ( addtagdata ) {
if ( addtagdata.error && addtagdata.error.info ) {
showmsg('削除依頼タグ追加中にエラーが発生しました: ' + addtagdata.error.info, true);
} else {
showmsg('ページに削除依頼タグが追加されました。', false);
}
});
}
//</nowiki>