WordPress.org

Make WordPress Core

Ticket #5316: 5316.2.diff

File 5316.2.diff, 10.1 KB (added by DD32, 10 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