ㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹㄹ!!!!!!!!!!!!!!!!!

ko
둘러보기로 가기 검색하러 가기

/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */ /*<source lang="javascript"><nowiki>*/

/** 틀:USERNAME에서 사용하는 바꿔치기 함수

 * 작성자: 사용자:Peremen
  • /

function UserNameReplace() {

   if (typeof(disableUsernameReplace) != 'undefined' && disableUsernameReplace) return;
   if (!document.getElementById('pt-userpage')) return;
   $("span.insertusername").each(function(i) {
       $(this).text(mw.config.get("wgUserName"))
   })

}; $(UserNameReplace);

/** 플러그인이 작동하지 않을 때 나타나는 내용

* js: noPlugin('(이름)');
* html: class="noplugin-(이름)"
* 작성자: Gustmd7410 */

function noPlugin(name) {

   $('.noplugin-' + name).each(function() {
       $(this).remove();
   });

}

// 미디어위키:common.js 미작동시: class="noplugin" $('.noplugin').each(function() {

   $(this).remove();

});

/* window.location.search를 객체 형태로 반환

@param {object} location 획득할 로케이션 객체, 비어있으면 window.location을 참조
원작성자: BANIP
  • /

function geturlSearch(location) { location = location || window.location; var result = {}; if(location.search) decodeURIComponent(location.search) .substring(1) .split("&") .map(function(v) { return v.split("=") }) .forEach(function(v) { result[v[0]] = v[1] }); return result;url.hash = encodeURIComponent(hash); }

/* 객체형태로 된 SearchParam을 받아 string형태로 반환

원작성자: BANIP
  • /

function searchParamToString(searchParamsObj){ return "?" + Object.entries(searchParamsObj).map(function(v){ return v.map(function(v) { return encodeURIComponent(v); }).join("="); }).join("&"); }

/** 백괴게임:연습장 문서 내용 비우기

* 작성자: 사용자:*devunt
*/

$(function() {

   if (mw.config.get("wgPageName") != "리버티게임:연습장")
       return;
   if (document.URL.lastIndexOf("action=edit") != -1) {
       if (document.URL.lastIndexOf("fakeaction=clean") == -1)
           return;
       var dbindex = document.editform.wpTextbox1;
       dbindex.value = "틀:리버티게임:연습장/안내문"+"분류:리버티게임 도움말";
       document.editform.wpSummary.value = "연습장 비움";
       document.editform.wpSave.click();
       return;
   }

});

/* userAgent */ /** source: http://www.gregoryvarghese.com/how-to-get-browser-name-and-version-via-javascript/ **/

function get_browser_info() {

   var ua = navigator.userAgent,
       tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
   if (/trident/i.test(M[1])) {
       tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
       return {
           name: 'IE ',
           version: (tem[1] || )
       };
   }
   if (M[1] === 'Chrome') {
       tem = ua.match(/\bOPR\/(\d+)/)
       if (tem != null) {
           return {
               name: 'Opera',
               version: tem[1]
           };
       }
   }
   M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
   if ((tem = ua.match(/version\/(\d+)/i)) != null) {
       M.splice(1, 1, tem[1]);
   }
   return {
       name: M[0],
       version: M[1]
   };

}

/** paramtest 함수

* CGI2 등에 적용되는 searchParams 메소드 지원 여부를 판단하는 함수
* 작성자: manymaster
*/

function paramtest() {

   var test_code;
   var Params = new URL(document.location).searchParams;
   if (Params === undefined) {
       test_code = 0;
   } else {
       test_code = 1;
   }
   return test_code;

}

/** paraminfo 함수

* paramtest의 부속 함수로 searchParams 메소드 지원시 지정한 메시지를 숨길 수 있게 해주는 함수
* 메시지는 searchparam_test 클래스로 지정하여 숨길 수 있습니다. */

function paraminfo() {

   var test_code = paramtest();
   if (test_code == 0) {
       return;
   } else {
       for (var i = 0; i < document.getElementsByClassName("searchparam_test").length; i++) {
           document.getElementsByClassName("searchparam_test")[i].style.display = "none";
       }
   }

}

$(paraminfo); /* paramtest 및 부속 함수 끝 */

/** 스크립트의 함수를 실행시키는 링크 만들기

* $('(객체)').each(function() {
      scriptLink(this);
      $(this).click(function () {
          (함수)
      });
  });
* 작성자: Gustmd7410 */

function scriptLink(element) {

   $(element).html('<a>' + $(element).html() + '</a>');

}

