Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
var p_n = mw.config.get('wgPageName'); var pn = p_n.replace(/_/, ' ');  if ( p_n.match(/^Wikivoyage:Correct_typos_in_one_click$/) || p_n.match(/^Wikivoyage: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 		}).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 		}).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: 'from [[Wikivoyage:Correct typos in one click]]\n' + newContent }).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+' - [[Wikivoyage:Correct typos in one click|Fix a typo in one click]]', 			token: mw.user.tokens.get('csrfToken'),  			text: content 			}).done(function(d){  			mw.notify($('<a>', {href: 'https://en.Wikivoyage.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(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]["*"]; 							newArticleText=articleText.replace(oldcontext,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(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]["*"]; 							newArticleText=articleText.replace(oldcontext,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 summ = 'Suspect typo'; 			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 { 							archiveToTalk(articleName, summ, sectionText).done(function(){removeSection(sectionNum, basetimestamp ,data.curtimestamp, '/* '+ articleName +' */ '); }); 						} 					}  				} 			}); 			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>To talk</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>','<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>Move to talk</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><br>',saveChangeBtn,removeReportBtn,saveChangeBtn2,archive]); 			}); 		} 	}); }