Jump to content

MediaWiki:Common.js

From WikiPStory
Revision as of 17:36, 11 May 2026 by WikiSysop (talk | contribs)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
(function () {
	function initQuestPage() {
		var cards = Array.prototype.slice.call(document.querySelectorAll('.pxgq-card'));
		if (!cards.length) {
			return;
		}

		var searchInput = document.querySelector('.js-pxgq-search');
		var regionSelect = document.querySelector('.js-pxgq-region');
		var minInput = document.querySelector('.js-pxgq-min');
		var maxInput = document.querySelector('.js-pxgq-max');
		var accountButtons = Array.prototype.slice.call(document.querySelectorAll('.js-pxgq-account'));
		var currentAccount = 'all';

		function normalize(value) {
			return (value || '').toLowerCase().trim();
		}

		function applyFilters() {
			var search = normalize(searchInput && searchInput.value);
			var region = normalize(regionSelect && regionSelect.value);
			var min = parseInt((minInput && minInput.value) || '0', 10);
			var max = parseInt((maxInput && maxInput.value) || '9999', 10);

			cards.forEach(function (card) {
				var cardSearch = normalize(card.getAttribute('data-search'));
				var cardRegion = normalize(card.getAttribute('data-region'));
				var cardAccount = normalize(card.getAttribute('data-account'));
				var cardMin = parseInt(card.getAttribute('data-level-min') || '0', 10);
				var cardMax = parseInt(card.getAttribute('data-level-max') || '9999', 10);

				var okSearch = !search || cardSearch.indexOf(search) !== -1;
				var okRegion = region === 'all' || !region || cardRegion === region;
				var okAccount = currentAccount === 'all' || cardAccount === currentAccount;
				var okLevel = cardMax >= min && cardMin <= max;

				card.classList.toggle('is-hidden', !(okSearch && okRegion && okAccount && okLevel));
			});
		}

		if (searchInput) {
			searchInput.addEventListener('input', applyFilters);
		}
		if (regionSelect) {
			regionSelect.addEventListener('change', applyFilters);
		}
		if (minInput) {
			minInput.addEventListener('input', applyFilters);
		}
		if (maxInput) {
			maxInput.addEventListener('input', applyFilters);
		}

		accountButtons.forEach(function (button) {
			button.addEventListener('click', function () {
				accountButtons.forEach(function (btn) {
					btn.classList.remove('is-active');
				});
				button.classList.add('is-active');
				currentAccount = button.getAttribute('data-account') || 'all';
				applyFilters();
			});
		});

		document.querySelectorAll('.js-pxgq-spoiler').forEach(function (button) {
			button.addEventListener('click', function () {
				var card = button.closest('.pxgq-card');
				if (!card) {
					return;
				}
				var spoiler = card.querySelector('.pxgq-card-spoiler');
				if (!spoiler) {
					return;
				}
				var isHidden = spoiler.hasAttribute('hidden');
				if (isHidden) {
					spoiler.removeAttribute('hidden');
					button.textContent = 'Ocultar spoiler';
				} else {
					spoiler.setAttribute('hidden', 'hidden');
					button.textContent = 'Ver spoiler';
				}
			});
		});

		applyFilters();
	}

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