Przejdź do zawartości

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

Z Arcarium Index
Nie podano opisu zmian
Nie podano opisu zmian
 
(Nie pokazano 5 pośrednich wersji utworzonych przez tego samego użytkownika)
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'));
            });
 
        });
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, .wb-monolingualtext-language-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://arcarium.manuscripta.bj.uj.edu.pl/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;
     }
     }


     function runSort() {
     var lang = mw.config.get( 'wgUserLanguage' );
         setTimeout(sortAliases, 100);
    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' );
} );


    // initial + normal loads
    $(document).ready(runSort);
    mw.hook('wikipage.content').add(runSort);
    mw.hook('wikibase.entityPage.entityLoaded').add(runSort);
    $(document).ajaxComplete(function (event, xhr, settings) {
        if (!settings || !settings.data) return;


        if (typeof settings.data === 'string' && settings.data.includes('action=wbsetaliases')) {
$( function () {
            runSort();
    var isLoggedIn = mw.config.get( 'wgUserName' ) !== null;
        }
    });


});
    document.body.classList.toggle( 'arcarium-user-logged-in', isLoggedIn );
    document.body.classList.toggle( 'arcarium-user-logged-out', !isLoggedIn );
} );

Aktualna wersja na dzień 09:32, 13 sie 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, .wb-monolingualtext-language-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://arcarium.manuscripta.bj.uj.edu.pl/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' );
} );


$( function () {
    var isLoggedIn = mw.config.get( 'wgUserName' ) !== null;

    document.body.classList.toggle( 'arcarium-user-logged-in', isLoggedIn );
    document.body.classList.toggle( 'arcarium-user-logged-out', !isLoggedIn );
} );