사용자:Wikiwater2020/Undo.js
참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다. 구글 크롬, 파이어폭스, 마이크로소프트 엣지, 사파리: ⇧ Shift 키를 누른 채 "새로 고침" 버튼을 클릭하십시오. 더 자세한 정보를 보려면 위키백과:캐시 무시하기 항목을 참고하십시오.
// mobileUndo의 한국어 버전입니다.
// 원본 코드 중 편집 취소, 감사 표현 부분만 번역하였습니다.
// 모든 스크립트는 위키백과의 콘텐츠 라이선스(CC BY-SA 3.0과 GFDL 또는 퍼블릭 도메인)에 따라 배포됩니다.
// mobileUndo 2.0.0, a script allowing reversion of edits on mobile.
// All code is released under the default Wikipedia content license.
// Installation instructions at [[User:DannyS712/Undo]].
// <doc> This script basically connects an API endpoint to
// a mw-ui-destructive button which is added to the
// footer by using jQuery. Additional functionality
// includes changing the position of the thanks button
// and the addition of a confirm dialog to the thank button,
// to prevent mis-clicks due to both buttons being close
// to each other.
// </doc>
//<nowiki>
$(document).ready(function(){
console.time('mobileUndo');
if ( mw.config.get('wgCanonicalSpecialPageName') === 'MobileDiff') {
//Page is a diff page
//Interface construction
mw.util.addCSS('#mw-mf-userinfo .mobileUndo-ui .mw-ui-icon.mw-ui-icon-before:before{display:none;}');
//Thank module starts here
if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {
$('#mw-mf-userinfo .post-content').append('<div class="mobileUndo-ui" style="display:inline-block; float:right;"></div>');
}
else {
$('#mw-mf-userinfo .post-content').append('<div class="mobileUndo-ui" style="display:inline-block; float:left;"></div>');
}
$('.mobileUndo-ui').append($('.mw-mf-action-button').remove().css({
'clear': 'none',
'margin-top': '0.25em'
}));
if (!$('.warningbox').length && mw.config.get('wgRelevantPageIsProbablyEditable')) {
//The real music, the undo button is created
if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {
$('.mobileUndo-ui').append('<button class=\'mw-ui-button mw-ui-destructive\'' +
' id=\'mobileUndo\' style=\"margin-right:0.5em; margin-top:0.25em;\">' +
'<img style="height:1.2em;" src=\"//upload.wikimedia.org/wikipedia/commons/b/ba/OOjs_UI_icon_editUndo-ltr-invert.svg\">' +
'</img><span id="mobileUndo-text">Undo</span></button>');
}
else {
$('.mobileUndo-ui').append('<button class=\'mw-ui-button mw-ui-destructive\'' +
' id=\'mobileUndo\' style=\"margin-left:0.5em; margin-top:0.25em;\">' +
'<img style="height:1.2em;" src=\"//upload.wikimedia.org/wikipedia/commons/b/ba/OOjs_UI_icon_editUndo-ltr-invert.svg\">' +
'</img><span id="mobileUndo-text">Undo</span></button>');
}
console.timeEnd('mobileUndo');
}
}
});
if ( mw.config.get('wgCanonicalSpecialPageName') === 'MobileDiff') {
$.when(mw.loader.using(['mediawiki.util', 'mediawiki.api', 'oojs-ui-windows'])).then(function() {
return new mw.Api().getMessages(['editundo', 'Undo-nochange']);
}).then(function(globalmessages) {
window.wgRelevantUser = function() {
var user;
if ($('.mw-mf-user-link').text() !== '') {
user = $('.mw-mf-user-link').text();
} else {
user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text();
}
return user;
};
window.wgRevId = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')).split('&oldid=')[1];
var revId = wgRevId;
console.log(revId);
var username = wgRelevantUser();
$('#mobileUndo-text').text(globalmessages.editundo);
$('#mw-mf-userinfo .post-content .mobileUndo-ui .mw-mf-action-button').click(function(e) {
e.preventDefault();
OO.ui.confirm('감사를 공개적으로 표현하시겠습니까?').done(function(confirmed) {
if (confirmed) {
$('.mw-mf-action-button').prop('disabled', true).text('감사를 표하는 중...');
var api = new mw.Api();
api.postWithToken('csrf', {
action: "thank",
rev: revId,
}).done(function(result) {
mw.notify('당신은 ' + username + '님에게 감사를 표했습니다.');
$('.mw-mf-action-button').text('감사를 표했습니다');
}).fail(function() {
mw.notify('당신의 감사 표현이 ' + username + '님에게 전달되지 못했습니다.');
$('.mw-mf-action-button').text('Failed');
});
}
});
});
$('#mobileUndo').click(function(e) {
e.preventDefault();
OO.ui.prompt('편집 요약에 이유를 작성하십시오. 이유를 쓰지 않아도 정상적으로 편집을 되돌릴 수 있습니다.', {
textInput: {
placeholder: '이유...'
}
}).done(function(customEditSummary) {
$.when(mw.loader.using('mediawiki.api')).then(function() {
return new mw.Api().getMessages( ['undo-summary'], { amlang: mw.config.get('wgContentLanguage') } );
}).then(function(message) {
var editSummaryMessage = message['undo-summary'];
var editSummary = editSummaryMessage.replace(/\$1/g,revId);
editSummary = editSummary.replace(/\$2/g,username);
if (customEditSummary !== null) {
document.getElementById("mobileUndo").disabled = true;
editSummary = editSummary + ' - ' + customEditSummary + ' ([[w:ko:User:Wikiwater2020/모바일언도|mobileUndo]])';
//call the API
var api = new mw.Api({
ajax: {
headers: {
'Api-User-Agent': 'mobileUndo/2.0.0(https://en.wikipedia.org/wiki/User:DannyS712/Undo.js)'
}
}
});
//Feedback UI
$('#mobileUndo').text('로딩 중...');
api.postWithToken('csrf', {
action: "edit",
title: mw.config.get('wgRelevantPageName'),
summary: editSummary,
undo: revId,
}).done(function(result) {
if (typeof result.edit.nochange !== 'undefined') {
$('#mobileUndo').text('Failed');
$('.mw-mf-diff-info').append('<br><div id="mobileUndo-info" style="font-size:90%; background:#FFC0CB; padding:5px; margin-top:10px;">' +
globalmessages['Undo-nochange'] +
' <br><span style="font-size:85%">If this error message sounds too tech oriented,' +
' please drop a note at <a href="' + mw.util.getUrl('User talk:DannyS712') +
'">DannyS712\'s talk page</a>.</span></div>'
);
location.href = location.href + '#mobileUndo-info';
return;
}
$('#mobileUndo').text('되돌리기 성공');
mw.notify('되돌리기가 성공적입니다....곧 다시 로드됩니다');
setTimeout(function() {
location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid);
}, 1500);
console.log(result);
}).fail(function(code, jqxhr) {
$('#mobileUndo').text('Failed');
var details;
if (code === 'http' && jqxhr.textStatus === 'error') {
details = 'HTTP error: ' + jqxhr.xhr.status;
} else if (code === 'http') {
details = 'HTTP error: ' + jqxhr.textStatus;
} else if (code === 'ok-but-empty') {
details = 'An empty response was given the server';
} else {
details = jqxhr.error.info;
}
$('.mw-mf-diff-info').append('<br><div id="mobileUndo-info" style="font-size:90%; background:#FFC0CB; padding:5px; margin-top:10px;">' +
details.charAt(0).toLowerCase() + details.slice(1) +
' <br><span style="font-size:85%">If this error message sounds too tech oriented,' +
' please drop a note at <a href="' + mw.util.getUrl('User talk:DannyS712') + '">DannyS712\'s talk page</a>.</span></div>');
location.href = location.href + '#mobileUndo-info';
});
}
});
});
});
});
}
//</nowiki>