Przejdź do zawartości

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

Z Arcarium Index
Nie podano opisu zmian
Nie podano opisu zmian
Linia 1: Linia 1:
/* Umieszczony tutaj kod JavaScript zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. */
mw.loader.using(['mediawiki.util']).then(function () {
mw.loader.using(['mediawiki.util']).then(function () {
var summaryRunTimer = null;
var aliasSortTimer = null;


    function sortAliases() {
var propertiesToSummarize = [
        const aliasContainers = document.querySelectorAll('.wikibase-aliasesview-list');
'P6',
'P7',
'P29',
'P20',
'P19',
'P17',
'P25',
'P16',
'P26',
'P27',
'P10'
];


        aliasContainers.forEach(function (container) {
var urlProperties = [
            const items = Array.from(container.querySelectorAll('.wikibase-aliasesview-list-item'));
'P16',
'P25',
'P26'
];


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


            items.sort(function (a, b) {
function sortAliases() {
                const textA = a.textContent.trim().toLowerCase();
var aliasContainers = document.querySelectorAll('.wikibase-aliasesview-list');
                const textB = b.textContent.trim().toLowerCase();
                return textA.localeCompare(textB, 'pl');
            });


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


    function runSort() {
if (items.length <= 1) {
        setTimeout(sortAliases, 100);
return;
    }
}


    $(document).ready(runSort);
items.sort(function (a, b) {
    mw.hook('wikipage.content').add(runSort);
var textA = a.textContent.trim().toLowerCase();
    mw.hook('wikibase.entityPage.entityLoaded').add(runSort);
var textB = b.textContent.trim().toLowerCase();
    $(document).ajaxComplete(function (event, xhr, settings) {
        if (!settings || !settings.data) return;


        if (typeof settings.data === 'string' && settings.data.includes('action=wbsetaliases')) {
return textA.localeCompare(textB, 'pl');
            runSort();
});
        }
    });


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

Wersja z 16:55, 1 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();
		}
	});
});