미디어위키:Common.js

리버티게임, 모두가 만들어가는 자유로운 게임
백괴게임>Peremen님의 2010년 11월 1일 (월) 00:37 판 (새 문서: →‎이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다.: →‎<source lang="javascript"><nowiki>: /** 틀:USERNAME에서 사용하는 바꿔치기 ...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

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

  • 파이어폭스 / 사파리: 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+"&section=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;
  }
});

/*</nowiki></source>*/