MediaWiki:Common.js

De wikiscba
Revisión del 16:23 21 nov 2024 de Smaranda (discusión | contribs.) (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();…»)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)

Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.

  • Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
  • Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
  • Internet Explorer/Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
  • Opera: Presiona Ctrl+F5.
/* 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();
    }
})();