/**

* 백괴게임:댸문문서의 일부 링크를 낚시문서로 바꿔치기
* 원작성자: BANIP
*/
$(function(){
	var gate = document.getElementsByClassName("fakegate");
   if (gate[0] === undefined || gate[0] === null) {
   return;
   } else{

var targetLink = "https://libertygame.miraheze.org/wiki/"+gate[0].innerHTML; $("#bodyContent a").attr("href",targetLink); }

})
/* 백괴게임:댸문문서의 일부 링크를 낚시문서로 바꿔치기 끝 */

/** 편집 저장시 다른 문서나 CGI로 넘겨주기

* ?action=edit&redirectquery=(params)
* 작성자: Gustmd7410
    • /

$(function() { // 현재 URL 파라미터 var params;

// URLSearchParams 호환시 if(URLSearchParams) params = new URLSearchParams(location.search); // 비호환시 geturlSearch() 사용 else { // Map 호환시 if(Map) params = new Map(Object.entries(geturlSearch())); // 비호환시 mw.Map 사용 else { params = new mw.Map(); params.values = geturlSearch(); params.has = params.exists; } }

// 편집창에서 redirectquery 파라미터가 있을때 if(params.has('redirectquery')) { // 편집 폼에 wpExtraQueryRedirect 파라미터 input 요소 추가 $('#editform').append($('<input />', { type: 'hidden', name: 'wpExtraQueryRedirect', value: params.get('redirectquery') })); } });

/* 편집 저장시 다른 문서나 CGI로 넘겨주기 끝 */


/** 기여 확인용 플러그인

* 작성자: Bd3076
*/

function enoughEdit(){ function compareEditCount(number, id1, id2){ var editCount = mw.config.get('wgUserEditCount'); if(editCount < number){ document.getElementById(id1).style.display = "block"; } else{ document.getElementById(id2).style.display = "block"; } }

$('.editCompare').each(function(){ var num = $(this).attr("data-num"); var enough = $(this).attr("data-id1"); var nenough = $(this).attr("data-id2"); compareEditCount(num, enough, nenough); }); } $(enoughEdit);

/* 기여 확인용 플러그인 끝 */

/** 상위 문서 링크 바꿔치기

* id="setsub"
* 작성자: Gustmd7410
    • /

function changeContentSub() { var newsub = document.getElementById('setsub'); if(newsub) { document.querySelector('#contentSub').innerHTML = newsub.innerHTML; newsub.remove(); } } $(changeContentSub); /* 상위 문서 링크 바꿔치기 끝 */

/** 틀:자동저장용 문서 미리 비워놓기

* 원출처: 틀:자동저장/플러그인
* 비 자동 인증된 사용자가 자동저장 겸용 문서에서 복붙을 할 때 
* 문서를 덮어씌우지 않고 밑에 복붙을 하는 상황을 막기 위한 플러그인입니다.
*/

function nonautosaveready() {
	
	/* autosave 편집모드가 아닐 경우 플러그인 종료 */

var searchParams = geturlSearch(location); var isEditMode = searchParams.action === "edit"; var isAutosaveMode = searchParams.autosave === "1"; if (!(isEditMode && isAutosaveMode)) return "";

/* 자동 저장하기에 안전한 네임스페이스가 아닌 경우 플러그인 종료 */ var safeNameSpace = [""]; var thisNamespaceNumber = mw.config.get("wgNamespaceNumber"); var nameSpaceIds = mw.config.get("wgNamespaceIds"); var isSafeNameSpace = safeNameSpace

   .map(function (namespace) { return nameSpaceIds[namespace]; })
   .some(function (nsNumber) { return nsNumber == thisNamespaceNumber; });
   if (!(isSafeNameSpace)) return "";
   
   /* 자동 인증된 사용자가 일 경우 플러그인 종료 */
   var userGroups = mw.config.get('wgUserGroups');
   var autocheck = 0;
   if (userGroups) {
   	for (var i = 0; i < userGroups.length; i++) {
   		if (userGroups[i] === 'autoconfirmed') {
   			autocheck++;
   		}
   	}
   }
   if (autocheck != 0) return "";
   
   /* 미리 비워놓기 */
   var savetemp = document.editform.wpTextbox1;
   savetemp.value = "";
   return;

} $(nonautosaveready); /* 틀:자동저장용 문서 미리 비워놓기 끝 */


