[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 (function($){ 2 $.fn.filter_visible = function(depth) { 3 depth = depth || 3; 4 var is_visible = function() { 5 var p = $(this), i; 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 }; 14 $.table_hotkeys = function(table, keys, opts) { 15 opts = $.extend($.table_hotkeys.defaults, opts); 16 var selected_class, destructive_class, set_current_row, adjacent_row_callback, get_adjacent_row, adjacent_row, prev_row, next_row, check, get_first_row, get_last_row, make_key_callback, first_row; 17 18 selected_class = opts.class_prefix + opts.selected_suffix; 19 destructive_class = opts.class_prefix + opts.destructive_suffix; 20 set_current_row = function (tr) { 21 if ($.table_hotkeys.current_row) $.table_hotkeys.current_row.removeClass(selected_class); 22 tr.addClass(selected_class); 23 tr[0].scrollIntoView(false); 24 $.table_hotkeys.current_row = tr; 25 }; 26 adjacent_row_callback = function(which) { 27 if (!adjacent_row(which) && typeof opts[which+'_page_link_cb'] === 'function' ) { 28 opts[which+'_page_link_cb'](); 29 } 30 }; 31 get_adjacent_row = function(which) { 32 var first_row, method; 33 34 if (!$.table_hotkeys.current_row) { 35 first_row = get_first_row(); 36 $.table_hotkeys.current_row = first_row; 37 return first_row[0]; 38 } 39 method = 'prev' == which? $.fn.prevAll : $.fn.nextAll; 40 return method.call($.table_hotkeys.current_row, opts.cycle_expr).filter_visible()[0]; 41 }; 42 adjacent_row = function(which) { 43 var adj = get_adjacent_row(which); 44 if (!adj) return false; 45 set_current_row($(adj)); 46 return true; 47 }; 48 prev_row = function() { return adjacent_row('prev'); }; 49 next_row = function() { return adjacent_row('next'); }; 50 check = function() { 51 $(opts.checkbox_expr, $.table_hotkeys.current_row).each(function() { 52 this.checked = !this.checked; 53 }); 54 }; 55 get_first_row = function() { 56 return $(opts.cycle_expr, table).filter_visible().eq(opts.start_row_index); 57 }; 58 get_last_row = function() { 59 var rows = $(opts.cycle_expr, table).filter_visible(); 60 return rows.eq(rows.length-1); 61 }; 62 make_key_callback = function(expr) { 63 return function() { 64 if ( null == $.table_hotkeys.current_row ) return false; 65 var clickable = $(expr, $.table_hotkeys.current_row); 66 if (!clickable.length) return false; 67 if (clickable.is('.'+destructive_class)) next_row() || prev_row(); 68 clickable.trigger( 'click' ); 69 }; 70 }; 71 first_row = get_first_row(); 72 if (!first_row.length) return; 73 if (opts.highlight_first) 74 set_current_row(first_row); 75 else if (opts.highlight_last) 76 set_current_row(get_last_row()); 77 $.hotkeys.add(opts.prev_key, opts.hotkeys_opts, function() {return adjacent_row_callback('prev');}); 78 $.hotkeys.add(opts.next_key, opts.hotkeys_opts, function() {return adjacent_row_callback('next');}); 79 $.hotkeys.add(opts.mark_key, opts.hotkeys_opts, check); 80 $.each(keys, function() { 81 var callback, key; 82 83 if ( typeof this[1] === 'function' ) { 84 callback = this[1]; 85 key = this[0]; 86 $.hotkeys.add(key, opts.hotkeys_opts, function(event) { return callback(event, $.table_hotkeys.current_row); }); 87 } else { 88 key = this; 89 $.hotkeys.add(key, opts.hotkeys_opts, make_key_callback('.'+opts.class_prefix+key)); 90 } 91 }); 92 93 }; 94 $.table_hotkeys.current_row = null; 95 $.table_hotkeys.defaults = {cycle_expr: 'tr', class_prefix: 'vim-', selected_suffix: 'current', 96 destructive_suffix: 'destructive', hotkeys_opts: {disableInInput: true, type: 'keypress'}, 97 checkbox_expr: ':checkbox', next_key: 'j', prev_key: 'k', mark_key: 'x', 98 start_row_index: 2, highlight_first: false, highlight_last: false, next_page_link_cb: false, prev_page_link_cb: false}; 99 })(jQuery);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Nov 21 01:00:03 2024 | Cross-referenced by PHPXref 0.7.1 |