WordPress.org

Make WordPress Core

Ticket #5316: 5316.2.diff

File 5316.2.diff, 10.1 KB (added by DD32, 6 years ago)

Rewrite from scratch

  • wp-admin/js/forms.js

     
    11function checkAll(jQ) { // use attr( checked, fn ) 
    2         jQuery(jQ).find( 'tbody :checkbox' ).attr( 'checked', function() { 
     2        jQuery(jQ).find( 'tbody tr:visible :checkbox' ).attr( 'checked', function() { 
    33                return jQuery(this).attr( 'checked' ) ? '' : 'checked'; 
    44        } ); 
    55} 
     
    1010                if ( 'undefined' == e.shiftKey ) { return true; } 
    1111                if ( e.shiftKey ) { 
    1212                        if ( !lastClicked ) { return true; } 
    13                         var checks = $( lastClicked ).parents( 'form:first' ).find( ':checkbox' ); 
     13                        var checks = $( lastClicked ).parents( 'form:first' ).find( 'tr:visible :checkbox' ); 
    1414                        var first = checks.index( lastClicked ); 
    1515                        var last = checks.index( this ); 
    1616                        if ( 0 < first && 0 < last && first != last ) { 
  • wp-admin/options.php

     
    1010if ( !current_user_can('manage_options') ) 
    1111        wp_die(__('Cheatin&#8217; uh?')); 
    1212 
     13if ( isset($_POST['_show-submit']) ) 
     14        $action = ''; //Prevent action=update firing if its a show-submit. 
     15else if ( isset($_POST['_delete-submit']) ) 
     16        $action = 'delete'; 
     17 
    1318switch($action) { 
    1419 
     20case 'delete': 
     21 
     22        $delete = array(); 
     23        foreach( (array) $_POST['_check'] as $option => $value ) 
     24                if( $value == 'on' ) 
     25                        $delete[] = $option; 
     26 
     27        foreach($delete as $option) 
     28                delete_option($option); 
     29         
     30        update_option('deleted_options', $delete); 
     31 
     32        $goback = add_query_arg('deleted', count($delete), wp_get_referer()); 
     33        if( isset($_POST['_show']) && !empty($_POST['_show']) ) 
     34                $goback = add_query_arg('_show', $_POST['_show'], $goback); 
     35        wp_redirect($goback); 
     36    break; 
     37 
    1538case 'update': 
    1639        $any_changed = 0; 
    1740 
     
    1942 
    2043        if ( !$_POST['page_options'] ) { 
    2144                foreach ( (array) $_POST as $key => $value) { 
    22                         if ( !in_array($key, array('_wpnonce', '_wp_http_referer')) ) 
     45                        if ( !in_array($key, array('_wpnonce', '_wp_http_referer', 'action')) ) 
    2346                                $options[] = $key; 
    2447                } 
    2548        } else { 
     
    3760        } 
    3861 
    3962        $goback = add_query_arg('updated', 'true', wp_get_referer()); 
     63        if( isset($_POST['_show']) && !empty($_POST['_show']) ) 
     64                $goback = add_query_arg('_show', $_POST['_show'], $goback); 
    4065        wp_redirect($goback); 
    41     break; 
     66        break; 
    4267 
    4368default: 
    44         include('admin-header.php'); ?> 
     69        wp_enqueue_script('admin-forms'); 
     70        wp_enqueue_script('ui-table-filter'); 
     71        include('admin-header.php'); 
     72         
     73        if( isset($_GET['deleted']) ){ 
     74                $deleted = get_option('deleted_options'); 
     75                if( ! empty($deleted) ) 
     76                        echo '<div id="message" class="updated fade"><p>' . sprintf(__('<strong>Settings Deleted</strong> The following settings were deleted: <em>%s</em>'), implode(', ', $deleted) ) . '</p></div>'; 
     77                delete_option('deleted_options'); 
     78        } 
     79         
     80        ?> 
     81<script type="text/javascript"> 
     82        function filterTable(){ 
     83                var t = jQuery('#options-table'); 
     84                var phrase = jQuery('#show').val(); 
     85                var callback = function(){ //Uncheck any checkbox's which end up being hidden. 
     86                        jQuery('tr:not(:visible) :checkbox').each( function(){ jQuery(this).attr('checked',''); } ); 
     87                } 
     88                 
     89                if( phrase != ''){ 
     90                        if( phrase.length > 2 ) 
     91                                jQuery.uiTableFilter(t, phrase, null, callback); //Perform a filter 
     92                } else { //Else lets do a more efficient show-all 
     93                        t.find("tbody :not(tr:visible)").each( function(){ jQuery(this).show(); } ); 
     94                } 
    4595 
     96                return false; //Prevent pagereload. 
     97        } 
     98         
     99        var search_timeout = undefined; 
     100        jQuery(document).ready( function() { 
     101                jQuery('#filter-options').bind('onsubmit', function() { 
     102                        filterTable(); 
     103                }); 
     104 
     105                jQuery('#show').bind('keyup', function() { 
     106                        if( typeof(search_timeout) != undefined) 
     107                                clearTimeout(search_timeout); 
     108 
     109                        search_timeout = window.setTimeout(function() { 
     110                                search_timeout = undefined; 
     111                                filterTable(); 
     112                        }, 250); 
     113                }); 
     114        }); 
     115         
     116</script> 
    46117<div class="wrap"> 
    47   <h2><?php _e('All Settings'); ?></h2> 
    48   <form name="form" action="options.php" method="post" id="all-options"> 
    49   <?php wp_nonce_field('update-options') ?> 
    50   <input type="hidden" name="action" value="update" /> 
    51   <table class="form-table"> 
     118        <h2><?php _e('All Settings'); ?></h2> 
     119        <?php $show = isset($_REQUEST['_show']) ? trim($_REQUEST['_show']) : ''; ?> 
     120        <form name="form" action="options.php" method="post" id="filter-options"> 
     121        <?php wp_nonce_field('update-options') ?> 
     122        <input type="hidden" name="action" value="update" /> 
     123        <div class="tablenav"> 
     124                <div class="alignleft"> 
     125                        <input type="submit" name="_delete-submit" id="_delete-submit" class="button-secondary delete" value="<?php _e('Delete Selected Settings') ?>" /> 
     126                </div> 
     127                <div class="alignright"> 
     128                        <label for="show"><?php _e('Search Settings'); ?></label> 
     129                        <input name="_show" id="show" type="text" value="<?php echo wp_specialchars($show) ?>" /> 
     130                        <input type="submit" name="_show-submit" value="<?php _e('Show' ); ?>" class="button-secondary" /> 
     131                </div> 
     132        </div> 
     133        <table class="form-table" id="options-table"> 
     134        <thead> 
     135                <tr> 
     136                        <th><input type="checkbox" id="_checkall" /><label for='_checkall'><?php _e('Check All') ?></label></th> 
     137                        <th><?php _e('Setting Name') ?></th> 
     138                        <th><?php _e('Setting Value') ?></th> 
     139                </tr> 
     140        </thead> 
     141        <tbody> 
    52142<?php 
    53 $options = $wpdb->get_results("SELECT * FROM $wpdb->options ORDER BY option_name"); 
     143$where = 'WHERE 1=1'; 
     144if( !empty($show) ) 
     145        $where .= $wpdb->prepare(" AND option_name LIKE '%s'", '%' . $show . '%'); //non-javascript fall back. 
    54146 
    55 foreach ( (array) $options as $option) : 
     147$options = $wpdb->get_results("SELECT * FROM $wpdb->options $where ORDER BY option_name"); 
     148 
     149foreach ( (array)$options as $option) { 
    56150        $disabled = ''; 
    57151        $option->option_name = attribute_escape($option->option_name); 
    58152        if ( is_serialized($option->option_value) ) { 
     
    73167        } 
    74168        echo " 
    75169<tr> 
     170        <td><input type='checkbox' name='_check[$option->option_name]' /></td> 
    76171        <th scope='row'><label for='$option->option_name'>$option->option_name</label></th> 
    77172<td>"; 
    78173 
     
    81176 
    82177        echo "</td> 
    83178</tr>"; 
    84 endforeach; 
     179} 
    85180?> 
    86   </table> 
    87 <?php $options_to_update = implode(',', $options_to_update); ?> 
    88 <p class="submit"><input type="hidden" name="page_options" value="<?php echo $options_to_update; ?>" /><input type="submit" name="Update" value="<?php _e('Save Changes') ?>" /></p> 
     181        </tbody> 
     182</table> 
     183<?php $options_to_update = implode(',', (array)$options_to_update); ?> 
     184<p class="submit"><input type="hidden" name="page_options" value="<?php echo $options_to_update; ?>" /> 
     185        <input type="submit" name="Update" value="<?php _e('Save Changes') ?>" /></p> 
    89186  </form> 
    90187</div> 
    91188 
    92  
    93189<?php 
     190include('admin-footer.php'); 
    94191break; 
    95192} // end switch 
    96  
    97 include('admin-footer.php'); 
    98193?> 
  • wp-includes/js/jquery/jquery.uitablefilter.js

     
     1/* 
     2 * Copyright (c) 2008 Greg Weber greg at gregweber.info 
     3 * Dual licensed under the MIT and GPL licenses: 
     4 * http://www.opensource.org/licenses/mit-license.php 
     5 * http://www.gnu.org/licenses/gpl.html 
     6 * 
     7 * documentation at http://gregweber.info/projects/uitablefilter 
     8 * 
     9 * allows table rows to be filtered (made invisible) 
     10 * <code> 
     11 * t = $('table') 
     12 * $.uiTableFilter( t, phrase ) 
     13 * </code> 
     14 * arguments: 
     15 *   jQuery object containing table rows 
     16 *   phrase to search for 
     17 *   optional arguments: 
     18 *     column to limit search too (the column title in the table header) 
     19 *     ifHidden - callback to execute if one or more elements was hidden 
     20 */ 
     21jQuery.uiTableFilter = function(jq, phrase, column, ifHidden){ 
     22  var new_hidden = false; 
     23  if( this.last_phrase === phrase ) return false; 
     24 
     25  var phrase_length = phrase.length; 
     26  var words = phrase.toLowerCase().split(" "); 
     27 
     28  var success = function(elem) { elem.show() } 
     29  var failure = function(elem) { elem.hide() } 
     30 
     31  if( column ) { 
     32    var index = null; 
     33    jq.find("thead > tr:last > th").each( function(i){ 
     34      if( $(this).text() == column ){ 
     35        index = i; 
     36        return false; 
     37      } 
     38    }); 
     39    var iselector = "td:eq(" + index + ")"; 
     40   
     41    var search_text = function( ){ 
     42      var elem = jQuery(this); 
     43      jQuery.uiTableFilter.has_words( jQuery(elem.find(iselector)).text(), words ) ? 
     44        success(elem) : failure(elem); 
     45    } 
     46  } 
     47  else { 
     48    var search_text = function(){ 
     49        var elem = jQuery(this); 
     50        jQuery.uiTableFilter.has_words( elem.text(), words ) ? elem.show() : elem.hide(); 
     51    } 
     52  } 
     53 
     54  // if added one letter to last time, 
     55  // just check newest word and only need to hide 
     56  if( (words.size > 1) && (phrase.substr(0, phrase_length - 1) === 
     57        this.last_phrase) ) { 
     58 
     59    if( phrase[-1] === " " ) 
     60    { this.last_phrase = phrase; return false; } 
     61 
     62    success = function(elem) { elem.hide(); new_hidden = true; } 
     63    failure = function(elem) {;} 
     64    var words = words[-1]; 
     65    jq.find("tbody tr:visible").each( search_text ) 
     66  } 
     67  else { 
     68    new_hidden = true; 
     69    jq.find("tbody > tr").each( search_text ); 
     70  } 
     71 
     72  last_phrase = phrase; 
     73  if( ifHidden && new_hidden ) ifHidden(); 
     74  return jq; 
     75}; 
     76jQuery.uiTableFilter.last_phrase = "" 
     77 
     78// not jQuery dependent 
     79// "" [""] -> Boolean 
     80// "" [""] Boolean -> Boolean 
     81jQuery.uiTableFilter.has_words = function( str, words, caseSensitive ) 
     82{ 
     83  var text = caseSensitive ? str : str.toLowerCase(); 
     84  for (var i=0; i < words.length; i++) { 
     85    if (text.indexOf(words[i]) === -1) return false; 
     86  } 
     87  return true; 
     88} 
     89 No newline at end of file 
  • wp-includes/script-loader.php

     
    205205                                'updateCompleted' => __('Update completed.'), 
    206206                                'error' => __('Error:') 
    207207                        )); 
     208                        $this->add( 'ui-table-filter', '/wp-includes/js/jquery/jquery.uitablefilter.js', array( 'jquery' ), '20080517' ); 
    208209                } 
    209210        } 
    210211