コンテンツにスキップ

MediaWiki:Common.js

提供: RTA Wiki
2026年9月25日 (金) 17:36時点におけるOwner (トーク | 投稿記録)による版

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください。
/* RTA Wiki: 管理者以外には既存ページの編集導線を表示しない */
mw.loader.using( 'mediawiki.util' ).then( function () {
	function hideEditLinks() {
		if ( mw.config.get( 'wgUserGroups' ).includes( 'sysop' ) ) {
			return;
		}

		document.querySelectorAll(
			'#ca-edit, #ca-ve-edit, #ca-formedit, [id^="ca-formedit"], a[href*="action=formedit"]'
		).forEach( function ( element ) {
			( element.closest( 'li' ) || element ).remove();
		} );
	}

	if ( document.readyState === 'loading' ) {
		document.addEventListener( 'DOMContentLoaded', hideEditLinks );
	} else {
		hideEditLinks();
	}
} );

/* RTA Wiki: 記録時間から記録秒を自動計算する */
mw.loader.using( 'mediawiki.util' ).then( function () {
	function setUpRecordSeconds() {
		var timeInput = document.querySelector(
			'input[name="RTA記録[記録時間]"], input[name$="[記録時間]"]'
		);
		var secondsInput = document.querySelector(
			'input[name="RTA記録[記録秒]"], input[name$="[記録秒]"]'
		);

		if ( !timeInput || !secondsInput || secondsInput.dataset.rtaAutoSeconds === '1' ) {
			return;
		}

		secondsInput.dataset.rtaAutoSeconds = '1';
		secondsInput.readOnly = true;
		secondsInput.placeholder = '記録時間から自動計算されます';

		var message = document.createElement( 'small' );
		message.style.display = 'block';
		message.style.marginTop = '4px';
		message.style.color = '#54595d';
		secondsInput.insertAdjacentElement( 'afterend', message );

		function updateSeconds() {
			var value = timeInput.value.trim();
			var match = value.match( /^(\d+):([0-5]\d):([0-5]\d)$/ );
			var hours, minutes, seconds;

			if ( match ) {
				hours = Number( match[1] );
				minutes = Number( match[2] );
				seconds = Number( match[3] );
			} else {
				match = value.match( /^([0-5]?\d):([0-5]\d)$/ );

				if ( match ) {
					hours = 0;
					minutes = Number( match[1] );
					seconds = Number( match[2] );
				} else {
					secondsInput.value = '';
					message.textContent = value ?
						'「時:分:秒」または「分:秒」の形式で入力してください。' :
						'記録時間を入力すると自動計算されます。';
					return;
				}
			}

			secondsInput.value = String( hours * 3600 + minutes * 60 + seconds );
			message.textContent = '自動計算: ' + secondsInput.value + ' 秒';
		}

		timeInput.addEventListener( 'input', updateSeconds );
		timeInput.addEventListener( 'change', updateSeconds );
		timeInput.addEventListener( 'blur', updateSeconds );

		if ( timeInput.value ) {
			updateSeconds();
		}
	}

	function start() {
		setUpRecordSeconds();
		mw.hook( 'wikipage.content' ).add( setUpRecordSeconds );
	}

	if ( document.readyState === 'loading' ) {
		document.addEventListener( 'DOMContentLoaded', start );
	} else {
		start();
	}
} );