사용자:기나ㅏㄴ/script-redlinks.js

위키백과, 우리 모두의 백과사전.

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다. 구글 크롬, 파이어폭스, 마이크로소프트 엣지, 사파리: ⇧ Shift 키를 누른 채 "새로 고침" 버튼을 클릭하십시오. 더 자세한 정보를 보려면 위키백과:캐시 무시하기 항목을 참고하십시오.

//한국어판 설명은 [[사용자:기나ㅏㄴ/script-redlinks]]을 참고하십시오.
$(document).ready( function () {
    // Remove redlinks if they exist upon pageload
    redlinks_removeall();
});
$(function($) {
	mw.loader.using( ['mediawiki.util'] ).then( function () {
		var portletlink = mw.util.addPortletLink('p-tb', '#', '붉은색 링크 삭제');
		$(portletlink).click( function(e) {
			e.preventDefault();
			// Default parameters, and begin script on regular view of article
			var loc = window.location.href;
			var redlinks; var i;
			
			// Gather all redlinks with class "new"
			redlinks = [];
			var a = document.getElementsByTagName('a');
			for (i = 0; i < a.length; i++) {
				if (a[i].getAttribute('class') == "new") {
					redlinks[redlinks.length] = a[i].href.replace('https://ko.wikipedia.org/w/index.php?title=','').replace('&action=edit&redlink=1','');
					redlinks[redlinks.length-1] = redlinks[redlinks.length-1].replace(/_/g,' ');
					redlinks[redlinks.length-1] = decodeURIComponent(redlinks[redlinks.length-1]);
				}
			}
			
			// Save all redlinks
			if (redlinks.length > 0) {
				localStorage.redlinks = JSON.stringify(redlinks);
				
				// If we are in the edit page, then remove redlinks automatically; if we are on the reading page, then go to the edit page
				if (window.location.href.indexOf('action') >= 0) redlinks_removeall();
				else {
					var pageTitle;
					if (window.location.href.indexOf('?title=') >= 0) {
						var regex = /\?title=(.+?)&/;
						var regexMatch = window.location.href.match(regex);
						pageTitle = regexMatch[1];
					} else {
						pageTitle = window.location.href;
						if (window.location.href.indexOf('#') >= 0) pageTitle = pageTitle.substr(0, pageTitle.indexOf('#'));
						pageTitle = pageTitle.substr(window.location.href.indexOf('/wiki/')+6);
					}
					window.location.href = "https://ko.wikipedia.org/wiki/"+pageTitle+"?action=edit";
				}
			} else {
				alert('붉은색 링크가 없어요!');
			}
		});
	});
});

function redlinks_removeall() {
	// Automatic removal of redlinks when stored.
    if (localStorage.redlinks !== "" && localStorage.redlinks !== undefined) {
		// Gather saved redlinks
		try { var redlinks = JSON.parse(localStorage.redlinks); } catch (e) {return;}
		
		// Regular expression to escape special characters
		var totalredlinks = 0;
		RegExp.quote = function(str) { return str.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&"); };
		
		var wpTextbox1 = document.getElementById('wpTextbox1');
		for (i = 0; i < redlinks.length; i++) {
			// Regular expression for piped links and direct links
			var reglink1 = new RegExp('\\[\\[\\s*('+RegExp.quote(redlinks[i]).replace(/\s/g, "[\\s\\_]*")+')\\s*\\|\\s*([^\\]]*)\\s*\\]\\]','gi');
			var reglink2 = new RegExp('\\[\\[\\s*('+RegExp.quote(redlinks[i]).replace(/\s/g, "[\\s\\_]*")+')\\s*\\]\\]','gi');
			
			// Add total number of matches for both
			if (wpTextbox1.value.match(reglink1) !== null) totalredlinks += wpTextbox1.value.match(reglink1).length;
			if (wpTextbox1.value.match(reglink2) !== null) totalredlinks += wpTextbox1.value.match(reglink2).length; // Includes categories
			
			// Remove category rather than simply convert it to unlinked text
			if (redlinks[i].substr(0,3) == "분류:") {
				var reglink3 = new RegExp('\\[\\[\\s*('+RegExp.quote(redlinks[i])+')\\s*\\]\\]\\n','gi');
				wpTextbox1.value = wpTextbox1.value.replace(reglink3,"");
			}
			
			// Remove redlinks and convert to unlinked text
			wpTextbox1.value = wpTextbox1.value.replace(reglink1,"$2");
			wpTextbox1.value = wpTextbox1.value.replace(reglink2,"$1");
		}
		
		// Alert for summary of removed redlinks; total in edit summary
		if (totalredlinks > 0) {
			document.getElementById('wpSummary').value += "[[User:기나ㅏㄴ/script-redlinks|script-redlinks]]을 이용하여 붉은색 링크 "+totalredlinks+"개를 제거함";
			alert("자동으로 붉은색 링크 "+totalredlinks+"개가 삭제되었어요!");
		} else {
			// Redlinks were seen in the article but none were found in the wikicode - check the nevigational boxes for these redlinks
			alert('문서에 붉은색 링크가 없어요! (틀과 둘러보기 틀은 포함되지 않으니 확인해주세요.)');
		}
		
		// Remove the template(s)
		wpTextbox1.value = wpTextbox1.value.replace(/\{\{[Cc]leanup-?\s*[Rr]ed\s*[Ll]inks?[^\}]*\}\}/g, "");
		wpTextbox1.value = wpTextbox1.value.replace(/\{\{[Rr]ed\s*links?[^\}]*\}\}/g, "");
		wpTextbox1.value = wpTextbox1.value.replace(/\{\{[Tt]oo many red links[^\}]*\}\}/g, "");
		
		// Clear all saved redlinks
		localStorage.redlinks = '';
	}
}