미디어위키:Common.js: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
1번째 줄: 1번째 줄:
/* 사용자 정의 펼치기 · 접기 */
/**
$( function () {
* 이 스크립트는 위키백과 전체에 적용됩니다. 고칠 때는 주의해주세요.
* [[위키백과:위키프로젝트 시스템]] 참고
*
* 스크립트를 넣을 때는 충분한 설명, 출처를 넣어주세요! 이후 관리가 어려워집니다.
**/
 
mw.loader.using( ['mediawiki.util', 'mediawiki.notify', 'jquery.client'], function () {
/* Begin of mw.loader.using callback */
 
/**
* Map addPortletLink to mw.util
*
* @deprecated: Use mw.util.addPortletLink instead.
*/
mw.log.deprecate(
window,
'addPortletLink',
mw.util.addPortletLink,
'Use mw.util.addPortletLink instead'
);
 
/**
* Extract a URL parameter from the current URL
*
* @deprecated: Use mw.util.getParamValue with proper escaping
*/
mw.log.deprecate(
window,
'getURLParamValue',
mw.util.getParamValue,
'Use mw.util.getParamValue instead'
);
 
/**
* Test if an element has a certain class
*
* @deprecated: Use $(element).hasClass() instead.
*/
mw.log.deprecate(
window,
'hasClass',
function ( element, className ) {
return $( element ).hasClass( className );
},
'Use jQuery.hasClass() instead'
);
 
/**
* @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
* @rev 5
*/
 
// CSS
var extraCSS = mw.util.getParamValue( 'withCSS' );
 
if ( extraCSS ) {
if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
importStylesheet( extraCSS );
} else {
mw.notify(
'Only pages from the MediaWiki namespace are allowed.',
{
title: 'Invalid withCSS value'
}
);
}
}
 
// JS
var extraJS = mw.util.getParamValue( 'withJS' );
 
if ( extraJS ) {
if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
importScript( extraJS );
} else {
mw.notify(
'Only pages from the MediaWiki namespace are allowed.',
{
title: 'Invalid withJS value'
}
);
}
}
 
/**
* Import more specific scripts if necessary
*/
 
if ( mw.config.get( 'wgNamespaceNumber' ) === 6 ) {
/* file description page scripts */
importScript( 'MediaWiki:Common.js/file.js' );
}
 
/* ([[위키백과:관리자 요청/2007년 5월#스크립트 추가 요청]]) */
/** Collapsible tables *******************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
*              [[:en:Wikipedia:NavFrame]].
* Maintainers: [[:en:User:R. Koot]]
*/
 
var autoCollapse = 2;
var collapseCaption = '숨기기';
var expandCaption = '보이기';
 
