WordPress.org

Make WordPress Core

Changeset 8789


Ignore:
Timestamp:
09/01/2008 05:28:41 AM (10 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.