미디어위키:Gadget-CreatePageUw.js: 두 판 사이의 차이

식물 vs 좀비 위키
둘러보기로 이동 검색으로 이동
편집 요약 없음
편집 요약 없음
 
9번째 줄: 9번째 줄:
}
}


function createNativeInput( originalInput ) {
function insertSproutImage( input, fieldLayout ) {
var fieldLayout;
var imageBox;
var fieldContainer;
var image;
var nativeInput;
var insertionTarget;


if (
if (
originalInput.classList.contains(
document.querySelector(
'pvz-createpage-input'
'.pvz-createpage-sprout'
)
)
) {
) {
originalInput.placeholder =
return;
'새로 재배할 문서의 제목을 입력하세요';
 
return originalInput;
}
}


fieldLayout = originalInput.closest(
imageBox = document.createElement( 'div' );
'.oo-ui-fieldLayout'
imageBox.className = 'pvz-createpage-sprout';
);


fieldContainer = originalInput.closest(
image = document.createElement( 'img' );
'.oo-ui-fieldLayout-field'
image.src = mw.util.getUrl(
'Special:Redirect/file/Sprout_PvZ2.png'
);
);
image.alt = '';
image.className = 'pvz-design-critical';


if ( !fieldContainer ) {
imageBox.appendChild( image );
return originalInput;
}


/*
insertionTarget =
* 기존 input의 이름·ID·필수값·최대 길이 등은 유지하되,
fieldLayout ||
* OOUI 클래스와 인라인 디자인은 모두 제거한다.
input.closest( '.oo-ui-fieldLayout-field' ) ||
*/
input.parentElement;
nativeInput = originalInput.cloneNode( false );


nativeInput.value = originalInput.value;
if (
nativeInput.className =
insertionTarget &&
'pvz-createpage-input';
insertionTarget.parentNode
) {
insertionTarget.parentNode.insertBefore(
imageBox,
insertionTarget
);
}
}


nativeInput.removeAttribute( 'style' );
function customizeInput( input ) {
nativeInput.removeAttribute( 'role' );
var inputWidget;
nativeInput.removeAttribute( 'aria-invalid' );
var fieldLayout;


nativeInput.placeholder =
input.placeholder =
'새로 재배할 문서의 제목을 입력하세요';
'새로 재배할 문서의 제목을 입력하세요';


nativeInput.setAttribute(
input.setAttribute(
'aria-label',
'aria-label',
'새로 재배할 문서의 제목을 입력하세요'
'새로 재배할 문서의 제목을 입력하세요'
);
);


/*
input.classList.add(
* OOUI 입력창 래퍼 전체를 삭제하고
'pvz-createpage-input'
* 일반 입력창 하나만 남긴다.
);
*/
 
fieldContainer.replaceChildren(
inputWidget = input.closest(
nativeInput
'.oo-ui-textInputWidget'
);
 
if ( inputWidget ) {
inputWidget.classList.add(
'pvz-createpage-input-widget'
);
}
 
fieldLayout = input.closest(
'.oo-ui-fieldLayout'
);
);


73번째 줄: 86번째 줄:
}
}


return nativeInput;
insertSproutImage(
input,
fieldLayout
);
}
}