window.collapseTable = function ( tableIndex ) {
var Button = document.getElementById(
'collapseButton' + tableIndex
);
 
var Table = document.getElementById(
'collapsibleTable' + tableIndex
);
 
if ( !Table || !Button ) {
return false;
}
 
var Rows = Table.rows;
var i;
 
if ( Button.firstChild.data === collapseCaption ) {
 
for ( i = 1; i < Rows.length; i++ ) {
Rows[ i ].style.display = 'none';
}
 
Button.firstChild.data = expandCaption;
 
} else {
 
for ( 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 = {};
var Tables = document.getElementsByTagName( 'table' );
var i;
 
function handleButtonLink( index, e ) {
window.collapseTable( index );
e.preventDefault();
}
 
for ( i = 0; i < Tables.length; i++ ) {
 
if ( $( Tables[ i ] ).hasClass( 'collapsible' ) ) {
 
/*
* only add button and increment count
* if there is a header row to work with
*/
var HeaderRow =
Tables[ i ].getElementsByTagName( 'tr' )[ 0 ];
 
if ( !HeaderRow ) {
continue;
}
 
var Header =
HeaderRow.getElementsByTagName( 'th' )[ 0 ];
 
if ( !Header ) {
continue;
}
 
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
);
 
/*
* Styles are declared in Common.css
*/
Button.className = 'collapseButton';
 
ButtonLink.style.color =
Header.style.color;
 
ButtonLink.setAttribute(
'id',
'collapseButton' + tableIndex
);
 
ButtonLink.setAttribute(
'href',
'#'
);
 
$( ButtonLink ).on(
'click',
$.proxy(
handleButtonLink,
ButtonLink,
tableIndex
)
);
 
ButtonLink.appendChild(
ButtonText
);
 
Button.appendChild(
document.createTextNode( '[' )
);
 
Button.appendChild(
ButtonLink
);
 
Button.appendChild(
document.createTextNode( ']' )
);
 
Header.insertBefore(
Button,
Header.firstChild
);
 
tableIndex++;
}
}
 
for ( i = 0; i < tableIndex; i++ ) {
 
if (
$( NavigationBoxes[ i ] ).hasClass( 'collapsed' ) ||
(
tableIndex >= autoCollapse &&
$( NavigationBoxes[ i ] ).hasClass( 'autocollapse' )
)
) {
 
window.collapseTable( i );
 
} else if (
$( NavigationBoxes[ i ] ).hasClass( 'innercollapse' )
) {
 
var element =
NavigationBoxes[ i ];
 
while (
( element = element.parentNode )
) {
 
if (
$( element ).hasClass( 'outercollapse' )
) {
 
window.collapseTable( i );
break;
}
}
}
}
}
 
mw.hook( 'wikipage.content' ).add(
createCollapseButtons
);
 
/* ([[위키백과:관리자 요청/2007년 5월#스크립트 추가 요청]]) */
/** Dynamic Navigation Bars (experimental) **********************************
*
* Description: See [[:en:Wikipedia:NavFrame]].
* Maintainers: UNMAINTAINED
*/
 
/* set up the words in your language */
var NavigationBarHide =
'[' + collapseCaption + ']';
 
var NavigationBarShow =
'[' + expandCaption + ']';
 
/**
* Shows and hides content and picture
* (if available) of navigation bars
*
* Parameters:
* indexNavigationBar:
* the index of navigation bar to be toggled
*/
window.toggleNavigationBar =
function ( indexNavigationBar, event ) {
 
var NavToggle =
document.getElementById(
'NavToggle' + indexNavigationBar
);


$( '.toggleBtn' ).each( function () {
var NavFrame =
document.getElementById(
'NavFrame' + indexNavigationBar
);


var $toggle = $( this );
var NavChild;
var toggleId = $toggle.attr( 'id' );


if ( !toggleId ) {
if ( !NavFrame || !NavToggle ) {
return;
return false;
}
}


var contentId = toggleId.replace( 'toggle', 'collapsible' );
/*
var textId = toggleId.replace( 'toggle', 'toggleText' );
* if shown now
*/
if (
NavToggle.firstChild.data ===
NavigationBarHide
) {
 
for (
NavChild = NavFrame.firstChild;
NavChild !== null;
NavChild = NavChild.nextSibling
) {


var $content = $( '#' + contentId );
if (
var $text = $( '#' + textId );
$( NavChild ).hasClass( 'NavContent' ) ||
$( NavChild ).hasClass( 'NavPic' )
) {


if ( !$content.length ) {
NavChild.style.display =
return;
'none';
}
}
 
NavToggle.firstChild.data =
NavigationBarShow;
 
/*
* if hidden now
*/
} else if (
NavToggle.firstChild.data ===
NavigationBarShow
) {
 
for (
NavChild = NavFrame.firstChild;
NavChild !== null;
NavChild = NavChild.nextSibling
) {
 
if (
$( NavChild ).hasClass( 'NavContent' ) ||
$( NavChild ).hasClass( 'NavPic' )
) {
 
NavChild.style.display =
'block';
}
}
 
NavToggle.firstChild.data =
NavigationBarHide;
}
}
event.preventDefault();
};
/*
* adds show/hide-button
* to navigation bars
*/
function createNavigationBarToggleButton() {
var indexNavigationBar = 0;
var NavFrame;
var NavChild;
/*
* iterate over all div-elements
*/
var divs =
document.getElementsByTagName( 'div' );
for (
var i = 0;
( NavFrame = divs[ i ] );
i++
) {


/*
/*
* 처음에는 접힌 상태
* if found a navigation bar
*/
*/
$content.hide();
if (
$( NavFrame ).hasClass( 'NavFrame' )
) {


$toggle
indexNavigationBar++;
.attr( 'aria-expanded', 'false' )
.css( 'cursor', 'pointer' );


$toggle.on( 'click', function ( event ) {
var NavToggle =
document.createElement( 'a' );


event.preventDefault();
NavToggle.className =
'NavToggle';


/*
NavToggle.setAttribute(
* 빠르게 여러 번 클릭했을 때
'id',
* 애니메이션이 계속 쌓이는 현상 방지
'NavToggle' + indexNavigationBar
);
 
NavToggle.setAttribute(
'href',
'#'
);
 
$( NavToggle ).on(
'click',
$.proxy(
window.toggleNavigationBar,
window,
indexNavigationBar
)
);
 
var isCollapsed =
$( NavFrame ).hasClass(
'collapsed'
);
 
/**
* Check if any children are already hidden.
* This loop is here for backwards compatibility.
*/
*/
$content.stop( true, false );
for (
NavChild = NavFrame.firstChild;
NavChild != null &&
!isCollapsed;
NavChild = NavChild.nextSibling
) {


if ( $content.is( ':visible' ) ) {
if (
$( NavChild ).hasClass( 'NavPic' ) ||
$( NavChild ).hasClass( 'NavContent' )
) {


/*
if (
* 접기
NavChild.style.display ===
*/
'none'
$content.slideUp( {
) {
duration: 300,
 
easing: 'swing',
isCollapsed = true;
}
}
}
 
if ( isCollapsed ) {


complete: function () {
for (
NavChild = NavFrame.firstChild;
NavChild != null;
NavChild =
NavChild.nextSibling
) {


/*
if (
* jQuery 애니메이션 중 생성된
$( NavChild ).hasClass( 'NavPic' ) ||
* 불필요한 스타일 제거
$( NavChild ).hasClass( 'NavContent' )
*/
) {
$content.css( {
height: '',
paddingTop: '',
paddingBottom: '',
marginTop: '',
marginBottom: '',
overflow: ''
} );


/*
NavChild.style.display =
* 접힌 상태만 유지
'none';
*/
$content.hide();
}
}
} );
}
}


$toggle.attr(
var NavToggleText =
'aria-expanded',
document.createTextNode(
'false'
isCollapsed ?
NavigationBarShow :
NavigationBarHide
);
);


} else {
NavToggle.appendChild(
NavToggleText
);
 
/*
* Find the NavHead and
* attach the toggle link
*/
for (
var j = 0;
j < NavFrame.childNodes.length;
j++
) {
 
if (
$( NavFrame.childNodes[ j ] )
.hasClass( 'NavHead' )
) {
 
NavToggle.style.color =
NavFrame
.childNodes[ j ]
.style.color;
 
NavFrame
.childNodes[ j ]
.appendChild(
NavToggle
);
}
}
 
NavFrame.setAttribute(
'id',
'NavFrame' +
indexNavigationBar
);
}
}
}
 
mw.hook( 'wikipage.content' ).add(
createNavigationBarToggleButton
);
 
/***** 그림 정보 틀을 자동으로 불러옴 ********
* Adds a link to subpages of current page
* from commons.wikimedia.org
* Maintainers: [[User:Yonidebest]], [[User:Dschwen]]
* [[사용자:Kwj2772]]가 수정
* JSconfig items: bool 'loadAutoInformationTemplate'
*                    (true=enabled (default), false=disabled)
* JSConfig를 사용하지 않도록 수정함.
* --[[사용자:Klutzy|Klutzy]]
********************************************/
 
if (
mw.config.get(
'wgCanonicalSpecialPageName'
) == 'Upload'
) {
 
importScript(
'MediaWiki:Upload.js'
);
}
 
/*
* 인터랙티브 지도.
* 영어 위키백과에서 가져옴.
*/
 
/**
* WikiMiniAtlas
*
* Description:
* WikiMiniAtlas is a popup click and drag
* world map.
*
* Maintainers: [[User:Dschwen]]
*/
( function () {
 
var require_wikiminiatlas = false;
var coord_filter = /geohack/;
 
$( function () {
 
$( 'a.external.text' ).each(
function ( key, link ) {
 
if (
link.href &&
coord_filter.exec(
link.href
)
) {
 
require_wikiminiatlas =
true;
 
return false;
}
}
);
 
if (
$( 'div.kmldata' ).length
) {
 
require_wikiminiatlas =
true;
}
 
if ( require_wikiminiatlas ) {
 
mw.loader.load(
'//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript'
);
}
} );
 
}() );
 
/**
* Fix for Windows XP Unicode font rendering
*/
if (
navigator.appVersion.search(
/windows nt 5/i
) !== -1
) {
 
mw.util.addCSS(
'.IPA {' +
'font-family:' +
'"Lucida Sans Unicode",' +
'"Arial Unicode MS";' +
'} ' +
 
'.Unicode {' +
'font-family:' +
'"Arial Unicode MS",' +
'"Lucida Sans Unicode";' +
'} '
);
}
 
/**
* 편집 안내
*
* 생존 인물에 대한 편집 안내.
* 영어 위키백과에서 가져옴
*/
function addEditIntro( name ) {
 
$( '.mw-editsection, #ca-edit' )
.find( 'a' )
.each(
function () {
 
this.href =
$( this ).attr(
'href'
) +
'&editintro=' +
name;
}
);
}
 
if (
mw.config.get(
'wgNamespaceNumber'
) === 0
) {
 
$( function () {
 
var cats =
mw.config.get(
'wgCategories'
);
 
if ( !cats ) {
return;
}
 
if (
$.inArray(
'살아있는 사람',
cats
) !== -1 ||
 
$.inArray(
'생사 불명',
cats
) !== -1
) {
 
addEditIntro(
'틀:BLP_편집_안내'
);
}
} );
}
 
 
/* =========================================================
* 사용자 정의 펼치기 · 접기
*
* 예:
*
* id="toggleCompany"
*          ↓
* id="collapsibleCompany"
*
* 선택적으로:
* id="toggleTextCompany"
*
* 투명도 효과 없이 높이만 300ms 동안 애니메이션
* =========================================================
*/
 
function initializeCustomToggle( $root ) {
 
$root.find( '.toggleBtn' )
.addBack( '.toggleBtn' )
.each( function () {
 
var $toggle =
$( this );
 
/*
* 동일 요소 중복 초기화 방지
*/
if (
$toggle.data(
'custom-toggle-initialized'
)
) {
return;
}


/*
var toggleId =
* 펼치기
$toggle.attr( 'id' );
*/
$content.slideDown( {
duration: 300,
easing: 'swing',


complete: function () {
if ( !toggleId ) {
return;
}


/*
/*
* 애니메이션이 끝난 뒤
* toggleXXX
* height / margin / padding 등을 제거해
* → collapsibleXXX
* 원래 레이아웃으로 복귀
*/
*/
var contentId =
$content.css( {
toggleId.replace(
height: '',
'toggle',
paddingTop: '',
'collapsible'
paddingBottom: '',
);
marginTop: '',
marginBottom: '',
overflow: ''
} );
}
} );


$toggle.attr(
/*
'aria-expanded',
* toggleXXX
'true'
* → toggleTextXXX
*/
var textId =
toggleId.replace(
'toggle',
'toggleText'
);
);
var $content =
$( '#' + contentId );
var $text =
$( '#' + textId );
if ( !$content.length ) {
return;
}
}


if ( $text.length ) {
$toggle.data(
$text.html(
'custom-toggle-initialized',
'[ 펼치기 · 접기 ]'
true
);
 
/*
* 최초 상태는 접힘
*/
$content.hide();
 
$toggle.attr( {
'aria-expanded':
'false',
'tabindex':
$toggle.attr(
'tabindex'
) || '0'
} );
 
/*
* 펼치기/접기 실행
*/
function toggleContent() {
 
/*
* 진행 중인 애니메이션의
* 끝 상태로 강제 이동하지 않고
* 현재 상태에서 정리
*/
$content.stop(
true,
false
);
);
if (
$content.is(
':visible'
)
) {
/*
* 접기
*/
$toggle.attr(
'aria-expanded',
'false'
);
$content.slideUp(
300,
function () {
/*
* jQuery가 애니메이션 과정에서
* 넣은 높이 관련 스타일 정리.
*
* display:none은 slideUp이 유지.
*/
$content.css( {
height: '',
paddingTop: '',
paddingBottom: '',
marginTop: '',
marginBottom: '',
overflow: ''
} );
}
);
} else {
/*
* 펼치기
*/
$toggle.attr(
'aria-expanded',
'true'
);
$content.slideDown(
300,
function () {
/*
* 펼친 뒤에는 원래 CSS가
* 크기와 여백을 다시 결정.
*/
$content.css( {
height: '',
paddingTop: '',
paddingBottom: '',
marginTop: '',
marginBottom: '',
overflow: '',
display: ''
} );
}
);
}
/*
* 토글 문구가 따로 있는 경우
*/
if ( $text.length ) {
$text.text(
'[ 펼치기 · 접기 ]'
);
}
}
}


/*
* 마우스 클릭
*/
$toggle.on(
'click.customToggle',
function ( event ) {
event.preventDefault();
toggleContent();
}
);
/*
* 키보드
* Enter / Space
*/
$toggle.on(
'keydown.customToggle',
function ( event ) {
if (
event.key === 'Enter' ||
event.key === ' '
) {
event.preventDefault();
toggleContent();
}
}
);
} );
} );
}
/*
* 일반 문서 최초 로딩
*/
$( function () {
initializeCustomToggle(
$( document )
);
} );
/*
* AJAX / VisualEditor / 동적 콘텐츠 등으로
* 문서 내용이 다시 삽입되는 경우에도 초기화
*/
mw.hook( 'wikipage.content' ).add(
function ( $content ) {
initializeCustomToggle(
$content
);
}
);


} );


