미디어위키:Gadget-defaultTemplate.js: 두 판 사이의 차이

리버티게임(개발), 모두가 만들어가는 자유로운 게임
둘러보기로 이동 검색으로 이동
>BANIP
(브라우저 콘솔에 자꾸 메세지뜨는 현상 해결)
>BANIP
(로고바꾸기 틀 수정)
10번째 줄: 10번째 줄:
});
});
});
});


/** [[틀:로고 바꾸기]]용 함수 V 1.1
/** [[틀:로고 바꾸기]]용 함수 V 1.1
  * 작성자: [[사용자:Manymaster|manymaster]],
  * 작성자: [[사용자:Manymaster|manymaster]],
  * 1.1 업데이트: [[사용자:BANIP|BANIP]]
  * 1.1 업데이트: [[사용자:BANIP|BANIP]]
* 1.2 업데이트: [[사용자:BANIP|BANIP]]
  */
  */
function logochange() {
function logochange() {
// 허용 확장자 및 url 패턴
     var logo = $(".template-changelogo img").attr("src");
     var allwedURLPattern = ["i.uncyclopedia.kr/game/","i.uncyclopedia.kr/pedia/","upload.wikimedia.org/wikipedia/commons/"];
    var logoUrl = new URL(logo, location.href);
var allowedExt = ["gif","png","jpg","jpeg","svg"];
    // 로고 실행 경로가 위키미디어 공용이거나 현재 위키일때만 로고변경
 
     if( ['upload.wikimedia.org', location.host].includes(logoUrl.host)){
    var logoElement = document.getElementsByClassName("changelogo123");
        $(".mw-logo-icon").attr("src", logo);
/* .changelogo 요소가 없으면 종료 */
     if (logoElement.length === 0) {
        return;
 
    }
 
var logoTest = logoElement[0].innerHTML.toLowerCase();
//이미지 url이 주어진 조건에 맞는지 검사
var isSafeURL = allwedURLPattern.some( function(middleURL){
var reg = new RegExp("//" + middleURL);
return ( logoTest.match(reg) !== null);
});
var isSafeExt = allowedExt.some( function(ext){  
var reg = new RegExp("\." + ext + "$");
return ( logoTest.match(reg) !== null);
});
 
// URL패턴과 확장자의 조건이 맞지 않으면 종료
    if ( !(isSafeURL && isSafeExt) ) {
return;
     }
     }
    /* 로고 교체 */
    var orglogoElement = document.querySelector("#p-logo a");
    orglogoElement.style.backgroundImage = "url('" + logoElement[0].innerHTML + "')";
    /* 사이즈 교체 */
    var widthElement = document.querySelector(".changelogowidth");
widthElement.innerHTML = widthElement === null ? "160px" : widthElement.innerHTML;
var heightElement = document.querySelector(".changelogoheight");
heightElement.innerHTML = heightElement === null ? "160px" : heightElement.innerHTML;
orglogoElement.style.backgroundSize = widthElement.innerHTML + " " + heightElement.innerHTML;
}
}
$(logochange);
$(logochange);
/* [[틀:로고 바꾸기]]용 함수 끝 */
/* [[틀:로고 바꾸기]]용 함수 끝 */


/** [[틀:제목 바꾸기]]용 스크립트 */
/** [[틀:제목 바꾸기]]용 스크립트 */
134번째 줄: 104번째 줄:
         searchParams.forEach(function(value, key){ urlParams[key] = value; });
         searchParams.forEach(function(value, key){ urlParams[key] = value; });
         location.href = mw.util.getUrl(pagename, urlParams);
         location.href = mw.util.getUrl(pagename, urlParams);
     }
     };
     $("#ca-history a").click(function(e){ interceptPage(e,historyTagetPagename) });
     $("#ca-history a").click(function(e){ interceptPage(e,historyTagetPagename) });
     $("#ca-edit a, #ca-ve-edit a").click(function(e){ interceptPage(e,editTargetPagename) });
     $("#ca-edit a, #ca-ve-edit a").click(function(e){ interceptPage(e,editTargetPagename) });
