MediaWiki:Gadget-calculator-search.js
From WikiAnesthesia
Revision as of 12:59, 7 September 2021 by Chris Rishel (talk | contribs)
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/** * @author Chris Rishel */ ( function() { mw.calculators.initializeSearch = function() { var $searchContainer = $( '#calculator-search' ); if( !$searchContainer.length ) { return; } var searchLabel = 'Search'; if( !mw.calculators.isMobile() ) { searchLabel += $searchContainer.attr( 'data-title' ) ? ' ' + $searchContainer.attr( 'data-title' ) : ''; } searchLabel += ': '; var searchLabelAttributes = { class: 'calculator-search-label', for: 'calculator-search-input' }; var $searchLabel = $( '<label>', searchLabelAttributes ).html( searchLabel ); var searchInputAttributes = { id: 'calculator-search-input', class: 'form-control form-control-sm', type: 'text', autocomplete: 'off' }; var $searchInput = $( '<input>', searchInputAttributes ) .on( 'input', function() { mw.calculators.searchCalculations( $( this ).val() ); } ); $searchContainer .append( $( '<form>', { class: 'form-inline' } ) .append( $searchLabel, $searchInput ) ); }; mw.calculators.searchCalculations = function( searchText ) { var $calculators = $( '.calculator' ); var reSearch = new RegExp( searchText, 'im' ); $calculators.each( function() { // Get the calculations contained by the calculator var $calculations = $( this ).find( '.calculator-calculation' ); // If no search text is defined or if the search text matches one of the search terms, // show the calculator and all calculations. var showCalculator = !searchText || reSearch.test( $( this ).attr( 'data-search' ) ); if( showCalculator ) { // If the entire calculator should be shown, show all calculations $calculations.each( function() { $( this ).show(); } ); } else { // If we aren't certain we should show the entire calculator, see if the search matches // any of the contained calculations. $calculations.each( function() { var showCalculation = !searchText || reSearch.test( $( this ).attr( 'data-search' ) ); if( showCalculation ) { $( this ).show(); // Make sure the calculator heading and structure gets shown showCalculator = true; } else { $( this ).hide(); } } ); } // If either the calculator or any contained calculations matched, show the calculator container // (i.e. title and structure for the calculations) if( showCalculator ) { $( this ).show(); } else { $( this ).hide(); } } ); }; mw.calculators.initializeSearch(); }() );