/* End of mw.loader.using callback */
} );
} );
/* DO NOT ADD CODE BELOW THIS LINE */

2026년 8월 20일 (목) 13:45 판

/**
 * 이 스크립트는 위키백과 전체에 적용됩니다. 고칠 때는 주의해주세요.
 * [[위키백과:위키프로젝트 시스템]] 참고
 *
 * 스크립트를 넣을 때는 충분한 설명, 출처를 넣어주세요! 이후 관리가 어려워집니다.
 **/

mw.loader.using( ['mediawiki.util', 'mediawiki.notify', 'jquery.client'], function () {
/* Begin of mw.loader.using callback */

/**
 * Map addPortletLink to mw.util
 *
 * @deprecated: Use mw.util.addPortletLink instead.
 */
mw.log.deprecate(
	window,
	'addPortletLink',
	mw.util.addPortletLink,
	'Use mw.util.addPortletLink instead'
);

/**
 * Extract a URL parameter from the current URL
 *
 * @deprecated: Use mw.util.getParamValue with proper escaping
 */
mw.log.deprecate(
	window,
	'getURLParamValue',
	mw.util.getParamValue,
	'Use mw.util.getParamValue instead'
);

/**
 * Test if an element has a certain class
 *
 * @deprecated: Use $(element).hasClass() instead.
 */
mw.log.deprecate(
	window,
	'hasClass',
	function ( element, className ) {
		return $( element ).hasClass( className );
	},
	'Use jQuery.hasClass() instead'
);

/**
 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
 * @rev 5
 */

// CSS
var extraCSS = mw.util.getParamValue( 'withCSS' );

if ( extraCSS ) {
	if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
		importStylesheet( extraCSS );
	} else {
		mw.notify(
			'Only pages from the MediaWiki namespace are allowed.',
			{
				title: 'Invalid withCSS value'
			}
		);
	}
}

// JS
var extraJS = mw.util.getParamValue( 'withJS' );

if ( extraJS ) {
	if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
		importScript( extraJS );
	} else {
		mw.notify(
			'Only pages from the MediaWiki namespace are allowed.',
			{
				title: 'Invalid withJS value'
			}
		);
	}
}

