사용자:Wikisaft/common.js

< 사용자:Wikisaft
Wikisaft (토론 | 기여)님의 2024년 3월 8일 (금) 19:55 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
/* Xtools */
/**
 * XTools ArticleInfo gadget
 * Based on meta.wikimedia.org/wiki/User:Hedonil/XTools
 * Documentation: mediawiki.org/wiki/XTools/ArticleInfo_gadget
 * Released under GPL 3.0+ license
 * For updates, please copy and paste from https://xtools.wmflabs.org/articleinfo-gadget.js
 */
$(function () {
    if (mw.config.get('wgArticleId') === 0 || // no deleted articles, no special pages
            mw.config.get('wgCurRevisionId') !== mw.config.get('wgRevisionId') || // only current revision
            mw.config.get('wgAction') !== 'view') { // only when viewing a page, not editing
        return;
    }

    var $result,
        markup = "<div id='xtools' style='font-size:84%; line-height:1.2em;" +
        "width:auto;'><span id='xtools_result'>.</span></div>";
    $(markup).insertBefore('#contentSub');
    $result = $('#xtools_result');

    var loadinganimation = window.setInterval(function () {
        if ($result.html() === '.&nbsp;&nbsp;') {
            $result.html('&nbsp;.&nbsp;');
        } else if ($result.html() === '&nbsp;.&nbsp;') {
            $result.html('&nbsp;&nbsp;.');
        } else {
            $result.html('.&nbsp;&nbsp;');
        }
    }, 300);

    $.get(
        'https://xtools.wmflabs.org/api/page/articleinfo/' +
        mw.config.get('wgServerName') + '/' +
        mw.config.get('wgPageName').replace(/["?%&+\\]/g, escape) + '?format=html' +
        '&uselang=' + mw.config.get('wgUserLanguage')
    ).done(function (result) {
        $result.html(result);
        clearInterval(loadinganimation);
    });
});

/***
 * 편집요약 상용구
 * 
 * 설명:
 *  편집 요약 입력란 아래에, 클릭하면 요약에 정해진 문구를 입력하는 버튼을 추가
 * 
 * 환경설정용 변수:
 *	window.esSummaries: object, 추가될 버튼 혹은 텍스트
 ***/

// 주 함수: 페이지 로드 완료 시 버튼 생성 
function esEditSummary() {
	var editform = document.getElementById('editform');
	
	// 편집 화면(미리보기 포함)이면서 새 주제 덧붙이기가 아닌 경우
	// (#wpSummary가 제목으로 사용되는 경우)에만 동작
	// 요약창이 없는 경우에는 미동작
	if (($.inArray( mw.config.get('wgAction'), ['edit', 'submit']) !== -1 && editform && editform.wpSection) &&
		editform.wpSection.value !== 'new' && $('#wpSummary').length !== 0) {
		// esCanBeMinor: esInsSummary 함수에서 사용
		window.esCanBeMinor = 1;
		
		// 레거시
		if (typeof window.esSummaries === 'undefined' && typeof esEditSummaries === 'object') {
			window.esSummaries = esEditSummaries;
		}
		
		// 컨테이너
		$('#wpSummaryLabel').after($('<div></div>').attr('id', 'esBtns'));
		
		// 레이블 추가
		var label = $('<span></span>');
		label.addClass('esLabel');
		label.text('편집요약 상용구: ');
		$("#esBtns").prepend(label);
		$("#esBtns").append($('<br>'));
		
		// 요약 비우기 버튼 추가
		var clrBtn = $("<span></span>").attr('title', '편집 요약 비우기');
		clrBtn.addClass('esClrBtn');
		clrBtn.text('❌');
		clrBtn.click(function () {
			$('#wpMinoredit').prop('checked', mw.user.options.get('minordefault'));
			$('#wpSummary')[0].value = '';
			window.esCanBeMinor = 1;
		});
		$("#esBtns").append(clrBtn);
		
		// 설정 배열의 각 요소에 대해 버튼 추가 함수 실행
		for (var id in window.esSummaries) {
			esAppendBtn(id);
		}
	}
}

// 버튼 추가 함수
function esAppendBtn(id) {
	if (typeof window.esSummaries[id] === 'object') {
		var btn = $("<span></span>").attr({
			'class': 'esBtn',
			'title': window.esSummaries[id][2]});
		btn.text(window.esSummaries[id][0]);
		btn.click(function () {esInsSummary(window.esSummaries[id][1],
			 window.esSummaries[id][3], window.esSummaries[id][4])});
		$("#esBtns").append(btn);
	}
	// 줄바꿈 및 소제목
	else if (typeof window.esSummaries[id] === 'string') {
		if (window.esSummaries[id] === 'br') {
			$('#esBtns').append($('<br>'));
		}
		else {
		var sTitle = $("<span></span>").attr({
			'class': 'esSTitle'});
		sTitle.text(window.esSummaries[id]);
		$('#esBtns').append(sTitle);
		}
	}
}

// 편집 요약 수정 함수: 버튼이 눌리면 동작
function esInsSummary(text, isMinor, clear) {
	var wpSummary = $('#wpSummary')[0];
	// 사소한 편집 여부 체크박스 조작
	if (typeof isMinor !== 'undefined') {
		// 사소한 편집이 명시적으로 아닌 요약이 한 번이라도 추가되면
		// 다른 요약 버튼에 의해 사소한 편집이 체크되지 않음
		if (isMinor === 0 ) window.esCanBeMinor = 0;
		$('#wpMinoredit').prop('checked', (window.esCanBeMinor && isMinor));
	}
	
	if (typeof clear === 'undefined') clear = 0;
	
	// 요약 비우기
	if (clear) wpSummary.value = text;
	// 요약 덧붙이기
	else if (wpSummary.value.indexOf(text) === -1) {
		if (wpSummary.value.match(/[^,; \/]$/)) wpSummary.value += ', ';
		wpSummary.value = wpSummary.value.replace(/\s+$/, " ") + text;
	}
}

jQuery( document ).ready(esEditSummary);

window.esSummaries = [
/*
['버튼 이름', '입력될 편집 요약', '툴팁으로 뜨는 설명', '사소한 편집 여부(0/1/undefined)', '상용구 넣기 전에 요약 지우기(0/1, 생략 가능)']
위와 같은 형식으로 새로운 버튼을 추가할 수 있습니다.
마지막 줄을 제외한 줄 끝에 쉼표가 들어가 있는지 확인해 주세요.
위의 형식 대신 '텍스트'의 형태로 임의의 글을 입력하면 그 글이 그대로, 'br'을 입력하면 줄바꿈이 삽입됩니다.
*/
    ['훼손', '[[백:문서 훼손|문서 훼손]] [[백:되돌리기|복구]]', '문서 훼손 복구', 0, 1],
	'br',
    ['위치', '위치 변경, ', '위치 변경'],
	' | ',
    ['링+', '링크 추가, ', '링크 추가,'],
    ['링fix', '링크 수정, ', '링크 수정,'],
    ['링±', '링크 변경, ', '링크 변경,'],
    ['링-', '링크 제거, ', '링크 제거,'],
    ['링×', '링크 삭제, ', '링크 삭제,'],
	' | ',
    ['오타', '오타 수정, ', '오타 수정'],
    ['맞춤', '맞춤법 오류 수정, ', '맞춤법 오류 수정'],
	' | ',
    ['항+', '항목 추가, ', '항목 추가'],
    ['항fix', '항목 수정, ', '항목 수정'],
    ['항±', '항목 변경, ', '항목 변경'],
    ['항-', '항목 제거, ', '항목 제거'],
    ['항×', '항목 삭제, ', '항목 삭제'],
	' | ',
    ['내+', '내용 추가, ', '내용 추가'],
    ['내fix', '내용 수정, ', '내용 수정'],
    ['내±', '내용 변경, ', '내용 변경'],
    ['내÷', '내용 정리, ', '내용 정리'],
    ['내×', '내용 삭제, ', '내용 삭제'],
	' | ',
    ['틀+', '틀 추가, ', '틀 추가'],
    ['틀fix', '틀 수정, ', '틀 수정'],
    ['틀±', '틀 변경, ', '틀 변경'],
    ['틀-', '틀 제거, ', '틀 제거'],
	' | ',
    ['파일+', '파일 추가, ', '파일 추가'],
    ['파일fix', '파일 수정, ', '파일 수정'],
    ['파일±', '파일 변경, ', '파일 변경'],
    ['파일×', '파일 삭제, ', '파일 삭제'],
	' | ',
    ['분류-', '중복 분류 제거, ', '중복 분류 제거'],
	'br',
    ['위치', '위치 변경, ', '위치 변경'],
	' | ',
    ['링+', '링크 추가', '링크 추가'],
    ['링fix', '링크 수정', '링크 수정'],
    ['링±', '링크 변경', '링크 변경'],
    ['링-', '링크 제거', '링크 제거'],
    ['링×', '링크 삭제', '링크 삭제'],
	' | ',
    ['오타', '오타 수정', '오타 수정'],
    ['맞춤', '맞춤법 오류 수정', '맞춤법 오류 수정'],
	' | ',
    ['항+', '항목 추가', '링크 추가'],
    ['항fix', '항목 수정', '링크 수정'],
    ['항±', '항목 변경', '링크 변경'],
    ['항-', '항목 제거', '링크 제거'],
    ['항×', '항목 삭제', '링크 삭제'],
	' | ',
    ['내+', '내용 추가', '내용 추가'],
    ['내fix', '내용 수정', '내용 수정'],
    ['내±', '내용 변경', '내용 변경'],
    ['내÷', '내용 정리', '내용 정리'],
    ['내×', '내용 삭제', '내용 삭제'],
	' | ',
    ['틀+', '틀 추가', '틀 추가'],
    ['틀fix', '틀 수정', '틀 수정'],
    ['틀±', '틀 변경', '틀 변경'],
    ['틀-', '틀 제거', '틀 제거'],
	' | ',
    ['파일+', '파일 추가', '파일 추가'],
    ['파일fix', '파일 수정', '파일 수정'],
    ['파일±', '파일 변경', '파일 변경'],
    ['파일×', '파일 삭제', '파일 삭제'],
	' | ',
    ['분류-', '중복 분류 제거', '중복 분류 제거'],
	'br',
    ['모호', '[[백:모호|모호한]] ', '모호한'],
    ['not중립', '[[백:중립|중립]]적이지 않은 ', '중립적이지 않은'],
	'br',
	['—', '— ', '—'],
	['잘못되었다면 이유를…', '—이 편집이 잘못되었다면 이유를 알려주세요! ☺️', '—이 편집이 잘못되었다면 이유를 알려주세요! ☺️']
    ];