User:Certes/typo.js

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 Correct typos in one click)\n'}).then(function(d){ mw.notify($('', {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+' - Fix a typo in one click',			token: mw.user.tokens.get('csrfToken'), 			text: content,			watchlist: 'nochange'			}).done(function(d){ 			mw.notify($('', {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('a:first').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('a:first').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('a:first').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('a:first').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 = $('Replace').attr({href:'#'}).css({'font-size':'large', 'position':'absolute', 'left':'0%', 'bottom':'0%'}).click(saveChange);				   saveChangeBtn2 = $('Type').attr({href:'#'}).css({'font-size':'large', 'position':'absolute', 'left':'25%', 'bottom':'0%'}).click(saveChange2);					archive = $('template').attr({href:'#'}).css({'font-size':'large', 'position':'absolute', 'left':'50%', 'bottom':'0%'}).click(archiveReport),				    removeReportBtn = $('Remove').attr({href:'#'}).css({'font-size':'large', 'position':'absolute', 'left':'75%', 'bottom':'0%'}).click(removeReport);				$(this).find('.mw-headline').append([' ',' ']);				$(this).find('.mw-editsection').append([' ',saveChangeBtn,removeReportBtn,saveChangeBtn2,archive]);			}); }		else {			$('h2').each(function			{				var saveChangeBtn = $('Replace').attr({href:'#'}).css({'font-size':'large', 'margin-right':'20px'}).click(saveChange);				   saveChangeBtn2 = $('Type').attr({href:'#'}).css({'font-size':'large', 'margin-right':'20px'}).click(saveChange2);					archive = $('check template').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([' ',saveChangeBtn,removeReportBtn,saveChangeBtn2,archive]);			}); }	}); }