Jump to content

MediaWiki:Common.js

From WikiPStory
Revision as of 17:29, 11 May 2026 by WikiSysop (talk | contribs) (Created page with "mw.loader.using('mediawiki.util').then(function () { function initQuestFilters() { var container = document.querySelector('.quest-cards'); if (!container) { return; } var cards = Array.prototype.slice.call(container.querySelectorAll('.quest-card')); var searchInput = document.querySelector('.quest-filter-search'); var regionSelect = document.querySelector('.quest-filter-region'); var minInput = document.querySelector('.quest-filter-min'); var maxInpu...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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.
mw.loader.using('mediawiki.util').then(function () {
	function initQuestFilters() {
		var container = document.querySelector('.quest-cards');
		if (!container) {
			return;
		}

		var cards = Array.prototype.slice.call(container.querySelectorAll('.quest-card'));
		var searchInput = document.querySelector('.quest-filter-search');
		var regionSelect = document.querySelector('.quest-filter-region');
		var minInput = document.querySelector('.quest-filter-min');
		var maxInput = document.querySelector('.quest-filter-max');
		var accountButtons = Array.prototype.slice.call(document.querySelectorAll('.quest-account-toggle button'));
		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 minLevel = parseInt((minInput && minInput.value) || '0', 10);
			var maxLevel = parseInt((maxInput && maxInput.value) || '9999', 10);

			cards.forEach(function (card) {
				var name = normalize(card.dataset.name);
				var cardRegion = normalize(card.dataset.region);
				var cardAccount = normalize(card.dataset.account);
				var cardMin = parseInt(card.dataset.levelMin || '0', 10);
				var cardMax = parseInt(card.dataset.levelMax || '9999', 10);

				var matchesSearch = !search || name.indexOf(search) !== -1;
				var matchesRegion = !region || region === 'all' || cardRegion === region;
				var matchesAccount = currentAccount === 'all' || cardAccount === currentAccount;
				var matchesLevel = cardMax >= minLevel && cardMin <= maxLevel;

				var visible = matchesSearch && matchesRegion && matchesAccount && matchesLevel;
				card.classList.toggle('is-hidden', !visible);
			});
		}

		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();
			});
		});

		applyFilters();
	}

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