WordPress.org

Make WordPress Core

Ticket #7643: table-hotkeys-move-along-pages.diff

File table-hotkeys-move-along-pages.diff, 6.9 KB (added by nbachiyski, 7 years ago)

Refactor much of the code and move to next or previous page on pressing next/prev at end of the current page.

  • wp-includes/js/jquery/jquery.table-hotkeys.js

     
    11(function($){ 
     2        $.fn.filter_visible = function(depth) { 
     3                depth = depth || 3; 
     4                var is_visible = function() { 
     5                        var p = $(this); 
     6                        for(i=0; i<depth-1; ++i) { 
     7                                if (!p.is(':visible')) return false; 
     8                                p = p.parent(); 
     9                        } 
     10                        return true; 
     11                } 
     12                return this.filter(is_visible); 
     13        }; 
    214        $.table_hotkeys = function(table, keys, opts) { 
    315                opts = $.extend($.table_hotkeys.defaults, opts); 
    416                var selected_class = opts.class_prefix + opts.selected_suffix; 
    5                 var destructive_class = opts.class_prefix + opts.destructive_suffix;     
     17                var destructive_class = opts.class_prefix + opts.destructive_suffix; 
    618                var set_current_row = function (tr) { 
    719                        if ($.table_hotkeys.current_row) $.table_hotkeys.current_row.removeClass(selected_class); 
    820                        tr.addClass(selected_class); 
    921                        tr[0].scrollIntoView(false); 
    1022                        $.table_hotkeys.current_row = tr; 
    1123                }; 
    12                 var next_row = function() { 
    13                         var next = get_adjacent_row('next'); 
    14                         if (!next) return false; 
    15                         set_current_row($(next)); 
    16                         return true; 
     24                var adjacent_row_callback = function(which) { 
     25                        if (!adjacent_row(which) && $.isFunction(opts[which+'_page_link_cb'])) { 
     26                                opts[which+'_page_link_cb'](); 
     27                        } 
    1728                }; 
    18                 var prev_row = function() { 
    19                         var prev = get_adjacent_row('prev'); 
    20                         if (!prev) return false; 
    21                         set_current_row($(prev)); 
     29                var get_adjacent_row = function(which) { 
     30                        if (!$.table_hotkeys.current_row) { 
     31                                var first_row = get_first_row(); 
     32                                $.table_hotkeys.current_row = first_row; 
     33                                return first_row[0]; 
     34                        } 
     35                        var method = 'prev' == which? $.fn.prevAll : $.fn.nextAll; 
     36                        return method.call($.table_hotkeys.current_row, opts.cycle_expr).filter_visible()[0]; 
     37                }; 
     38                var adjacent_row = function(which) { 
     39                        var adj = get_adjacent_row(which); 
     40                        if (!adj) return false; 
     41                        set_current_row($(adj)); 
    2242                        return true; 
    2343                }; 
     44                var prev_row = function() { return adjacent_row('prev'); }; 
     45                var next_row = function() { return adjacent_row('next'); }; 
    2446                var check = function() { 
    2547                        $(opts.checkbox_expr, $.table_hotkeys.current_row).each(function() { 
    2648                                this.checked = !this.checked; 
    2749                        }); 
    2850                }; 
    29                 var get_adjacent_row = function(which) { 
    30                         if (!$.table_hotkeys.current_row) { 
    31                                 var start_row_dom = $(opts.cycle_expr, table)[opts.start_row_index]; 
    32                                 $.table_hotkeys.current_row = $(start_row_dom); 
    33                                 return start_row_dom; 
    34                         } 
    35                         var method = 'prev' == which? $.fn.prevAll : $.fn.nextAll; 
    36                         return method.call($.table_hotkeys.current_row, opts.cycle_expr).filter(':visible')[0]; 
    37                 } 
     51                var get_first_row = function() { 
     52                        return $(opts.cycle_expr, table).filter_visible().eq(opts.start_row_index); 
     53                }; 
     54                var get_last_row = function() { 
     55                        var rows = $(opts.cycle_expr, table).filter_visible(); 
     56                        console.log(rows[rows.length-1]); 
     57                        return rows.eq(rows.length-1); 
     58                }; 
    3859                var make_key_callback = function(expr) { 
    3960                        return function() { 
    4061                                if ( null == $.table_hotkeys.current_row ) return false; 
    41                                 var clickable = $(expr, $.table_hotkeys.current_row).filter(':visible'); 
    42                                 if (!$($(clickable[0]).parent()[0]).is(':visible')) return false; 
     62                                var clickable = $(expr, $.table_hotkeys.current_row).filter_visible(); 
     63                                if (!clickable.length) return false; 
    4364                                if (clickable.is('.'+destructive_class)) next_row() || prev_row(); 
    4465                                clickable.click(); 
    4566                        } 
     
    5980                        } 
    6081                        return {key: key, expr: expr}; 
    6182                }; 
    62                 if (!$(opts.cycle_expr, table).length) return; 
    63                 jQuery.hotkeys.add(opts.next_key, opts.hotkeys_opts, next_row); 
    64                 jQuery.hotkeys.add(opts.prev_key, opts.hotkeys_opts, prev_row); 
     83                var first_row = get_first_row(); 
     84                if (!first_row.length) return; 
     85                if (opts.highlight_first) { 
     86                        set_current_row(first_row); 
     87                } else if (opts.highlight_last) { 
     88                        set_current_row(get_last_row()); 
     89                }; 
     90                jQuery.hotkeys.add(opts.prev_key, opts.hotkeys_opts, function() {return adjacent_row_callback('prev')}); 
     91                jQuery.hotkeys.add(opts.next_key, opts.hotkeys_opts, function() {return adjacent_row_callback('next')}); 
    6592                jQuery.hotkeys.add(opts.mark_key, opts.hotkeys_opts, check); 
    6693                jQuery.each(keys, function() { 
    6794                        var key_expr = make_key_expr(this); 
     
    73100        $.table_hotkeys.defaults = {cycle_expr: 'tr', class_prefix: 'vim-', selected_suffix: 'current', 
    74101                destructive_suffix: 'destructive', hotkeys_opts: {disableInInput: true, type: 'keypress'}, 
    75102                checkbox_expr: ':checkbox', next_key: 'j', prev_key: 'k', mark_key: 'x', 
    76                 start_row_index: 1}; 
     103                start_row_index: 1, highlight_first: false, highlight_last: false, next_page_link_cb: function() {}, prev_page_link_cb: function() {}}; 
    77104})(jQuery); 
     105 No newline at end of file 
  • wp-includes/script-loader.php

     
    160160                ) ); 
    161161                $scripts->add( 'admin-comments', '/wp-admin/js/edit-comments.js', array('wp-lists', 'jquery-ui-draggable', 'jquery-ui-resizable', 'quicktags'), '20080828' ); 
    162162                $scripts->localize( 'admin-comments', 'adminCommentsL10n', array( 
    163                         'pending' => __('%i% pending') // must look like: "# blah blah" 
     163                        'pending' => __('%i% pending'), // must look like: "# blah blah" 
     164                        'hotkeys_highlight_first' => isset($_GET['hotkeys_highlight_first']), 
     165                        'hotkeys_highlight_last' => isset($_GET['hotkeys_highlight_last']), 
    164166                ) ); 
    165167                $scripts->add( 'admin-users', '/wp-admin/js/users.js', array('wp-lists'), '20070823' ); 
    166168                $scripts->add( 'admin-forms', '/wp-admin/js/forms.js', array('jquery'), '20080729'); 
  • wp-admin/js/edit-comments.js

     
    235235$(document).ready(function(){ 
    236236        if ( typeof QTags != 'undefined' ) 
    237237                ed_reply = new QTags('ed_reply', 'replycontent', 'replycontainer', 'more'); 
    238         if ( typeof $.table_hotkeys != 'undefined' ) 
    239                 $.table_hotkeys($('table.widefat'), ['a', 'u', 's', 'd', 'r']); 
     238        if ( typeof $.table_hotkeys != 'undefined' ) { 
     239                var make_hotkeys_redirect = function(which) { 
     240                        return function() { 
     241                                var first_last = 'next' == which? 'first' : 'last';  
     242                                var l=$('.'+which+'.page-numbers'); 
     243                                if (l.length) 
     244                                        window.location = l[0].href.replace(/\&hotkeys_highlight_(first|last)=1/g, '')+'&hotkeys_highlight_'+first_last+'=1'; 
     245                        } 
     246                } 
     247                $.table_hotkeys($('table.widefat'), ['a', 'u', 's', 'd', 'r'], 
     248                        {       highlight_first: adminCommentsL10n.hotkeys_highlight_first, 
     249                                highlight_last: adminCommentsL10n.hotkeys_highlight_last, 
     250                                prev_page_link_cb: make_hotkeys_redirect('prev'), 
     251                                next_page_link_cb: make_hotkeys_redirect('next'),                                
     252                        } 
     253                ); 
     254        } 
    240255}); 
    241256 
    242 })(jQuery); 
     257})(jQuery); 
     258 No newline at end of file