User:Uziel302/typo.js
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <nowiki>
var p_n = mw.config.get('wgPageName');
var pn = p_n.replace(/_/, ' ');
if ( p_n.match(/^Wikipedia:Correct_typos_in_one_click$/) || p_n.match(/^Wikipedia:Correct_typos_in_one_click\/[0-9]+$/) ) {
$(function(){
function reloadNotify(msg) {
mw.notify(msg).done(function(){ window.location.reload(); });
}
function removeSection(section, basetimestamp, starttimestamp, summ) {
var api = new mw.Api(), pagename = this.curPage;
api.postWithToken('csrf', {
action: 'edit',
title: pn,
summary: summ,
minor: 1,
basetimestamp: basetimestamp,
starttimestamp: starttimestamp,
text: '',
section: section,
watchlist: 'nochange'
}).done(function(d) {
if (d && d.edit && d.edit.result == 'Success') {
mw.notify('Removed');
}
});
}
function removeSectionAfterCorrection(section, basetimestamp, starttimestamp, summ) {
var api = new mw.Api(), pagename = this.curPage;
api.postWithToken('csrf', {
action: 'edit',
title: pn,
summary: summ,
minor: 1,
basetimestamp: basetimestamp,
starttimestamp: starttimestamp,
text: '',
section: section,
watchlist: 'nochange'
}).done(function(d) {
if (d && d.edit && d.edit.result == 'Success') {
}
});
}
function archiveToTalk(articleName, sectionTitle, content) {
var talkPage = new mw.Title(articleName).getTalkPage(),
newContent = content.replace(/== .+? ==\n+/, '');
return new mw.Api().post({action: 'edit', minor: 1, title: talkPage.getPrefixedText(), summary:'removed', token: mw.user.tokens.get('csrfToken'), section: 'new', sectiontitle: sectionTitle, text: newContent+' (from [[Wikipedia:Correct typos in one click]])\n'}).then(function(d){ mw.notify($('<a>', {href: talkPage.getUrl(), target: '_blank'}).text('Successfully archived')); });
}
function saveChange1(articleName, content,suspect,correction) {
return new mw.Api().post({
action: 'edit',
minor: 1,
title: articleName,
summary: suspect+'->'+correction+' - [[Wikipedia:Correct typos in one click|Correct typos in one click]]',
token: mw.user.tokens.get('csrfToken'),
text: content,
watchlist: 'nochange'
}).done(function(d){
mw.notify($('<a>', {href: 'https://en.wikipedia.org/w/index.php?title='+articleName+'&diff=curr&oldid=prev', target: '_blank'}).text('Success! Click to view the edit'));
});
}
function saveChange(e) {
var articleName = $(this).parents('h2').find('.mw-headline').text(),
sectionNum = $(this).parent().find('a').attr('href').match(/section=([0-9]+)/)[1],
api = new mw.Api();
api.get( {action:'query',prop:'revisions',titles:mw.config.get('wgPageName'), rvprop:'content|timestamp',rvsection:sectionNum, curtimestamp: 1}).done(function(data){
for(var rv in data.query.pages)
{
var sectionText = data.query.pages[rv].revisions[0]['*'],
basetimestamp = data.query.pages[rv].revisions[0].timestamp;
if ((sectionText.indexOf('== [['+articleName+']] ==') !== 0) && (sectionText.indexOf('== [[:'+articleName+']] ==') !== 0)) {
reloadNotify('passage unavailable');
} else {
if (sectionText.indexOf('{{#lst:')!=-1) {
removeSection(sectionNum, basetimestamp ,data.curtimestamp, '/* '+ articleName +' */ ');
} else {
var articleText='undefined',newArticleText='undefined',suspect='undefined',correction='wow',oldcontext='wwowo',newcontext='undefined';
suspect=sectionText.replace(/.*\n.*?(.*)?\-><.*\n.*\n.*/, "$1");
correction=sectionText.replace(/.*\n.*?><!\-\-(.*)?\-\-.*\n.*\n.*/, "$1");
oldcontext=sectionText.replace(/.*\n.*\n.*? (.*) .*\n.*/, "$1");
console.log(oldcontext);
newcontext=oldcontext.replace(new RegExp(mw.util.escapeRegExp(suspect) + "$"),correction);
if(newcontext===oldcontext){alert('word not found in context line');return;}
var api = new mw.Api();
api.get({action: 'query',prop:'revisions',titles: articleName,rvprop:'content',curtimestamp:1
}).done(function(d) {for(var rv in d.query.pages)
{articleText=d.query.pages[rv].revisions[0]["*"];
var startBreak = oldcontext.match(/^[a-z]/i) ? "\\b" : "";
newArticleText=articleText.replace(new RegExp(startBreak + mw.util.escapeRegExp(oldcontext) + "\\b"),newcontext);
if(newArticleText===articleText)
{mw.notify('Could not find suspect word in article');
removeSection(sectionNum, basetimestamp ,data.curtimestamp,suspect+' was not found in [['+articleName+']]');
return;}
saveChange1(articleName,newArticleText,suspect,correction)
if(newArticleText!=articleText)removeSectionAfterCorrection(sectionNum, basetimestamp ,data.curtimestamp,suspect+'->'+correction+' fixed!');
if(newArticleText===articleText)removeSectionAfterCorrection(sectionNum, basetimestamp ,data.curtimestamp,suspect+'->'+correction+' was not fixed!');
}})
}
}
}
});
e.preventDefault();
}
function saveChange2(e) {
var articleName = $(this).parents('h2').find('.mw-headline').text(),
sectionNum = $(this).parent().find('a').attr('href').match(/section=([0-9]+)/)[1],
api = new mw.Api();
api.get( {action:'query',prop:'revisions',titles:mw.config.get('wgPageName'), rvprop:'content|timestamp',rvsection:sectionNum, curtimestamp: 1}).done(function(data){
for(var rv in data.query.pages){
var sectionText = data.query.pages[rv].revisions[0]['*'],
basetimestamp = data.query.pages[rv].revisions[0].timestamp;
if ((sectionText.indexOf('== [['+articleName+']] ==') !== 0) && (sectionText.indexOf('== [[:'+articleName+']] ==') !== 0)) {
reloadNotify('passage unavailable');
} else {
if (sectionText.indexOf('{{#lst:')!=-1) {
removeSection(sectionNum, basetimestamp ,data.curtimestamp, '/* '+ articleName +' */ ');
} else {
var articleText='undefined',newArticleText='undefined',suspect='undefined',correction='wow',approvedCorrection='wow',oldcontext='wwowo',newcontext='undefined';
suspect=sectionText.replace(/.*\n.*?(.*)?\-><.*\n.*\n.*/, "$1");
correction=sectionText.replace(/.*\n.*?><!\-\-(.*)?\-\-.*\n.*\n.*/, "$1");
approvedCorrection=prompt(suspect+' will be replaced by: ',suspect);
if(approvedCorrection===null||approvedCorrection===suspect)return;
oldcontext=sectionText.replace(/.*\n.*\n.*? (.*) .*\n.*/, "$1");
newcontext=oldcontext.replace(new RegExp(mw.util.escapeRegExp(suspect) + "$"),approvedCorrection);
if(newcontext===oldcontext){alert('word not found in context line');return;}
var api = new mw.Api();
api.get({action: 'query',prop:'revisions',titles: articleName,rvprop:'content',curtimestamp:1
}).done(function(d) {for(var rv in d.query.pages)
{articleText=d.query.pages[rv].revisions[0]["*"];
var startBreak = oldcontext.match(/^[a-z]/i) ? "\\b" : "";
newArticleText=articleText.replace(new RegExp(startBreak + mw.util.escapeRegExp(oldcontext) + "\\b"),newcontext);
if(newArticleText===articleText){mw.notify('Could not find suspect word in article');
removeSection(sectionNum, basetimestamp ,data.curtimestamp,suspect+' was not fixed');
return;}
saveChange1(articleName,newArticleText,suspect,approvedCorrection)
if(newArticleText!=articleText)removeSectionAfterCorrection(sectionNum, basetimestamp ,data.curtimestamp,suspect+'->'+approvedCorrection+' fixed!');
if(newArticleText===articleText)removeSectionAfterCorrection(sectionNum, basetimestamp ,data.curtimestamp,suspect+'->'+approvedCorrection+' was not fixed!');
}})
}
}
}
});
e.preventDefault();
}
function archiveReport(e) {
var articleName = $(this).parents('h2').find('.mw-headline').text().replace(' (page unavailable)', ''),
sectionNum = $(this).parent().find('a').attr('href').match(/section=([0-9]+)/)[1],
api = new mw.Api();
api.get( {action:'query',prop:'revisions',titles:mw.config.get('wgPageName'), rvprop:'content|timestamp',rvsection:sectionNum, curtimestamp: 1}).done(function(data){
for(var rv in data.query.pages)
{
var sectionText = data.query.pages[rv].revisions[0]['*'],
basetimestamp = data.query.pages[rv].revisions[0].timestamp;
if ((sectionText.indexOf('== [['+articleName+']] ==') !== 0) && (sectionText.indexOf('== [[:'+articleName+']] ==') !== 0)) {
reloadNotify('passage unavailable');
} else {
if (sectionText.indexOf('{{#lst:')!=-1) {
removeSection(sectionNum, basetimestamp ,data.curtimestamp, '/* '+ articleName +' */');
} else {
var articleText='undefined',newArticleText='undefined',suspect='undefined',correction='wow',oldcontext='undefined',newcontext='undefined';
suspect=sectionText.replace(/.*\n.*?(.*)?\-><.*\n.*\n.*/, "$1");
correction=sectionText.replace(/.*\n.*?><!\-\-(.*)?\-\-.*\n.*\n.*/, "$1");
oldcontext=sectionText.replace(/.*\n.*\n.*? (.*) .*\n.*/, "$1");
var d = new Date();
var month = new Array();
month[0] = "January";
month[1] = "February";
month[2] = "March";
month[3] = "April";
month[4] = "May";
month[5] = "June";
month[6] = "July";
month[7] = "August";
month[8] = "September";
month[9] = "October";
month[10] = "November";
month[11] = "December";
var mon = month[d.getMonth()];
var yyyy = d.getFullYear();
newcontext=oldcontext.replace(new RegExp(mw.util.escapeRegExp(suspect) + "$"),suspect+'{{typo help inline|reason=similar to '+correction+'|date='+mon+' '+yyyy+'}}');
if(newcontext===oldcontext){alert('word not found in context line');return;}
var api = new mw.Api();
api.get({action: 'query',prop:'revisions',titles: articleName,rvprop:'content',curtimestamp:1
}).done(function(d) {for(var rv in d.query.pages)
{articleText=d.query.pages[rv].revisions[0]["*"];
var startBreak = oldcontext.match(/^[a-z]/i) ? "\\b" : "";
newArticleText=articleText.replace(new RegExp(startBreak + mw.util.escapeRegExp(oldcontext) + "\\b(?!\s*\{\{typo)"),newcontext);
if(newArticleText===articleText){mw.notify('Could not find suspect word in article');
removeSection(sectionNum, basetimestamp ,data.curtimestamp,suspect+' was not fixed');
return;}
var templateadded=' added template';
saveChange1(articleName,newArticleText,suspect,templateadded)
if(newArticleText!=articleText)removeSectionAfterCorrection(sectionNum, basetimestamp ,data.curtimestamp,suspect+' - added template');
}})
}
}
}
});
e.preventDefault();
}
function removeReport(e) {
var articleName = $(this).parents('h2').find('.mw-headline').text().replace(' (Page unavailable)', ''),
sectionNum = $(this).parent().find('a').attr('href').match(/section=([0-9]+)/)[1],
api = new mw.Api();
api.get( {action:'query',prop:'revisions',titles:mw.config.get('wgPageName'), rvprop:'content|timestamp',rvsection:sectionNum, curtimestamp: 1}).done(function(data){
for(var rv in data.query.pages)
{
var sectionText = data.query.pages[rv].revisions[0]['*'],
basetimestamp = data.query.pages[rv].revisions[0].timestamp;
if ((sectionText.indexOf('== [['+articleName+']] ==') !== 0) && (sectionText.indexOf('== [[:'+articleName+']] ==') !== 0)) {
reloadNotify('Paragraph is missing');
} else {
var suspect=sectionText.replace(/.*\n.*?(.*)?\-><.*\n.*\n.*/, "$1");
removeSection(sectionNum, basetimestamp ,data.curtimestamp, suspect+' in [['+articleName+']] was dismissed');
}
}
});
e.preventDefault();
}
if ( mw.config.get( 'skin' ) === 'minerva' )
{
$('h2').each(function()
{
var saveChangeBtn = $('<a>Replace</a>').attr({href:'#'}).css({'font-size':'large', 'position':'absolute', 'left':'0%', 'bottom':'0%'}).click(saveChange);
saveChangeBtn2 = $('<a>Type</a>').attr({href:'#'}).css({'font-size':'large', 'position':'absolute', 'left':'25%', 'bottom':'0%'}).click(saveChange2);
archive = $('<a>template</a>').attr({href:'#'}).css({'font-size':'large', 'position':'absolute', 'left':'50%', 'bottom':'0%'}).click(archiveReport),
removeReportBtn = $('<a>Remove</a>').attr({href:'#'}).css({'font-size':'large', 'position':'absolute', 'left':'75%', 'bottom':'0%'}).click(removeReport);
$(this).find('.mw-headline').append(['<br>','<br>']);
$(this).find('.mw-editsection').append(['<br>',saveChangeBtn,removeReportBtn,saveChangeBtn2,archive]);
});
}
else
{
$('h2').each(function()
{
var saveChangeBtn = $('<a>Replace</a>').attr({href:'#'}).css({'font-size':'large', 'margin-right':'20px'}).click(saveChange);
saveChangeBtn2 = $('<a>Type</a>').attr({href:'#'}).css({'font-size':'large', 'margin-right':'20px'}).click(saveChange2);
archive = $('<a>check template</a>').attr({href:'#'}).css({'font-size':'large', 'margin-right':'20px'}).click(archiveReport),
removeReportBtn = $('<a>Remove</a>').attr({href:'#'}).css({'font-size':'large', 'margin-right':'20px'}).click(removeReport);
$(this).find('.mw-editsection').append(['<br>',saveChangeBtn,removeReportBtn,saveChangeBtn2,archive]);
});
}
});
}
// </nowiki>