User:ネイ/Clock.js

维基百科,自由的百科全书

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

//<syntaxhighlight lang=js>
/*
[[User:Waiesu/Clock.js]]
開発者: [[User:Waiesu]]

導入方法:
	[[Special:MyPage/common.js]]またはスキンごとのjsに
		importScript('User:Waiesu/Clock.js');
	を追加してください
*/

(function (mw) {
'use strict';
	function utcClock() {
		var objDate = new Date();
		var hh = objDate.getUTCHours();
		var mm = objDate.getUTCMinutes();
		var ss = objDate.getUTCSeconds();
		var fff = objDate.getUTCMilliseconds();
		hh = (hh < 10) ? ('<span style="visibility:hidden">0</span>' + hh) : hh;
		mm = (mm < 10) ? (':0' + mm) : (':' + mm);
		ss = (ss < 10) ? (':0' + ss) : (':' + ss);
		span.innerHTML = hh + mm + ss;
		timer = setTimeout(utcClock, 1000 - fff);
	}	
	function localClock() {
		var objDate = new Date();
		var hh = objDate.getHours();
		var mm = objDate.getMinutes();
		var ss = objDate.getSeconds();
		var fff = objDate.getMilliseconds();
		hh = (hh < 10) ? ('<span style="visibility:hidden">0</span>' + hh) : hh;
		mm = (mm < 10) ? (':0' + mm) : (':' + mm);
		ss = (ss < 10) ? (':0' + ss) : (':' + ss);
		span.innerHTML = hh + mm + ss;
		timer = setTimeout(localClock, 1000 - fff);
	}
	function toUTC() {
		func = utcClock;
		small.innerHTML = '(UTC)<span style="visibility:hidden">+0</span>';
	}
	function toLocal() {
		func = localClock;
		var timezone = new Date().getTimezoneOffset() / -60;
		if (timezone < 0) {
			small.textContent = '(UTC' + timezone + ')';
		} else {
			small.textContent = '(UTC+' + timezone + ')';
		}
	}
	
	var type = localStorage.jawpClockType || 'utcClock';	//初期設定

	var func, timer;
	var span = document.createElement('span');	//数字部分
	var small = document.createElement('small');	//タイムゾーン部分
	small.style.marginLeft = '0.25em';
	if (type == 'utcClock') {
		toUTC();
	} else {
		toLocal();
	}

	// clock 用
	var tag = 'li';
	var tagstyle = 'cursor: pointer;';
	var rplelem = document.getElementById('pt-logout');
	switch (mw.config.get('skin')) {
		case 'cologneblue':
			tag = 'span';
			tagstyle += 'font-size: 1.2em;';
			break;
		case 'vector':
			tagstyle += 'font-size: 0.75em;';
			break;
		case 'modern':
			tagstyle += 'color: white;';
			tagstyle += 'padding: 0 1em;';
			break;
		case 'monobook':
			tagstyle += 'text-transform: none;';
			break;
	}
	var clock = document.createElement(tag);
	clock.id = 'pt-clock';
	clock.title = 'クリック: UTC/ローカル切替\nダブルクリック: キャッシュ破棄';
	clock.style.cssText = tagstyle;
	clock.appendChild(span);
	clock.appendChild(small);
	
	rplelem.insertAdjacentElement('beforebegin', clock);
	rplelem.hidden = true;
	func();
	
	clock.onclick = function () {
		clearInterval(timer);
		if (func == utcClock) {
			toLocal();
			localStorage.jawpClockType = 'localClock';
		} else {
			toUTC();
			localStorage.jawpClockType = 'utcClock';
		}
		func();
	};
	clock.ondblclick = function () {
		mw.loader.using('mediawiki.api').then(function () {
			new mw.Api().post({
				action:'purge',
				titles: mw.config.get('wgPageName')
			}).then(function () {
				location.reload();
			}, function () {
				alert('キャッシュを破棄できませんでした');
			});
		});
	};
})(mediaWiki);

//</syntaxhighlight>