WordPress.org

Make WordPress Core

Changeset 8789


Ignore:
Timestamp:
09/01/08 05:28:41 (7 years ago)
Author:
ryan
Message:

Comment hotkey: move to next or previous page on pressing next/prev at end of the current page. Prop nbachiyski. see #7643

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/js/edit-comments.js

    r8780 r8789  
    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 
  • trunk/wp-includes/js/jquery/jquery.table-hotkeys.js

    r8779 r8789  
    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); 
     
    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)); 
     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            } 
     28        }; 
     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)); 
    1642            return true; 
    1743        }; 
    18         var prev_row = function() { 
    19             var prev = get_adjacent_row('prev'); 
    20             if (!prev) return false; 
    21             set_current_row($(prev)); 
    22             return true; 
    23         }; 
     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() { 
     
    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(); 
     
    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() { 
     
    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); 
  • trunk/wp-includes/script-loader.php

    r8784 r8789  
    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' ); 
Note: See TracChangeset for help on using the changeset viewer.