Ticket #4805: 4805c.diff

File 4805c.diff, 75.1 KB (added by mdawaffe, 5 years ago)

rev 6185

  • wp-includes/js/wp-lists.js

     
     1(function($) { 
     2var currentFormEl = false; 
     3var fs = {add:'ajaxAdd',del:'ajaxDel',dim:'ajaxDim',process:'process',recolor:'recolor'}; 
     4 
     5wpAjax = { 
     6        unserialize: function( s ) { 
     7                var r = {}; if ( !s ) { return r; } 
     8                var q = s.split('?'); if ( q[1] ) { s = q[1]; } 
     9                var pp = s.split('&'); 
     10                for ( var i in pp ) { 
     11                        var p = pp[i].split('='); 
     12                        r[p[0]] = p[1]; 
     13                } 
     14                return r; 
     15        }, 
     16        parseAjaxResponse: function( x, r ) { // 1 = good, 0 = strange (bad data?), -1 = you lack permission 
     17                var re = $('#' + r).html(''); 
     18                if ( x && typeof x == 'object' && x.getElementsByTagName('wp_ajax') ) { 
     19                        if ( $('wp_error', x).each( function() { re.append('<p>' + this.firstChild.nodeValue + '</p>'); } ).size() ) { 
     20                                return !re.wrap( '<div class="error"></div>' ); 
     21                        } 
     22                        return true; 
     23                } 
     24                if ( isNaN(x) ) { return !re.html('<div class="error"><p>' + x + '</p></div>'); } 
     25                x = parseInt(x,10); 
     26                if ( -1 == x ) { return !re.html('<div class="error"><p>You do not have permission to do that.</p></div>'); } 
     27                else if ( 0 === x ) { return !re.html('<div class="error"><p>AJAX is teh b0rked.</p></div>'); } 
     28                return true; 
     29        } 
     30}; 
     31 
     32var wpList = { 
     33        settings: { 
     34                url: wpListL10n.url, type: 'POST', 
     35                response: 'ajax-response', 
     36 
     37                what: '', 
     38                alt: 'alternate', altOffset: 0, 
     39                addColor: null, delColor: null, dimAddColor: null, dimDelColor: null, 
     40 
     41                confirm: null, 
     42                addBefore: null, addAfter: null, 
     43                delBefore: null, delAfter: null, 
     44                dimBefore: null, dimAfter: null 
     45        }, 
     46 
     47        nonce: function(e,s) { 
     48                var url = wpAjax.unserialize(e.attr('href')); 
     49                return s.nonce || url._ajax_nonce || $('#' + s.element + ' input[@name=_ajax_nonce]').val() || url._wpnonce || $('#' + s.element + ' input[@name=_wpnonce]').val() || 0; 
     50        }, 
     51 
     52        parseClass: function(e,t) { 
     53                var c = []; try { c = $(e).attr('class').match(new RegExp(t+':[A-Za-z0-9:_=-]+'))[0].split(':'); } catch(r) {} 
     54                return c; 
     55        }, 
     56 
     57        pre: function(e,s,a) { 
     58                var bg; var r; 
     59                s = $.extend( {}, this.wpList.settings, { 
     60                        element: null, 
     61                        nonce: 0 
     62                }, s || {} ); 
     63                if ( $.isFunction( s.confirm ) ) { 
     64                        if ( 'add' != a ) { 
     65                                bg = $('#' + s.element).css('background-color'); 
     66                                $('#' + s.element).css('background-color', '#FF9966'); 
     67                        } 
     68                        r = s.confirm.call(this,e,s,a,bg); 
     69                        if ( 'add' != a ) { $('#' + s.element).css('background-color', bg ); } 
     70                        if ( !r ) { return false; } 
     71                } 
     72                return s; 
     73        }, 
     74 
     75        ajaxAdd: function( e, s ) { 
     76                var list = this; e = $(e); s = s || {}; 
     77                var cls = wpList.parseClass(e,'add'); 
     78                s = $.extend(s, { 
     79                        element: s.element || cls[2] || e.attr( 'id' ) || null, 
     80                        addColor: s.addColor || '#' + ( cls[3] || 'FFFF33' ) 
     81                } ); 
     82                s = wpList.pre.call( list, e, s, 'add' ); 
     83                if ( !s ) { return false; } 
     84 
     85                if ( !e.is("[@class^=add:" + list.id + ":]") ) { return !wpList.add.call( list, e, s ); } 
     86 
     87                if ( !s.element ) { return true; } 
     88 
     89                s.action = 'add-' + s.what; 
     90 
     91                s.nonce = wpList.nonce(e,s); 
     92 
     93                var es = $('#' + s.element + ' :input').not('[@name=_ajax_nonce], [@name=_wpnonce], [@name=action]'); 
     94                s.data = $.param( $.extend( { _ajax_nonce: s.nonce, action: s.action }, wpAjax.unserialize( cls[4] || '' ) ) ); 
     95                var formData = $.isFunction(es.fieldSerialize) ? es.fieldSerialize() : es.serialize(); 
     96                if ( formData ) { s.data += '&' + formData; } 
     97 
     98                if ( $.isFunction(s.addBefore) ) { 
     99                        s = s.addBefore( s ); 
     100                        if ( !s ) { return true; } 
     101                } 
     102                if ( !s.data.match(/_ajax_nonce=[a-f0-9]+/) ) { return true; } 
     103 
     104                s.success = function(r) { 
     105                        if ( !wpAjax.parseAjaxResponse(r, s.response) ) { return false; } 
     106 
     107                        $(s.what + ' response_data', r).each( function() { 
     108                                var t = $(this); 
     109                                wpList.add.call( list, t.text(), $.extend( {}, s, { // this.firstChild.nodevalue 
     110                                        pos: t.parent().attr( 'position' ) || 0, 
     111                                        id: t.parent().attr( 'id' ) || 0, 
     112                                        oldId: t.parent().attr( 'old_id' ) || null 
     113                                } ) ); 
     114                        } ); 
     115 
     116                        if ( $.isFunction(s.addAfter) ) { 
     117                                var o = this.complete; 
     118                                this.complete = function(x,st) { 
     119                                        var _s = $.extend( { xml: x, status: st }, s ); 
     120                                        s.addAfter( r, _s ); 
     121                                        if ( $.isFunction(o) ) { o(x,st); } 
     122                                }; 
     123                        } 
     124                        list.wpList.recolor(); 
     125                        wpList.clear.call(list,'#' + s.element); 
     126                }; 
     127 
     128                $.ajax( s ); 
     129                return false; 
     130        }, 
     131 
     132        ajaxDel: function( e, s ) { 
     133                var list = this; e = $(e); s = s || {}; 
     134                var cls = wpList.parseClass(e,'delete'); 
     135                s = $.extend(s, { 
     136                        element: s.element || cls[2] || null, 
     137                        delColor: s.delColor || '#' + ( cls[3] || 'FF3333' ) 
     138                } ); 
     139                s = wpList.pre.call( list, e, s, 'delete' ); 
     140                if ( !s || !s.element ) { return false; } 
     141 
     142                s.action = 'delete-' + s.what; 
     143 
     144                s.nonce = wpList.nonce(e,s); 
     145 
     146                s.data = $.extend( 
     147                        { action: s.action, id: s.element.split('-').pop(), _ajax_nonce: s.nonce }, 
     148                        wpAjax.unserialize( cls[4] || '' ) 
     149                ); 
     150 
     151                if ( $.isFunction(s.delBefore) ) { 
     152                        s = s.delBefore( s ); 
     153                        if ( !s ) { return true; } 
     154                } 
     155                if ( !s.data._ajax_nonce ) { return true; } 
     156 
     157                var func = function() { $('#' + s.element).css( 'background-color', '' ).hide(); list.wpList.recolor(); }; 
     158                var hideTO = -1; 
     159                if ( 'none' != s.delColor ) { 
     160                        Fat.fade_element(s.element,null,700,s.delColor); 
     161                        hideTO = setTimeout(func, 705); 
     162                } else { 
     163                        func(); 
     164                } 
     165 
     166                s.success = function(r) { 
     167                        if ( !wpAjax.parseAjaxResponse(r, s.response) ) { 
     168                                clearTimeout(hideTO); 
     169                                func = function() { $('#' + s.element).css( 'background-color', '#FF3333' ).show(); list.wpList.recolor(); }; 
     170                                func(); setTimeout(func, 705); // In case it's still fading 
     171                                return false; 
     172                        } 
     173                        if ( $.isFunction(s.delAfter) ) { 
     174                                var o = this.complete; 
     175                                this.complete = function(x,st) { 
     176                                        var _s = $.extend( { xml: x, status: st }, s ); 
     177                                        s.delAfter( r, _s ); 
     178                                        if ( $.isFunction(o) ) { o(x,st); } 
     179                                }; 
     180                        } 
     181                }; 
     182                $.ajax( s ); 
     183                return false; 
     184        }, 
     185 
     186        ajaxDim: function( e, s ) { 
     187                var list = this; e = $(e); s = s || {}; 
     188                var cls = wpList.parseClass(e,'dim'); 
     189                s = $.extend(s, { 
     190                        element: s.element || cls[2] || null, 
     191                        dimClass: s.dimClass || cls[3] || null, 
     192                        dimAddColor: s.dimAddColor || '#' + ( cls[4] || 'FFFF33' ), 
     193                        dimDelColor: s.dimDelColor || '#' + ( cls[5] || 'FF3333' ) 
     194                } ); 
     195                s = wpList.pre.call( list, e, s, 'dim' ); 
     196                if ( !s || !s.element || !s.dimClass ) { return true; } 
     197 
     198                s.action = 'dim-' + s.what; 
     199 
     200                s.nonce = wpList.nonce(e,s); 
     201 
     202                s.data = $.extend( 
     203                        { action: s.action, id: s.element.split('-').pop(), dimClass: s.dimClass, _ajax_nonce : s.nonce }, 
     204                        wpAjax.unserialize( cls[6] || '' ) 
     205                ); 
     206 
     207                if ( $.isFunction(s.dimBefore) ) { 
     208                        s = s.dimBefore( s ); 
     209                        if ( !s ) { return true; } 
     210                } 
     211 
     212                if ( !s.data._ajax_nonce ) { return true; } 
     213 
     214                var isClass = $('#' + s.element).toggleClass(s.dimClass).is('.' + s.dimClass); 
     215                if ( isClass && 'none' != s.dimAddColor ) { Fat.fade_element(s.element,null,700,s.dimAddColor); } 
     216                else if ( !isClass && 'none' != s.dimDelColor ) { Fat.fade_element(s.element,null,700,s.dimDelColor); } 
     217 
     218                var dimTO = setTimeout( function() { $('#' + s.element).css( 'background-color', '' ); }, 705 ); 
     219 
     220                s.success = function(r) { 
     221                        if ( !wpAjax.parseAjaxResponse(r, s.response) ) { 
     222                                clearTimeout(dimTO); 
     223                                func = function() { $('#' + s.element).css( 'background-color', '#FF3333' )[isClass?'removeClass':'addClass'](s.dimClass); }; 
     224                                func(); setTimeout(func, 705); 
     225                                return false; 
     226                        } 
     227                        if ( $.isFunction(s.dimAfter) ) { 
     228                                var o = this.complete; 
     229                                this.complete = function(x,st) { 
     230                                        var _s = $.extend( { xml: x, status: st }, s ); 
     231                                        s.dimAfter( r, _s ); 
     232                                        if ( $.isFunction(o) ) { o(x,st); } 
     233                                }; 
     234                        } 
     235                }; 
     236 
     237                $.ajax( s ); 
     238                return false; 
     239        }, 
     240 
     241        add: function( e, s ) { 
     242                list = $(this); 
     243                e = $(e); 
     244 
     245                var old = false; var next = false; 
     246                var _s = { pos: 0, id: 0, oldId: null }; 
     247                if ( 'string' == typeof s ) { s = { what: s }; } 
     248                s = $.extend(_s, this.wpList.settings, s); 
     249 
     250                if ( !e.size() || !s.what ) { return false; } 
     251                if ( s.oldId ) { 
     252                        old = $('#' + s.what + '-' + s.oldId); 
     253                        next = old.next(); 
     254                        old.remove(); 
     255                } 
     256                if ( s.id ) { $('#' + s.what + '-' + s.id).remove(); } 
     257 
     258                if ( old && old.size() ) { 
     259                        if ( next && next.size() ) { 
     260                                next.before(e); 
     261                        } else { 
     262                                list.append(e); 
     263                        } 
     264                } else if ( isNaN(s.pos) ) { 
     265                        var ba = 'after'; 
     266                        if ( '-' == s.pos.substr(0,1) ) { 
     267                                s.pos = s.pos.substr(1); 
     268                                ba = 'before'; 
     269                        } 
     270                        var ref = list.find( '#' + s.pos ); 
     271                        if ( 1 === ref.size() ) { ref[ba](e); } 
     272                        else { list.append(e); } 
     273                } else if ( s.pos < 0 ) { 
     274                        list.prepend(e); 
     275                } else { 
     276                        list.append(e); 
     277                } 
     278 
     279                if ( s.alt ) { 
     280                        if ( ( list.children(':visible').index( e[0] ) + s.altOffset ) % 2 ) { e.removeClass( s.alt ); } 
     281                        else { e.addClass( s.alt ); } 
     282                } 
     283 
     284                if ( 'none' != s.addColor ) { 
     285                        Fat.fade_element(e.attr('id'),null,700,s.addColor); 
     286                        setTimeout( function() { 
     287                                var b = e.css( 'background-color' ); 
     288                                var g = e.css( 'background-color', '' ).css( 'background-color' ); 
     289                                if ( b != g ) { e.css( 'background-color', b ); } 
     290                        }, 705 ); 
     291                } 
     292                list.each( function() { this.wpList.process( e ); } ); 
     293                return e; 
     294        }, 
     295 
     296        clear: function(e) { 
     297                var list = this; 
     298                e = $(e); 
     299                if ( list.wpList && e.parents( '#' + list.id ).size() ) { return; } 
     300                e.find(':input').each( function() { 
     301                        var t = this.type.toLowerCase(); var tag = this.tagName.toLowerCase(); 
     302                        if ( 'text' == t || 'password' == t || 'textarea' == tag ) { this.value = ''; } 
     303                        else if ( 'checkbox' == t || 'radio' == t ) { this.checked = false; } 
     304                        else if ( 'select' == tag ) { this.selectedIndex = null; } 
     305                }); 
     306        }, 
     307 
     308        process: function(el) { 
     309                var list = this; 
     310                var bl = function() { currentFormEl = false; }; 
     311                var fo = function() { currentFormEl = this; }; 
     312                var a = $("[@class^=add:" + list.id + ":]", el || null) 
     313                        .filter('form').submit( function() { return list.wpList.add(this); } ).end() 
     314                        .not('form').click( function() { return list.wpList.add(this); } ).each( function() { 
     315                                var addEl = this; 
     316                                var c = wpList.parseClass(this,'add')[2] || addEl.id; 
     317                                if ( !c ) { return; } 
     318                                var forms = []; var ins = []; 
     319                                $('#' + c + ' :input').click( function() { $(this).unbind( 'blur', bl ).unbind( 'focus', fo ).blur( bl ).focus( fo ).focus(); } ).each( function() { 
     320                                        ins.push(this); 
     321                                        $.merge(forms,$(this).parents('form')); 
     322                                        forms = $.unique(forms); 
     323                                } ); 
     324                                $(forms).submit( function() { 
     325                                        var e = currentFormEl; 
     326                                        if ( 0 <= $.inArray(e,ins) ) { 
     327                                                $(addEl).trigger( 'click' ); 
     328                                                $(e).focus(); 
     329                                                return false; 
     330                                        } 
     331                                } ); 
     332                        } ); 
     333                var d = $("[@class^=delete:" + list.id + ":]", el || null).click( function() { return list.wpList.del(this); } ); 
     334                var c = $("[@class^=dim:" + list.id + ":]", el || null).click( function() { return list.wpList.dim(this); } ); 
     335        }, 
     336 
     337        recolor: function() { 
     338                var list = this; 
     339                if ( !list.wpList.settings.alt ) { return; } 
     340                var items = $('.list-item:visible', list); 
     341                if ( !items.size() ) { items = $(list).children(':visible'); } 
     342                var eo = [':even',':odd']; 
     343                if ( list.wpList.settings.altOffset % 2 ) { eo.reverse(); } 
     344                items.filter(eo[0]).addClass(list.wpList.settings.alt).end().filter(eo[1]).removeClass(list.wpList.settings.alt); 
     345        }, 
     346 
     347        init: function() { 
     348                var lists = this; 
     349                lists.wpList.process = function(a) { 
     350                        lists.each( function() { 
     351                                this.wpList.process(a); 
     352                        } ); 
     353                }; 
     354                lists.wpList.recolor = function() { 
     355                        lists.each( function() { 
     356                                this.wpList.recolor(); 
     357                        } ); 
     358                }; 
     359        } 
     360}; 
     361 
     362$.fn.wpList = function( settings ) { 
     363        this.each( function() { 
     364                var _this = this; 
     365                this.wpList = { settings: $.extend( {}, wpList.settings, { what: wpList.parseClass(this,'list')[1] || '' }, settings ) }; 
     366                $.each( fs, function(i,f) { _this.wpList[i] = function( e, s ) { return wpList[f].call( _this, e, s ); }; } ); 
     367        } ); 
     368        wpList.init.call(this); 
     369        this.wpList.process(); 
     370        return this; 
     371}; 
     372 
     373})(jQuery); 
  • wp-includes/classes.php

     
    696696                $defaults = array( 
    697697                        'what' => 'object', 'action' => false, 
    698698                        'id' => '0', 'old_id' => false, 
     699                        'position' => 1, // -1 = top, 1 = bottom, html ID = after, -html ID = before 
    699700                        'data' => '', 'supplemental' => array() 
    700701                ); 
    701702 
    702703                $r = wp_parse_args( $args, $defaults ); 
    703704                extract( $r, EXTR_SKIP ); 
     705                $postition = preg_replace( '/[^a-z0-9:_-]/i', '', $position ); 
    704706 
    705707                if ( is_wp_error($id) ) { 
    706708                        $data = $id; 
     
    724726 
    725727                $x = ''; 
    726728                $x .= "<response action='{$action}_$id'>"; // The action attribute in the xml output is formatted like a nonce action 
    727                 $x .=   "<$what id='$id'" . ( false !== $old_id ? "old_id='$old_id'>" : '>' ); 
     729                $x .=   "<$what id='$id' " . ( false === $old_id ? '' : "old_id='$old_id' " ) . "position='$position'>"; 
    728730                $x .=           $response; 
    729731                $x .=           $s; 
    730732                $x .=   "</$what>"; 
  • wp-includes/pluggable.php

     
    346346}endif; 
    347347 
    348348if ( !function_exists('check_ajax_referer') ) : 
    349 function check_ajax_referer() { 
    350         $current_name = ''; 
    351         if ( ( $current = wp_get_current_user() ) && $current->ID ) 
    352                 $current_name = $current->data->user_login; 
    353         if ( !$current_name ) 
    354                 die('-1'); 
     349function check_ajax_referer( $action = -1 ) { 
     350        $nonce = $_REQUEST['_ajax_nonce'] ? $_REQUEST['_ajax_nonce'] : $_REQUEST['_wpnonce']; 
     351        if ( !wp_verify_nonce( $nonce, $action ) ) { 
     352                $current_name = ''; 
     353                if ( ( $current = wp_get_current_user() ) && $current->ID ) 
     354                        $current_name = $current->data->user_login; 
     355                if ( !$current_name ) 
     356                        die('-1'); 
    355357 
    356         $cookie = explode('; ', urldecode(empty($_POST['cookie']) ? $_GET['cookie'] : $_POST['cookie'])); // AJAX scripts must pass cookie=document.cookie 
    357         foreach ( $cookie as $tasty ) { 
    358                 if ( false !== strpos($tasty, USER_COOKIE) ) 
    359                         $user = substr(strstr($tasty, '='), 1); 
    360                 if ( false !== strpos($tasty, PASS_COOKIE) ) 
    361                         $pass = substr(strstr($tasty, '='), 1); 
     358                $cookie = explode('; ', urldecode(empty($_POST['cookie']) ? $_GET['cookie'] : $_POST['cookie'])); // AJAX scripts must pass cookie=document.cookie 
     359                foreach ( $cookie as $tasty ) { 
     360                        if ( false !== strpos($tasty, USER_COOKIE) ) 
     361                                $user = substr(strstr($tasty, '='), 1); 
     362                        if ( false !== strpos($tasty, PASS_COOKIE) ) 
     363                                $pass = substr(strstr($tasty, '='), 1); 
     364                } 
     365 
     366                if ( $current_name != $user || !wp_login( $user, $pass, true ) ) 
     367                        die('-1'); 
    362368        } 
    363  
    364         if ( $current_name != $user || !wp_login( $user, $pass, true ) ) 
    365                 die('-1'); 
    366369        do_action('check_ajax_referer'); 
    367370} 
    368371endif; 
  • wp-includes/script-loader.php

     
    6161                        'delText' => __('Are you sure you want to delete this %thing%?') 
    6262                ) ); 
    6363 
     64                $this->add( 'wp-lists', '/wp-includes/js/wp-lists.js', array('jquery'), '20070823' ); 
     65                $this->localize( 'wp-lists', 'wpListL10n', array( 
     66                        'url' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php' 
     67                ) ); 
     68 
    6469                $this->add( 'scriptaculous-root', '/wp-includes/js/scriptaculous/scriptaculous.js', array('prototype'), '1.7.1-b3'); 
    6570                $this->add( 'scriptaculous-builder', '/wp-includes/js/scriptaculous/builder.js', array('scriptaculous-root'), '1.7.1-b3'); 
    6671                $this->add( 'scriptaculous-dragdrop', '/wp-includes/js/scriptaculous/dragdrop.js', array('scriptaculous-builder', 'scriptaculous-effects'), '1.7.1-b3'); 
     
    105110                                        'toggleKey' => __(', or press the enter key to %toggle% it'), 
    106111                                ) ); 
    107112                        } 
    108                         $this->add( 'ajaxcat', '/wp-admin/js/cat.js', array('listman'), '20070724' ); 
     113                        $this->add( 'ajaxcat', '/wp-admin/js/cat.js', array( 'wp-lists' ), '20070823' ); 
    109114                        $this->localize( 'ajaxcat', 'catL10n', array( 
    110115                                'add' => attribute_escape(__('Add')), 
    111116                                'how' => __('Separate multiple categories with commas.') 
    112117                        ) ); 
    113                         $this->add( 'ajaxlinkcat', '/wp-admin/js/link-cat.js', array('listman'), '200700601' ); 
    114                         $this->localize( 'ajaxlinkcat', 'linkcatL10n', array( 
    115                                 'add' => attribute_escape(__('Add')), 
    116                                 'how' => __('Separate multiple categories with commas.') 
    117                         ) ); 
    118                         $this->add( 'admin-categories', '/wp-admin/js/categories.js', array('listman'), '3684' ); 
    119                         $this->add( 'admin-custom-fields', '/wp-admin/js/custom-fields.js', array('listman'), '3733' ); 
    120                         $this->add( 'admin-comments', '/wp-admin/js/edit-comments.js', array('listman'), '20070327' ); 
    121                         $this->add( 'admin-users', '/wp-admin/js/users.js', array('listman'), '4583' ); 
     118                        $this->add( 'admin-categories', '/wp-admin/js/categories.js', array('wp-lists'), '20070823' ); 
     119                        $this->add( 'admin-custom-fields', '/wp-admin/js/custom-fields.js', array('wp-lists'), '20070823' ); 
     120                        $this->add( 'admin-comments', '/wp-admin/js/edit-comments.js', array('wp-lists'), '20070822' ); 
     121                        $this->add( 'admin-posts', '/wp-admin/js/edit-posts.js', array('wp-lists'), '20070823' ); 
     122                        $this->add( 'admin-users', '/wp-admin/js/users.js', array('wp-lists'), '20070823' ); 
    122123                        $this->add( 'xfn', '/wp-admin/js/xfn.js', false, '3517' ); 
    123124                        $this->add( 'upload', '/wp-admin/js/upload.js', array('jquery'), '20070518' ); 
    124125                        $this->localize( 'upload', 'uploadL10n', array( 
  • wp-admin/users.php

     
    393393        <th colspan="2" style="text-align: center"><?php _e('Actions') ?></th> 
    394394</tr> 
    395395</tbody> 
    396 <tbody id="role-<?php echo $role; ?>"><?php 
     396<tbody id="role-<?php echo $role; ?>" class="list:user user-list"><?php 
    397397$style = ''; 
    398398foreach ( (array) $roleclass as $user_object ) { 
    399399        $style = ( ' class="alternate"' == $style ) ? '' : ' class="alternate"'; 
     
    456456        else 
    457457        echo '<p>' . sprintf(__('Users cannot currently <a href="%1$s">register themselves</a>, but you can manually create users here.'), get_option('siteurl').'/wp-admin/options-general.php#users_can_register') . '</p>'; 
    458458?> 
    459 <form action="#add-new-user" method="post" name="adduser" id="adduser"> 
     459<form action="#add-new-user" method="post" name="adduser" id="adduser" class="add:user-list:"> 
    460460<?php wp_nonce_field('add-user') ?> 
    461461<table class="editform" width="100%" cellspacing="2" cellpadding="5"> 
    462462        <tr> 
     
    507507</p> 
    508508</form> 
    509509 
     510<table style="color:red"> 
     511<tbody id="user-list" class="list:user"> 
     512</tbody> 
     513</table> 
     514 
    510515</div> 
    511516</div> 
    512517 
  • wp-admin/edit-comments.php

     
    102102                $offset = $offset + 1; 
    103103                $start = " start='$offset'"; 
    104104 
    105                 echo "<ol id='the-comment-list' class='commentlist' $start>\n"; 
     105                echo "<ol id='the-comment-list' class='list:comment commentlist' $start>\n"; 
    106106                $i = 0; 
    107107                foreach ( $comments as $comment ) { 
    108108                        get_comment( $comment ); // Cache it 
     
    112112 
    113113if ( $extra_comments ) : ?> 
    114114<div id="extra-comments" style="display:none"> 
    115 <ul id="the-extra-comment-list" class="commentlist"> 
     115<ol id="the-extra-comment-list" class="list:comment commentlist" style="color:red"> 
    116116<?php 
    117117        foreach ( $extra_comments as $comment ) { 
    118118                get_comment( $comment ); // Cache it 
    119                 _wp_comment_list_item( $comment->comment_ID, ++$i ); 
     119                _wp_comment_list_item( $comment->comment_ID, 0 ); 
    120120        } 
    121121?> 
    122 </ul> 
     122</ol> 
     123<form action="" method="get" id="get-extra-comments" class="add:the-extra-comment-list:"> 
     124<input type="hidden" name="page" value="<?php echo $page; ?>" /> 
     125<input type="hidden" name="s" value="<?php echo attribute_escape(@$_GET['s']); ?>" /> 
     126<?php wp_nonce_field( 'add-comment', '_ajax_nonce', false ); ?> 
    123127</div> 
    124128<?php endif; // $extra_comments ?> 
    125129 
     
    149153    <th scope="col">' . __('Comment Excerpt') . '</th> 
    150154        <th scope="col" colspan="3" style="text-align: center">' .  __('Actions') . '</th> 
    151155  </tr> 
    152 </thead>'; 
     156</thead> 
     157<tbody id="the-comment-list" class="list:comment">'; 
    153158                foreach ($comments as $comment) { 
    154159                $post = get_post($comment->comment_post_ID); 
    155160                $authordata = get_userdata($post->post_author); 
     
    159164?> 
    160165  <tr id="comment-<?php echo $comment->comment_ID; ?>" class='<?php echo $class; ?>'> 
    161166    <td style="text-align: center"><?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) { ?><input type="checkbox" name="delete_comments[]" value="<?php echo $comment->comment_ID; ?>" /><?php } ?></td> 
    162     <td><?php comment_author_link() ?></td> 
     167    <td class="comment-author"><?php comment_author_link() ?></td> 
    163168    <td><?php comment_author_email_link() ?></td> 
    164169    <td><a href="edit-comments.php?s=<?php comment_author_IP() ?>&amp;mode=edit"><?php comment_author_IP() ?></a></td> 
    165170    <td><?php comment_excerpt(); ?></td> 
     
    173178    <td><?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) { 
    174179        echo "<a href='comment.php?action=editcomment&amp;c=$comment->comment_ID' class='edit'>" .  __('Edit') . "</a>"; } ?></td> 
    175180    <td><?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) { 
    176                 echo "<a href=\"comment.php?action=deletecomment&amp;p=".$comment->comment_post_ID."&amp;c=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to delete this comment by '%s'. \n  'Cancel' to stop, 'OK' to delete."), $comment->comment_author ))  . "', theCommentList );\" class='delete'>" . __('Delete') . "</a> "; 
     181                $url = clean_url( wp_nonce_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$comment->comment_ID", "delete-comment_$comment->comment_ID" ) ); 
     182                echo "<a href='$url' class='delete:the-comment-list:comment-$comment->comment_ID delete'>" . __('Delete') . "</a> "; 
    177183                } ?></td> 
    178184  </tr> 
    179185                <?php 
    180186                } // end foreach 
    181         ?></table> 
     187        ?></tbody> 
     188</table> 
    182189<p class="submit"><input type="submit" name="delete_button" class="delete" value="<?php _e('Delete Checked Comments &raquo;') ?>" onclick="var numchecked = getNumChecked(document.getElementById('deletecomments')); if(numchecked < 1) { alert('<?php echo js_escape(__("Please select some comments to delete")); ?>'); return false } return confirm('<?php echo sprintf(js_escape(__("You are about to delete %s comments permanently \n  'Cancel' to stop, 'OK' to delete.")), "' + numchecked + '"); ?>')" /> 
    183190                        <input type="submit" name="spam_button" value="<?php _e('Mark Checked Comments as Spam &raquo;') ?>" onclick="var numchecked = getNumChecked(document.getElementById('deletecomments')); if(numchecked < 1) { alert('<?php echo js_escape(__("Please select some comments to mark as spam")); ?>'); return false } return confirm('<?php echo sprintf(js_escape(__("You are about to mark %s comments as spam \n  'Cancel' to stop, 'OK' to mark as spam.")), "' + numchecked + '"); ?>')" /></p> 
    184191  </form> 
  • wp-admin/admin-ajax.php

     
    44 
    55define('DOING_AJAX', true); 
    66 
    7 check_ajax_referer(); 
    87if ( !is_user_logged_in() ) 
    98        die('-1'); 
    109 
    1110function get_out_now() { exit; } 
    1211add_action( 'shutdown', 'get_out_now', -1 ); 
    1312 
    14 function wp_ajax_meta_row( $pid, $mid, $key, $value ) { 
    15         $value = attribute_escape($value); 
    16         $key_js = addslashes(wp_specialchars($key, 'double')); 
    17         $key = attribute_escape($key); 
    18         $r .= "<tr id='meta-$mid'><td valign='top'>"; 
    19         $r .= "<input name='meta[$mid][key]' tabindex='6' onkeypress='return killSubmit(\"theList.ajaxUpdater(&#039;meta&#039;,&#039;meta-$mid&#039;);\",event);' type='text' size='20' value='$key' />"; 
    20         $r .= "</td><td><textarea name='meta[$mid][value]' tabindex='6' rows='2' cols='30'>$value</textarea></td><td align='center'>"; 
    21         $r .= "<input name='updatemeta' type='button' class='updatemeta' tabindex='6' value='".attribute_escape(__('Update'))."' onclick='return theList.ajaxUpdater(&#039;meta&#039;,&#039;meta-$mid&#039;);' /><br />"; 
    22         $r .= "<input name='deletemeta[$mid]' type='submit' onclick=\"return deleteSomething( 'meta', $mid, '"; 
    23         $r .= js_escape(sprintf(__("You are about to delete the '%s' custom field on this post.\n'OK' to delete, 'Cancel' to stop."), $key_js)); 
    24         $r .= "' );\" class='deletemeta' tabindex='6' value='".attribute_escape(__('Delete'))."' /></td></tr>"; 
    25         return $r; 
    26 } 
    27  
    2813$id = (int) $_POST['id']; 
    29 switch ( $_POST['action'] ) : 
     14switch ( $action = $_POST['action'] ) : 
     15case 'add-post' : 
     16        check_ajax_referer( 'add-post' ); 
     17        add_filter( 'post_limits', $limit_filter = create_function( '$a', '$b = split(" ",$a); if ( !isset($b[2]) ) return $a; $start = intval(trim($b[1])) / 20 * 15; if ( !is_int($start) ) return $a; $start += intval(trim($b[2])) - 1; return "LIMIT $start, 1";' ) ); 
     18        wp_edit_posts_query( '_POST' ); 
     19        $posts_columns = wp_manage_posts_columns(); 
     20        ob_start(); 
     21                include( 'edit-post-rows.php' ); 
     22                $data = ob_get_contents(); 
     23        ob_end_clean(); 
     24        if ( !preg_match('|<tbody.+?>(.+)</tbody>|s', $data, $matches) ) 
     25                my_dump($data); 
     26        $data = trim($matches[1]); 
     27        $x = new WP_Ajax_Response( array( 'what' => 'post', 'id' => $id, 'data' => $data ) ); 
     28        $x->send(); 
     29        break; 
    3030case 'delete-comment' : 
     31        check_ajax_referer( "delete-comment_$id" ); 
    3132        if ( !$comment = get_comment( $id ) ) 
    3233                die('0'); 
    3334        if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) ) 
    3435                die('-1'); 
    3536 
    36         if ( wp_delete_comment( $comment->comment_ID ) ) 
    37                 die('1'); 
    38         else    die('0'); 
    39         break; 
    40 case 'delete-comment-as-spam' : 
    41         if ( !$comment = get_comment( $id ) ) 
    42                 die('0'); 
    43         if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) ) 
    44                 die('-1'); 
     37        if ( isset($_POST['spam']) && 1 == $_POST['spam'] ) 
     38                $r = wp_set_comment_status( $comment->comment_ID, 'spam' ); 
     39        else 
     40                $r = wp_delete_comment( $comment->comment_ID ); 
    4541 
    46         if ( wp_set_comment_status( $comment->comment_ID, 'spam' ) ) 
    47                 die('1'); 
    48         else    die('0'); 
     42        die( $r ? '1' : '0' ); 
    4943        break; 
    5044case 'delete-cat' : 
     45        check_ajax_referer( "delete-category_$id" ); 
    5146        if ( !current_user_can( 'manage_categories' ) ) 
    5247                die('-1'); 
    5348 
     
    5651        else    die('0'); 
    5752        break; 
    5853case 'delete-link' : 
     54        check_ajax_referer( "delete-bookmark_$id" ); 
    5955        if ( !current_user_can( 'manage_links' ) ) 
    6056                die('-1'); 
    6157 
     
    6460        else    die('0'); 
    6561        break; 
    6662case 'delete-meta' : 
     63        check_ajax_referer( 'change_meta' ); 
    6764        if ( !$meta = get_post_meta_by_id( $id ) ) 
    6865                die('0'); 
    6966        if ( !current_user_can( 'edit_post', $meta->post_id ) ) 
     
    7370        die('0'); 
    7471        break; 
    7572case 'delete-post' : 
     73        check_ajax_referer( "{$action}_$id" ); 
    7674        if ( !current_user_can( 'delete_post', $id ) ) 
    7775                die('-1'); 
    7876 
    7977        if ( wp_delete_post( $id ) ) 
    8078                die('1'); 
    81         else    die('0'); 
     79        else 
     80                die('0'); 
    8281        break; 
    8382case 'delete-page' : 
     83        check_ajax_referer( "{$action}_$id" ); 
    8484        if ( !current_user_can( 'delete_page', $id ) ) 
    8585                die('-1'); 
    8686 
     
    9797                die('-1'); 
    9898 
    9999        if ( 'unapproved' == wp_get_comment_status($comment->comment_ID) ) { 
     100                check_ajax_referer( "approve-comment_$id" ); 
    100101                if ( wp_set_comment_status( $comment->comment_ID, 'approve' ) ) 
    101102                        die('1'); 
    102103        } else { 
     104                check_ajax_referer( "unapprove-comment_$id" ); 
    103105                if ( wp_set_comment_status( $comment->comment_ID, 'hold' ) ) 
    104106                        die('1'); 
    105107        } 
    106108        die('0'); 
    107109        break; 
    108110case 'add-category' : // On the Fly 
     111        check_ajax_referer( $action ); 
    109112        if ( !current_user_can( 'manage_categories' ) ) 
    110113                die('-1'); 
    111114        $names = explode(',', $_POST['newcat']); 
     
    120123                $x->add( array( 
    121124                        'what' => 'category', 
    122125                        'id' => $cat_id, 
    123                         'data' => "<li id='category-$cat_id'><label for='in-category-$cat_id' class='selectit'><input value='$cat_id' type='checkbox' checked='checked' name='post_category[]' id='in-category-$cat_id'/> $cat_name</label></li>" 
     126                        'data' => "<li id='category-$cat_id'><label for='in-category-$cat_id' class='selectit'><input value='$cat_id' type='checkbox' checked='checked' name='post_category[]' id='in-category-$cat_id'/> $cat_name</label></li>", 
     127                        'position' => -1 
    124128                ) ); 
    125129        } 
    126130        $x->send(); 
    127131        break; 
    128132case 'add-link-category' : // On the Fly 
     133        check_ajax_referer( $action ); 
    129134        if ( !current_user_can( 'manage_categories' ) ) 
    130135                die('-1'); 
    131136        $names = explode(',', $_POST['newcat']); 
     
    136141                        die('0'); 
    137142                if ( !$cat_id = is_term( $cat_name, 'link_category' ) ) { 
    138143                        $cat_id = wp_insert_term( $cat_name, 'link_category' ); 
    139                         $cat_id = $cat_id['term_id']; 
    140144                } 
     145                $cat_id = $cat_id['term_id']; 
    141146                $cat_name = wp_specialchars(stripslashes($cat_name)); 
    142147                $x->add( array( 
    143148                        'what' => 'link-category', 
    144149                        'id' => $cat_id, 
    145                         'data' => "<li id='link-category-$cat_id'><label for='in-link-category-$cat_id' class='selectit'><input value='$cat_id' type='checkbox' checked='checked' name='link_category[]' id='in-link-category-$cat_id'/> $cat_name</label></li>" 
     150                        'data' => "<li id='link-category-$cat_id'><label for='in-link-category-$cat_id' class='selectit'><input value='$cat_id' type='checkbox' checked='checked' name='link_category[]' id='in-link-category-$cat_id'/> $cat_name</label></li>", 
     151                        'position' => -1 
    146152                ) ); 
    147153        } 
    148154        $x->send(); 
    149155        break; 
    150156case 'add-cat' : // From Manage->Categories 
     157        check_ajax_referer( 'add-category' ); 
    151158        if ( !current_user_can( 'manage_categories' ) ) 
    152159                die('-1'); 
    153160        if ( !$cat = wp_insert_category( $_POST ) ) 
     
    155162        if ( !$cat = get_category( $cat ) ) 
    156163                die('0'); 
    157164        $level = 0; 
    158         $cat_full_name = $cat->cat_name; 
     165        $cat_full_name = $cat->name; 
    159166        $_cat = $cat; 
    160         while ( $_cat->category_parent ) { 
    161                 $_cat = get_category( $_cat->category_parent ); 
    162                 $cat_full_name = $_cat->cat_name . ' &#8212; ' . $cat_full_name; 
     167        while ( $_cat->parent ) { 
     168                $_cat = get_category( $_cat->parent ); 
     169                $cat_full_name = $_cat->name . ' &#8212; ' . $cat_full_name; 
    163170                $level++; 
    164171        } 
    165172        $cat_full_name = attribute_escape($cat_full_name); 
    166173 
    167174        $x = new WP_Ajax_Response( array( 
    168175                'what' => 'cat', 
    169                 'id' => $cat->cat_ID, 
     176                'id' => $cat->term_id, 
    170177                'data' => _cat_row( $cat, $level, $cat_full_name ), 
    171                 'supplemental' => array('name' => $cat_full_name, 'show-link' => sprintf(__( 'Category <a href="#%s">%s</a> added' ), "cat-$cat->cat_ID", $cat_full_name)) 
     178                'supplemental' => array('name' => $cat_full_name, 'show-link' => sprintf(__( 'Category <a href="#%s">%s</a> added' ), "cat-$cat->term_id", $cat_full_name)) 
    172179        ) ); 
    173180        $x->send(); 
    174181        break; 
    175182case 'add-comment' : 
     183        check_ajax_referer( $action ); 
    176184        if ( !current_user_can( 'edit_post', $id ) ) 
    177185                die('-1'); 
    178186        $search = isset($_POST['s']) ? $_POST['s'] : false; 
    179         $start = isset($_POST['page']) ? intval($_POST['page']) * 25 : 25; 
     187        $start = isset($_POST['page']) ? intval($_POST['page']) * 25 - 1: 24; 
    180188 
    181189        list($comments, $total) = _wp_get_comment_list( $search, $start, 1 ); 
    182190 
     
    198206        $x->send(); 
    199207        break; 
    200208case 'add-meta' : 
    201         if ( !current_user_can( 'edit_post', $id ) ) 
    202                 die('-1'); 
    203         if ( $id < 0 ) { 
    204                 $now = current_time('timestamp', 1); 
    205                 if ( $pid = wp_insert_post( array( 
    206                         'post_title' => sprintf('Draft created on %s at %s', date(get_option('date_format'), $now), date(get_option('time_format'), $now)) 
    207                 ) ) ) { 
    208                         if ( is_wp_error( $pid ) ) 
    209                                 return $pid; 
    210                         $mid = add_meta( $pid ); 
     209        check_ajax_referer( 'change_meta' ); 
     210        $c = 0; 
     211        $pid = (int) $_POST['post_id']; 
     212        if ( isset($_POST['addmeta']) ) { 
     213                if ( !current_user_can( 'edit_post', $pid ) ) 
     214                        die('-1'); 
     215                if ( $pid < 0 ) { 
     216                        $now = current_time('timestamp', 1); 
     217                        if ( $pid = wp_insert_post( array( 
     218                                'post_title' => sprintf('Draft created on %s at %s', date(get_option('date_format'), $now), date(get_option('time_format'), $now)) 
     219                        ) ) ) { 
     220                                if ( is_wp_error( $pid ) ) { 
     221                                        $x = new WP_Ajax_Response( array( 
     222                                                'what' => 'meta', 
     223                                                'data' => $pid 
     224                                        ) ); 
     225                                        $x->send(); 
     226                                } 
     227                                $mid = add_meta( $pid ); 
     228                        } else { 
     229                                die('0'); 
     230                        } 
     231                } else if ( !$mid = add_meta( $pid ) ) { 
     232                        die('0'); 
    211233                } 
    212                 else 
    213                         die('0'); 
    214         } else if ( !$mid = add_meta( $id ) ) { 
    215                 die('0'); 
    216         } 
    217234 
    218         $meta = get_post_meta_by_id( $mid ); 
    219         $key = $meta->meta_key; 
    220         $value = $meta->meta_value; 
    221         $pid = (int) $meta->post_id; 
    222  
    223         $x = new WP_Ajax_Response( array( 
    224                 'what' => 'meta', 
    225                 'id' => $mid, 
    226                 'data' => wp_ajax_meta_row( $pid, $mid, $key, $value ), 
    227                 'supplemental' => array('postid' => $pid) 
    228         ) ); 
    229         $x->send(); 
    230         break; 
    231 case 'update-meta' : 
    232         $mid = (int) array_pop(array_keys($_POST['meta'])); 
    233         $key = $_POST['meta'][$mid]['key']; 
    234         $value = $_POST['meta'][$mid]['value']; 
    235         if ( !$meta = get_post_meta_by_id( $mid ) ) 
    236                 die('0'); // if meta doesn't exist 
    237         if ( !current_user_can( 'edit_post', $meta->post_id ) ) 
    238                 die('-1'); 
    239         if ( $u = update_meta( $mid, $key, $value ) ) { 
     235                $meta = get_post_meta_by_id( $mid ); 
     236                $pid = (int) $meta->post_id; 
     237                $meta = get_object_vars( $meta ); 
     238                $x = new WP_Ajax_Response( array( 
     239                        'what' => 'meta', 
     240                        'id' => $mid, 
     241                        'data' => _list_meta_row( $meta, $c ), 
     242                        'position' => 1, 
     243                        'supplemental' => array('postid' => $pid) 
     244                ) ); 
     245        } else { 
     246                $mid = (int) array_pop(array_keys($_POST['meta'])); 
     247                $key = $_POST['meta'][$mid]['key']; 
     248                $value = $_POST['meta'][$mid]['value']; 
     249                if ( !$meta = get_post_meta_by_id( $mid ) ) 
     250                        die('0'); // if meta doesn't exist 
     251                if ( !current_user_can( 'edit_post', $meta->post_id ) ) 
     252                        die('-1'); 
     253                if ( !$u = update_meta( $mid, $key, $value ) ) 
     254                        die('1'); // We know meta exists; we also know it's unchanged (or DB error, in which case there are bigger problems). 
    240255                $key = stripslashes($key); 
    241256                $value = stripslashes($value); 
    242257                $x = new WP_Ajax_Response( array( 
    243258                        'what' => 'meta', 
    244                         'id' => $mid, 
    245                         'data' => wp_ajax_meta_row( $meta->post_id, $mid, $key, $value ), 
     259                        'id' => $mid, 'old_id' => $mid, 
     260                        'data' => _list_meta_row( array( 
     261                                'meta_key' => $key, 
     262                                'meta_value' => $value, 
     263                                'meta_id' => $mid 
     264                        ), $c ), 
     265                        'position' => 0, 
    246266                        'supplemental' => array('postid' => $meta->post_id) 
    247267                ) ); 
    248                 $x->send(); 
    249268        } 
    250         die('1'); // We know meta exists; we also know it's unchanged (or DB error, in which case there are bigger problems). 
     269        $x->send(); 
    251270        break; 
    252271case 'add-user' : 
     272        check_ajax_referer( $action ); 
    253273        if ( !current_user_can('edit_users') ) 
    254274                die('-1'); 
    255275        require_once(ABSPATH . WPINC . '/registration.php'); 
     
    261281                exit; 
    262282        } 
    263283        $user_object = new WP_User( $user_id ); 
     284 
    264285        $x = new WP_Ajax_Response( array( 
    265286                'what' => 'user', 
    266287                'id' => $user_id, 
    267288                'data' => user_row( $user_object ), 
    268                 'supplemental' => array('show-link' => sprintf(__( 'User <a href="#%s">%s</a> added' ), "user-$user_id", $user_object->user_login)) 
     289                'supplemental' => array( 
     290                        'show-link' => sprintf(__( 'User <a href="#%s">%s</a> added' ), "user-$user_id", $user_object->user_login), 
     291                        'role' => $user_object->roles[0] 
     292                ) 
    269293        ) ); 
    270294        $x->send(); 
    271295        break; 
    272296case 'autosave' : // The name of this action is hardcoded in edit_post() 
     297        check_ajax_referer( $action ); 
    273298        $_POST['post_content'] = $_POST['content']; 
    274299        $_POST['post_excerpt'] = $_POST['excerpt']; 
    275300        $_POST['post_status'] = 'draft'; 
     
    300325        die('0'); 
    301326break; 
    302327case 'autosave-generate-nonces' : 
     328        check_ajax_referer( $action ); 
    303329        $ID = (int) $_POST['post_ID']; 
    304330        if($_POST['post_type'] == 'post') { 
    305331                if(current_user_can('edit_post', $ID)) 
  • wp-admin/wp-admin.css

     
    819819        width: 95%; 
    820820} 
    821821 
     822#postcustom table #addmetasub { 
     823        width: auto; 
     824} 
     825 
    822826#poststuff { 
    823827        margin-right: 16em; 
    824828} 
  • wp-admin/includes/template.php

     
    4040                $default_cat_id = (int) get_option( 'default_category' ); 
    4141 
    4242                if ( $category->term_id != $default_cat_id ) 
    43                         $edit .= "<td><a href='" . wp_nonce_url( "categories.php?action=delete&amp;cat_ID=$category->term_id", 'delete-category_' . $category->term_id ) . "' onclick=\"return deleteSomething( 'cat', $category->term_id, '" . js_escape(sprintf( __("You are about to delete the category '%s'.\nAll posts that were only assigned to this category will be assigned to the '%s' category.\nAll links that were only assigned to this category will be assigned to the '%s' category.\n'OK' to delete, 'Cancel' to stop." ), $category->name, get_catname( $default_cat_id ), get_catname( $default_link_cat_id ) )) . "' );\" class='delete'>".__( 'Delete' )."</a>"; 
     43                        $edit .= "<td><a href='" . wp_nonce_url( "categories.php?action=delete&amp;cat_ID=$category->term_id", 'delete-category_' . $category->term_id ) . "' class='delete:the-list:cat-$category->term_id delete'>".__( 'Delete' )."</a>"; 
    4444                else 
    4545                        $edit .= "<td style='text-align:center'>".__( "Default" ); 
    4646        } else 
     
    163163        } 
    164164} 
    165165 
     166// define the columns to display, the syntax is 'internal name' => 'display name' 
     167function wp_manage_posts_columns() { 
     168        $posts_columns = array(); 
     169        $posts_columns['id'] = '<div style="text-align: center">' . __('ID') . '</div>'; 
     170        if ( 'draft' === $_GET['post_status'] ) 
     171                $posts_columns['modified'] = __('Modified'); 
     172        elseif ( 'pending' === $_GET['post_status'] ) 
     173                $posts_columns['modified'] = __('Submitted'); 
     174        else 
     175                $posts_columns['date'] = __('When'); 
     176        $posts_columns['title'] = __('Title'); 
     177        $posts_columns['categories'] = __('Categories'); 
     178        if ( !in_array($_GET['post_status'], array('pending', 'draft', 'future')) ) 
     179                $posts_columns['comments'] = '<div style="text-align: center">' . __('Comments') . '</div>'; 
     180        $posts_columns['author'] = __('Author'); 
     181        $posts_columns = apply_filters('manage_posts_columns', $posts_columns); 
     182 
     183        // you can not edit these at the moment 
     184        $posts_columns['control_view']   = ''; 
     185        $posts_columns['control_edit']   = ''; 
     186        $posts_columns['control_delete'] = ''; 
     187 
     188        return $posts_columns; 
     189} 
     190 
    166191function page_rows( $parent = 0, $level = 0, $pages = 0, $hierarchy = true ) { 
    167192        global $wpdb, $class, $post; 
    168193 
     
    189214    </td> 
    190215    <td><?php the_author() ?></td> 
    191216    <td><?php if ( '0000-00-00 00:00:00' ==$post->post_modified ) _e('Unpublished'); else echo mysql2date( __('Y-m-d g:i a'), $post->post_modified ); ?></td> 
    192         <td><a href="<?php the_permalink(); ?>" rel="permalink" class="view"><?php _e( 'View' ); ?></a></td> 
     217    <td><a href="<?php the_permalink(); ?>" rel="permalink" class="view"><?php _e( 'View' ); ?></a></td> 
    193218    <td><?php if ( current_user_can( 'edit_page', $id ) ) { echo "<a href='page.php?action=edit&amp;post=$id' class='edit'>" . __( 'Edit' ) . "</a>"; } ?></td> 
    194     <td><?php if ( current_user_can( 'delete_page', $id ) ) { echo "<a href='" . wp_nonce_url( "page.php?action=delete&amp;post=$id", 'delete-page_' . $id ) .  "' class='delete' onclick=\"return deleteSomething( 'page', " . $id . ", '" . js_escape(sprintf( __("You are about to delete the '%s' page.\n'OK' to delete, 'Cancel' to stop." ), get_the_title() ) ) . "' );\">" . __( 'Delete' ) . "</a>"; } ?></td> 
     219    <td><?php if ( current_user_can( 'delete_page', $id ) ) { echo "<a href='" . wp_nonce_url( "page.php?action=delete&amp;post=$id", 'delete-page_' . $id ) .  "' class='delete:the-list:page-$id delete'>" . __( 'Delete' ) . "</a>"; } ?></td> 
    195220  </tr> 
    196221 
    197222<?php 
     
    261286 
    262287function _wp_comment_list_item( $id, $alt = 0 ) { 
    263288        global $authordata, $comment, $wpdb; 
    264         $id = (int) $id; 
    265289        $comment =& get_comment( $id ); 
     290        $id = (int) $comment->comment_ID; 
    266291        $class = ''; 
    267292        $post = get_post($comment->comment_post_ID); 
    268293        $authordata = get_userdata($post->post_author); 
    269         $comment_status = wp_get_comment_status($comment->comment_ID); 
     294        $comment_status = wp_get_comment_status($id); 
    270295        if ( 'unapproved' == $comment_status ) 
    271296                $class .= ' unapproved'; 
    272297        if ( $alt % 2 ) 
    273298                $class .= ' alternate'; 
    274         echo "<li id='comment-$comment->comment_ID' class='$class'>"; 
     299        echo "<li id='comment-$id' class='$class'>"; 
    275300?> 
    276 <p><strong><?php comment_author(); ?></strong> <?php if ($comment->comment_author_email) { ?>| <?php comment_author_email_link() ?> <?php } if ($comment->comment_author_url && 'http://' != $comment->comment_author_url) { ?> | <?php comment_author_url_link() ?> <?php } ?>| <?php _e('IP:') ?> <a href="http://ws.arin.net/cgi-bin/whois.pl?queryinput=<?php comment_author_IP() ?>"><?php comment_author_IP() ?></a></p> 
     301<p><strong class="comment-author"><?php comment_author(); ?></strong> <?php if ($comment->comment_author_email) { ?>| <?php comment_author_email_link() ?> <?php } if ($comment->comment_author_url && 'http://' != $comment->comment_author_url) { ?> | <?php comment_author_url_link() ?> <?php } ?>| <?php _e('IP:') ?> <a href="http://ws.arin.net/cgi-bin/whois.pl?queryinput=<?php comment_author_IP() ?>"><?php comment_author_IP() ?></a></p> 
    277302 
    278303<?php comment_text() ?> 
    279304 
    280305<p><?php comment_date(__('M j, g:i A'));  ?> &#8212; [ 
    281306<?php 
    282307if ( current_user_can('edit_post', $comment->comment_post_ID) ) { 
    283         echo " <a href='comment.php?action=editcomment&amp;c=".$comment->comment_ID."'>" .  __('Edit') . '</a>'; 
    284         echo ' | <a href="' . wp_nonce_url('comment.php?action=deletecomment&amp;p=' . $comment->comment_post_ID . '&amp;c=' . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . '" onclick="return deleteSomething( \'comment\', ' . $comment->comment_ID . ', \'' . js_escape(sprintf(__("You are about to delete this comment by '%s'.\n'Cancel' to stop, 'OK' to delete."), $comment->comment_author)) . "', theCommentList );\">" . __('Delete') . '</a> '; 
     308        echo " <a href='comment.php?action=editcomment&amp;c=$id'>" .  __('Edit') . '</a>'; 
     309        $url = clean_url( wp_nonce_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$id", "delete-comment_$id" ) ); 
     310        echo " | <a href='$url' class='delete:the-comment-list:comment-$id'>" . __('Delete') . '</a> '; 
    285311        if ( ('none' != $comment_status) && ( current_user_can('moderate_comments') ) ) { 
    286                 echo '<span class="unapprove"> | <a href="' . wp_nonce_url('comment.php?action=unapprovecomment&amp;p=' . $comment->comment_post_ID . '&amp;c=' . $comment->comment_ID, 'unapprove-comment_' . $comment->comment_ID) . '" onclick="return dimSomething( \'comment\', ' . $comment->comment_ID . ', \'unapproved\', theCommentList );">' . __('Unapprove') . '</a> </span>'; 
    287                 echo '<span class="approve"> | <a href="' . wp_nonce_url('comment.php?action=approvecomment&amp;p=' . $comment->comment_post_ID . '&amp;c=' . $comment->comment_ID, 'approve-comment_' . $comment->comment_ID) . '" onclick="return dimSomething( \'comment\', ' . $comment->comment_ID . ', \'unapproved\', theCommentList );">' . __('Approve') . '</a> </span>'; 
     312                $url = clean_url( wp_nonce_url( "comment.php?action=unapprovecomment&p=$comment->comment_post_ID&c=$id", "unapprove-comment_$id" ) ); 
     313                echo "<span class='unapprove'> | <a href='$url' class='dim:the-comment-list:comment-$id:unapproved:FF3333'>" . __('Unapprove') . '</a> </span>'; 
     314                $url = clean_url( wp_nonce_url( "comment.php?action=approvecomment&p=$comment->comment_post_ID&c=$id", "approve-comment_$id" ) ); 
     315                echo "<span class='approve'> | <a href='$url' class='dim:the-comment-list:comment-$id:unapproved:FFFF33:FFFF33'>" . __('Approve') . '</a> </span>'; 
    288316        } 
    289         echo " | <a href=\"" . wp_nonce_url("comment.php?action=deletecomment&amp;dt=spam&amp;p=" . $comment->comment_post_ID . "&amp;c=" . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . "\" onclick=\"return deleteSomething( 'comment-as-spam', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to mark as spam this comment by '%s'.\n'Cancel' to stop, 'OK' to mark as spam."), $comment->comment_author))  . "', theCommentList );\">" . __('Spam') . "</a> "; 
     317        $url = clean_url( wp_nonce_url( "comment.php?action=deletecomment&dt=spam&p=$comment->comment_post_ID&c=$id", "delete-comment_$id" ) ); 
     318        echo " | <a href='$url' class='delete:the-comment-list:comment-$id::spam=1'>" . __('Spam') . '</a> '; 
    290319} 
    291320$post = get_post($comment->comment_post_ID, OBJECT, 'display'); 
    292321$post_title = wp_specialchars( $post->post_title, 'double' ); 
     
    323352        global $post_ID; 
    324353        // Exit if no meta 
    325354        if (!$meta ) { 
    326                 echo '<tbody id="the-list"><tr style="display: none;"><td>&nbsp;</td></tr></tbody>'; //TBODY needed for list-manipulation JS 
     355                echo '<tbody id="the-list" class="list:meta"><tr style="display: none;"><td>&nbsp;</td></tr></tbody>'; //TBODY needed for list-manipulation JS 
    327356                return; 
    328357        } 
    329358        $count = 0; 
     
    335364                <th colspan='2'><?php _e( 'Action' ) ?></th> 
    336365        </tr> 
    337366        </thead> 
     367        <tbody id='the-list' class='list:meta'> 
    338368<?php 
    339         $r ="\n\t<tbody id='the-list'>"; 
    340         foreach ( $meta as $entry ) { 
    341                 ++ $count; 
    342                 if ( $count % 2 ) 
    343                         $style = 'alternate'; 
    344                 else 
    345                         $style = ''; 
    346                 if ('_' == $entry['meta_key'] { 0 } ) 
    347                         $style .= ' hidden'; 
     369        foreach ( $meta as $entry ) 
     370                echo _list_meta_row( $entry, $count ); 
     371        echo "\n\t</tbody>"; 
     372} 
    348373 
    349                 if ( is_serialized( $entry['meta_value'] ) ) { 
    350                         if ( is_serialized_string( $entry['meta_value'] ) ) { 
    351                                 // this is a serialized string, so we should display it 
    352                                 $entry['meta_value'] = maybe_unserialize( $entry['meta_value'] ); 
    353                         } else { 
    354                                 // this is a serialized array/object so we should NOT display it 
    355                                 --$count; 
    356                                 continue; 
    357                         } 
     374function _list_meta_row( $entry, &$count ) { 
     375        $r = ''; 
     376        ++ $count; 
     377        if ( $count % 2 ) 
     378                $style = 'alternate'; 
     379        else 
     380                $style = ''; 
     381        if ('_' == $entry['meta_key'] { 0 } ) 
     382                $style .= ' hidden'; 
     383 
     384        if ( is_serialized( $entry['meta_value'] ) ) { 
     385                if ( is_serialized_string( $entry['meta_value'] ) ) { 
     386                        // this is a serialized string, so we should display it 
     387                        $entry['meta_value'] = maybe_unserialize( $entry['meta_value'] ); 
     388                } else { 
     389                        // this is a serialized array/object so we should NOT display it 
     390                        --$count; 
     391                        return; 
    358392                } 
     393        } 
    359394 
    360                 $key_js = js_escape( $entry['meta_key'] ); 
    361                 $entry['meta_key']   = attribute_escape($entry['meta_key']); 
    362                 $entry['meta_value'] = attribute_escape($entry['meta_value']); 
    363                 $entry['meta_id'] = (int) $entry['meta_id']; 
    364                 $r .= "\n\t<tr id='meta-{$entry['meta_id']}' class='$style'>"; 
    365                 $r .= "\n\t\t<td valign='top'><input name='meta[{$entry['meta_id']}][key]' tabindex='6' type='text' size='20' value='{$entry['meta_key']}' /></td>"; 
    366                 $r .= "\n\t\t<td><textarea name='meta[{$entry['meta_id']}][value]' tabindex='6' rows='2' cols='30'>{$entry['meta_value']}</textarea></td>"; 
    367                 $r .= "\n\t\t<td align='center'><input name='updatemeta' type='submit' class='updatemeta' tabindex='6' value='".attribute_escape(__( 'Update' ))."' /><br />"; 
    368                 $r .= "\n\t\t<input name='deletemeta[{$entry['meta_id']}]' type='submit' onclick=\"return deleteSomething( 'meta', {$entry['meta_id']}, '"; 
    369                 $r .= js_escape(sprintf( __("You are about to delete the '%s' custom field on this post.\n'OK' to delete, 'Cancel' to stop." ), $key_js ) ); 
    370                 $r .= "' );\" class='deletemeta' tabindex='6' value='".attribute_escape(__( 'Delete' ))."' /></td>"; 
    371                 $r .= "\n\t</tr>"; 
    372         } 
    373         echo $r; 
    374         echo "\n\t</tbody>"; 
     395        $key_js = js_escape( $entry['meta_key'] ); 
     396        $entry['meta_key']   = attribute_escape($entry['meta_key']); 
     397        $entry['meta_value'] = attribute_escape($entry['meta_value']); 
     398        $entry['meta_id'] = (int) $entry['meta_id']; 
     399        $r .= "\n\t<tr id='meta-{$entry['meta_id']}' class='$style'>"; 
     400        $r .= "\n\t\t<td valign='top'><input name='meta[{$entry['meta_id']}][key]' tabindex='6' type='text' size='20' value='{$entry['meta_key']}' /></td>"; 
     401        $r .= "\n\t\t<td><textarea name='meta[{$entry['meta_id']}][value]' tabindex='6' rows='2' cols='30'>{$entry['meta_value']}</textarea></td>"; 
     402        $r .= "\n\t\t<td align='center'><input name='updatemeta' type='submit' tabindex='6' value='".attribute_escape(__( 'Update' ))."' class='add:the-list:meta-{$entry['meta_id']} updatemeta' /><br />"; 
     403        $r .= "\n\t\t<input name='deletemeta[{$entry['meta_id']}]' type='submit' "; 
     404        $r .= "class='delete:the-list:meta-{$entry['meta_id']} deletemeta' tabindex='6' value='".attribute_escape(__( 'Delete' ))."' />"; 
     405        $r .= "<input type='hidden' name='_ajax_nonce' value='$nonce' />"; 
     406        $r .= "</td>\n\t</tr>"; 
     407        return $r; 
    375408} 
    376409 
    377410function meta_form() { 
     
    412445                <td><textarea id="metavalue" name="metavalue" rows="3" cols="25" tabindex="8"></textarea></td> 
    413446        </tr> 
    414447 
     448<tr class="submit"><td colspan="3"> 
     449        <?php wp_nonce_field( 'change_meta', '_ajax_nonce', false ); ?> 
     450        <input type="submit" id="addmetasub" name="addmeta" class="add:the-list:newmeta" tabindex="9" value="<?php _e( 'Add Custom Field &raquo;' ) ?>" /> 
     451</td></tr> 
    415452</table> 
    416 <p class="submit"><input type="submit" id="updatemetasub" name="updatemeta" tabindex="9" value="<?php _e( 'Add Custom Field &raquo;' ) ?>" /></p> 
    417453<?php 
    418454 
    419455} 
  • wp-admin/includes/post.php

     
    468468        return $wpdb->query( "UPDATE $wpdb->posts SET post_parent = $new_ID WHERE post_parent = $old_ID" ); 
    469469} 
    470470 
    471 ?> 
    472  No newline at end of file 
     471function wp_edit_posts_query( $q = '_GET' ) { 
     472        global $wpdb; 
     473        $$q['m']   = (int) $$q['m']; 
     474        $$q['cat'] = (int) $$q['cat']; 
     475        $post_stati  = array(   //      array( adj, noun ) 
     476                                'draft' => array(__('Draft'), _c('Drafts|manage posts header')), 
     477                                'future' => array(__('Scheduled'), __('Scheduled posts')), 
     478                                'pending' => array(__('Pending Review'), __('Pending posts')), 
     479                                'private' => array(__('Private'), __('Private posts')), 
     480                                'publish' => array(__('Published'), __('Published posts')) 
     481                        ); 
     482 
     483        $avail_post_stati = $wpdb->get_col("SELECT DISTINCT post_status FROM $wpdb->posts WHERE post_type = 'post'"); 
     484 
     485        $post_status_q = ''; 
     486        $post_status_label = _c('Posts|manage posts header'); 
     487        if ( isset($$q['post_status']) && in_array( $$q['post_status'], array_keys($post_stati) ) ) { 
     488                $post_status_label = $post_stati[$$q['post_status']][1]; 
     489                $post_status_q = '&post_status=' . $$q['post_status']; 
     490        } 
     491 
     492        if ( 'pending' === $$q['post_status'] ) { 
     493                $order = 'ASC'; 
     494                $orderby = 'modified'; 
     495        } elseif ( 'draft' === $$q['post_status'] ) { 
     496                $order = 'DESC'; 
     497                $orderby = 'modified'; 
     498        } else { 
     499                $order = 'DESC'; 
     500                $orderby = 'date'; 
     501        } 
     502 
     503        wp("what_to_show=posts$post_status_q&posts_per_page=20&order=$order&orderby=$orderby"); 
     504 
     505        return array($post_stati, $avail_post_stati); 
     506} 
     507 
     508?> 
  • wp-admin/post.php

     
    121121 
    122122                if ($_POST['save']) { 
    123123                        $location = "post.php?action=edit&post=$post_ID"; 
    124                 } elseif ($_POST['updatemeta']) { 
    125                         $location = wp_get_referer() . '&message=2#postcustom'; 
     124                } elseif ($_POST['addemeta']) { 
     125                        $location = add_query_arg( 'message', 2, wp_get_referer() ); 
     126                        $location = explode('#', $location); 
     127                        $location = $location[0] . '#postcustom'; 
    126128                } elseif ($_POST['deletemeta']) { 
    127                         $location = wp_get_referer() . '&message=3#postcustom'; 
     129                        $location = add_query_arg( 'message', 3, wp_get_referer() ); 
     130                        $location = explode('#', $location); 
     131                        $location = $location[0] . '#postcustom'; 
    128132                } elseif (!empty($referredby) && $referredby != $referer) { 
    129133                        $location = $_POST['referredby']; 
    130134                        if ( $_POST['referredby'] == 'redo' ) 
  • wp-admin/js/categories.js

     
    1 addLoadEvent(function() { 
    2         if (!theList.theList) return false; 
    3         document.forms.addcat.submit.onclick = function(e) {return killSubmit('theList.ajaxAdder("cat", "addcat");', e); }; 
    4         theList.addComplete = function(what, where, update, transport) { 
    5                 var name = getNodeValue(transport.responseXML, 'name').unescapeHTML(); 
    6                 var id = transport.responseXML.getElementsByTagName(what)[0].getAttribute('id'); 
    7                 var options = document.forms['addcat'].category_parent.options; 
     1jQuery(function($) { 
     2        var options = document.forms['addcat'].category_parent.options; 
     3 
     4        var addAfter = function( r, settings ) { 
     5                var name = $("<span>" + $('name', r).text() + "</span>").html(); 
     6                var id = $('cat', r).attr('id'); 
    87                options[options.length] = new Option(name, id); 
    9         }; 
    10         theList.delComplete = function(what, id) { 
    11                 var options = document.forms['addcat'].category_parent.options; 
     8        } 
     9 
     10        var delAfter = function( r, settings ) { 
     11                var id = $('cat', r).attr('id'); 
    1212                for ( var o = 0; o < options.length; o++ ) 
    1313                        if ( id == options[o].value ) 
    1414                                options[o] = null; 
    15         }; 
     15        } 
     16 
     17        var a = $('#the-list').wpList( { addAfter: addAfter, delAfter: delAfter } ); 
    1618}); 
  • wp-admin/js/cat.js

     
    1 addLoadEvent(function(){catList=new listMan('categorychecklist');catList.ajaxRespEl='jaxcat';catList.topAdder=1;catList.alt=0;catList.showLink=0;}); 
    2 addLoadEvent(newCatAddIn); 
    3 function newCatAddIn() { 
    4         var jaxcat = $('jaxcat'); 
    5         if ( !jaxcat ) 
    6                 return false; 
    7         // These multiple blank hidden inputs are needed: https://bugzilla.mozilla.org/show_bug.cgi?id=377815 , #3895 , #4664 
    8         Element.update(jaxcat,'<span id="ajaxcat"><input type="text" name="newcat" id="newcat" size="16" autocomplete="off"/><input type="button" name="Button" id="catadd" value="' + catL10n.add + '"/><input type="hidden"/><input type="hidden"/><span id="howto">' + catL10n.how + '</span></span>'); 
    9         $('newcat').onkeypress = function(e) { return killSubmit("catList.ajaxAdder('category','jaxcat');", e); }; 
    10         $('catadd').onclick = function() { catList.ajaxAdder('category', 'jaxcat'); }; 
    11 } 
     1jQuery( function($) { 
     2        $('#jaxcat').prepend('<span id="ajaxcat"><input type="text" name="newcat" id="newcat" size="16" autocomplete="off"/><input type="button" name="Button" class="add:categorychecklist:jaxcat" id="catadd" value="' + catL10n.add + '"/><input type="hidden"/><input type="hidden"/><span id="howto">' + catL10n.how + '</span></span><span id="cat-ajax-response"></span>') 
     3        var a = $('#categorychecklist').wpList( { alt: '', response: 'cat-ajax-response' } ); 
     4} ); 
  • wp-admin/js/edit-comments.js

     
    1 addLoadEvent(function() { 
    2         theCommentList = new listMan('the-comment-list'); 
    3         if ( !theCommentList ) 
    4                 return false; 
     1var list; var extra; 
     2jQuery(function($) { 
    53 
    6         theExtraCommentList = new listMan('the-extra-comment-list'); 
    7         if ( theExtraCommentList ) { 
    8                 theExtraCommentList.showLink = 0; 
    9                 theExtraCommentList.altOffset = 1; 
    10                 if ( theExtraCommentList.theList && theExtraCommentList.theList.childNodes ) 
    11                         var commentNum = $A(theExtraCommentList.theList.childNodes).findAll( function(i) { return Element.visible(i) } ).length; 
    12                 else 
    13                         var commentNum = 0; 
    14                 var urlQ   = document.location.href.split('?'); 
    15                 var params = urlQ[1] ? urlQ[1].toQueryParams() : []; 
    16                 var search = params['s'] ? params['s'] : ''; 
    17                 var page   = params['apage'] ? params['apage'] : 1; 
    18         } 
     4var dimAfter = function( r, settings ) { 
     5        var a = $('#awaitmod'); 
     6        a.html( parseInt(a.html(),10) + ( $('#' + settings.element).is('.' + settings.dimClass) ? 1 : -1 ) ); 
     7} 
    198 
    20         theCommentList.dimComplete = function(what,id,dimClass) { 
    21                 var m = document.getElementById('awaitmod'); 
    22                 if ( document.getElementById(what + '-' + id).className.match(dimClass) ) 
    23                         m.innerHTML = parseInt(m.innerHTML,10) + 1; 
    24                 else 
    25                         m.innerHTML = parseInt(m.innerHTML,10) - 1; 
     9var delAfter = function( r, settings ) { 
     10        var a = $('#awaitmod'); 
     11        if ( $('#' + settings.element).is('.unapproved') && parseInt(a.html(),10) > 0 ) { 
     12                a.html( parseInt(a.html(),10) - 1 ); 
    2613        } 
    2714 
    28         theCommentList.delComplete = function(what,id) { 
    29                 var m = document.getElementById('awaitmod'); 
    30                 what = what.split('-')[0]; 
    31                 if ( document.getElementById(what + '-' + id).className.match('unapproved') ) 
    32                         m.innerHTML = parseInt(m.innerHTML,10) - 1; 
    33                 if ( theExtraCommentList && commentNum ) { 
    34                         var theMover = theExtraCommentList.theList.childNodes[0]; 
    35                         Element.removeClassName(theMover,'alternate'); 
    36                         theCommentList.theList.appendChild(theMover); 
    37                         theExtraCommentList.inputData += '&page=' + page; 
    38                         if ( search ) 
    39                                 theExtraCommentList.inputData += '&s=' + search; // trust the URL not the search box 
    40                         theExtraCommentList.addComplete = function() { 
    41                                 if ( theExtraCommentList.theList.childNodes ) 
    42                                         var commentNum = $A(theExtraCommentList.theList.childNodes).findAll( function(i) { return Element.visible(i) } ).length; 
    43                                 else 
    44                                         var commentNum = 0; 
    45                         } 
    46                         theExtraCommentList.ajaxAdder( 'comment', 'ajax-response' ); // Dummy Request 
    47                 } 
     15        if ( extra.size() == 0 || extra.children().size() == 0 ) { 
     16                return; 
    4817        } 
    4918 
    50         if ( theList ) // the post list: edit.php 
    51                 theList.delComplete = function() { 
    52                         var comments = document.getElementById('comments'); 
    53                         var commdel = encloseFunc(function(a){a.parentNode.removeChild(a);},comments); 
    54                         var listdel = encloseFunc(function(a){a.parentNode.removeChild(a);},theCommentList.theList); 
    55                         setTimeout(commdel,705); 
    56                         setTimeout(listdel,705); 
    57                 } 
    58 }); 
     19        list[0].wpList.add( extra.children(':eq(0)').remove().clone() ); 
     20        $('#get-extra-comments').submit(); 
     21} 
    5922 
     23extra = $('#the-extra-comment-list').wpList( { alt: '', delColor: 'none', addColor: 'none' } ); 
     24list = $('#the-comment-list').wpList( { dimAfter : dimAfter, delAfter : delAfter, addColor: 'none' } ); 
     25 
     26} ); 
  • wp-admin/js/edit-posts.js

     
     1jQuery(function($) { 
     2var delAfter; var extra; var list; 
     3 
     4if ( document.location.href.match(/(\?|&)c=/) ) 
     5        delAfter = function() { $('#comments, #the-comment-list').remove(); } 
     6else 
     7        delAfter = function() { 
     8                list[0].wpList.add( extra.children(':eq(0)').remove().clone() ); 
     9                $('#get-extra-button').click(); 
     10        } 
     11 
     12var addBefore = function ( settings ) { 
     13        var q = document.location.href.split('?'); 
     14        if ( q[1] ) 
     15                settings.data += '&' + q[1]; 
     16        return settings; 
     17} 
     18 
     19extra = $('#the-extra-list').wpList( { alt: '', addBefore: addBefore, addColor: 'none', delColor: 'none' } ); 
     20list = $('#the-list').wpList( { delAfter: delAfter, addColor: 'none' } ); 
     21 
     22} ); 
  • wp-admin/js/custom-fields.js

     
    1 function customFieldsOnComplete( what, where, update, transport ) { 
    2         var pidEl = $('post_ID'); 
    3         pidEl.name = 'post_ID'; 
    4         pidEl.value = getNodeValue(transport.responseXML, 'postid'); 
    5         var aEl = $('hiddenaction') 
    6         if ( aEl.value == 'post' ) aEl.value = 'postajaxpost'; 
    7 } 
    8 addLoadEvent(customFieldsAddIn); 
    9 function customFieldsAddIn() { 
    10         theList.showLink=0; 
    11         theList.addComplete = customFieldsOnComplete; 
    12         if (!theList.theList) return false; 
    13         inputs = theList.theList.getElementsByTagName('input'); 
    14         for ( var i=0; i < inputs.length; i++ ) { 
    15                 if ('text' == inputs[i].type) { 
    16                         inputs[i].setAttribute('autocomplete', 'off'); 
    17                         inputs[i].onkeypress = function(e) {return killSubmit('theList.ajaxUpdater("meta", "meta-' + parseInt(this.name.slice(5),10) + '");', e); }; 
    18                 } 
    19                 if ('updatemeta' == inputs[i].className) { 
    20                         inputs[i].onclick = function(e) {return killSubmit('theList.ajaxUpdater("meta", "meta-' + parseInt(this.parentNode.parentNode.id.slice(5),10) + '");', e); }; 
    21                 } 
     1jQuery( function($) { 
     2        var before = function() { 
     3                var nonce = $('#newmeta [@name=_ajax_nonce]').val(); 
     4                var postId = $('#post_ID').val(); 
     5                if ( !nonce || !postId ) { return false; } 
     6                return [nonce,postId]; 
    227        } 
    238 
    24         $('metakeyinput').onkeypress = function(e) {return killSubmit('theList.inputData+="&id="+$("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); }; 
    25         $('updatemetasub').onclick = function(e) {return killSubmit('theList.inputData+="&id="+$("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); }; 
    26 } 
     9        var addBefore = function( s ) { 
     10                var b = before(); 
     11                if ( !b ) { return false; } 
     12                s.data = s.data.replace(/_ajax_nonce=[a-f0-9]+/, '_ajax_nonce=' + b[0]) + '&post_id=' + b[1]; 
     13                return s; 
     14        }; 
     15 
     16        var addAfter = function( r, s ) { 
     17                var postId = $('postid', r).text(); 
     18                if ( !postId ) { return; } 
     19                $('#post_ID').attr( 'name', 'post_ID' ).val( postId ); 
     20                var h = $('#hiddenaction'); 
     21                if ( 'post' == h.val() ) { h.val( 'postajaxpost' ); } 
     22        }; 
     23 
     24        var delBefore = function( s ) { 
     25                var b = before(); if ( !b ) return false; 
     26                s.data._ajax_nonce = b[0]; s.data.post_id = b[1]; 
     27                return s; 
     28        } 
     29 
     30        $('#the-list') 
     31                .wpList( { addBefore: addBefore, addAfter: addAfter, delBefore: delBefore } ) 
     32                .find('.updatemeta, .deletemeta').attr( 'type', 'button' ); 
     33} ); 
  • wp-admin/js/users.js

     
    1 addLoadEvent(function() { 
    2         theListEls = document.getElementsByTagName('tbody'); 
    3         theUserLists = new Array(); 
    4         for ( var l = 0; l < theListEls.length; l++ ) { 
    5                 if ( theListEls[l].id ) 
    6                         theUserLists[theListEls[l].id] = new listMan(theListEls[l].id); 
    7         } 
    8         addUserInputs = document.getElementById('adduser').getElementsByTagName('input'); 
    9         for ( var i = 0; i < addUserInputs.length; i++ ) { 
    10                 addUserInputs[i].onkeypress = function(e) { return killSubmit('addUserSubmit();', e); } 
    11         } 
    12         document.getElementById('addusersub').onclick = function(e) { return killSubmit('addUserSubmit();', e); } 
    13 } 
    14 ); 
     1jQuery( function($) { 
     2        var userLists; var list; var addBefore; var addAfter; 
    153 
    16 function addUserSubmit() { 
    17         var roleEl = document.getElementById('role'); 
    18         var role = roleEl.options[roleEl.selectedIndex].value; 
    19         if ( !theUserLists['role-' + role] ) return true; 
    20         return theUserLists['role-' + role].ajaxAdder('user', 'adduser'); 
    21 } 
     4        addBefore = function( s ) { 
     5                if ( $( '#role-' + $('#role').val() ).size() ) 
     6                        return s; 
     7                return false; 
     8        }; 
     9 
     10        addAfter = function( r, s ) { 
     11                var roleTable = $( '#role-' + $('role', r).text() ); 
     12 
     13                var e = $('#user-' + $('user', r).attr('id') ); 
     14                if ( !roleTable.size() ) { return; } 
     15                if ( !e.size() ) { return; } 
     16 
     17                roleTable[0].wpList.add(e.remove().clone()); 
     18        };       
     19 
     20        userLists = $('.user-list').wpList(); 
     21        list = $('#user-list').wpList( { addBefore: addBefore, addAfter: addAfter } ); 
     22} ); 
  • wp-admin/js/link-cat.js

     
    1 addLoadEvent(function(){linkcatList=new listMan('linkcategorychecklist');linkcatList.ajaxRespEl='jaxcat';linkcatList.topAdder=1;linkcatList.alt=0;linkcatList.showLink=0;}); 
    2 addLoadEvent(newLinkCatAddIn); 
    3 function newLinkCatAddIn() { 
    4         var jaxcat = $('jaxcat'); 
    5         if ( !jaxcat ) 
    6                 return false; 
    7         Element.update(jaxcat,'<span id="ajaxcat"><input type="text" name="newcat" id="newcat" size="16" autocomplete="off"/><input type="button" name="Button" id="catadd" value="' + linkcatL10n.add + '"/><input type="hidden"/><span id="howto">' + linkcatL10n.how + '</span></span>'); 
    8         $('newcat').onkeypress = function(e) { return killSubmit("linkcatList.ajaxAdder('link-category','jaxcat');", e); }; 
    9         $('catadd').onclick = function() { linkcatList.ajaxAdder('link-category', 'jaxcat'); }; 
    10 } 
  • wp-admin/edit-post-rows.php

     
    88 
    99        </tr> 
    1010        </thead> 
    11         <tbody id="the-list"> 
     11        <tbody id="the-list" class="list:post"> 
    1212<?php 
     13$i_post = 0; 
    1314if ( have_posts() ) { 
    1415$bgcolor = ''; 
    1516add_filter('the_title','wp_specialchars'); 
    16 while (have_posts()) : the_post(); 
    17 $class = ('alternate' == $class) ? '' : 'alternate'; 
     17while (have_posts()) : the_post(); $i_post++; 
     18if ( 16 == $i_post ) 
     19        echo "\t</tbody>\n\t<tbody id='the-extra-list' class='list:post' style='color: red'>\n"; // Hack! 
     20$class = ( $i_post > 15 || 'alternate' == $class) ? '' : 'alternate'; 
    1821global $current_user; 
    1922$post_owner = ( $current_user->ID == $post->post_author ? 'self' : 'other' ); 
    2023?> 
     
    9093 
    9194        case 'control_delete': 
    9295                ?> 
    93                 <td><?php if ( current_user_can('delete_post',$post->ID) ) { echo "<a href='" . wp_nonce_url("post.php?action=delete&amp;post=$id", 'delete-post_' . $post->ID) . "' class='delete' onclick=\"return deleteSomething( 'post', " . $id . ", '" . js_escape(sprintf(__("You are about to delete this post '%s'.\n'OK' to delete, 'Cancel' to stop."), get_the_title())) . "' );\">" . __('Delete') . "</a>"; } ?></td> 
     96                <td><?php if ( current_user_can('delete_post',$post->ID) ) { echo "<a href='" . wp_nonce_url("post.php?action=delete&amp;post=$id", 'delete-post_' . $post->ID) . "' class='delete:the-list:post-$post->ID delete'>" . __('Delete') . "</a>"; } ?></td> 
    9497                <?php 
    9598                break; 
    9699 
  • wp-admin/edit-link-form.php

     
    4242<fieldset id="categorydiv" class="dbx-box"> 
    4343<h3 class="dbx-handle"><?php _e('Categories') ?></h3> 
    4444<div class="dbx-content"> 
    45 <p id="jaxcat"></p> 
    46 <ul id="linkcategorychecklist"><?php dropdown_link_categories(get_option('default_link_category')); ?></ul> 
     45<p id="jaxcat"><?php wp_nonce_field( 'add-link-category', '_ajax_nonce', false ); ?></p> 
     46<ul id="categorychecklist" class="list:link-category"><?php dropdown_link_categories(get_option('default_link_category')); ?></ul> 
    4747</div> 
    4848</fieldset> 
    4949 
  • wp-admin/edit-form-advanced.php

     
    7474<fieldset id="categorydiv" class="dbx-box"> 
    7575<h3 class="dbx-handle"><?php _e('Categories') ?></h3> 
    7676<div class="dbx-content"> 
    77 <p id="jaxcat"></p> 
    78 <ul id="categorychecklist"><?php dropdown_categories(); ?></ul></div> 
     77<p id="jaxcat"><?php wp_nonce_field( 'add-category', '_ajax_nonce', false ); ?></p> 
     78<ul id="categorychecklist" class="list:category"><?php dropdown_categories(); ?></ul></div> 
    7979</fieldset> 
    8080 
    8181<fieldset id="commentstatusdiv" class="dbx-box"> 
  • wp-admin/link-add.php

     
    1313 
    1414wp_enqueue_script( array('xfn', 'dbx-admin-key?pagenow=link.php') ); 
    1515if ( current_user_can( 'manage_categories' ) ) 
    16         wp_enqueue_script( 'ajaxlinkcat' ); 
     16        wp_enqueue_script( 'ajaxcat' ); 
    1717require('admin-header.php'); 
    1818?> 
    1919 
  • wp-admin/edit.php

     
    33 
    44$title = __('Posts'); 
    55$parent_file = 'edit.php'; 
    6 wp_enqueue_script( 1 == $_GET['c'] ? 'admin-comments' : 'listman' ); 
     6wp_enqueue_script( 'admin-posts' ); 
     7if ( 1 == $_GET['c'] ) 
     8        wp_enqueue_script( 'admin-comments' ); 
    79require_once('admin-header.php'); 
    810 
    9 $_GET['m']   = (int) $_GET['m']; 
    10 $_GET['cat'] = (int) $_GET['cat']; 
    11 $post_stati  = array(   //      array( adj, noun ) 
    12                         'publish' => array(__('Published'), __('Published posts')), 
    13                         'future' => array(__('Scheduled'), __('Scheduled posts')), 
    14                         'pending' => array(__('Pending Review'), __('Pending posts')), 
    15                         'draft' => array(__('Draft'), _c('Drafts|manage posts header')), 
    16                         'private' => array(__('Private'), __('Private posts')) 
    17                 ); 
    18  
    19 $avail_post_stati = $wpdb->get_col("SELECT DISTINCT post_status FROM $wpdb->posts WHERE post_type = 'post'"); 
    20  
    21 $post_status_q = ''; 
    22 $post_status_label = __('Posts'); 
    23 if ( isset($_GET['post_status']) && in_array( $_GET['post_status'], array_keys($post_stati) ) ) { 
    24         $post_status_label = $post_stati[$_GET['post_status']][1]; 
    25         $post_status_q = '&post_status=' . $_GET['post_status']; 
    26 } 
     11add_filter( 'post_limits', $limit_filter = create_function( '$a', '$b = split(" ",$a); if ( !isset($b[2]) ) return $a; $start = intval(trim($b[1])) / 20 * 15; if ( !is_int($start) ) return $a; return "LIMIT $start, 20";' ) ); 
     12list($post_stati, $avail_post_stati) = wp_edit_posts_query(); 
     13$wp_query->max_num_pages = ceil( $wp_query->found_posts / 15 ); // We grab 20 but only show 15 ( 5 more for ajax extra ) 
    2714?> 
    2815 
    2916<div class="wrap"> 
    3017 
    3118<?php 
    3219 
    33 if ( 'pending' === $_GET['post_status'] ) { 
    34         $order = 'ASC'; 
    35         $orderby = 'modified'; 
    36 } elseif ( 'draft' === $_GET['post_status'] ) { 
    37         $order = 'DESC'; 
    38         $orderby = 'modified'; 
    39 } else { 
    40         $order = 'DESC'; 
    41         $orderby = 'date'; 
    42 } 
     20$posts_columns = wp_manage_posts_columns(); 
    4321 
    44 wp("what_to_show=posts$post_status_q&posts_per_page=15&order=$order&orderby=$orderby"); 
    45  
    46 // define the columns to display, the syntax is 'internal name' => 'display name' 
    47 $posts_columns = array(); 
    48 $posts_columns['id'] = '<div style="text-align: center">' . __('ID') . '</div>'; 
    49 if ( 'draft' === $_GET['post_status'] ) 
    50         $posts_columns['modified'] = __('Modified'); 
    51 elseif ( 'pending' === $_GET['post_status'] ) 
    52         $posts_columns['modified'] = __('Submitted'); 
    53 else 
    54         $posts_columns['date'] = __('When'); 
    55 $posts_columns['title'] = __('Title'); 
    56 $posts_columns['categories'] = __('Categories'); 
    57 if ( !in_array($_GET['post_status'], array('pending', 'draft', 'future')) ) 
    58         $posts_columns['comments'] = '<div style="text-align: center">' . __('Comments') . '</div>'; 
    59 $posts_columns['author'] = __('Author'); 
    60  
    61 $posts_columns = apply_filters('manage_posts_columns', $posts_columns); 
    62  
    63 // you can not edit these at the moment 
    64 $posts_columns['control_view']   = ''; 
    65 $posts_columns['control_edit']   = ''; 
    66 $posts_columns['control_delete'] = ''; 
    67  
    6822?> 
    6923 
    7024<h2><?php 
     
    154108                <?php wp_dropdown_categories('show_option_all='.__('All').'&hide_empty=1&hierarchical=1&show_count=1&selected='.$cat);?> 
    155109        </fieldset> 
    156110        <input type="submit" id="post-query-submit" value="<?php _e('Filter &#187;'); ?>" class="button" /> 
     111        <?php wp_nonce_field( 'add-post', '_ajax_nonce', false ); ?> 
     112        <input type="button" id="get-extra-button" class="add:the-extra-list:searchform" style="display:none" /> 
    157113</form> 
    158114 
    159115<?php do_action('restrict_manage_posts'); ?> 
  • wp-admin/edit-category-form.php

     
    99} else { 
    1010        $heading = __('Add Category'); 
    1111        $submit_text = __('Add Category &raquo;'); 
    12         $form = '<form name="addcat" id="addcat" method="post" action="categories.php">'; 
     12        $form = '<form name="addcat" id="addcat" method="post" action="categories.php" class="add:the-list:">'; 
    1313        $action = 'addcat'; 
    1414        $nonce_action = 'add-category'; 
    1515        do_action('add_category_form_pre', $category); 
     
    4343                        <td><textarea name="category_description" id="category_description" rows="5" cols="50" style="width: 97%;"><?php echo wp_specialchars($category->description); ?></textarea></td> 
    4444                </tr> 
    4545        </table> 
    46 <p class="submit"><input type="submit" name="submit" value="<?php echo $submit_text ?>" /></p> 
     46<p class="submit"><input type="submit" class="add:the-list:cat:addcat" name="submit" value="<?php echo $submit_text ?>" /></p> 
    4747<?php do_action('edit_category_form', $category); ?> 
    4848</form> 
    4949</div> 
  • wp-admin/link-manager.php

     
    66 
    77require_once ('admin.php'); 
    88 
    9 wp_enqueue_script( 'listman' ); 
     9wp_enqueue_script( 'wp-lists' ); 
    1010 
    1111wp_reset_vars(array('action', 'cat_id', 'linkurl', 'name', 'image', 'description', 'visible', 'target', 'category', 'link_id', 'submit', 'order_by', 'links_show_cat_id', 'rating', 'rel', 'notes', 'linkcheck[]')); 
    1212 
     
    4646} 
    4747?> 
    4848<script type="text/javascript"> 
    49 <!-- 
     49/* <![CDATA[ */ 
    5050function checkAll(form) 
    5151{ 
    5252        for (i = 0, n = form.elements.length; i < n; i++) { 
     
    5858                } 
    5959        } 
    6060} 
    61 //--> 
     61 
     62jQuery(function($){$('#the-list').wpList();}); 
     63 
     64/* ]]> */ 
    6265</script> 
    6366 
    6467<?php 
     
    128131        <th style="text-align: center"><input type="checkbox" onclick="checkAll(document.getElementById('links'));" /></th> 
    129132        </tr> 
    130133        </thead> 
    131         <tbody id="the-list"> 
     134        <tbody id="the-list" class="list:link"> 
    132135<?php 
    133136        foreach ($links as $link) { 
    134137                $link = sanitize_bookmark($link); 
     
    176179                                        ?><td align='center'><?php echo $visible; ?></td><?php 
    177180                                        break; 
    178181                                case 'action': 
    179                                         echo '<td><a href="link.php?link_id='.$link->link_id.'&amp;action=edit" class="edit">'.__('Edit').'</a></td>'; 
    180                                         echo '<td><a href="' . wp_nonce_url('link.php?link_id='.$link->link_id.'&amp;action=delete', 'delete-bookmark_' . $link->link_id ) . '"'." onclick=\"return deleteSomething( 'link', $link->link_id , '".js_escape(sprintf(__("You are about to delete the '%s' link to %s.\n'Cancel' to stop, 'OK' to delete."), $link->link_name, $link->link_url )).'\' );" class="delete">'.__('Delete').'</a></td>'; 
     182                                        echo "<td><a href='link.php?link_id=$link->link_id&amp;action=edit' class='edit'>" . __('Edit') . '</a></td>'; 
     183                                        echo "<td><a href='" . wp_nonce_url('link.php?link_id='.$link->link_id.'&amp;action=delete', 'delete-bookmark_' . $link->link_id ) . "' class='delete:the-list:link-$link->link_id delete'>" . __('Delete') . '</a></td>'; 
    181184                                        break; 
    182185                                default: 
    183186                                        ?> 
  • wp-admin/page.php

     
    107107        } else { 
    108108                if ($_POST['save']) { 
    109109                        $location = "page.php?action=edit&post=$page_ID"; 
    110                 } elseif ($_POST['updatemeta']) { 
    111                         $location = wp_get_referer() . '&message=2#postcustom'; 
     110                } elseif ($_POST['addemeta']) { 
     111                        $location = add_query_arg( 'message', 2, wp_get_referer() ); 
     112                        $location = explode('#', $location); 
     113                        $location = $location[0] . '#postcustom'; 
    112114                } elseif ($_POST['deletemeta']) { 
    113                         $location = wp_get_referer() . '&message=3#postcustom'; 
     115                        $location = add_query_arg( 'message', 3, wp_get_referer() ); 
     116                        $location = explode('#', $location); 
     117                        $location = $location[0] . '#postcustom'; 
    114118                } elseif (!empty($_POST['referredby']) && $_POST['referredby'] != wp_get_referer()) { 
    115119                        $location = $_POST['referredby']; 
    116120                        if ( $_POST['referredby'] == 'redo' ) 
  • wp-admin/edit-pages.php

     
    22require_once('admin.php'); 
    33$title = __('Pages'); 
    44$parent_file = 'edit.php'; 
    5 wp_enqueue_script( 'listman' ); 
     5wp_enqueue_script( 'wp-lists' ); 
    66require_once('admin-header.php'); 
    77 
    88$post_stati  = array(   //      array( adj, noun ) 
     
    2020} 
    2121 
    2222?> 
    23  
     23<script> 
     24/* <![CDATA[ */ 
     25jQuery(function($){$('#the-list').wpList();}); 
     26/* ]]> */ 
     27</script> 
    2428<div class="wrap"> 
    25  
    2629<h2><?php 
    2730// Use $_GET instead of is_ since they can override each other 
    2831$h2_search = isset($_GET['s']) && $_GET['s'] ? ' ' . sprintf(__('matching &#8220;%s&#8221;'), wp_specialchars( stripslashes( $_GET['s'] ) ) ) : ''; 
     
    8184        <th scope="col" colspan="3" style="text-align: center"><?php _e('Action'); ?></th> 
    8285  </tr> 
    8386  </thead> 
    84   <tbody id="the-list"> 
     87  <tbody id="the-list" class="list:page"> 
    8588<?php page_rows(0, 0, $posts, $all); ?> 
    8689  </tbody> 
    8790</table> 
  • wp-admin/categories.php

     
    9999        <th colspan="2" style="text-align: center"><?php _e('Action') ?></th> 
    100100        </tr> 
    101101        </thead> 
    102         <tbody id="the-list"> 
     102        <tbody id="the-list" class="list:cat"> 
    103103<?php 
    104104cat_rows(); 
    105105?>