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

식물 vs 좀비 위키
둘러보기로 이동 검색으로 이동
문서를 비움
태그: 비우기
편집 요약 없음
1번째 줄: 1번째 줄:
(function () {
'use strict';


var animationDuration = 360;
var animationEndTime = 0;
var observer = null;
function getWatchButton() {
return document.querySelector('#ca-watch, #ca-unwatch');
}
function startWatchAnimation() {
var button = getWatchButton();
animationEndTime = Date.now() + animationDuration;
if (button) {
button.classList.remove('pvz-watch-spinning');
/* 같은 클래스를 연속으로 적용해도 애니메이션이 다시 시작되게 한다. */
void button.offsetWidth;
button.classList.add('pvz-watch-spinning');
}
}
function continueAnimationAfterStateChange() {
var button;
var remaining;
if (Date.now() >= animationEndTime) {
return;
}
button = getWatchButton();
remaining = animationEndTime - Date.now();
if (!button || button.classList.contains('pvz-watch-spinning')) {
return;
}
button.classList.add('pvz-watch-spinning');
window.setTimeout(function () {
button.classList.remove('pvz-watch-spinning');
}, remaining);
}
function handleClick(event) {
var link = event.target.closest('#ca-watch > a, #ca-unwatch > a');
if (!link) {
return;
}
startWatchAnimation();
}
function init() {
document.addEventListener('click', handleClick, true);
observer = new MutationObserver(function () {
continueAnimationAfterStateChange();
});
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['id']
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init, { once: true });
} else {
init();
}
}());

2026년 7월 27일 (월) 21:40 판

(function () {
	'use strict';

	var animationDuration = 360;
	var animationEndTime = 0;
	var observer = null;

	function getWatchButton() {
		return document.querySelector('#ca-watch, #ca-unwatch');
	}

	function startWatchAnimation() {
		var button = getWatchButton();

		animationEndTime = Date.now() + animationDuration;

		if (button) {
			button.classList.remove('pvz-watch-spinning');

			/* 같은 클래스를 연속으로 적용해도 애니메이션이 다시 시작되게 한다. */
			void button.offsetWidth;
			button.classList.add('pvz-watch-spinning');
		}
	}

	function continueAnimationAfterStateChange() {
		var button;
		var remaining;

		if (Date.now() >= animationEndTime) {
			return;
		}

		button = getWatchButton();
		remaining = animationEndTime - Date.now();

		if (!button || button.classList.contains('pvz-watch-spinning')) {
			return;
		}

		button.classList.add('pvz-watch-spinning');

		window.setTimeout(function () {
			button.classList.remove('pvz-watch-spinning');
		}, remaining);
	}

	function handleClick(event) {
		var link = event.target.closest('#ca-watch > a, #ca-unwatch > a');

		if (!link) {
			return;
		}

		startWatchAnimation();
	}

	function init() {
		document.addEventListener('click', handleClick, true);

		observer = new MutationObserver(function () {
			continueAnimationAfterStateChange();
		});

		observer.observe(document.body, {
			childList: true,
			subtree: true,
			attributes: true,
			attributeFilter: ['id']
		});
	}

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