Diferencia entre revisiones de «MediaWiki:Common.js»

De wikiscba
(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();…»)
 
Etiqueta: Reemplazo
 
Línea 1: Línea 1:
/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página */
/* 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();
    }
})();

Revisión actual - 16:27 21 nov 2024

/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página */