/**
 * Import more specific scripts if necessary
 */

if ( mw.config.get( 'wgNamespaceNumber' ) === 6 ) {
	/* file description page scripts */
	importScript( 'MediaWiki:Common.js/file.js' );
}

/* ([[위키백과:관리자 요청/2007년 5월#스크립트 추가 요청]]) */
/** Collapsible tables *******************************************************
 *
 * Description: Allows tables to be collapsed, showing only the header. See
 *              [[:en:Wikipedia:NavFrame]].
 * Maintainers: [[:en:User:R. Koot]]
 */

var autoCollapse = 2;
var collapseCaption = '숨기기';
var expandCaption = '보이기';

window.collapseTable = function ( tableIndex ) {
	var Button = document.getElementById(
		'collapseButton' + tableIndex
	);

	var Table = document.getElementById(
		'collapsibleTable' + tableIndex
	);

	if ( !Table || !Button ) {
		return false;
	}

	var Rows = Table.rows;
	var i;

	if ( Button.firstChild.data === collapseCaption ) {

		for ( i = 1; i < Rows.length; i++ ) {
			Rows[ i ].style.display = 'none';
		}

		Button.firstChild.data = expandCaption;

	} else {

		for ( 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 = {};
	var Tables = document.getElementsByTagName( 'table' );
	var i;

	function handleButtonLink( index, e ) {
		window.collapseTable( index );
		e.preventDefault();
	}

	for ( i = 0; i < Tables.length; i++ ) {

		if ( $( Tables[ i ] ).hasClass( 'collapsible' ) ) {

			/*
			 * only add button and increment count
			 * if there is a header row to work with
			 */
			var HeaderRow =
				Tables[ i ].getElementsByTagName( 'tr' )[ 0 ];

			if ( !HeaderRow ) {
				continue;
			}

			var Header =
				HeaderRow.getElementsByTagName( 'th' )[ 0 ];

			if ( !Header ) {
				continue;
			}

			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
				);

			/*
			 * Styles are declared in Common.css
			 */
			Button.className = 'collapseButton';

			ButtonLink.style.color =
				Header.style.color;

			ButtonLink.setAttribute(
				'id',
				'collapseButton' + tableIndex
			);

			ButtonLink.setAttribute(
				'href',
				'#'
			);

			$( ButtonLink ).on(
				'click',
				$.proxy(
					handleButtonLink,
					ButtonLink,
					tableIndex
				)
			);

			ButtonLink.appendChild(
				ButtonText
			);

			Button.appendChild(
				document.createTextNode( '[' )
			);

			Button.appendChild(
				ButtonLink
			);

			Button.appendChild(
				document.createTextNode( ']' )
			);

			Header.insertBefore(
				Button,
				Header.firstChild
			);

			tableIndex++;
		}
	}

	for ( i = 0; i < tableIndex; i++ ) {

		if (
			$( NavigationBoxes[ i ] ).hasClass( 'collapsed' ) ||
			(
				tableIndex >= autoCollapse &&
				$( NavigationBoxes[ i ] ).hasClass( 'autocollapse' )
			)
		) {

			window.collapseTable( i );

		} else if (
			$( NavigationBoxes[ i ] ).hasClass( 'innercollapse' )
		) {

			var element =
				NavigationBoxes[ i ];

			while (
				( element = element.parentNode )
			) {

				if (
					$( element ).hasClass( 'outercollapse' )
				) {

					window.collapseTable( i );
					break;
				}
			}
		}
	}
}

mw.hook( 'wikipage.content' ).add(
	createCollapseButtons
);

/* ([[위키백과:관리자 요청/2007년 5월#스크립트 추가 요청]]) */
/** Dynamic Navigation Bars (experimental) **********************************
 *
 * Description: See [[:en:Wikipedia:NavFrame]].
 * Maintainers: UNMAINTAINED
 */

/* set up the words in your language */
var NavigationBarHide =
	'[' + collapseCaption + ']';

var NavigationBarShow =
	'[' + expandCaption + ']';

/**
 * Shows and hides content and picture
 * (if available) of navigation bars
 *
 * Parameters:
 * indexNavigationBar:
 * the index of navigation bar to be toggled
 */
window.toggleNavigationBar =
	function ( indexNavigationBar, event ) {

		var NavToggle =
			document.getElementById(
				'NavToggle' + indexNavigationBar
			);

		var NavFrame =
			document.getElementById(
				'NavFrame' + indexNavigationBar
			);

		var NavChild;

		if ( !NavFrame || !NavToggle ) {
			return false;
		}

		/*
		 * if shown now
		 */
		if (
			NavToggle.firstChild.data ===
			NavigationBarHide
		) {

			for (
				NavChild = NavFrame.firstChild;
				NavChild !== null;
				NavChild = NavChild.nextSibling
			) {

				if (
					$( NavChild ).hasClass( 'NavContent' ) ||
					$( NavChild ).hasClass( 'NavPic' )
				) {

					NavChild.style.display =
						'none';
				}
			}

			NavToggle.firstChild.data =
				NavigationBarShow;

		/*
		 * if hidden now
		 */
		} else if (
			NavToggle.firstChild.data ===
			NavigationBarShow
		) {

			for (
				NavChild = NavFrame.firstChild;
				NavChild !== null;
				NavChild = NavChild.nextSibling
			) {

				if (
					$( NavChild ).hasClass( 'NavContent' ) ||
					$( NavChild ).hasClass( 'NavPic' )
				) {

					NavChild.style.display =
						'block';
				}
			}

			NavToggle.firstChild.data =
				NavigationBarHide;
		}

		event.preventDefault();
	};

/*
 * adds show/hide-button
 * to navigation bars
 */
function createNavigationBarToggleButton() {
	var indexNavigationBar = 0;
	var NavFrame;
	var NavChild;

	/*
	 * iterate over all div-elements
	 */
	var divs =
		document.getElementsByTagName( 'div' );

	for (
		var i = 0;
		( NavFrame = divs[ i ] );
		i++
	) {

		/*
		 * if found a navigation bar
		 */
		if (
			$( NavFrame ).hasClass( 'NavFrame' )
		) {

			indexNavigationBar++;

			var NavToggle =
				document.createElement( 'a' );

			NavToggle.className =
				'NavToggle';

			NavToggle.setAttribute(
				'id',
				'NavToggle' + indexNavigationBar
			);

			NavToggle.setAttribute(
				'href',
				'#'
			);

			$( NavToggle ).on(
				'click',
				$.proxy(
					window.toggleNavigationBar,
					window,
					indexNavigationBar
				)
			);

			var isCollapsed =
				$( NavFrame ).hasClass(
					'collapsed'
				);

			/**
			 * Check if any children are already hidden.
			 * This loop is here for backwards compatibility.
			 */
			for (
				NavChild = NavFrame.firstChild;
				NavChild != null &&
				!isCollapsed;
				NavChild = NavChild.nextSibling
			) {

				if (
					$( NavChild ).hasClass( 'NavPic' ) ||
					$( NavChild ).hasClass( 'NavContent' )
				) {

					if (
						NavChild.style.display ===
						'none'
					) {

						isCollapsed = true;
					}
				}
			}

			if ( isCollapsed ) {

				for (
					NavChild = NavFrame.firstChild;
					NavChild != null;
					NavChild =
						NavChild.nextSibling
				) {

					if (
						$( NavChild ).hasClass( 'NavPic' ) ||
						$( NavChild ).hasClass( 'NavContent' )
					) {

						NavChild.style.display =
							'none';
					}
				}
			}

			var NavToggleText =
				document.createTextNode(
					isCollapsed ?
						NavigationBarShow :
						NavigationBarHide
				);

			NavToggle.appendChild(
				NavToggleText
			);

			/*
			 * Find the NavHead and
			 * attach the toggle link
			 */
			for (
				var j = 0;
				j < NavFrame.childNodes.length;
				j++
			) {

				if (
					$( NavFrame.childNodes[ j ] )
						.hasClass( 'NavHead' )
				) {

					NavToggle.style.color =
						NavFrame
							.childNodes[ j ]
							.style.color;

					NavFrame
						.childNodes[ j ]
						.appendChild(
							NavToggle
						);
				}
			}

			NavFrame.setAttribute(
				'id',
				'NavFrame' +
				indexNavigationBar
			);
		}
	}
}

mw.hook( 'wikipage.content' ).add(
	createNavigationBarToggleButton
);

/***** 그림 정보 틀을 자동으로 불러옴 ********
 * Adds a link to subpages of current page
 * from commons.wikimedia.org
 * Maintainers: [[User:Yonidebest]], [[User:Dschwen]]
 * [[사용자:Kwj2772]]가 수정
 * JSconfig items: bool 'loadAutoInformationTemplate'
 *                    (true=enabled (default), false=disabled)
 * JSConfig를 사용하지 않도록 수정함.
 * --[[사용자:Klutzy|Klutzy]]
 ********************************************/

if (
	mw.config.get(
		'wgCanonicalSpecialPageName'
	) == 'Upload'
) {

	importScript(
		'MediaWiki:Upload.js'
	);
}

/*
 * 인터랙티브 지도.
 * 영어 위키백과에서 가져옴.
 */

/**
 * WikiMiniAtlas
 *
 * Description:
 * WikiMiniAtlas is a popup click and drag
 * world map.
 *
 * Maintainers: [[User:Dschwen]]
 */
( function () {

	var require_wikiminiatlas = false;
	var coord_filter = /geohack/;

	$( function () {

		$( 'a.external.text' ).each(
			function ( key, link ) {

				if (
					link.href &&
					coord_filter.exec(
						link.href
					)
				) {

					require_wikiminiatlas =
						true;

					return false;
				}
			}
		);

		if (
			$( 'div.kmldata' ).length
		) {

			require_wikiminiatlas =
				true;
		}

		if ( require_wikiminiatlas ) {

			mw.loader.load(
				'//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript'
			);
		}
	} );

}() );

/**
 * Fix for Windows XP Unicode font rendering
 */
if (
	navigator.appVersion.search(
		/windows nt 5/i
	) !== -1
) {

	mw.util.addCSS(
		'.IPA {' +
			'font-family:' +
			'"Lucida Sans Unicode",' +
			'"Arial Unicode MS";' +
		'} ' +

		'.Unicode {' +
			'font-family:' +
			'"Arial Unicode MS",' +
			'"Lucida Sans Unicode";' +
		'} '
	);
}

/**
 * 편집 안내
 *
 * 생존 인물에 대한 편집 안내.
 * 영어 위키백과에서 가져옴
 */
function addEditIntro( name ) {

	$( '.mw-editsection, #ca-edit' )
		.find( 'a' )
		.each(
			function () {

				this.href =
					$( this ).attr(
						'href'
					) +
					'&editintro=' +
					name;
			}
		);
}

if (
	mw.config.get(
		'wgNamespaceNumber'
	) === 0
) {

	$( function () {

		var cats =
			mw.config.get(
				'wgCategories'
			);

		if ( !cats ) {
			return;
		}

		if (
			$.inArray(
				'살아있는 사람',
				cats
			) !== -1 ||

			$.inArray(
				'생사 불명',
				cats
			) !== -1
		) {

			addEditIntro(
				'틀:BLP_편집_안내'
			);
		}
	} );
}


/* =========================================================
 * 사용자 정의 펼치기 · 접기
 *
 * 예:
 *
 * id="toggleCompany"
 *          ↓
 * id="collapsibleCompany"
 *
 * 선택적으로:
 * id="toggleTextCompany"
 *
 * 투명도 효과 없이 높이만 300ms 동안 애니메이션
 * =========================================================
 */

function initializeCustomToggle( $root ) {

	$root.find( '.toggleBtn' )
		.addBack( '.toggleBtn' )
		.each( function () {

			var $toggle =
				$( this );

			/*
			 * 동일 요소 중복 초기화 방지
			 */
			if (
				$toggle.data(
					'custom-toggle-initialized'
				)
			) {
				return;
			}

			var toggleId =
				$toggle.attr( 'id' );

			if ( !toggleId ) {
				return;
			}

			/*
			 * toggleXXX
			 * → collapsibleXXX
			 */
			var contentId =
				toggleId.replace(
					'toggle',
					'collapsible'
				);

			/*
			 * toggleXXX
			 * → toggleTextXXX
			 */
			var textId =
				toggleId.replace(
					'toggle',
					'toggleText'
				);

			var $content =
				$( '#' + contentId );

			var $text =
				$( '#' + textId );

			if ( !$content.length ) {
				return;
			}

			$toggle.data(
				'custom-toggle-initialized',
				true
			);

			/*
			 * 최초 상태는 접힘
			 */
			$content.hide();

			$toggle.attr( {
				'aria-expanded':
					'false',
				'tabindex':
					$toggle.attr(
						'tabindex'
					) || '0'
			} );

			/*
			 * 펼치기/접기 실행
			 */
			function toggleContent() {

				/*
				 * 진행 중인 애니메이션의
				 * 끝 상태로 강제 이동하지 않고
				 * 현재 상태에서 정리
				 */
				$content.stop(
					true,
					false
				);

				if (
					$content.is(
						':visible'
					)
				) {

					/*
					 * 접기
					 */
					$toggle.attr(
						'aria-expanded',
						'false'
					);

					$content.slideUp(
						300,
						function () {

							/*
							 * jQuery가 애니메이션 과정에서
							 * 넣은 높이 관련 스타일 정리.
							 *
							 * display:none은 slideUp이 유지.
							 */
							$content.css( {
								height: '',
								paddingTop: '',
								paddingBottom: '',
								marginTop: '',
								marginBottom: '',
								overflow: ''
							} );
						}
					);

				} else {

					/*
					 * 펼치기
					 */
					$toggle.attr(
						'aria-expanded',
						'true'
					);

					$content.slideDown(
						300,
						function () {

							/*
							 * 펼친 뒤에는 원래 CSS가
							 * 크기와 여백을 다시 결정.
							 */
							$content.css( {
								height: '',
								paddingTop: '',
								paddingBottom: '',
								marginTop: '',
								marginBottom: '',
								overflow: '',
								display: ''
							} );
						}
					);
				}

				/*
				 * 토글 문구가 따로 있는 경우
				 */
				if ( $text.length ) {

					$text.text(
						'[ 펼치기 · 접기 ]'
					);
				}
			}

			/*
			 * 마우스 클릭
			 */
			$toggle.on(
				'click.customToggle',
				function ( event ) {

					event.preventDefault();

					toggleContent();
				}
			);

			/*
			 * 키보드
			 * Enter / Space
			 */
			$toggle.on(
				'keydown.customToggle',
				function ( event ) {

					if (
						event.key === 'Enter' ||
						event.key === ' '
					) {

						event.preventDefault();

						toggleContent();
					}
				}
			);
		} );
}


/*
 * 일반 문서 최초 로딩
 */
$( function () {

	initializeCustomToggle(
		$( document )
	);
} );


/*
 * AJAX / VisualEditor / 동적 콘텐츠 등으로
 * 문서 내용이 다시 삽입되는 경우에도 초기화
 */
mw.hook( 'wikipage.content' ).add(
	function ( $content ) {

		initializeCustomToggle(
			$content
		);
	}
);


/* End of mw.loader.using callback */
} );

/* DO NOT ADD CODE BELOW THIS LINE */