WordPress.org

Make WordPress Core

Changeset 15507


Ignore:
Timestamp:
08/18/10 21:02:24 (5 years ago)
Author:
scribu
Message:

refactor admin-table.js code

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/js/admin-table.dev.js

    r15495 r15507  
    11jQuery(document).ready(function($) { 
    2     $('form').each(function() { 
    3         this.reset(); 
    4     }); 
    5  
    6     if ( '' == $.query.GET('paged') ) 
    7         $.query.SET('paged', 1); 
    8  
    9     var total_pages; 
    10     var set_total_pages = function() { 
    11         total_pages = parseInt($('.total-pages').eq(0).text()); 
    12     } 
    13  
    14     set_total_pages(); 
    15  
    16     var loading = false, 
    17         $tbody = $('#the-list, #the-comment-list'), 
    18         $overlay = $('<div id="loading-items>') 
     2 
     3var adminTable = { 
     4 
     5    init: function() { 
     6        this.loading = false; 
     7 
     8        $('form').each(function() { 
     9            this.reset(); 
     10        }); 
     11 
     12        if ( '' == $.query.GET('paged') ) 
     13            $.query.SET('paged', 1); 
     14        this.set_total_pages(); 
     15 
     16        this.$tbody = $('#the-list, #the-comment-list'); 
     17 
     18        this.$overlay = $('<div id="loading-items>') 
    1919            .html(adminTableL10n.loading) 
    2020            .hide() 
    2121            .prependTo($('body')); 
    22  
    23     var show_overlay = function() { 
    24         loading = true; 
    25  
    26         $('.error.ajax').remove(); 
    27  
    28         $overlay 
    29             .css({ 
    30                 width: $tbody.width() + 'px', 
    31                 height: $tbody.height() - 20 + 'px' 
    32             }) 
    33             .css($tbody.offset()) 
    34             .show(); 
    35     } 
    36  
    37     var hide_overlay = function() { 
    38         loading = false; 
    39         $overlay.hide(); 
    40     } 
    41  
    42     var handle_error = function() { 
    43         hide_overlay(); 
    44  
    45         $('h2').after('<div class="error ajax below-h2"><p>' + adminTableL10n.error + '</p></div>'); 
    46     } 
    47  
    48     var update_rows = function(args, reset_paging, callback) { 
    49         if ( loading ) 
     22    }, 
     23 
     24    // paging 
     25    set_total_pages: function() { 
     26        this.total_pages = parseInt($('.total-pages').eq(0).text()); 
     27    }, 
     28 
     29    get_total_pages: function() { 
     30        return this.total_pages; 
     31    }, 
     32 
     33    change_page: function(paged) { 
     34        if ( paged < 1 || paged >this.total_pages ) 
     35            return false; 
     36 
     37        this.update_rows({'paged': paged}); 
     38    }, 
     39 
     40    // searching 
     41    change_search: function(s) { 
     42        this.update_rows({'s': s}, true, function() { 
     43            $('h2 .subtitle').remove(); 
     44 
     45            if ( s ) 
     46                $('h2').eq(0).append($('<span class="subtitle">').html(adminTableL10n.search.replace('%s', this.htmlencode(s)))); 
     47        }); 
     48    }, 
     49 
     50    htmlencode: function(value) { 
     51        return $('<div/>').text(value).html(); 
     52    }, 
     53 
     54    update_rows: function(args, reset_paging, callback) { 
     55        if ( this.loading ) 
    5056            return false; 
    5157 
     
    5864            } 
    5965        }); 
    60          
     66 
    6167        if ( !different ) 
    6268            return false; 
    6369 
    64         show_overlay(); 
     70        this.show_overlay(); 
    6571 
    6672        if ( reset_paging ) 
     
    7177        data['action'] = 'fetch-list'; 
    7278        data['list_args'] = list_args; 
     79 
     80        this._callback = callback; 
    7381 
    7482        $.ajax({ 
     
    7785            dataType: 'json', 
    7886            data: data, 
    79             success: function(response) { 
    80                 if ( 'object' != typeof response ) { 
    81                     handle_error(); 
    82                 } else { 
    83                     hide_overlay(); 
    84  
    85                     $tbody.html(response.rows); 
    86  
    87                     $('.displaying-num').html(response.total_items); 
    88  
    89                     $('.total-pages').html(response.total_pages); 
    90                     set_total_pages(); 
    91  
    92                     $('.current-page').val($.query.GET('paged')); 
    93  
    94                     if ( callback ) 
    95                         callback(); 
    96                 } 
    97             }, 
    98             error: handle_error 
     87            success: $.proxy(this, 'handle_success'), 
     88            error: $.proxy(this, 'handle_error') 
    9989        }); 
    10090 
    10191        return true; 
     92    }, 
     93 
     94    handle_success: function(response) { 
     95        if ( 'object' != typeof response ) { 
     96            this.handle_error(); 
     97        } else { 
     98            this.hide_overlay(); 
     99 
     100            this.$tbody.html(response.rows); 
     101 
     102            $('.displaying-num').html(response.total_items); 
     103 
     104            $('.total-pages').html(response.total_pages); 
     105            this.set_total_pages(); 
     106 
     107            $('.current-page').val($.query.GET('paged')); 
     108 
     109            if ( this._callback ) 
     110                this._callback(); 
     111        } 
     112    }, 
     113 
     114    handle_error: function() { 
     115        this.hide_overlay(); 
     116 
     117        $('h2').after('<div class="error ajax below-h2"><p>' + adminTableL10n.error + '</p></div>'); 
     118    }, 
     119 
     120    show_overlay: function() { 
     121        this.loading = true; 
     122 
     123        $('.error.ajax').remove(); 
     124 
     125        this.$overlay 
     126            .css({ 
     127                width: this.$tbody.width() + 'px', 
     128                height: this.$tbody.height() - 20 + 'px' 
     129            }) 
     130            .css(this.$tbody.offset()) 
     131            .show(); 
     132    }, 
     133 
     134    hide_overlay: function() { 
     135        this.loading = false; 
     136        this.$overlay.hide(); 
    102137    } 
    103  
    104     // paging 
    105     var change_page = function(paged) { 
    106         if ( paged < 1 || paged > total_pages ) 
    107             return false; 
    108  
    109         update_rows({'paged': paged}); 
    110     } 
    111  
     138} 
     139 
     140adminTable.init(); 
     141 
     142// Ajaxify various UI elements 
     143 
     144    // pagination 
    112145    $('.tablenav-pages a').click(function() { 
    113146        var paged = $.query.GET('paged'); 
     
    124157                break; 
    125158            case 'last-page': 
    126                 paged = total_pages; 
    127                 break; 
    128         } 
    129  
    130         change_page(paged); 
     159                paged = adminTable.get_total_pages(); 
     160                break; 
     161        } 
     162 
     163        adminTable.change_page(paged); 
    131164 
    132165        return false; 
     
    137170            return; 
    138171 
    139         change_page(parseInt($(this).val())); 
    140  
    141         return false; 
    142     }); 
    143  
    144     // sorting 
     172        adminTable.change_page(parseInt($(this).val())); 
     173 
     174        return false; 
     175    }); 
     176 
     177    // sortable columns 
    145178    $('th a').click(function() { 
    146179        var orderby = $.query.GET('orderby'), 
     
    168201        } 
    169202 
    170         update_rows({'orderby': orderby, 'order': order}, true); 
    171  
    172         return false; 
    173     }); 
    174  
    175     // searching 
    176     var htmlencode = function(value) { 
    177         return $('<div/>').text(value).html(); 
    178     } 
    179  
    180     var change_search = function(s) { 
    181         update_rows({'s': s}, true, function() { 
    182             $('h2 .subtitle').remove(); 
    183  
    184             if ( s ) 
    185                 $('h2').eq(0).append($('<span class="subtitle">').html(adminTableL10n.search.replace('%s', htmlencode(s)))); 
    186         }); 
    187     } 
    188  
     203        adminTable.update_rows({'orderby': orderby, 'order': order}, true); 
     204 
     205        return false; 
     206    }); 
     207 
     208    // searchbox 
    189209    $('.search-box :submit').click(function() { 
    190         change_search($(this).parent('.search-box').find(':text').val()); 
     210        adminTable.change_search($(this).parent('.search-box').find(':text').val()); 
    191211 
    192212        return false; 
     
    197217            return; 
    198218 
    199         change_search($(this).val()); 
     219        adminTable.change_search($(this).val()); 
    200220 
    201221        return false; 
     
    204224    // tablenav dropdowns 
    205225    $('#post-query-submit').click(function() { 
    206         var $this = $(this), key, val, args = {}; 
    207  
    208         $this.parents('.actions').find('select[name!="action"]').each(function() { 
    209             args[$this.attr('name')] = $this.val(); 
    210         }); 
    211  
    212         update_rows(args, true); 
     226        var key, val, args = {}; 
     227 
     228        $(this).parents('.actions').find('select[name!="action"]').each(function() { 
     229            var $el = $(this); 
     230 
     231            args[$el.attr('name')] = $el.val(); 
     232        }); 
     233 
     234        adminTable.update_rows(args, true); 
    213235 
    214236        return false; 
     
    219241        var $this = $(this); 
    220242 
    221         update_rows({'mode': $.query.load($this.attr('href')).get('mode')}, false, function() { 
     243        adminTable.update_rows({'mode': $.query.load($this.attr('href')).get('mode')}, false, function() { 
    222244            $('.view-switch .current').removeClass('current'); 
    223245            $this.addClass('current'); 
     
    226248        return false; 
    227249    }); 
    228  
    229 /* 
    230     // problem: when switching from one to the other, columns are not always the same 
    231     $('.subsubsub a').click(function() { 
    232         var $this = $(this); 
    233  
    234         update_rows($.query.load($this.attr('href')).get(), true, function() { 
    235             $('.subsubsub .current').removeClass('current'); 
    236             $this.addClass('current'); 
    237         }); 
    238  
    239         return false; 
    240     }); 
    241 /**/ 
    242250}); 
    243251 
  • trunk/wp-admin/js/admin-table.js

    r15495 r15507  
    1 jQuery(document).ready(function(g){g("form").each(function(){this.reset()});if(""==g.query.GET("paged")){g.query.SET("paged",1)}var l;var b=function(){l=parseInt(g(".total-pages").eq(0).text())};b();var c=false,f=g("#the-list, #the-comment-list"),m=g('<div id="loading-items>').html(adminTableL10n.loading).hide().prependTo(g("body"));var a=function(){c=true;g(".error.ajax").remove();m.css({width:f.width()+"px",height:f.height()-20+"px"}).css(f.offset()).show()};var i=function(){c=false;m.hide()};var e=function(){i();g("h2").after('<div class="error ajax below-h2"><p>'+adminTableL10n.error+"</p></div>")};var k=function(o,n,r){if(c){return false}var q=false;g.each(o,function(s,t){if(t!=g.query.GET(s)){g.query.SET(s,t);q=true}});if(!q){return false}a();if(n){g.query.SET("paged",1)}var p=g.query.get();p.action="fetch-list";p.list_args=list_args;g.ajax({url:ajaxurl,global:false,dataType:"json",data:p,success:function(s){if("object"!=typeof s){e()}else{i();f.html(s.rows);g(".displaying-num").html(s.total_items);g(".total-pages").html(s.total_pages);b();g(".current-page").val(g.query.GET("paged"));if(r){r()}}},error:e});return true};var d=function(n){if(n<1||n>l){return false}k({paged:n})};g(".tablenav-pages a").click(function(){var n=g.query.GET("paged");switch(g(this).attr("class")){case"first-page":n=1;break;case"prev-page":n-=1;break;case"next-page":n+=1;break;case"last-page":n=l;break}d(n);return false});g(".current-page").keypress(function(n){if(13!=n.keyCode){return}d(parseInt(g(this).val()));return false});g("th a").click(function(){var p=g.query.GET("orderby"),n=g.query.GET("order"),o=g(this).parent("th");if(o.hasClass("sortable")){p=g.query.load(g(this).attr("href")).get("orderby");n="asc";g("th.sorted-desc, th.sorted-asc").removeClass("sorted-asc").removeClass("sorted-desc").addClass("sortable");o.removeClass("sortable").addClass("sorted-asc")}else{if(o.hasClass("sorted-asc")){n="desc";o.removeClass("sorted-asc").addClass("sorted-desc")}else{if(o.hasClass("sorted-desc")){n="asc";o.removeClass("sorted-desc").addClass("sorted-asc")}}}k({orderby:p,order:n},true);return false});var h=function(n){return g("<div/>").text(n).html()};var j=function(n){k({s:n},true,function(){g("h2 .subtitle").remove();if(n){g("h2").eq(0).append(g('<span class="subtitle">').html(adminTableL10n.search.replace("%s",h(n))))}})};g(".search-box :submit").click(function(){j(g(this).parent(".search-box").find(":text").val());return false});g(".search-box :text").keypress(function(n){if(13!=n.keyCode){return}j(g(this).val());return false});g("#post-query-submit").click(function(){var p=g(this),o,q,n={};p.parents(".actions").find('select[name!="action"]').each(function(){n[p.attr("name")]=p.val()});k(n,true);return false});g(".view-switch a").click(function(){var n=g(this);k({mode:g.query.load(n.attr("href")).get("mode")},false,function(){g(".view-switch .current").removeClass("current");n.addClass("current")});return false})}); 
     1jQuery(document).ready(function(b){var a={init:function(){this.loading=false;b("form").each(function(){this.reset()});if(""==b.query.GET("paged")){b.query.SET("paged",1)}this.set_total_pages();this.$tbody=b("#the-list, #the-comment-list");this.$overlay=b('<div id="loading-items>').html(adminTableL10n.loading).hide().prependTo(b("body"))},set_total_pages:function(){this.total_pages=parseInt(b(".total-pages").eq(0).text())},get_total_pages:function(){return this.total_pages},change_page:function(c){if(c<1||c>this.total_pages){return false}this.update_rows({paged:c})},change_search:function(c){this.update_rows({s:c},true,function(){b("h2 .subtitle").remove();if(c){b("h2").eq(0).append(b('<span class="subtitle">').html(adminTableL10n.search.replace("%s",this.htmlencode(c))))}})},htmlencode:function(c){return b("<div/>").text(c).html()},update_rows:function(d,c,g){if(this.loading){return false}var f=false;b.each(d,function(h,i){if(i!=b.query.GET(h)){b.query.SET(h,i);f=true}});if(!f){return false}this.show_overlay();if(c){b.query.SET("paged",1)}var e=b.query.get();e.action="fetch-list";e.list_args=list_args;this._callback=g;b.ajax({url:ajaxurl,global:false,dataType:"json",data:e,success:b.proxy(this,"handle_success"),error:b.proxy(this,"handle_error")});return true},handle_success:function(c){if("object"!=typeof c){this.handle_error()}else{this.hide_overlay();this.$tbody.html(c.rows);b(".displaying-num").html(c.total_items);b(".total-pages").html(c.total_pages);this.set_total_pages();b(".current-page").val(b.query.GET("paged"));if(this._callback){this._callback()}}},handle_error:function(){this.hide_overlay();b("h2").after('<div class="error ajax below-h2"><p>'+adminTableL10n.error+"</p></div>")},show_overlay:function(){this.loading=true;b(".error.ajax").remove();this.$overlay.css({width:this.$tbody.width()+"px",height:this.$tbody.height()-20+"px"}).css(this.$tbody.offset()).show()},hide_overlay:function(){this.loading=false;this.$overlay.hide()}};a.init();b(".tablenav-pages a").click(function(){var c=b.query.GET("paged");switch(b(this).attr("class")){case"first-page":c=1;break;case"prev-page":c-=1;break;case"next-page":c+=1;break;case"last-page":c=a.get_total_pages();break}a.change_page(c);return false});b(".current-page").keypress(function(c){if(13!=c.keyCode){return}a.change_page(parseInt(b(this).val()));return false});b("th a").click(function(){var e=b.query.GET("orderby"),c=b.query.GET("order"),d=b(this).parent("th");if(d.hasClass("sortable")){e=b.query.load(b(this).attr("href")).get("orderby");c="asc";b("th.sorted-desc, th.sorted-asc").removeClass("sorted-asc").removeClass("sorted-desc").addClass("sortable");d.removeClass("sortable").addClass("sorted-asc")}else{if(d.hasClass("sorted-asc")){c="desc";d.removeClass("sorted-asc").addClass("sorted-desc")}else{if(d.hasClass("sorted-desc")){c="asc";d.removeClass("sorted-desc").addClass("sorted-asc")}}}a.update_rows({orderby:e,order:c},true);return false});b(".search-box :submit").click(function(){a.change_search(b(this).parent(".search-box").find(":text").val());return false});b(".search-box :text").keypress(function(c){if(13!=c.keyCode){return}a.change_search(b(this).val());return false});b("#post-query-submit").click(function(){var d,e,c={};b(this).parents(".actions").find('select[name!="action"]').each(function(){var f=b(this);c[f.attr("name")]=f.val()});a.update_rows(c,true);return false});b(".view-switch a").click(function(){var c=b(this);a.update_rows({mode:b.query.load(c.attr("href")).get("mode")},false,function(){b(".view-switch .current").removeClass("current");c.addClass("current")});return false})}); 
  • trunk/wp-includes/script-loader.php

    r15498 r15507  
    339339        $scripts->add_data( 'theme-preview', 'group', 1 ); 
    340340 
    341         $scripts->add( 'admin-table', "/wp-admin/js/admin-table$suffix.js", array( 'jquery', 'jquery-query' ), '20100812' ); 
     341        $scripts->add( 'admin-table', "/wp-admin/js/admin-table$suffix.js", array( 'jquery', 'jquery-query' ), '20100818' ); 
    342342        $scripts->add_data( 'admin-table', 'group', 1 ); 
    343343        $scripts->localize( 'admin-table', 'adminTableL10n', array( 
Note: See TracChangeset for help on using the changeset viewer.