MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
Line 228: Line 228:


/**
/**
  * Quick Search — Navigate directly to wiki page (DEBUG VERSION)
  * Quick Search — Navigate directly to wiki page
  * Intercepts the Page Forms #forminput inside #crt-quick-search so that
  * Intercepts the Page Forms #forminput inside #crt-quick-search so that
  * clicking "Go" (or pressing Enter, or selecting an autocomplete suggestion)
  * clicking "Go" (or pressing Enter, or selecting an autocomplete suggestion)
  * navigates to the wiki article instead of opening the form editor.
  * navigates to the wiki article instead of opening the form editor.
*
* Note: Page Forms creates the actual <input> element dynamically inside a
* .pfFormInputWrapper div, so we must wait for it to appear before attaching
* listeners.
  */
  */
(function () {
(function () {
     'use strict';
     'use strict';


     var PAGE = mw.config.get('wgPageName');
     if (mw.config.get('wgPageName') !== 'Main_Page') return;
    console.log('[QuickSearch] wgPageName =', PAGE);


     // Only run on Main Page
     function goToPage(input) {
    if (PAGE !== 'Main_Page') {
        var value = input.value.trim();
        console.log('[QuickSearch] Not Main_Page, exiting.');
        if (value) {
         return;
            window.location.href = mw.util.getUrl(value);
         }
     }
     }


     function initQuickSearch() {
     function setup(container, form) {
         console.log('[QuickSearch] initQuickSearch() called');
         // The actual text input created by Page Forms inside .pfFormInputWrapper
        var input = container.querySelector('.pfFormInputWrapper input[type="text"], .pfFormInputWrapper input:not([type="hidden"])');
        if (!input) return false;
 
        // Intercept form submission (Enter key / Go button)
        form.addEventListener('submit', function (e) {
            e.preventDefault();
            e.stopPropagation();
            goToPage(input);
        });
 
        // Navigate immediately when an autocomplete suggestion is selected
        $(input).on('pfautocomplete', function () {
            setTimeout(function () { goToPage(input); }, 50);
        });
 
        return true;
    }


    function init() {
         var container = document.getElementById('crt-quick-search');
         var container = document.getElementById('crt-quick-search');
        console.log('[QuickSearch] container #crt-quick-search =', container);
         if (!container) return;
         if (!container) return;
        // Log all child elements to see structure
        console.log('[QuickSearch] container innerHTML (first 500 chars):', container.innerHTML.substring(0, 500));


         var form = container.querySelector('form');
         var form = container.querySelector('form');
        console.log('[QuickSearch] form =', form);
         if (!form) return;
         if (!form) {
            console.log('[QuickSearch] No <form> found. Trying other selectors...');
            // Page Forms might not wrap in a <form> — try the div it creates
            var pfDiv = container.querySelector('.pfFormInputWrapper, .forminput-wrapper, div[id^="pf"]');
            console.log('[QuickSearch] PF wrapper div =', pfDiv);
        }


         var input = container.querySelector('input[type="text"]');
         // Try immediately — if PF has already initialized, we're done
        console.log('[QuickSearch] input[type="text"] =', input);
         if (setup(container, form)) return;
        if (!input) {
            // Try broader selectors
            var anyInput = container.querySelector('input');
            console.log('[QuickSearch] any input =', anyInput);
            if (anyInput) {
                console.log('[QuickSearch] input type =', anyInput.type, ', name =', anyInput.name, ', class =', anyInput.className);
            }
        }
 
         if (!form || !input) {
            console.warn('[QuickSearch] Could not find form or input. Aborting.');
            return;
        }


         function goToPage() {
         // Otherwise watch for PF to inject the <input> dynamically
            var value = input.value.trim();
        var observer = new MutationObserver(function (mutations, obs) {
             console.log('[QuickSearch] goToPage() value =', JSON.stringify(value));
             if (setup(container, form)) {
            if (value) {
                 obs.disconnect();
                 var url = mw.util.getUrl(value);
                console.log('[QuickSearch] Navigating to:', url);
                window.location.href = url;
             }
             }
        }
        form.addEventListener('submit', function (e) {
            console.log('[QuickSearch] Form submit intercepted!');
            e.preventDefault();
            e.stopPropagation();
            goToPage();
         });
         });
        observer.observe(container, { childList: true, subtree: true });


         if (typeof $ !== 'undefined') {
         // Safety timeout: stop observing after 10s
            $(input).on('pfautocomplete', function () {
        setTimeout(function () { observer.disconnect(); }, 10000);
                console.log('[QuickSearch] pfautocomplete event fired');
                setTimeout(goToPage, 50);
            });
            console.log('[QuickSearch] pfautocomplete listener attached');
        } else {
            console.warn('[QuickSearch] jQuery not available');
        }
 
        console.log('[QuickSearch] Setup complete!');
     }
     }


     if (document.readyState === 'loading') {
     if (document.readyState === 'loading') {
        console.log('[QuickSearch] DOM loading, adding DOMContentLoaded listener');
         document.addEventListener('DOMContentLoaded', init);
         document.addEventListener('DOMContentLoaded', initQuickSearch);
     } else {
     } else {
         console.log('[QuickSearch] DOM already ready, calling initQuickSearch now');
         init();
        initQuickSearch();
     }
     }
})();
})();
MediaWiki Appliance - Powered by TurnKey Linux