/** mediawiki api를 통해 간단하게 문서들을 수집, 변경하는 함수.

* 플러그인 코어에서 사용하기 위해 만들었습니다.
* 원작성자: BANIP, 수정자: Bd3076
* 사용방법 
*: var api = MediaWikiAPI(); .changeDocument()
*: api.changeDocument(변경할 문서의 타이틀, 편집 요약, 변경할 문서의 내용) => 문서의 내용을 변경합니다.
*: api.addDocument(변경할 문서의 타이틀, 편집 요약, 추가할 문서의 내용) => 문서에 새로운 내용을 추가합니다.
*: api.getDocument(가져올 문서의 타이틀) => 문서의 모든 텍스트를 읽어옵니다.
*: api.readDocument(가져올 문서의 타이틀) => 문서의 모든 텍스트를 jquery 객체로 읽어옵니다.
* 영 좋지 않은 목적으로 사용 하면 안드로메다 경찰관이 잡아간다!
*/

function MediaWikiAPI() {

   var token;
   var getToken = function() {
       if (token !== undefined) return token;
       $.ajax({
           url: "/w/api.php?action=query&meta=tokens",
           success: function(v, i) {
               var datas = JSON.parse($(v).find("pre").text());
               token = datas["query"]["tokens"]["csrftoken"];
           },
           async: false
       });
       return token;
   };
   function changeDocument(title, summary, content, isUnReload, minor) {
   	mw.loader.using( ['mediawiki.util','mediawiki.Title'] ).then( function () {

$.ajax({ url: mw.util.wikiScript("api"), data: { format: 'json', action: 'edit', title: title, summary: summary, text: content, minor: minor, token: getToken(), }, dataType: 'json', type: 'POST', success: function(data) { if (data && data.edit && data.edit.result == 'Success') { if (!isUnReload) window.location.reload(); // reload page if edit was successful } else if (data && data.error) { alert('Error: API returned error code "' + data.error.code + '": ' + data.error.info); } else { alert('Error: Unknown result from API.'); } }, error: function(xhr) { alert('Error: Request failed.'); } }); } );

   }
   function addDocument(title, summary, content, isUnReload, minor) {
       originContent = getDocument(title);
       changeDocument(title, summary, originContent + content, isUnReload, minor);
   }
   function getDocument(title) {
       function entityDecode(doc) {

return $('

').html(doc).text();

       }
       var originContent;
       $.ajax({
           url: "/w/index.php?title=" + title + "&action=edit",
           success: function ajaxSucess(data) {
               originContent = $(data).find("textarea").html();
           },
           async: false
       });
       return entityDecode(originContent);
   }
   function readDocument(title) {
       var doc;
       $.ajax({
           url: "/wiki/" + title,
           success: function ajaxSucess(data) {
               doc = $(data).find("#mw-content-text");
           },
           async: false
       });
       return doc;
   }


   return {
       getToken: getToken,
       changeDocument: changeDocument,
       addDocument: addDocument,
       getDocument: getDocument,
       readDocument: readDocument,
   };

}

/** @function fetchScript

* 체크섬을 활용해 보다 안전하게 외부 스크립트를 가져올 수 있음
* @author hsl0
    • /

var fetchScript = fetch? function fetchScript(url, integrity) {

   return fetch(url, {
       header: {
           Accept: [
               'application/javascript',
               'application/ecmascript',
               'text/javascript',
               'application/x-javascript',
               '*/*'
           ]
       },
       integrity: integrity
   }).then(function(res) {
       return res.text().then(function(text) {
       	new Function(text)();
       	return new $.Deferred().resolve(text, res.statusText, res).promise();
       });
   });

} : $.getScript; /**

* API 에러가 반환될 경우 알려주는 함수
* 저작자: hsl0
**/

function notifyApiError(msg, option, code, object) { option = option || {}; mw.notification.notify(

       code === 'http'?
           $('')

.append($('

', {class: 'api-errmsg'}).text(object.xhr.responseText).html(option.additionalMessage || )) .append($('', {class: 'api-errcode'}).text('HTTP ' + object.xhr.status)) : $('') .append($('

', {class: 'api-errmsg'}).text(object.error.info).html(option.additionalMessage || )) .append($('', {class: 'api-errcode'}).text(code)), { title: msg, type: 'error', tag: option.tag, autoHideSeconds: 'long' } ); } /** 링크경고 * 자바스크립트로 링크에 경고를 넣을 수 있습니다. * 제작자: hsl0

    • /
function linkWarn(element, msg, msgClass) { return $(element) .addClass('linkwarn tooltip') .append($('').append(msg).addClass(msgClass || 'messagebox')); } /** * class="useronly" 계정으로 로그인한 상태에서 표시됩니다. * class="anononly" 로그인하지 않은 상태에서 표시됩니다. * 제작자: hsl0
    • /
function userOnly() { document.body.classList.add(mw.user.isAnon()? 'user-anon' : 'user-login'); } $(userOnly);