「利用者:Dragoniez/scripts/AN Reporter.js」の版間の差分
削除された内容 追加された内容
v1.8 logid関連のバグ修正・仕様変更 |
v2.0: WP:AN/Sへの報告に対応 |
||
2行目:
* AN Reporter (ANR)
* Author: Dragoniez
* Version:
*************************************/
//<nowiki>
// Run the script only after Select2, jQuery UI, and the DOM are loaded
$.when(
$.getScript('https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js'),
230 ⟶ 231行目:
` <option selected disabled hidden>選択してください</option>` +
` <option>${ANI}</option>` +
` <option>${AN3RR}</option>` +
` </select>` +
310 ⟶ 311行目:
var pageToEdit = $('#anr-target-options').children('option').filter(':selected').text();
var sectionToEdit = '選択してください';
var reportToANS = false;
if (pageToEdit === ANI) { // If WP:AN/I is selected as the target page to edit
sectionToEdit = $('#anr-section-options-i').children('option').filter(':selected').text();
} else if
reportToANS = true;
if (ANSOptSelected === 'Iccic系 (Iccic)') {
pageToEdit = Iccic;
sectionToEdit = '新規依頼';
} else if (ANSOptSelected === 'いせちか系 (ISECHIKA)') {
pageToEdit = ISECHIKA;
sectionToEdit = '新規依頼';
} else if (ANSOptSelected === '影武者系(KAGE)') {
pageToEdit = KAGE;
sectionToEdit = '新規依頼';
} else if (ANSOptSelected === '清島達郎系 (清島、KIYOSHIMA)') {
pageToEdit = KIYOSHIMA;
sectionToEdit = '新規依頼';
} else if (ANSOptSelected === '真珠王子系(SHINJU)') {
pageToEdit = SHINJU;
sectionToEdit = '新規依頼';
} else {
sectionToEdit = ANSOptSelected;
}
} else if (pageToEdit === AN3RR) { // If WP:AN/3RR is selected as the target page to edit
sectionToEdit = '3RR';
}
333 ⟶ 361行目:
var msgEditing =
' <div class="anr-editing">' +
' <p>
' </div>';
$dialog.find('form').css('display', 'none'); // Hide dialog content
340 ⟶ 368行目:
$dialog.append($(msgEditing));
//
const UserAN = '{{UserAN|t=TYPE|USER}}';
var reason = trimA($('#anr-reason-text').val());
if (reason.substring(reason.length - 4) !== '~~~~') { // If reason doesn't contain signature, add one
reason = reason + '--~~~~';
}
// Get edit summary
const scriptAd = ' ([[User:Dragoniez/AN Reporter|AN Reporter]])';
const editSummarySection = '/*' + sectionToEdit + '*/';
348 ⟶ 381行目:
var editSummary =
trimA($('#anr-summary-text').val()) === '' ?
editSummarySection + genEditSummary() + scriptAd:
editSummarySection + trimA($('#anr-summary-text').val()) + scriptAd;
// Get text to add to the page
368 ⟶ 396行目:
// For debugging
//pageToEdit = 'User:Dragoniez/
//editSummary = 'Test edit via mediawiki API';
// Get the wiki pagename for link
var wikiPagename = pageToEdit + '#' + sectionToEdit;
// Get
new mw.Api().get({
action: '
prop: 'revisions',
curtimestamp: true,
formatversion: 2
}).done(function(
if (res1 && res1.query && res1.query.pages) { //
//
var curTS = res1.curtimestamp;
' <p style="color: MediumSeaGreen">取得に成功しました</p>' +
' <p>セクション番号を取得しています</p>';
$('.anr-editing').append($(msgEditing));
var sectionsAPI = {};
var msgDone = ''; // Message to show when edit attempt is done
new mw.Api().get({
action: 'parse',
page: pageToEdit,
formatversion: 2
}).done(function(res2){
if (res2 && res2.parse && res2.parse.sections) { //
// Get
'<p style="color: MediumVioletRed">取得に失敗しました</p>' +
'<p>指定されたセクションが見つかりませんでした</p>' +
'<br>' +
'<p>ページ名:</p>' +
`<a href="${mw.util.getUrl(wikiPagename)}" target="_blank">${wikiPagename}</a>` +
'<br><br>' +
'<p>考えられる原因:</p>' +
`<p>1. 編集先のページの節構成が変更された</p>` +
`<p>2. 通信に失敗した</p>` +
`<p>3. スクリプトのバグ</p>` +
'<br>' +
'<p>手動編集用:</p>' +
`<textarea disabled rows="5" style="width: 100%">${textToSubmit}</textarea>` +
'<br>' +
'<p>要約:</p>' +
`<textarea disabled rows="2" style="width: 100%">${editSummary.replace(scriptAd, '')}</textarea>`;
$('.anr-editing').append($(msgDone));
} else { //
' <p
'
// Get the text of the revision
new mw.Api().get({
action: 'parse',
page: pageToEdit,
section: sectionNum,
if (res3 &&
' <p style="color: MediumSeaGreen">取得に成功しました</p>' +
var wholeTextToSubmit;
const delimiter = '<!-- ◆';
const miscHeader = `{{bgcolor|#eee|{{Visible anchor|他${today()}}}|div}}`;
if (reportToANS) { // If
//
if (wikitextSplit.length === 3) {
textToSubmit + '\n\n' + delimiter + wikitextSplit[2];
} else {
'<
'<p>
`<a href="${mw.util.getUrl(
'に連絡をお願いします<
'<
'<
`<textarea disabled rows="5" style="width: 100%">$
'<br>' +
$('.anr-editing').append($(msgDone));
$dialog.dialog('option', 'width', width);
editDone($dialog);
return;
}
} else { // If the target is WP:AN/I or WP:AN/3RR
wholeTextToSubmit = trimA(wikitextObtained) + '\n\n' + textToSubmit;
}
// Edit the page
$.ajax({
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'edit',
title: pageToEdit,
section: sectionNum,
summary: editSummary,
basetimestamp: baseTS,
starttimestamp: curTS,
text: wholeTextToSubmit,
token: mw.user.tokens.get('csrfToken')
},
dataType: 'json',
type: 'POST',
success: function(res4) {
// If the edit was successful
if (res4 && res4.edit && res4.edit.result == 'Success') {
$('.anr-editing').append($(`<p style="color: MediumSeaGreen">報告が完了しました</p>`));
$dialog.dialog('option', 'width', width);
editDone($dialog);
// If the edit failed
} else if (res4 && res4.error) {
// Show the details of the error
msgDone =
'<p style="color: MediumVioletRed">報告に失敗しました</p>' +
'<br>' +
'<p>ページ名:</p>' +
`<a href="${mw.util.getUrl(wikiPagename)}" target="_blank">${wikiPagename}</a>` +
'<br><br>' +
'<p>詳細:</p>' +
`<p>${res4.error.info}</p>` +
'<br>' +
'<p>手動編集用:</p>' +
`<textarea disabled rows="5" style="width: 100%">${textToSubmit}</textarea>` +
'<br>' +
'<p>要約:</p>' +
`<textarea disabled rows="2" style="width: 100%">${editSummary.replace(scriptAd, '')}</textarea>`;
$('.anr-editing').append($(msgDone));
$dialog.dialog('option', 'width', width);
editDone($dialog);
// If unknown error occurs
} else {
// Show message
msgDone =
'<p style="color: MediumVioletRed">不明なエラーが発生しました</p>' +
'<br>' +
'<p>ページ名:</p>' +
`<a href="${mw.util.getUrl(wikiPagename)}" target="_blank">${wikiPagename}</a>` +
'<br><br>' +
'<p>手動編集用:</p>' +
`<textarea disabled rows="5" style="width: 100%">${textToSubmit}</textarea>` +
'<br>' +
'<p>要約:</p>' +
`<textarea disabled rows="2" style="width: 100%">${editSummary.replace(scriptAd, '')}</textarea>`;
$('.anr-editing').append($(msgDone));
$dialog.dialog('option', 'width', width);
editDone($dialog);
}
}
});
} else { // If wikitext retrieval fails
queryFailed();
}
});
}
} else { // If the section list retrieval fails
queryFailed();
}
}
}
msgDone =
'<p style="color: MediumVioletRed">エラー: 編集先のページが存在しません</p>' +
'<br>' +
'<p>ページ名:</p>' +
`<a href="${mw.util.getUrl(wikiPagename)}" target="_blank">${wikiPagename}</a>` +
'<br><br>' +
'<p>手動編集用:</p>' +
`<textarea disabled rows="5" style="width: 100%">${textToSubmit}</textarea>` +
'<br>' +
'<p>要約:</p>' +
`<textarea disabled rows="2" style="width: 100%">${editSummary.replace(scriptAd, '')}</textarea>`;
$('.anr-editing').append($(msgDone));
$dialog.dialog('option', 'width', width);
editDone($dialog);
}
} else { // If revision retrieval fails
queryFailed();
}
});
// Function to show message when edit attempt is done
function queryFailed() {
msgDone =
'<p style="color: MediumVioletRed">取得に失敗しました</p>' +
'<br>' +
'<p>ページ名:</p>' +
`<a href="${mw.util.getUrl(wikiPagename)}" target="_blank">${wikiPagename}</a>` +
'<br><br>' +
'<p>手動編集用:</p>' +
`<textarea disabled rows="5" style="width: 100%">${textToSubmit}</textarea>` +
'<br>' +
'<p>要約:</p>' +
`<textarea disabled rows="2" style="width: 100%">${editSummary.replace(scriptAd, '')}</textarea>`;
$('.anr-editing').append($(msgDone));
$dialog.dialog('option', 'width', width);
editDone($dialog);
}
}
}]
684 ⟶ 808行目:
}
var logid;
if (objLogid[inputVal] !== undefined) {
724 ⟶ 847行目:
} else { // if the checkbox is unchecked
if (objLogid[inputVal] !== undefined) {
904 ⟶ 1,025行目:
}
return curSection;
}
// Function to get today's date
function today() {
var d = new Date();
return d.getMonth()+1 + '月' + d.getDate() + '日';
}
|