Przejdź do zawartości

MediaWiki:Common.js: Różnice pomiędzy wersjami

Z Arcarium Index
Nie podano opisu zmian
Nie podano opisu zmian
Linia 264: Linia 264:
});
});
});
});
$( function () {
    var $search = $( '#p-search .vector-typeahead-search-container' );
    if ( !$search.length || $( '#arcarium-search-link' ).length ) {
        return;
    }
    var lang = mw.config.get( 'wgUserLanguage' );
    var text = lang === 'pl' ? 'Wyszukiwanie zaawansowane' : 'Advanced search';
    $( '<div id="arcarium-search-link" class="arcarium-header-link">' +
        '<a href="https://arcarium.index.bj.uj.edu.pl/sparql/">' + text + '</a>' +
    '</div>' ).insertAfter( '#searchform' );
} );

Wersja z 09:23, 9 lip 2026

mw.loader.using(['mediawiki.util']).then(function () {
	var summaryRunTimer = null;
	var aliasSortTimer = null;

	var propertiesToSummarize = [
		'P6',
		'P7',
		'P29',
		'P20',
		'P19',
		'P17',
		'P25',
		'P16',
		'P26',
		'P27',
		'P10'
	];

	var urlProperties = [
		'P16',
		'P25',
		'P26'
	];

	function escapeHtml(text) {
		return String(text)
			.replace(/&/g, '&amp;')
			.replace(/</g, '&lt;')
			.replace(/>/g, '&gt;')
			.replace(/"/g, '&quot;')
			.replace(/'/g, '&#039;');
	}

	function sortAliases() {
		var aliasContainers = document.querySelectorAll('.wikibase-aliasesview-list');

		aliasContainers.forEach(function (container) {
			var items = Array.from(container.querySelectorAll('.wikibase-aliasesview-list-item'));

			if (items.length <= 1) {
				return;
			}

			items.sort(function (a, b) {
				var textA = a.textContent.trim().toLowerCase();
				var textB = b.textContent.trim().toLowerCase();

				return textA.localeCompare(textB, 'pl');
			});

			items.forEach(function (item) {
				container.appendChild(item);
			});
		});
	}

	function getPropertySummary(propertyId) {
		var group = document.getElementById(propertyId);

		if (!group) {
			return null;
		}

		var labelElement = group.querySelector('.wikibase-statementgroupview-property-label a');
		var label = labelElement ? labelElement.textContent.trim() : propertyId;

		var valueElements = group.querySelectorAll(
			'.wikibase-statementview-mainsnak-container .wikibase-snakview-value'
		);

		var values = [];

		valueElements.forEach(function (valueElement) {
			var cloned = valueElement.cloneNode(true);

			cloned.querySelectorAll('.wb-calendar-name').forEach(function (el) {
				el.remove();
			});

			var value = cloned.textContent.trim().replace(/\s+/g, ' ');

			if (value && values.indexOf(value) === -1) {
				values.push(value);
			}
		});

		if (values.length === 0) {
			return null;
		}

		return {
			id: propertyId,
			label: label,
			values: values
		};
	}

	function renderValue(propertyId, value) {
		if (urlProperties.indexOf(propertyId) === -1) {
			return escapeHtml(value);
		}

		return '<a href="' + escapeHtml(value) + '" target="_blank" rel="noopener noreferrer">' +
			escapeHtml(value) +
			'</a>';
	}

	function replaceHeadingAliasesWithMul() {
		var heading = document.querySelector('.wikibase-entitytermsview-heading');

		if (!heading) {
			return;
		}

		var descriptionElement = heading.querySelector('.wikibase-entitytermsview-heading-description');

		if (!descriptionElement) {
			return;
		}

		var aliasesElement = heading.querySelector('.wikibase-entitytermsview-heading-aliases');

		if (!aliasesElement) {
			aliasesElement = document.createElement('div');
			aliasesElement.className = 'wikibase-entitytermsview-heading-aliases';
			descriptionElement.insertAdjacentElement('afterend', aliasesElement);
		}

		var mulAliases = document.querySelectorAll(
			'.wikibase-entitytermsforlanguageview-mul .wikibase-aliasesview-list-item'
		);

		var aliases = [];

		mulAliases.forEach(function (aliasElement) {
			var alias = aliasElement.textContent.trim().replace(/\s+/g, ' ');

			if (alias && aliases.indexOf(alias) === -1) {
				aliases.push(alias);
			}
		});

		if (aliases.length === 0) {
			return;
		}

		aliasesElement.classList.remove('wb-empty');

		aliasesElement.innerHTML =
			'<ul class="wikibase-entitytermsview-aliases">' +
			aliases.map(function (alias) {
				return '<li class="wikibase-entitytermsview-aliases-alias" data-aliases-separator="|">' +
					escapeHtml(alias) +
					'</li>';
			}).join('') +
			'</ul>';
	}

	function replaceHeadingDescriptionWithSummary() {
		var summaryLines = [];
		var descriptionElement = document.querySelector('.wikibase-entitytermsview-heading-description');

		propertiesToSummarize.forEach(function (propertyId) {
			var summary = getPropertySummary(propertyId);

			if (summary) {
				summaryLines.push(summary);
			}
		});

		if (!descriptionElement || summaryLines.length === 0) {
			return;
		}

		descriptionElement.classList.remove('wb-empty');

		descriptionElement.innerHTML = summaryLines.map(function (summary) {
			var renderedValues = summary.values.map(function (value) {
				return renderValue(summary.id, value);
			}).join(' | ');

			return '<div class="arcarium-summary-line">' +
				'<strong>' + escapeHtml(summary.label) + ':</strong> ' +
				renderedValues +
				'</div>';
		}).join('');
	}

	function addArcariumButton() {
		var qIdElement = document.querySelector('.wikibase-title-id');

		if (!qIdElement || document.querySelector('.arcarium-link-button')) {
			return;
		}

		var match = qIdElement.textContent.match(/Q[0-9]+/);

		if (!match) {
			return;
		}

		var qId = match[0];

		var url =
			'https://jbc-demo.dlibra.psnc.pl/arcarium/dlibra/results?action=AdvancedSearchAction&type=-3&val1=AND:*:' +
			qId +
			'&qf1=availability:Available';

		var button = document.createElement('a');

		button.href = url;
		button.target = '_blank';
		button.rel = 'noopener noreferrer';
		button.className = 'arcarium-link-button';
		button.innerHTML = 'Arcarium Manuscripta <span class="arcarium-external-icon">&#8599;</span>';

		qIdElement.insertAdjacentElement('afterend', button);
	}

	function updateHeadingSummary() {
		replaceHeadingDescriptionWithSummary();
		replaceHeadingAliasesWithMul();
	}

	function runSort() {
		clearTimeout(aliasSortTimer);
		aliasSortTimer = setTimeout(sortAliases, 100);
	}

	function runSummary() {
		clearTimeout(summaryRunTimer);
		summaryRunTimer = setTimeout(updateHeadingSummary, 150);
	}

	function runAll() {
		runSort();
		runSummary();
		addArcariumButton();

		setTimeout(addArcariumButton, 500);
		setTimeout(addArcariumButton, 1500);
	}

	$(document).ready(runAll);
	mw.hook('wikipage.content').add(runAll);
	mw.hook('wikibase.entityPage.entityLoaded').add(runAll);

	$(document).ajaxComplete(function (event, xhr, settings) {
		if (!settings || !settings.data) {
			return;
		}

		if (
			typeof settings.data === 'string' &&
			(
				settings.data.includes('action=wbsetaliases') ||
				settings.data.includes('action=wbsetdescription') ||
				settings.data.includes('action=wbsetclaim') ||
				settings.data.includes('action=wbeditentity')
			)
		) {
			runAll();
		}
	});
});


$( function () {
    var $search = $( '#p-search .vector-typeahead-search-container' );

    if ( !$search.length || $( '#arcarium-search-link' ).length ) {
        return;
    }

    var lang = mw.config.get( 'wgUserLanguage' );
    var text = lang === 'pl' ? 'Wyszukiwanie zaawansowane' : 'Advanced search';

    $( '<div id="arcarium-search-link" class="arcarium-header-link">' +
        '<a href="https://arcarium.index.bj.uj.edu.pl/sparql/">' + text + '</a>' +
    '</div>' ).insertAfter( '#searchform' );
} );