미디어위키:Common.js
참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.
- 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
- 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
- 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
- 오페라: Ctrl-F5를 입력.
/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */
/*<source lang="javascript"><nowiki>*/
/** [[틀:USERNAME]]에서 사용하는 바꿔치기 함수
* 작성자: [[:en:User:Splarka]]
*/
function UserNameReplace() {
if (typeof(disableUsernameReplace) != 'undefined' && disableUsernameReplace) return;
for (var i=0; UserName = document.getElementsByTagName("span")[i]; i++) {
if ((document.getElementById('pt-userpage'))&&(UserName.getAttribute('id') == "insertusername")) {
UserName.innerHTML = wgUserName;
}
}
};
addOnloadHook(UserNameReplace);
/** [[틀:제목]]에서 사용하는 제목 바꿔치기 함수
* 작성자: [[:en:User:Sikon]]
*/
function rewriteTitle() {
if (typeof(SKIP_TITLE_REWRITE) != 'undefined' && SKIP_TITLE_REWRITE)
return;
var titleDiv = document.getElementById('title-meta');
if (titleDiv == null || titleDiv == undefined)
return;
var cloneNode = titleDiv.cloneNode(true);
var firstHeading = YAHOO.util.Dom.getElementsByClassName('firstHeading', 'h1', document.getElementById('content') )[0];
var node = firstHeading.childNodes[0];
// new, then old!
firstHeading.replaceChild(cloneNode, node);
cloneNode.style.display = "inline";
var titleAlign = document.getElementById('title-align');
firstHeading.style.textAlign = titleAlign.childNodes[0].nodeValue;
}
addOnloadHook(rewriteTitle, false);
/* from en: */
var hasClass = (function () {
var reCache = {};
return function (element, className) {
return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
};
}
)();
/*
[[:en:Wikipedia:WikiProject User scripts/Scripts/Add edit section 0]]
[[위키백과:사랑방/2007년 1월#듕귁어판을 보니 section 0 편집 방법이 있더군요]]
*/
/* 영어 위키백과 버전 */
function addEditZero() {
var x;
if (!(x = document.getElementById('ca-edit') )) return;
var url;
if (!(url = x.getElementsByTagName('a')[0] )) return;
if (!(url = url.href )) return;
var y = addPortletLink('p-cactions', url+"§ion=0", '0', 'ca-edit-0',
'문서의 첫 부분만을 편집합니다.', '0', x.nextSibling);
y.className = x.className; // steal classes from the the edit tab...
x.className = 'istalk'; // ...and make the edit tab have no right margin
// exception: don't steal the "selected" class unless actually editing section 0:
if (/(^| )selected( |$)/.test(y.className)) {
if (!document.editform || !document.editform.wpSection
|| document.editform.wpSection.value != "0") {
y.className = y.className.replace(/(^| )selected( |$)/g, "$1");
x.className += ' selected';
}
}
}
addOnloadHook(addEditZero);
/* ([[위키백과:관리자 요청/2007년 5월#스크립트 추가 요청]]) */
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* Wikipedia:NavFrame.
* Maintainers: User:R. Koot
*/
//var autoCollapse = 2;
//var collapseCaption = "hide";
//var expandCaption = "show";
function collapseTable( tableIndex ) {
var Button = document.getElementById( "collapseButton" + tableIndex );
var Table = document.getElementById( "collapsibleTable" + tableIndex );
if ( !Table || !Button ) {
return false;
}
var Rows = Table.getElementsByTagName( "tr" );
if ( Button.firstChild.data == collapseCaption ) {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = "none";
}
Button.firstChild.data = expandCaption;
} else {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = Rows[0].style.display;
}
Button.firstChild.data = collapseCaption;
}
}
function createCollapseButtons() {
var tableIndex = 0;
var NavigationBoxes = new Object();
var Tables = document.getElementsByTagName( "table" );
for ( var i = 0; i < Tables.length; i++ ) {
if ( hasClass( Tables[i], "collapsible" ) ) {
NavigationBoxes[ tableIndex ] = Tables[i];
Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
var Button = document.createElement( "span" );
var ButtonLink = document.createElement( "a" );
var ButtonText = document.createTextNode( collapseCaption );
Button.style.styleFloat = "right";
Button.style.cssFloat = "right";
Button.style.fontWeight = "normal";
Button.style.textAlign = "right";
Button.style.width = "6em";
ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
ButtonLink.appendChild( ButtonText );
Button.appendChild( document.createTextNode( "[" ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( "]" ) );
var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
/* only add button and increment count if there is a header row to work with */
if (Header) {
Header.insertBefore( Button, Header.childNodes[0] );
tableIndex++;
}
}
}
for ( var i = 0; i < tableIndex; i++ ) {
if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
collapseTable( i );
}
}
}
addOnloadHook( createCollapseButtons );
/* ([[위키백과:관리자 요청/2007년 5월#스크립트 추가 요청]]) */
/** Dynamic Navigation Bars (experimental) *************************************
*
* Description: See [[:en:Wikipedia:NavFrame]].
* Maintainers: UNMAINTAINED
*/
// set up the words in your language
var autoCollapse = 2;
var collapseCaption = "숨기기";
var expandCaption = "보이기";
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
// set up max count of Navigation Bars on page,
// if there are more, all will be hidden
// NavigationBarShowDefault = 0; // all bars will be hidden
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
var NavigationBarShowDefault = autoCollapse;
// shows and hides content and picture (if available) of navigation bars
// Parameters:
// indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavigationBar) {
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
if (!NavFrame || !NavToggle) {
return false;
}
// if shown now
if (NavToggle.firstChild.data == NavigationBarHide) {
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if ( hasClass( NavChild, 'NavPic' ) ) {
NavChild.style.display = 'none';
}
if ( hasClass( NavChild, 'NavContent') ) {
NavChild.style.display = 'none';
}
}
NavToggle.firstChild.data = NavigationBarShow;
// if hidden now
} else if (NavToggle.firstChild.data == NavigationBarShow) {
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if (hasClass(NavChild, 'NavPic')) {
NavChild.style.display = 'block';
}
if (hasClass(NavChild, 'NavContent')) {
NavChild.style.display = 'block';
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
}
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton() {
var indexNavigationBar = 0;
// iterate over all < div >-elements
var divs = document.getElementsByTagName("div");
for (var i=0;NavFrame = divs[i];i++) {
// if found a navigation bar
if (hasClass(NavFrame, "NavFrame")) {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
var NavToggleText = document.createTextNode(NavigationBarHide);
NavToggle.appendChild(NavToggleText);
// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
for (
var j=0;
j < NavFrame.childNodes.length;
j++
) {
if (hasClass(NavFrame.childNodes[j], "NavHead")) {
NavFrame.childNodes[j].appendChild(NavToggle);
}
}
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
// if more Navigation Bars found than Default: hide all
if (NavigationBarShowDefault < indexNavigationBar) {
for (
var i=1;
i<=indexNavigationBar;
i++
) {
toggleNavigationBar(i);
}
}
}
addOnloadHook( createNavigationBarToggleButton );
/** 특집 기사에 별표를 붙이는 함수.
* 작성자: [[미상]]
*/
function LinkFA() {
// iterate over all <span>-elements
for (var i=0; a = document.getElementsByTagName("span")[i]; i++) {
// if found a FA span
if (a.className == "FA") {
var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
for ( var j = 0; j < InterwikiLinks.length; j++ ) {
if ( InterwikiLinks[j].className == "interwiki-"+a.id) {
InterwikiLinks[j].className += " FA";
InterwikiLinks[j].title = "이 글은 특집 기사입니다.";
}
}
}
}
}
addOnloadHook(LinkFA);
/** 대문의 탭을 "프로젝트"->"대문"으로 바꾸는 함수.
* 작성자: [[미상]]
*/
function MainPageRenameNamespaceTab() {
try {
var Node = document.getElementById('ca-nstab-project').firstChild;
if (Node.textContent) {
Node.textContent = "대문";
} else if ( Node.innerText ) { // IE
Node.innerText = "대문";
} else {
Node.replaceChild(Node.firstChild, document.createTextNode("대문"));
}
} catch (e) {
}
}
if (wgPageName == "백괴사전:대문" || wgPageName == "백괴사전토론:대문") {
addOnloadHook(MainPageRenameNamespaceTab);
}
/** 자매 프로젝트에 맞게 로고 URL을 변경하는 함수.
* 백괴팩 설치 필요.
* 작성자: [[사용자:Cyrus H.]]
*/
var siflIsUngameMain=false;
function runLogoLinkChanger() {
if (wgPageName.indexOf(":")==-1)
return true;
var siflSlicedPageName=wgPageName.split(":");
var siflPageNamespace=siflSlicedPageName[0];
siflSlicedPageName=siflSlicedPageName[1].split("/");
var siflPageName=siflSlicedPageName[0];
siflSlicedPageName=null;
if (siflPageNamespace=="백괴게임" || siflPageNamespace=="백괴게임토론") {
var siflChilds=document.getElementById("p-logo").childNodes;
for (var siflLoopIndex=0;siflLoopIndex<siflChilds.length;siflLoopIndex++) {
if (siflChilds[siflLoopIndex].tagName=="a" || siflChilds[siflLoopIndex].tagName=="A") {
if (siflIsUngameMain==false)
siflChilds[siflLoopIndex].href="/wiki/백괴게임:"+siflPageName;
else
siflChilds[siflLoopIndex].href="/wiki/대문";
break;
}
}
} else if (siflPageNamespace=="백괴뉴스" || siflPageNamespace=="백괴뉴스토론" || siflPageNamespace=="백괴낱말사전" || siflPageNamespace=="백괴낱말사전토론" || siflPageNamespace=="백괴식당" || siflPageNamespace=="백괴식당토론" || siflPageNamespace=="해설" || siflPageNamespace=="해설토론") {
var siflChilds=document.getElementById("p-logo").childNodes;
for (var siflLoopIndex=0;siflLoopIndex<siflChilds.length;siflLoopIndex++) {
if (siflChilds[siflLoopIndex].tagName=="a" || siflChilds[siflLoopIndex].tagName=="A") {
siflChilds[siflLoopIndex].href="/wiki/"+siflPageNamespace.replace(/토론/,"")+":대문";
break;
}
}
}
}
addOnloadHook(runLogoLinkChanger);
/** 현재 문서의 네임스페이스를 가져오는 함수.
* 작성자: [[사용자:Cyrus H.]]
*/
function getNamespace() {
if (wgPageName.indexOf(":")==-1)
return false;
var siflSlicedPageName=wgPageName.split(":");
return siflSlicedPageName[0];
}
/** 현재 문서의 일반화된 이름을 가져오는 함수.
* 작성자: [[사용자:Cyrus H.]]
*/
function getPageName() {
if(wgPageName.indexOf(":")==-1) {
return wgPageName;
} else {
var siflSlicedPageName=wgPageName.split(":");
return siflSlicedPageName[1];
}
}
/** 일반 문서에 해설 탭을, 해설 문서에 일반 문서 탭을 추가하는 함수.
* 작성자: [[사용자:Cyrus H.]]
*/
function doHaeseolseoThings() {
var siflPageNs=getNamespace();
if (siflPageNs==false) {
addPortletLink('p-cactions',"/wiki/해설:"+wgPageName,"해설","ca-go-to-haeseolseo","이 문서의 해설을 봅니다.","1",document.getElementById("ca-talk").nextSibling);
checkDocumentExistency("해설:"+wgTitle,"ca-go-to-haeseolseo");
} else if (siflPageNs=="해설") {
addPortletLink('p-cactions',"/wiki/"+getPageName(),"문서","ca-return-to-document","백괴사전에 있는 문서를 봅니다.","1",document.getElementById("ca-nstab-.ED.95.B4.EC.84.A4").previousSibling);
addPortletLink('p-cactions',"/wiki/토론:"+getPageName(),"토론","ca-return-to-document-talk","백괴사전에 있는 토론 문서를 봅니다.","1",document.getElementById("ca-nstab-.ED.95.B4.EC.84.A4").previousSibling);
checkDocumentExistency(wgTitle,"ca-return-to-document");
checkDocumentExistency("토론:"+wgTitle,"ca-return-to-document-talk");
} else if (siflPageNs=="토론") {
addPortletLink('p-cactions',"/wiki/해설:"+getPageName(),"해설","ca-go-to-haeseolseo","이 문서의 해설을 봅니다.","1",document.getElementById("ca-talk").nextSibling);
checkDocumentExistency("해설:"+wgTitle,"ca-go-to-haeseolseo");
}
}
addOnloadHook(doHaeseolseoThings);
/** 문서가 존재하는지 존재하지 않는지 판단하여 탭 색을 바꾸는 함수.
* 작성자: [[사용자:Cyrus H.]]
*/
function checkDocumentExistency(documentTitle,tabId) {
dojo.xhrGet({
url:'/w/api.php',
content:{
'action':'query',
'format':'xml',
'titles':documentTitle
},
timeout:5000,
handleAs:'xml',
load:function(response,ioArgs) {
var pageNode=response.documentElement.childNodes[0].childNodes[0].firstChild.attributes;
for(var looper=0;looper<pageNode.length;looper++) {
if(pageNode[looper].nodeName=="missing") {
dojo.query("#"+tabId).addClass("new");
break;
}
}
}
});
return true;
}
/*
* @author [[User:Devunt]]
*/
addOnloadHook(function()
{
if (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;
}
});
/** 임베드 플래시 무비 **************************************************
* 문서에 플래시 파일을 넣을 수 있게 합니다. 오직 현재 사용자공간에서 활성화됩니다.
* [[틀:플래시]]를 참고하십시오.
* By [[:en:User:Olipro|Olipro]]
*/
var flashOk;
function embedFlashMovie( flashOk ) {
mainbody = document.getElementById( 'bodyContent' );
mainbody.innerHTML = contentTempHolder;
spancheck = document.getElementsByTagName( 'span' );
for( i = 0; i < spancheck.length; i++ ) {
if( spancheck[i].getAttribute( 'id' ) != 'embedFlashDoc' ) {
continue;
}
obj = spancheck[i].innerHTML.split( '@' );
flwidth = obj[0];
flheight = obj[1];
flfile = obj[2].replace( 'fullurl://', 'http://' );
showFlash = ' ';
if( flashOk ) {
showFlash = '<object width="' + flwidth + '" height="' + flheight + '"';
showFlash += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"';
showFlash += 'codebase="http://fpdownload.macromedia.com/pub/';
showFlash += 'shockwave/cabs/flash/swflash.cab#version=8,0,0,0">';
showFlash += '<param name="movie" value="' + flfile + '" />';
showFlash += '<embed src="' + flfile + '" width="' + flwidth + '" height=';
showFlash += '"' + flheight + '" type="application/x-shockwave-flash" ';
showFlash += 'pluginspage="http://www.macromedia.com/go/getflashplayer" />';
showFlash += '</object>';
} else {
showFlash = '<a class="plainlinks" href="javascript:embedFlashMovie(true)" onClick="embedFlashMovie(true)">' + flfile + '</a> (신뢰하는 경우 보려면 클릭하십시오.)';
}
spancheck[i].innerHTML = showFlash;
spancheck[i].style.display = 'inline';
}
}
var contentTempHolder;
function embedFlashCheck() {
if( !document.getElementById( 'embedFlashDoc' ) ) {
return;
}
mainbody = document.getElementById( 'bodyContent' );
contentTempHolder = mainbody.innerHTML;
if( typeof displayFlashOverride != 'undefined' ) {
embedFlashMovie( displayFlashOverride );
return;
}
askmessage = '<div align="center" id="askflash">이 게임에는 ';
askmessage += '<a href="/wiki/백괴:플래시" class="plainlinks">플래시</a>가 들어있습니다.<br />';
askmessage += '컴퓨터에 해를 끼칠 수 있으므로 신뢰하는 경우에만 여십시오.<br />';
askmessage += '플래시가 포함된 게임을 보시겠습니까?<br /><b><a href="javascript:embedFlashMovie(true)" ';
askmessage += 'onClick="embedFlashMovie(true)">예</a> | <a ';
askmessage += 'href="javascript:embedFlashMovie(false)" ';
askmessage += 'onClick="embedFlashMovie(false)">아니오</a> | <a ';
askmessage += 'href="/index.php?title=User:' + wgUserName + '/' + skin + '.js&';
askmessage += 'action=edit§ion=new&preload=Template:Flash/disable">';
askmessage += '이 메시지를 다시 표지 않함</a></b></div>';
mainbody.innerHTML = askmessage;
}
addOnloadHook( embedFlashCheck );
/*</nowiki></source>*/