Jump to content

User:Certes/typo.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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.
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|Fix a typo 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('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 = $('<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]);
			});
		}
	});
}