function createNativeSubmitButton(
function customizeSubmitButton( form ) {
form,
var submitButton;
originalButton
var submitWidget;
) {
var fieldLayout;
var fieldLayout;
var fieldContainer;
var label;
var nativeButton;
var attributes;


if ( !originalButton ) {
submitButton = form.querySelector(
return;
'input[type="submit"], ' +
}
'button[type="submit"], ' +
 
'.oo-ui-buttonInputWidget-input, ' +
if (
'.oo-ui-buttonElement-button'
originalButton.classList.contains(
);
'pvz-createpage-submit-button'
)
) {
originalButton.textContent = '제출';
originalButton.setAttribute(
'aria-label',
'제출'
);


if ( !submitButton ) {
return;
return;
}
}


fieldLayout = originalButton.closest(
submitButton.classList.add(
'.oo-ui-fieldLayout'
'pvz-createpage-submit-button'
);
 
fieldContainer = originalButton.closest(
'.oo-ui-fieldLayout-field'
);
);


if ( !fieldContainer ) {
submitButton.setAttribute(
return;
}
 
nativeButton =
document.createElement( 'button' );
 
nativeButton.type = 'submit';
nativeButton.className =
'pvz-createpage-submit-button';
 
nativeButton.textContent = '제출';
nativeButton.setAttribute(
'aria-label',
'aria-label',
'제출'
'제출'
);
);


/*
if (
* 기존 버튼의 제출 관련 속성을 유지한다.
submitButton.tagName.toLowerCase() ===
*/
'input'
attributes = [
) {
'id',
submitButton.value = '제출';
'name',
} else {
'value',
label = submitButton.querySelector(
'title',
'.oo-ui-labelElement-label'
'formaction',
);
'formmethod',
'formenctype',
'formtarget'
];


attributes.forEach( function ( attribute ) {
if ( label ) {
if (
label.textContent = '제출';
originalButton.hasAttribute(
} else {
attribute
submitButton.textContent = '제출';
)
) {
nativeButton.setAttribute(
attribute,
originalButton.getAttribute(
attribute
)
);
}
}
} );
}


if ( originalButton.disabled ) {
submitWidget = submitButton.closest(
nativeButton.disabled = true;
'.oo-ui-buttonInputWidget, ' +
}
'.oo-ui-buttonWidget'
);


if (
if ( submitWidget ) {
originalButton.hasAttribute(
submitWidget.classList.add(
'formnovalidate'
'pvz-createpage-submit-widget'
)
) {
nativeButton.setAttribute(
'formnovalidate',
''
);
);
}
}


/*
fieldLayout = submitButton.closest(
* OOUI 버튼 래퍼 전체를 삭제하고
'.oo-ui-fieldLayout'
* 일반 제출 버튼 하나만 남긴다.
*/
fieldContainer.replaceChildren(
nativeButton
);
);


183번째 줄: 153번째 줄:
fieldLayout.classList.add(
fieldLayout.classList.add(
'pvz-createpage-submit-layout'
'pvz-createpage-submit-layout'
);
}
}
function insertSproutImage(
input,
fieldLayout
) {
var imageBox;
var image;
var insertionTarget;
if (
document.querySelector(
'.pvz-createpage-sprout'
)
) {
return;
}
imageBox =
document.createElement( 'div' );
imageBox.className =
'pvz-createpage-sprout';
image =
document.createElement( 'img' );
image.src = mw.util.getUrl(
'Special:Redirect/file/' +
'Sprout_PvZ2.png'
);
image.alt = '';
image.className =
'pvz-design-critical';
imageBox.appendChild( image );
insertionTarget =
fieldLayout ||
input.parentElement;
if (
insertionTarget &&
insertionTarget.parentNode
) {
insertionTarget.parentNode.insertBefore(
imageBox,
insertionTarget
);
);
}
}
239번째 줄: 158번째 줄:


function initializeCreatePageUw() {
function initializeCreatePageUw() {
var originalInput;
var inputFieldLayout;
var input;
var input;
var form;
var form;
var originalButton;


originalInput = document.getElementById(
input = document.getElementById(
'mw-input-wptitle'
'mw-input-wptitle'
);
);


if ( !originalInput ) {
if ( !input ) {
return;
return;
}
}


inputFieldLayout = originalInput.closest(
customizeInput( input );
'.oo-ui-fieldLayout'
);
 
input = createNativeInput(
originalInput
);
 
insertSproutImage(
input,
inputFieldLayout
);


form = input.closest( 'form' );
form = input.closest( 'form' );


if ( !form ) {
if ( form ) {
return;
customizeSubmitButton( form );
}
}
originalButton = form.querySelector(
'.pvz-createpage-submit-button, ' +
'button[type="submit"], ' +
'input[type="submit"], ' +
'.oo-ui-buttonInputWidget button, ' +
'.oo-ui-buttonInputWidget input'
);
createNativeSubmitButton(
form,
originalButton
);
}
}