154번째 줄: 124번째 줄:


function uncy_jsonEdit(){
function uncy_jsonEdit(){
if($('.uncy-jsonedit').length === 0) return  
if($('.uncy-jsonedit').length === 0) return;
var mp = new Map();
var mp = new Map();
var api = MediaWikiAPI();
var api = MediaWikiAPI();

2023년 8월 7일 (월) 02:48 판

/**
 * [[틀:뒤로]], [[틀:새로고침]], [[틀:앞으로]]에서 사용하는 방문기록 이동 함수
 * class="historygo" data-page="(이동 위치)"
 * 작성자: [[사용자:hsl0|hsl0]]
**/

$(function historygo() {
	$('.historygo').wrap('<a />').click(function() {
	    history.go(this.dataset.page);
	});
});


/** [[틀:로고 바꾸기]]용 함수 V 1.1
 * 작성자: [[사용자:Manymaster|manymaster]],
 * 1.1 업데이트: [[사용자:BANIP|BANIP]]
 * 1.2 업데이트: [[사용자:BANIP|BANIP]]
 */
function logochange() {
    var logo = $(".template-changelogo img").attr("src");
    var logoUrl = new URL(logo, location.href);
    // 로고 실행 경로가 위키미디어 공용이거나 현재 위키일때만 로고변경
    if( ['upload.wikimedia.org', location.host].includes(logoUrl.host)){
        $(".mw-logo-icon").attr("src", logo);
    }
}
$(logochange);
/* [[틀:로고 바꾸기]]용 함수 끝 */

/** [[틀:제목 바꾸기]]용 스크립트 */
function rewriteTitle() {
    if (typeof(disableTitleRewrite) != 'undefined' && disableTitleRewrite) return;
    if (!document.getElementById('title-meta')) return;
    $('h1.firstHeading').each(function(i) {
        $(this).html($("#title-meta").html()).css('text-align', $("#title-align").text());
    });
}
$(rewriteTitle);

/** [[틀:복붙 상자]]용 함수
 * [[틀:자동저장|자동저장 시스템]]이 자동 인증 사용자 전용인 관계로 자동저장 시스템을 사용하지 못하거나 안 하는 사용자를 위해 쉽게 내용을 복붙할 수 있도록 도와주는 함수입니다.
 * 작성자: [[사용자:Manymaster|manymaster]]
 */
function cvbox() {

    var i;
    var cvdata = [];
    var box = [];
    var cvbox = [];
    
    /* 틀 사용 여부 확인 */
	for(i = 0;
    document.getElementsByClassName("cvdata")[i] !== undefined && 
	document.getElementsByClassName("box_locator")[i] !== undefined; i++)
	{
    
	/* 복붙 상자에 넣을 내용을 불러오고 문제가 되는 문자열 치환 */
	cvdata.push(document.getElementsByClassName("cvdata")[i].innerHTML);
	cvdata[i] = cvdata[i].replace(/(<([^>]+)>)/ig, "");
	cvdata[i] = cvdata[i].replace(/\n+/gi, "\n");
	
	/* 지정한 위치에 복붙 상자를 만들어 내용 넣기 */
	box.push(document.getElementsByClassName("box_locator")[i]);
	box[i].innerHTML = '<textarea class="ctrlcvbox" onclick="this.focus();this.select()" title="클릭 후 Ctrl+C 등으로 \'복사\'하시면 클립보드에 내용이 저장됩니다." readonly>' + cvdata[i] + '</textarea>';
	
	/* 복붙 상자 크기 조정 */
	cvbox.push(document.getElementsByClassName("ctrlcvbox")[i]);
	cvbox[i].style.height = (2+cvbox[i].scrollHeight)+"px";
	}
	return;    
}
$( cvbox );

/* [[틀:복붙 상자]]용 함수 끝 */

/** [[틀:편집불가]]에서 사용
  * - 1차 리뉴얼: [[사용자:Manymaster|manymaster]]
 * - 2차 리뉴얼: [[사용자:BANIP|BANIP]] ([[사용자토론:BANIP|토론]]) 2023년 7월 21일 (금) 13:24 (KST)
 */
function editprevent() {
    var $def = $(".edit-prevent");
    if(!$def.length) return;
    $("#ca-ve-edit, #p-cactions, #ca-history").hide();
    $("#ca-edit a")
        .html($def.data("title") || "잠김")
        .html($def.data("text") || "잠김")
        .click(function(e){e.preventDefault()});
}
$( editprevent );

/** [[틀:편집낚시에서 사용]]
 --[[사용자:BANIP|BANIP]] ([[사용자토론:BANIP|토론]]) 2023년 7월 21일 (금) 13:36 (KST)
 */
function editFake() {
    var $def = $(".edit-fake");
    if(!$def.length) return;
    var editTargetPagename = $def.data("target-edit");
    var historyTagetPagename = $def.data(".edit-fake") || editTargetPagename;

    var interceptPage = function(e,pagename){
        e.preventDefault();
        var urlParams = {};
        var searchParams = new URLSearchParams(window.location.search);
        searchParams.forEach(function(value, key){ urlParams[key] = value; });
        location.href = mw.util.getUrl(pagename, urlParams);
    };
    $("#ca-history a").click(function(e){ interceptPage(e,historyTagetPagename) });
    $("#ca-edit a, #ca-ve-edit a").click(function(e){ interceptPage(e,editTargetPagename) });
}
$( editFake );

/** [[틀:고급 넘겨주기]]에서 사용하는 넘겨주기 함수
 * id="advredirect" data-url="(문서명)" 
 * 작성자: [[사용자:Gustmd7410|Gustmd7410]] */

$('#advredirect').each(function() {
	location.replace(location.origin + $(this).data('url'));
});

/** JSON 편집을 편리하게 해 주는 기능.
 *  [[틀:JSON수정]]을 위한 플러그인입니다.
 *  작성자: [[사:Bd3076|Bd3076]]
 */

function uncy_jsonEdit(){
	if($('.uncy-jsonedit').length === 0) return;
	var mp = new Map();
	var api = MediaWikiAPI();
	
	$('.uncy-jsonedit').each(function() {
	    var jsonDoc = $(this).attr("data-title");
	    if (jsonDoc.indexOf("/pluginX.json") !== -1) {
	    	console.log("사용자의 pluginX JSON은 안돼요!");
	    	return;
	    }
	    var jsonData;
	    if(mp.get(jsonDoc) === undefined){
	    	jsonData = JSON.parse(api.getDocument(jsonDoc));
	    }
	    else{
	    	jsonData = JSON.parse(mp.get(jsonDoc));
	    }
	    var variable = $(this).attr("data-var");
	    var value = $(this).attr("data-val");
	    var reset = $(this).attr("data-reset");
	    
	    if(reset === "1") jsonData = {};
	    else jsonData[variable] = value;
	    
	    mp.set(jsonDoc, JSON.stringify(jsonData));
	    console.log(jsonDoc);
	    console.log(JSON.stringify(jsonData));
	});
	
	mp.forEach(function(value, key) {
		if(key === undefined){
			console.log("error: document name is undefined");
			return;
		}
		if(value === undefined){
			console.log("error: variable or value is wrong");
			return;
		}
		api.changeDocument(key, "JSON 데이터 수정", value, 1, 1);
		mw.loader.using( ['mediawiki.notify','mediawiki.Title'] ).then( function () {
    		mw.notify('JSON 데이터가 수정되었습니다.');
		});
	});
}
$(uncy_jsonEdit);
/* JSON 편집을 편리하게 해 주는 기능 끝 */

/* [[틀:탭 이름]]에서 사용 --[[사용자:BANIP|BANIP]] ([[사용자토론:BANIP|토론]]) 2023년 7월 21일 (금) 10:43 (KST) */
$(function(){
	var $tabName = $("#template-change-tab-name");
	if($tabName.length) $("#p-associated-pages .mw-list-item:nth-child(1) span").text($tabName.data('value'));
});