Diferencia entre revisiones de «MediaWiki:Common.js»
Apariencia
Página creada con «→Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página: // Highlight search terms when coming from search results (function() { function getSearchTerms() { var searchParams = new URLSearchParams(window.location.search); var search = searchParams.get('search'); return search ? search.split(/\s+/) : []; } function highlightSearchTerms() { var terms = getSearchTerms();…» |
(Sin diferencias)
|
Revisión del 16:23 21 nov 2024
/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página */
// Highlight search terms when coming from search results
(function() {
function getSearchTerms() {
var searchParams = new URLSearchParams(window.location.search);
var search = searchParams.get('search');
return search ? search.split(/\s+/) : [];
}
function highlightSearchTerms() {
var terms = getSearchTerms();
if (!terms.length) return;
var content = document.getElementById('mw-content-text');
if (!content) return;
terms.forEach(function(term) {
if (term.length < 3) return; // Skip short terms
var regex = new RegExp('(' + term.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + ')', 'gi');
var walker = document.createTreeWalker(
content,
NodeFilter.SHOW_TEXT,
null,
false
);
var node;
var nodes = [];
while (node = walker.nextNode()) {
nodes.push(node);
}
nodes.forEach(function(node) {
if (node.parentNode.nodeName !== 'SCRIPT' &&
node.parentNode.nodeName !== 'STYLE' &&
!node.parentNode.classList.contains('searchmatch')) {
var text = node.textContent;
if (regex.test(text)) {
var span = document.createElement('span');
span.innerHTML = text.replace(regex, '<span class="searchmatch">$1</span>');
node.parentNode.replaceChild(span, node);
}
}
});
});
}
// Add CSS styles for highlighted terms
var style = document.createElement('style');
style.textContent = `
.searchmatch {
background-color: #ffeb3b;
padding: 2px;
border-radius: 2px;
}
`;
document.head.appendChild(style);
// Run highlighter when page loads
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', highlightSearchTerms);
} else {
highlightSearchTerms();
}
})();