본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
최근 바뀜
게임 목록
임의의 게임으로
커뮤니티
리버티게임 본진
리버티게임(개발)
검색
검색
보이기
계정 만들기
로그인
개인 도구
계정 만들기
로그인
이 서버는
리버티게임
의 개발용 베타 서버로, 게임 플레이 용도로 제작된 사이트가 아닙니다.
리버티게임의 자동 인증된 사용자라면 개발에 필요한 관리자 권한을
신청
할 수 있습니다.
틀 및 기능별 소도구를 필요한 문서에만 선택적으로 로딩하는 테스트를 진행하고 있습니다. 작동하지 않는 문서가 있다면
담당자
에게 알려주세요.
미디어위키:Common.js 문서 원본 보기
메시지
토론
English
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
새로 고침
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보
축약된 URL 얻기
보이기
사이드바로 이동
숨기기
←
미디어위키:Common.js
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
이 문서는 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.
이 문서는
관리자
만이 수정할 수 있습니다. 내용의 변경이 필요하다면
관리자 요청
에 편집 요청을 남겨 주세요.
모든 방문자에게 영향을 미칠 수 있기 때문에 이 자바스크립트 문서의 편집 권한이 없습니다.
문서의 원본을 보거나 복사할 수 있습니다.
고급
특수 문자
도움말
문단 제목
2단계
3단계
4단계
5단계
형식
넣기
라틴 문자
확장 라틴 문자
IPA 문자
기호
그리스 문자
그리스어 확장
키릴 문자
아랍 문자
아랍어 확장
히브리 문자
뱅골어
타밀어
텔루구어 문자
싱할라 문자
데바나가리어
구자라트 문자
태국어
라오어
크메르어
캐나다 원주민 언어
룬 문자
Á
á
À
à
Â
â
Ä
ä
Ã
ã
Ǎ
ǎ
Ā
ā
Ă
ă
Ą
ą
Å
å
Ć
ć
Ĉ
ĉ
Ç
ç
Č
č
Ċ
ċ
Đ
đ
Ď
ď
É
é
È
è
Ê
ê
Ë
ë
Ě
ě
Ē
ē
Ĕ
ĕ
Ė
ė
Ę
ę
Ĝ
ĝ
Ģ
ģ
Ğ
ğ
Ġ
ġ
Ĥ
ĥ
Ħ
ħ
Í
í
Ì
ì
Î
î
Ï
ï
Ĩ
ĩ
Ǐ
ǐ
Ī
ī
Ĭ
ĭ
İ
ı
Į
į
Ĵ
ĵ
Ķ
ķ
Ĺ
ĺ
Ļ
ļ
Ľ
ľ
Ł
ł
Ń
ń
Ñ
ñ
Ņ
ņ
Ň
ň
Ó
ó
Ò
ò
Ô
ô
Ö
ö
Õ
õ
Ǒ
ǒ
Ō
ō
Ŏ
ŏ
Ǫ
ǫ
Ő
ő
Ŕ
ŕ
Ŗ
ŗ
Ř
ř
Ś
ś
Ŝ
ŝ
Ş
ş
Š
š
Ș
ș
Ț
ț
Ť
ť
Ú
ú
Ù
ù
Û
û
Ü
ü
Ũ
ũ
Ů
ů
Ǔ
ǔ
Ū
ū
ǖ
ǘ
ǚ
ǜ
Ŭ
ŭ
Ų
ų
Ű
ű
Ŵ
ŵ
Ý
ý
Ŷ
ŷ
Ÿ
ÿ
Ȳ
ȳ
Ź
ź
Ž
ž
Ż
ż
Æ
æ
Ǣ
ǣ
Ø
ø
Œ
œ
ß
Ð
ð
Þ
þ
Ə
ə
서식 지정
링크
문단 제목
목록
파일
토론
설명
입력하는 내용
문서에 나오는 결과
기울임꼴
''기울인 글씨''
기울인 글씨
굵게
'''굵은 글씨'''
굵은 글씨
굵은 글씨와 기울인 글씨
'''''굵고 기울인 글씨'''''
굵고 기울인 글씨
/* -- 전역 상수 선언 -- */ // 미디어위키 폴더명 url 다뤄야되는 함수들에서 사용됨, 메인터넌스 거친 후 w 혹은 wiki로 변경 예정, var wgScriptPath = "index.php"; /* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */ /** 플러그인이 작동하지 않을 때 나타나는 내용 * js: noPlugin('(이름)'); * html: class="noplugin-(이름)" * 작성자: [[사용자:Gustmd7410|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|BANIP]] 현 편집자: [[사용자:hsl0|hsl0]] */ function geturlSearch(location) { if(!location) location = window.location; else if(typeof location === 'string') location = new URL(location); var result = {}; if (location.search) location.search.substring(1).replace(/\+/g, ' ').split("&").map(function(v) { return v.split("="); }).forEach(function(v) { result[decodeURIComponent(v[0])] = decodeURIComponent(v[1]); }); return result; } /* 객체형태로 된 SearchParam을 받아 string형태로 반환 원작성자: [[사용자:BANIP|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] }; } /** 편집 저장시 다른 문서나 CGI로 넘겨주기 * ?action=edit&redirectquery=(params) * 작성자: [[사용자:Gustmd7410|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|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|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를 통해 간단하게 문서들을 수집, 변경하는 함수. * @deprecated * 이 기능은 사용을 권장하지 않습니다. 대신 mw.Api를 사용해 주세요. (참조: https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.Api) * 동기 XHR은 정보를 가져오는 동안 페이지를 멈춰 현저한 성능 저하를 야기하여 WHATWG 표준에서 제외되었고, 이에 따라 최신 브라우저에서 작동하지 않게 되었습니다. * MediaWikiAPI는 동기 XHR 기능에 의존하도록 설계되었고, 이 기능을 사용하는 모든 기능들은 작동을 보장할 수 없게 되었습니다. * * 플러그인 코어에서 사용하기 위해 만들었습니다. * 원작성자: [[사용자:BANIP|BANIP]], 수정자: [[사용자:Bd3076|Bd3076]] * 사용방법 *: var api = MediaWikiAPI(); .changeDocument() *: api.changeDocument(변경할 문서의 타이틀, 편집 요약, 변경할 문서의 내용) => 문서의 내용을 변경합니다. *: api.addDocument(변경할 문서의 타이틀, 편집 요약, 추가할 문서의 내용) => 문서에 새로운 내용을 추가합니다. *: api.getDocument(가져올 문서의 타이틀) => 문서의 모든 텍스트를 읽어옵니다. *: api.readDocument(가져올 문서의 타이틀) => 문서의 모든 텍스트를 jquery 객체로 읽어옵니다. * 영 좋지 않은 목적으로 사용 하면 안드로메다 경찰관이 잡아간다! */ function MediaWikiAPI() { console.warn('권장하지 않는 MediaWikiAPI를 사용하고 있습니다. 대신 mw.Api를 사용해 주세요.'); var token; var getToken = function() { if (token !== undefined) return token; $.ajax({ url: "/api.php?action=query&meta=tokens", // Note: URL은 서버 디렉토리 설정에 따라 바꾸어야 합니다. 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 $('<p></p>').html(doc).text(); } var originContent; $.ajax({ url: "/" + wgScriptPath + "?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: "/" + wgScriptPath + "/" + 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|hsl0]] **/ function notifyApiError(msg, option, code, object) { option = option || {}; mw.notification.notify( code === 'http'? $('<span />') .append($('<p />', {class: 'api-errmsg'}).text(object.xhr.responseText).html(option.additionalMessage || '')) .append($('<code />', {class: 'api-errcode'}).text('HTTP ' + object.xhr.status)) : $('<span />') .append($('<p />', {class: 'api-errmsg'}).text(object.error.info).html(option.additionalMessage || '')) .append($('<code />', {class: 'api-errcode'}).text(code)), { title: msg, type: 'error', tag: option.tag, autoHideSeconds: 'long' } ); } /** 링크경고 * 자바스크립트로 링크에 경고를 넣을 수 있습니다. * 제작자: [[사용자:hsl0|hsl0]] **/ function linkWarn(element, msg, msgClass) { return $(element) .addClass('linkwarn tooltip') .append($('<span class="tooltip-msg" />').append(msg).addClass(msgClass || 'messagebox')); } /** * [[리버티게임:오락실/2023년_8월#사이드바 '임의의 게임으로' 기능 관련]] * --[[사용자:BANIP|BANIP]] ([[사용자토론:BANIP|토론]]) 2023년 8월 14일 (월) 10:36 (KST) */ $(function(){ var triggered = false; var $linkwrapper = $("#n-randompage, .move-randompage").find("a"); //[[틀:임의_게임]] 구현, 사이드바 임의게임으로 링크 바인딩 $linkwrapper.on("click",function(e){ var category = $(this).closest(".move-randompage").data("category") || undefined e.preventDefault(); if(triggered) return; triggered = true; (new mw.Api()).get({ action: 'parse', page: '리버티게임:임의 게임', formatversion: 2, category:category }).then(function(res){ var page = $(res.parse.text).find(".redirect-random-page").text().trim(); location.href = mw.util.getUrl(page); }).catch(function(){ location.href = mw.util.getUrl("리버티게임:임의 게임",{category:category}); }); }).attr("rel","nofollow"); //[[리버티게임:임의_게임]] 구현 if($("#content .redirect-random-page").length){ history.replaceState(null, null, mw.util.getUrl($("#content .redirect-random-page").text().trim())); location.reload(); } }); /** * 리버티게임 인기 게임 순위 정렬 * --[[사용자:Senouis|Senouis]] ([[사용자토론:Senouis|토론]]) 2024년 8월 12일 (월) 22:05 (KST) */ $(function (){ var sectionRatings = document.getElementById("section-ratings"); if (!sectionRatings) return; fetch("https://dev.libertygame.work/rest.php/sectionratings/v0/getgameratings/분류:리버티게임/4").then(function (result){return result.json();}).then(function (result){ if (result.result !== "SUCCESS") return; var tempElement = document.createElement("div"); tempElement.innerHTML = result.parseResult; var elemlist = tempElement.querySelectorAll(".gamecard 설명감춤"); for (var idx in elemlist){ try{ var elem = elemlist.item(idx); document.getElementById("section-ratings").appendChild(elem); } catch (e) { continue; } } }).catch(function(e){console.log(e);}); });
이 문서에서 사용한 틀:
사용자:Hsl0/서명
(
원본 보기
)
사용자:Senouis/서명
(
원본 보기
)
리버티게임:연습장/안내문
(
원본 보기
)
미디어위키:Common.js
문서로 돌아갑니다.