2026년 7월 25일 (토) 01:32 기준 최신판

( function () {
	'use strict';

	if (
		mw.config.get( 'wgCanonicalSpecialPageName' ) !==
		'CreatePage'
	) {
		return;
	}

	function insertSproutImage( input, fieldLayout ) {
		var imageBox;
		var image;
		var insertionTarget;

		if (
			document.querySelector(
				'.pvz-createpage-sprout'
			)
		) {
			return;
		}

		imageBox = document.createElement( 'div' );
		imageBox.className = 'pvz-createpage-sprout';

		image = document.createElement( 'img' );
		image.src = mw.util.getUrl(
			'Special:Redirect/file/Sprout_PvZ2.png'
		);
		image.alt = '';
		image.className = 'pvz-design-critical';

		imageBox.appendChild( image );

		insertionTarget =
			fieldLayout ||
			input.closest( '.oo-ui-fieldLayout-field' ) ||
			input.parentElement;

		if (
			insertionTarget &&
			insertionTarget.parentNode
		) {
			insertionTarget.parentNode.insertBefore(
				imageBox,
				insertionTarget
			);
		}
	}

	function customizeInput( input ) {
		var inputWidget;
		var fieldLayout;

		input.placeholder =
			'새로 재배할 문서의 제목을 입력하세요';

		input.setAttribute(
			'aria-label',
			'새로 재배할 문서의 제목을 입력하세요'
		);

		input.classList.add(
			'pvz-createpage-input'
		);

		inputWidget = input.closest(
			'.oo-ui-textInputWidget'
		);

		if ( inputWidget ) {
			inputWidget.classList.add(
				'pvz-createpage-input-widget'
			);
		}

		fieldLayout = input.closest(
			'.oo-ui-fieldLayout'
		);

		if ( fieldLayout ) {
			fieldLayout.classList.add(
				'pvz-createpage-input-layout'
			);
		}

		insertSproutImage(
			input,
			fieldLayout
		);
	}

	function customizeSubmitButton( form ) {
		var submitButton;
		var submitWidget;
		var fieldLayout;
		var label;

		submitButton = form.querySelector(
			'input[type="submit"], ' +
			'button[type="submit"], ' +
			'.oo-ui-buttonInputWidget-input, ' +
			'.oo-ui-buttonElement-button'
		);

		if ( !submitButton ) {
			return;
		}

		submitButton.classList.add(
			'pvz-createpage-submit-button'
		);

		submitButton.setAttribute(
			'aria-label',
			'제출'
		);

		if (
			submitButton.tagName.toLowerCase() ===
			'input'
		) {
			submitButton.value = '제출';
		} else {
			label = submitButton.querySelector(
				'.oo-ui-labelElement-label'
			);

			if ( label ) {
				label.textContent = '제출';
			} else {
				submitButton.textContent = '제출';
			}
		}

		submitWidget = submitButton.closest(
			'.oo-ui-buttonInputWidget, ' +
			'.oo-ui-buttonWidget'
		);

		if ( submitWidget ) {
			submitWidget.classList.add(
				'pvz-createpage-submit-widget'
			);
		}

		fieldLayout = submitButton.closest(
			'.oo-ui-fieldLayout'
		);

		if ( fieldLayout ) {
			fieldLayout.classList.add(
				'pvz-createpage-submit-layout'
			);
		}
	}

	function initializeCreatePageUw() {
		var input;
		var form;

		input = document.getElementById(
			'mw-input-wptitle'
		);

		if ( !input ) {
			return;
		}

		customizeInput( input );

		form = input.closest( 'form' );

		if ( form ) {
			customizeSubmitButton( form );
		}
	}

	if ( document.readyState === 'loading' ) {
		document.addEventListener(
			'DOMContentLoaded',
			initializeCreatePageUw,
			{ once: true }
		);
	} else {
		initializeCreatePageUw();
	}
}() );