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, 10 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